From 64395022c23331a505c26a9127f3a344026ab4d3 Mon Sep 17 00:00:00 2001 From: ismagom Date: Fri, 17 Oct 2014 20:11:05 +0200 Subject: [PATCH 01/55] Included RRC directory and ASN source files --- lte/rrc/CMakeLists.txt | 24 + lte/rrc/asn/BIT_STRING.c | 189 +++ lte/rrc/asn/BIT_STRING.h | 33 + lte/rrc/asn/CMakeLists.txt | 27 + lte/rrc/asn/EstablishmentCause.c | 158 ++ lte/rrc/asn/EstablishmentCause.h | 52 + lte/rrc/asn/INTEGER.c | 1023 ++++++++++++ lte/rrc/asn/INTEGER.h | 82 + lte/rrc/asn/InitialUE-Identity.c | 106 ++ lte/rrc/asn/InitialUE-Identity.h | 49 + lte/rrc/asn/MMEC.c | 152 ++ lte/rrc/asn/MMEC.h | 40 + lte/rrc/asn/MasterInformationBlock.c | 309 ++++ lte/rrc/asn/MasterInformationBlock.h | 54 + lte/rrc/asn/NativeEnumerated.c | 207 +++ lte/rrc/asn/NativeEnumerated.h | 32 + lte/rrc/asn/NativeInteger.c | 332 ++++ lte/rrc/asn/NativeInteger.h | 37 + lte/rrc/asn/OCTET_STRING.c | 1805 +++++++++++++++++++++ lte/rrc/asn/OCTET_STRING.h | 86 + lte/rrc/asn/PHICH-Config.c | 353 ++++ lte/rrc/asn/PHICH-Config.h | 52 + lte/rrc/asn/RRCConnectionRequest-r8-IEs.c | 115 ++ lte/rrc/asn/RRCConnectionRequest-r8-IEs.h | 41 + lte/rrc/asn/RRCConnectionRequest.c | 160 ++ lte/rrc/asn/RRCConnectionRequest.h | 58 + lte/rrc/asn/S-TMSI.c | 105 ++ lte/rrc/asn/S-TMSI.h | 39 + lte/rrc/asn/asn_application.h | 47 + lte/rrc/asn/asn_codecs.h | 109 ++ lte/rrc/asn/asn_codecs_prim.c | 312 ++++ lte/rrc/asn/asn_codecs_prim.h | 53 + lte/rrc/asn/asn_internal.h | 126 ++ lte/rrc/asn/asn_system.h | 129 ++ lte/rrc/asn/ber_decoder.c | 283 ++++ lte/rrc/asn/ber_decoder.h | 64 + lte/rrc/asn/ber_tlv_length.c | 178 ++ lte/rrc/asn/ber_tlv_length.h | 50 + lte/rrc/asn/ber_tlv_tag.c | 144 ++ lte/rrc/asn/ber_tlv_tag.h | 60 + lte/rrc/asn/constr_CHOICE.c | 1113 +++++++++++++ lte/rrc/asn/constr_CHOICE.h | 57 + lte/rrc/asn/constr_SEQUENCE.c | 1422 ++++++++++++++++ lte/rrc/asn/constr_SEQUENCE.h | 60 + lte/rrc/asn/constr_TYPE.c | 77 + lte/rrc/asn/constr_TYPE.h | 182 +++ lte/rrc/asn/constraints.c | 93 ++ lte/rrc/asn/constraints.h | 63 + lte/rrc/asn/der_encoder.c | 201 +++ lte/rrc/asn/der_encoder.h | 68 + lte/rrc/asn/per_decoder.c | 93 ++ lte/rrc/asn/per_decoder.h | 58 + lte/rrc/asn/per_encoder.c | 151 ++ lte/rrc/asn/per_encoder.h | 71 + lte/rrc/asn/per_opentype.c | 378 +++++ lte/rrc/asn/per_opentype.h | 22 + lte/rrc/asn/per_support.c | 483 ++++++ lte/rrc/asn/per_support.h | 135 ++ lte/rrc/asn/rrc_asn.h | 32 + lte/rrc/asn/xer_decoder.c | 365 +++++ lte/rrc/asn/xer_decoder.h | 105 ++ lte/rrc/asn/xer_encoder.c | 67 + lte/rrc/asn/xer_encoder.h | 59 + lte/rrc/asn/xer_support.c | 227 +++ lte/rrc/asn/xer_support.h | 55 + lte/rrc/include/liblte/rrc/rrc.h | 47 + lte/rrc/include/liblte/rrc/rrc_msg/bcch.h | 48 + lte/rrc/lib/CMakeLists.txt | 54 + lte/rrc/lib/rrc_msg/src/bcch.c | 160 ++ lte/rrc/lib/rrc_msg/test/CMakeLists.txt | 29 + lte/rrc/lib/rrc_msg/test/bcch_bch_test.c | 50 + 71 files changed, 13300 insertions(+) create mode 100644 lte/rrc/CMakeLists.txt create mode 100644 lte/rrc/asn/BIT_STRING.c create mode 100644 lte/rrc/asn/BIT_STRING.h create mode 100755 lte/rrc/asn/CMakeLists.txt create mode 100644 lte/rrc/asn/EstablishmentCause.c create mode 100644 lte/rrc/asn/EstablishmentCause.h create mode 100644 lte/rrc/asn/INTEGER.c create mode 100644 lte/rrc/asn/INTEGER.h create mode 100644 lte/rrc/asn/InitialUE-Identity.c create mode 100644 lte/rrc/asn/InitialUE-Identity.h create mode 100644 lte/rrc/asn/MMEC.c create mode 100644 lte/rrc/asn/MMEC.h create mode 100644 lte/rrc/asn/MasterInformationBlock.c create mode 100644 lte/rrc/asn/MasterInformationBlock.h create mode 100644 lte/rrc/asn/NativeEnumerated.c create mode 100644 lte/rrc/asn/NativeEnumerated.h create mode 100644 lte/rrc/asn/NativeInteger.c create mode 100644 lte/rrc/asn/NativeInteger.h create mode 100644 lte/rrc/asn/OCTET_STRING.c create mode 100644 lte/rrc/asn/OCTET_STRING.h create mode 100644 lte/rrc/asn/PHICH-Config.c create mode 100644 lte/rrc/asn/PHICH-Config.h create mode 100644 lte/rrc/asn/RRCConnectionRequest-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionRequest-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionRequest.c create mode 100644 lte/rrc/asn/RRCConnectionRequest.h create mode 100644 lte/rrc/asn/S-TMSI.c create mode 100644 lte/rrc/asn/S-TMSI.h create mode 100644 lte/rrc/asn/asn_application.h create mode 100644 lte/rrc/asn/asn_codecs.h create mode 100644 lte/rrc/asn/asn_codecs_prim.c create mode 100644 lte/rrc/asn/asn_codecs_prim.h create mode 100644 lte/rrc/asn/asn_internal.h create mode 100644 lte/rrc/asn/asn_system.h create mode 100644 lte/rrc/asn/ber_decoder.c create mode 100644 lte/rrc/asn/ber_decoder.h create mode 100644 lte/rrc/asn/ber_tlv_length.c create mode 100644 lte/rrc/asn/ber_tlv_length.h create mode 100644 lte/rrc/asn/ber_tlv_tag.c create mode 100644 lte/rrc/asn/ber_tlv_tag.h create mode 100644 lte/rrc/asn/constr_CHOICE.c create mode 100644 lte/rrc/asn/constr_CHOICE.h create mode 100644 lte/rrc/asn/constr_SEQUENCE.c create mode 100644 lte/rrc/asn/constr_SEQUENCE.h create mode 100644 lte/rrc/asn/constr_TYPE.c create mode 100644 lte/rrc/asn/constr_TYPE.h create mode 100644 lte/rrc/asn/constraints.c create mode 100644 lte/rrc/asn/constraints.h create mode 100644 lte/rrc/asn/der_encoder.c create mode 100644 lte/rrc/asn/der_encoder.h create mode 100644 lte/rrc/asn/per_decoder.c create mode 100644 lte/rrc/asn/per_decoder.h create mode 100644 lte/rrc/asn/per_encoder.c create mode 100644 lte/rrc/asn/per_encoder.h create mode 100644 lte/rrc/asn/per_opentype.c create mode 100644 lte/rrc/asn/per_opentype.h create mode 100644 lte/rrc/asn/per_support.c create mode 100644 lte/rrc/asn/per_support.h create mode 100644 lte/rrc/asn/rrc_asn.h create mode 100644 lte/rrc/asn/xer_decoder.c create mode 100644 lte/rrc/asn/xer_decoder.h create mode 100644 lte/rrc/asn/xer_encoder.c create mode 100644 lte/rrc/asn/xer_encoder.h create mode 100644 lte/rrc/asn/xer_support.c create mode 100644 lte/rrc/asn/xer_support.h create mode 100644 lte/rrc/include/liblte/rrc/rrc.h create mode 100644 lte/rrc/include/liblte/rrc/rrc_msg/bcch.h create mode 100644 lte/rrc/lib/CMakeLists.txt create mode 100644 lte/rrc/lib/rrc_msg/src/bcch.c create mode 100644 lte/rrc/lib/rrc_msg/test/CMakeLists.txt create mode 100644 lte/rrc/lib/rrc_msg/test/bcch_bch_test.c diff --git a/lte/rrc/CMakeLists.txt b/lte/rrc/CMakeLists.txt new file mode 100644 index 000000000..8d1599e49 --- /dev/null +++ b/lte/rrc/CMakeLists.txt @@ -0,0 +1,24 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + + +add_subdirectory(asn) +add_subdirectory(lib) diff --git a/lte/rrc/asn/BIT_STRING.c b/lte/rrc/asn/BIT_STRING.c new file mode 100644 index 000000000..9e0e50c69 --- /dev/null +++ b/lte/rrc/asn/BIT_STRING.c @@ -0,0 +1,189 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BIT STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +static asn_OCTET_STRING_specifics_t asn_DEF_BIT_STRING_specs = { + sizeof(BIT_STRING_t), + offsetof(BIT_STRING_t, _asn_ctx), + ASN_OSUBV_BIT +}; +asn_TYPE_descriptor_t asn_DEF_BIT_STRING = { + "BIT STRING", + "BIT_STRING", + OCTET_STRING_free, /* Implemented in terms of OCTET STRING */ + BIT_STRING_print, + BIT_STRING_constraint, + OCTET_STRING_decode_ber, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_encode_der, /* Implemented in terms of OCTET STRING */ + OCTET_STRING_decode_xer_binary, + BIT_STRING_encode_xer, + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BIT_STRING_tags, + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + asn_DEF_BIT_STRING_tags, /* Same as above */ + sizeof(asn_DEF_BIT_STRING_tags) + / sizeof(asn_DEF_BIT_STRING_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_DEF_BIT_STRING_specs +}; + +/* + * BIT STRING generic constraint. + */ +int +BIT_STRING_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + + if(st && st->buf) { + if((st->size == 0 && st->bits_unused) + || st->bits_unused < 0 || st->bits_unused > 7) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: invalid padding byte (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + return 0; +} + +static char *_bit_pattern[16] = { + "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", + "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" +}; + +asn_enc_rval_t +BIT_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er; + char scratch[128]; + char *p = scratch; + char *scend = scratch + (sizeof(scratch) - 10); + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + int xcan = (flags & XER_F_CANONICAL); + uint8_t *buf; + uint8_t *end; + + if(!st || !st->buf) + _ASN_ENCODE_FAILED; + + er.encoded = 0; + + buf = st->buf; + end = buf + st->size - 1; /* Last byte is special */ + + /* + * Binary dump + */ + for(; buf < end; buf++) { + int v = *buf; + int nline = xcan?0:(((buf - st->buf) % 8) == 0); + if(p >= scend || nline) { + er.encoded += p - scratch; + _ASN_CALLBACK(scratch, p - scratch); + p = scratch; + if(nline) _i_ASN_TEXT_INDENT(1, ilevel); + } + memcpy(p + 0, _bit_pattern[v >> 4], 4); + memcpy(p + 4, _bit_pattern[v & 0x0f], 4); + p += 8; + } + + if(!xcan && ((buf - st->buf) % 8) == 0) + _i_ASN_TEXT_INDENT(1, ilevel); + er.encoded += p - scratch; + _ASN_CALLBACK(scratch, p - scratch); + p = scratch; + + if(buf == end) { + int v = *buf; + int ubits = st->bits_unused; + int i; + for(i = 7; i >= ubits; i--) + *p++ = (v & (1 << i)) ? 0x31 : 0x30; + er.encoded += p - scratch; + _ASN_CALLBACK(scratch, p - scratch); + } + + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + + +/* + * BIT STRING specific contents printer. + */ +int +BIT_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + char scratch[64]; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + uint8_t *buf; + uint8_t *end; + char *p = scratch; + + (void)td; /* Unused argument */ + + if(!st || !st->buf) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + ilevel++; + buf = st->buf; + end = buf + st->size; + + /* + * Hexadecimal dump. + */ + for(; buf < end; buf++) { + if((buf - st->buf) % 16 == 0 && (st->size > 16) + && buf != st->buf) { + _i_INDENT(1); + /* Dump the string */ + if(cb(scratch, p - scratch, app_key) < 0) return -1; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Eat the tailing space */ + + if((st->size > 16)) { + _i_INDENT(1); + } + + /* Dump the incomplete 16-bytes row */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + diff --git a/lte/rrc/asn/BIT_STRING.h b/lte/rrc/asn/BIT_STRING.h new file mode 100644 index 000000000..732e878bc --- /dev/null +++ b/lte/rrc/asn/BIT_STRING.h @@ -0,0 +1,33 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BIT_STRING_H_ +#define _BIT_STRING_H_ + +#include /* Some help from OCTET STRING */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct BIT_STRING_s { + uint8_t *buf; /* BIT STRING body */ + int size; /* Size of the above buffer */ + + int bits_unused;/* Unused trailing bits in the last octet (0..7) */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} BIT_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_BIT_STRING; + +asn_struct_print_f BIT_STRING_print; /* Human-readable output */ +asn_constr_check_f BIT_STRING_constraint; +xer_type_encoder_f BIT_STRING_encode_xer; + +#ifdef __cplusplus +} +#endif + +#endif /* _BIT_STRING_H_ */ diff --git a/lte/rrc/asn/CMakeLists.txt b/lte/rrc/asn/CMakeLists.txt new file mode 100755 index 000000000..5b93ec7a4 --- /dev/null +++ b/lte/rrc/asn/CMakeLists.txt @@ -0,0 +1,27 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + + +FILE(GLOB RRC_ASN_SOURCES *.c) +INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../include/liblte/rrc/asn/") +ADD_LIBRARY(rrc_asn SHARED ${RRC_ASN_SOURCES}) +INSTALL(TARGETS rrc_asn DESTINATION ${LIBRARY_DIR}) +LIBLTE_SET_PIC(rrc_asn) \ No newline at end of file diff --git a/lte/rrc/asn/EstablishmentCause.c b/lte/rrc/asn/EstablishmentCause.c new file mode 100644 index 000000000..de6554146 --- /dev/null +++ b/lte/rrc/asn/EstablishmentCause.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "EstablishmentCause.h" + +int +EstablishmentCause_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +EstablishmentCause_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +EstablishmentCause_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +EstablishmentCause_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +EstablishmentCause_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +EstablishmentCause_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +EstablishmentCause_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +EstablishmentCause_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +EstablishmentCause_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +EstablishmentCause_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + EstablishmentCause_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_EstablishmentCause_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_EstablishmentCause_value2enum_1[] = { + { 0, 9, "emergency" }, + { 1, 18, "highPriorityAccess" }, + { 2, 9, "mt-Access" }, + { 3, 13, "mo-Signalling" }, + { 4, 7, "mo-Data" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static const unsigned int asn_MAP_EstablishmentCause_enum2value_1[] = { + 0, /* emergency(0) */ + 1, /* highPriorityAccess(1) */ + 4, /* mo-Data(4) */ + 3, /* mo-Signalling(3) */ + 2, /* mt-Access(2) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5 /* spare3(5) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_EstablishmentCause_specs_1 = { + asn_MAP_EstablishmentCause_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_EstablishmentCause_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_EstablishmentCause_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_EstablishmentCause = { + "EstablishmentCause", + "EstablishmentCause", + EstablishmentCause_free, + EstablishmentCause_print, + EstablishmentCause_constraint, + EstablishmentCause_decode_ber, + EstablishmentCause_encode_der, + EstablishmentCause_decode_xer, + EstablishmentCause_encode_xer, + EstablishmentCause_decode_uper, + EstablishmentCause_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_EstablishmentCause_tags_1, + sizeof(asn_DEF_EstablishmentCause_tags_1) + /sizeof(asn_DEF_EstablishmentCause_tags_1[0]), /* 1 */ + asn_DEF_EstablishmentCause_tags_1, /* Same as above */ + sizeof(asn_DEF_EstablishmentCause_tags_1) + /sizeof(asn_DEF_EstablishmentCause_tags_1[0]), /* 1 */ + &asn_PER_type_EstablishmentCause_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_EstablishmentCause_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/EstablishmentCause.h b/lte/rrc/asn/EstablishmentCause.h new file mode 100644 index 000000000..aef49d0c4 --- /dev/null +++ b/lte/rrc/asn/EstablishmentCause.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _EstablishmentCause_H_ +#define _EstablishmentCause_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum EstablishmentCause { + EstablishmentCause_emergency = 0, + EstablishmentCause_highPriorityAccess = 1, + EstablishmentCause_mt_Access = 2, + EstablishmentCause_mo_Signalling = 3, + EstablishmentCause_mo_Data = 4, + EstablishmentCause_spare3 = 5, + EstablishmentCause_spare2 = 6, + EstablishmentCause_spare1 = 7 +} e_EstablishmentCause; + +/* EstablishmentCause */ +typedef long EstablishmentCause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_EstablishmentCause; +asn_struct_free_f EstablishmentCause_free; +asn_struct_print_f EstablishmentCause_print; +asn_constr_check_f EstablishmentCause_constraint; +ber_type_decoder_f EstablishmentCause_decode_ber; +der_type_encoder_f EstablishmentCause_encode_der; +xer_type_decoder_f EstablishmentCause_decode_xer; +xer_type_encoder_f EstablishmentCause_encode_xer; +per_type_decoder_f EstablishmentCause_decode_uper; +per_type_encoder_f EstablishmentCause_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _EstablishmentCause_H_ */ +#include diff --git a/lte/rrc/asn/INTEGER.c b/lte/rrc/asn/INTEGER.c new file mode 100644 index 000000000..8ead23d51 --- /dev/null +++ b/lte/rrc/asn/INTEGER.c @@ -0,0 +1,1023 @@ +/*- + * Copyright (c) 2003-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* Encoder and decoder of a primitive type */ +#include + +/* + * INTEGER basic type description. + */ +static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_INTEGER = { + "INTEGER", + "INTEGER", + ASN__PRIMITIVE_TYPE_free, + INTEGER_print, + asn_generic_no_constraint, + ber_decode_primitive, + INTEGER_encode_der, + INTEGER_decode_xer, + INTEGER_encode_xer, +#ifdef ASN_DISABLE_PER_SUPPORT + 0, + 0, +#else + INTEGER_decode_uper, /* Unaligned PER decoder */ + INTEGER_encode_uper, /* Unaligned PER encoder */ +#endif /* ASN_DISABLE_PER_SUPPORT */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_INTEGER_tags, + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + asn_DEF_INTEGER_tags, /* Same as above */ + sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Encode INTEGER type using DER. + */ +asn_enc_rval_t +INTEGER_encode_der(asn_TYPE_descriptor_t *td, void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + INTEGER_t *st = (INTEGER_t *)sptr; + + ASN_DEBUG("%s %s as INTEGER (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + /* + * Canonicalize integer in the buffer. + * (Remove too long sign extension, remove some first 0x00 bytes) + */ + if(st->buf) { + uint8_t *buf = st->buf; + uint8_t *end1 = buf + st->size - 1; + int shift; + + /* Compute the number of superfluous leading bytes */ + for(; buf < end1; buf++) { + /* + * If the contents octets of an integer value encoding + * consist of more than one octet, then the bits of the + * first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) + continue; + break; + case 0xff: if((buf[1] & 0x80)) + continue; + break; + } + break; + } + + /* Remove leading superfluous bytes from the integer */ + shift = buf - st->buf; + if(shift) { + uint8_t *nb = st->buf; + uint8_t *end; + + st->size -= shift; /* New size, minus bad bytes */ + end = nb + st->size; + + for(; nb < end; nb++, buf++) + *nb = *buf; + } + + } /* if(1) */ + + return der_encode_primitive(td, sptr, tag_mode, tag, cb, app_key); +} + +static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop); + +/* + * INTEGER specific human-readable output. + */ +static ssize_t +INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit integer */ + uint8_t *buf = st->buf; + uint8_t *buf_end = st->buf + st->size; + signed long value; + ssize_t wrote = 0; + char *p; + int ret; + + if(specs && specs->field_unsigned) + ret = asn_INTEGER2ulong(st, (unsigned long *)&value); + else + ret = asn_INTEGER2long(st, &value); + + /* Simple case: the integer size is small */ + if(ret == 0) { + const asn_INTEGER_enum_map_t *el; + size_t scrsize; + char *scr; + + el = (value >= 0 || !specs || !specs->field_unsigned) + ? INTEGER_map_value2enum(specs, value) : 0; + if(el) { + scrsize = el->enum_len + 32; + scr = (char *)alloca(scrsize); + if(plainOrXER == 0) + ret = snprintf(scr, scrsize, + "%ld (%s)", value, el->enum_name); + else + ret = snprintf(scr, scrsize, + "<%s/>", el->enum_name); + } else if(plainOrXER && specs && specs->strict_enumeration) { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } else { + scrsize = sizeof(scratch); + scr = scratch; + ret = snprintf(scr, scrsize, + (specs && specs->field_unsigned) + ?"%lu":"%ld", value); + } + assert(ret > 0 && (size_t)ret < scrsize); + return (cb(scr, ret, app_key) < 0) ? -1 : ret; + } else if(plainOrXER && specs && specs->strict_enumeration) { + /* + * Here and earlier, we cannot encode the ENUMERATED values + * if there is no corresponding identifier. + */ + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + errno = EPERM; + return -1; + } + + /* Output in the long xx:yy:zz... format */ + /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ + for(p = scratch; buf < buf_end; buf++) { + const char * const h2c = "0123456789ABCDEF"; + if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { + /* Flush buffer */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + wrote += p - scratch; + p = scratch; + } + *p++ = h2c[*buf >> 4]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x3a; /* ":" */ + } + if(p != scratch) + p--; /* Remove the last ":" */ + + wrote += p - scratch; + return (cb(scratch, p - scratch, app_key) < 0) ? -1 : wrote; +} + +/* + * INTEGER specific human-readable output. + */ +int +INTEGER_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + ssize_t ret; + + (void)td; + (void)ilevel; + + if(!st || !st->buf) + ret = cb("", 8, app_key); + else + ret = INTEGER__dump(td, st, cb, app_key, 0); + + return (ret < 0) ? -1 : 0; +} + +struct e2v_key { + const char *start; + const char *stop; + const asn_INTEGER_enum_map_t *vemap; + const unsigned int *evmap; +}; +static int +INTEGER__compar_enum2value(const void *kp, const void *am) { + const struct e2v_key *key = (const struct e2v_key *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + const char *ptr, *end, *name; + + /* Remap the element (sort by different criterion) */ + el = key->vemap + key->evmap[el - key->vemap]; + + /* Compare strings */ + for(ptr = key->start, end = key->stop, name = el->enum_name; + ptr < end; ptr++, name++) { + if(*ptr != *name) + return *(const unsigned char *)ptr + - *(const unsigned char *)name; + } + return name[0] ? -1 : 0; +} + +static const asn_INTEGER_enum_map_t * +INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop) { + const asn_INTEGER_enum_map_t *el_found; + int count = specs ? specs->map_count : 0; + struct e2v_key key; + const char *lp; + + if(!count) return NULL; + + /* Guaranteed: assert(lstart < lstop); */ + /* Figure out the tag name */ + for(lstart++, lp = lstart; lp < lstop; lp++) { + switch(*lp) { + case 9: case 10: case 11: case 12: case 13: case 32: /* WSP */ + case 0x2f: /* '/' */ case 0x3e: /* '>' */ + break; + default: + continue; + } + break; + } + if(lp == lstop) return NULL; /* No tag found */ + lstop = lp; + + key.start = lstart; + key.stop = lstop; + key.vemap = specs->value2enum; + key.evmap = specs->enum2value; + el_found = (asn_INTEGER_enum_map_t *)bsearch(&key, + specs->value2enum, count, sizeof(specs->value2enum[0]), + INTEGER__compar_enum2value); + if(el_found) { + /* Remap enum2value into value2enum */ + el_found = key.vemap + key.evmap[el_found - key.vemap]; + } + return el_found; +} + +static int +INTEGER__compar_value2enum(const void *kp, const void *am) { + long a = *(const long *)kp; + const asn_INTEGER_enum_map_t *el = (const asn_INTEGER_enum_map_t *)am; + long b = el->nat_value; + if(a < b) return -1; + else if(a == b) return 0; + else return 1; +} + +const asn_INTEGER_enum_map_t * +INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value) { + int count = specs ? specs->map_count : 0; + if(!count) return 0; + return (asn_INTEGER_enum_map_t *)bsearch(&value, specs->value2enum, + count, sizeof(specs->value2enum[0]), + INTEGER__compar_value2enum); +} + +static int +INTEGER_st_prealloc(INTEGER_t *st, int min_size) { + void *p = MALLOC(min_size + 1); + if(p) { + void *b = st->buf; + st->size = 0; + st->buf = p; + FREEMEM(b); + return 0; + } else { + return -1; + } +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { + INTEGER_t *st = (INTEGER_t *)sptr; + long dec_value; + long hex_value = 0; + const char *lp; + const char *lstart = (const char *)chunk_buf; + const char *lstop = lstart + chunk_size; + enum { + ST_LEADSPACE, + ST_SKIPSPHEX, + ST_WAITDIGITS, + ST_DIGITS, + ST_DIGITS_TRAILSPACE, + ST_HEXDIGIT1, + ST_HEXDIGIT2, + ST_HEXDIGITS_TRAILSPACE, + ST_HEXCOLON, + ST_END_ENUM, + ST_UNEXPECTED + } state = ST_LEADSPACE; + const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ + const char *dec_value_end = 0; + + if(chunk_size) + ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", + (long)chunk_size, *lstart, lstop[-1]); + + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + + /* + * We may have received a tag here. It will be processed inline. + * Use strtoul()-like code and serialize the result. + */ + for(lp = lstart; lp < lstop; lp++) { + int lv = *lp; + switch(lv) { + case 0x09: case 0x0a: case 0x0d: case 0x20: + switch(state) { + case ST_LEADSPACE: + case ST_DIGITS_TRAILSPACE: + case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPHEX: + continue; + case ST_DIGITS: + dec_value_end = lp; + state = ST_DIGITS_TRAILSPACE; + continue; + case ST_HEXCOLON: + state = ST_HEXDIGITS_TRAILSPACE; + continue; + default: + break; + } + break; + case 0x2d: /* '-' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x2b: /* '+' */ + if(state == ST_LEADSPACE) { + dec_value = 0; + dec_value_start = lp; + state = ST_WAITDIGITS; + continue; + } + break; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: + switch(state) { + case ST_DIGITS: continue; + case ST_SKIPSPHEX: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = (lv - 0x30) << 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += (lv - 0x30); + state = ST_HEXCOLON; + st->buf[st->size++] = (uint8_t)hex_value; + continue; + case ST_HEXCOLON: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + dec_value = 0; + dec_value_start = lp; + /* FALL THROUGH */ + case ST_WAITDIGITS: + state = ST_DIGITS; + continue; + default: + break; + } + break; + case 0x3c: /* '<', start of XML encoded enumeration */ + if(state == ST_LEADSPACE) { + const asn_INTEGER_enum_map_t *el; + el = INTEGER_map_enum2value( + (asn_INTEGER_specifics_t *) + td->specifics, lstart, lstop); + if(el) { + ASN_DEBUG("Found \"%s\" => %ld", + el->enum_name, el->nat_value); + dec_value = el->nat_value; + state = ST_END_ENUM; + lp = lstop - 1; + continue; + } + ASN_DEBUG("Unknown identifier for INTEGER"); + } + return XPBD_BROKEN_ENCODING; + case 0x3a: /* ':' */ + if(state == ST_HEXCOLON) { + /* This colon is expected */ + state = ST_HEXDIGIT1; + continue; + } else if(state == ST_DIGITS) { + /* The colon here means that we have + * decoded the first two hexadecimal + * places as a decimal value. + * Switch decoding mode. */ + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + } else { + ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + break; + } + /* [A-Fa-f] */ + case 0x41:case 0x42:case 0x43:case 0x44:case 0x45:case 0x46: + case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: + switch(state) { + case ST_SKIPSPHEX: + case ST_LEADSPACE: /* Fall through */ + case ST_HEXDIGIT1: + hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + hex_value <<= 4; + state = ST_HEXDIGIT2; + continue; + case ST_HEXDIGIT2: + hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); + hex_value += 10; + st->buf[st->size++] = (uint8_t)hex_value; + state = ST_HEXCOLON; + continue; + case ST_DIGITS: + ASN_DEBUG("INTEGER re-evaluate as hex form"); + state = ST_SKIPSPHEX; + dec_value_start = 0; + lp = lstart - 1; + continue; + default: + break; + } + break; + } + + /* Found extra non-numeric stuff */ + ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", + lv, (long)(lp - lstart)); + state = ST_UNEXPECTED; + break; + } + + switch(state) { + case ST_END_ENUM: + /* Got a complete and valid enumeration encoded as a tag. */ + break; + case ST_DIGITS: + dec_value_end = lstop; + /* FALL THROUGH */ + case ST_DIGITS_TRAILSPACE: + /* The last symbol encountered was a digit. */ + switch(asn_strtol_lim(dec_value_start, &dec_value_end, &dec_value)) { + case ASN_STRTOL_OK: + break; + case ASN_STRTOL_ERROR_RANGE: + return XPBD_DECODER_LIMIT; + case ASN_STRTOL_ERROR_INVAL: + case ASN_STRTOL_EXPECT_MORE: + case ASN_STRTOL_EXTRA_DATA: + return XPBD_BROKEN_ENCODING; + } + break; + case ST_HEXCOLON: + case ST_HEXDIGITS_TRAILSPACE: + st->buf[st->size] = 0; /* Just in case termination */ + return XPBD_BODY_CONSUMED; + case ST_HEXDIGIT1: + case ST_HEXDIGIT2: + case ST_SKIPSPHEX: + return XPBD_BROKEN_ENCODING; + case ST_LEADSPACE: + /* Content not found */ + return XPBD_NOT_BODY_IGNORE; + case ST_WAITDIGITS: + case ST_UNEXPECTED: + ASN_DEBUG("INTEGER: No useful digits (state %d)", state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + + /* + * Convert the result of parsing of enumeration or a straight + * decimal value into a BER representation. + */ + if(asn_long2INTEGER(st, dec_value)) + return XPBD_SYSTEM_FAILURE; + + return XPBD_BODY_CONSUMED; +} + +asn_dec_rval_t +INTEGER_decode_xer(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(INTEGER_t), opt_mname, + buf_ptr, size, INTEGER__xer_body_decode); +} + +asn_enc_rval_t +INTEGER_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const INTEGER_t *st = (const INTEGER_t *)sptr; + asn_enc_rval_t er; + + (void)ilevel; + (void)flags; + + if(!st || !st->buf) + _ASN_ENCODE_FAILED; + + er.encoded = INTEGER__dump(td, st, cb, app_key, 1); + if(er.encoded < 0) _ASN_ENCODE_FAILED; + + _ASN_ENCODED_OK(er); +} + +#ifndef ASN_DISABLE_PER_SUPPORT + +asn_dec_rval_t +INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + INTEGER_t *st = (INTEGER_t *)*sptr; + asn_per_constraint_t *ct; + int repeat; + + (void)opt_codec_ctx; + + if(!st) { + st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); + if(!st) _ASN_DECODE_FAILED; + } + + if(!constraints) constraints = td->per_constraints; + ct = constraints ? &constraints->value : 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) _ASN_DECODE_STARVED; + if(inext) ct = 0; + } + + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + if(ct) { + if(ct->flags & APC_SEMI_CONSTRAINED) { + st->buf = (uint8_t *)CALLOC(1, 2); + if(!st->buf) _ASN_DECODE_FAILED; + st->size = 1; + } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { + size_t size = (ct->range_bits + 7) >> 3; + st->buf = (uint8_t *)MALLOC(1 + size + 1); + if(!st->buf) _ASN_DECODE_FAILED; + st->size = size; + } + } + + /* X.691-2008/11, #13.2.2, constrained whole number */ + if(ct && ct->flags != APC_UNCONSTRAINED) { + /* #11.5.6 */ + ASN_DEBUG("Integer with range %d bits", ct->range_bits); + if(ct->range_bits >= 0) { + if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) + _ASN_DECODE_FAILED; + + if(specs && specs->field_unsigned) { + unsigned long uvalue; + if(uper_get_constrained_whole_number(pd, + &uvalue, ct->range_bits)) + _ASN_DECODE_STARVED; + ASN_DEBUG("Got value %lu + low %ld", + uvalue, ct->lower_bound); + uvalue += ct->lower_bound; + if(asn_ulong2INTEGER(st, uvalue)) + _ASN_DECODE_FAILED; + } else { + unsigned long svalue; + if(uper_get_constrained_whole_number(pd, + &svalue, ct->range_bits)) + _ASN_DECODE_STARVED; + ASN_DEBUG("Got value %ld + low %ld", + svalue, ct->lower_bound); + svalue += ct->lower_bound; + if(asn_long2INTEGER(st, svalue)) + _ASN_DECODE_FAILED; + } + return rval; + } + } else { + ASN_DEBUG("Decoding unconstrained integer %s", td->name); + } + + /* X.691, #12.2.3, #12.2.4 */ + do { + ssize_t len; + void *p; + int ret; + + /* Get the PER length */ + len = uper_get_length(pd, -1, &repeat); + if(len < 0) _ASN_DECODE_STARVED; + + p = REALLOC(st->buf, st->size + len + 1); + if(!p) _ASN_DECODE_FAILED; + st->buf = (uint8_t *)p; + + ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); + if(ret < 0) _ASN_DECODE_STARVED; + st->size += len; + } while(repeat); + st->buf[st->size] = 0; /* JIC */ + + /* #12.2.3 */ + if(ct && ct->lower_bound) { + /* + * TODO: replace by in-place arithmetics. + */ + long value; + if(asn_INTEGER2long(st, &value)) + _ASN_DECODE_FAILED; + if(asn_long2INTEGER(st, value + ct->lower_bound)) + _ASN_DECODE_FAILED; + } + + return rval; +} + +asn_enc_rval_t +INTEGER_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er; + INTEGER_t *st = (INTEGER_t *)sptr; + const uint8_t *buf; + const uint8_t *end; + asn_per_constraint_t *ct; + long value = 0; + + if(!st || st->size == 0) _ASN_ENCODE_FAILED; + + if(!constraints) constraints = td->per_constraints; + ct = constraints ? &constraints->value : 0; + + er.encoded = 0; + + if(ct) { + int inext = 0; + if(specs && specs->field_unsigned) { + unsigned long uval; + if(asn_INTEGER2ulong(st, &uval)) + _ASN_ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(uval < (unsigned long)ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(uval < (unsigned long)ct->lower_bound + || uval > (unsigned long)ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %lu (%02x/%d) lb %lu ub %lu %s", + uval, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + value = uval; + } else { + if(asn_INTEGER2long(st, &value)) + _ASN_ENCODE_FAILED; + /* Check proper range */ + if(ct->flags & APC_SEMI_CONSTRAINED) { + if(value < ct->lower_bound) + inext = 1; + } else if(ct->range_bits >= 0) { + if(value < ct->lower_bound + || value > ct->upper_bound) + inext = 1; + } + ASN_DEBUG("Value %ld (%02x/%d) lb %ld ub %ld %s", + value, st->buf[0], st->size, + ct->lower_bound, ct->upper_bound, + inext ? "ext" : "fix"); + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + _ASN_ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + _ASN_ENCODE_FAILED; + } + } + + + /* X.691-11/2008, #13.2.2, test if constrained whole number */ + if(ct && ct->range_bits >= 0) { + /* #11.5.6 -> #11.3 */ + ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", + value, value - ct->lower_bound, ct->range_bits); + unsigned long v = value - ct->lower_bound; + if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) + _ASN_ENCODE_FAILED; + _ASN_ENCODED_OK(er); + } + + if(ct && ct->lower_bound) { + ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); + /* TODO: adjust lower bound */ + _ASN_ENCODE_FAILED; + } + + for(buf = st->buf, end = st->buf + st->size; buf < end;) { + ssize_t mayEncode = uper_put_length(po, end - buf); + if(mayEncode < 0) + _ASN_ENCODE_FAILED; + if(per_put_many_bits(po, buf, 8 * mayEncode)) + _ASN_ENCODE_FAILED; + buf += mayEncode; + } + + _ASN_ENCODED_OK(er); +} + +#endif /* ASN_DISABLE_PER_SUPPORT */ + +int +asn_INTEGER2long(const INTEGER_t *iptr, long *lptr) { + uint8_t *b, *end; + size_t size; + long l; + + /* Sanity checking */ + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + /* Cache the begin/end of the buffer */ + b = iptr->buf; /* Start of the INTEGER buffer */ + size = iptr->size; + end = b + size; /* Where to stop */ + + if(size > sizeof(long)) { + uint8_t *end1 = end - 1; + /* + * Slightly more advanced processing, + * able to >sizeof(long) bytes, + * when the actual value is small + * (0x0000000000abcdef would yield a fine 0x00abcdef) + */ + /* Skip out the insignificant leading bytes */ + for(; b < end1; b++) { + switch(*b) { + case 0x00: if((b[1] & 0x80) == 0) continue; break; + case 0xff: if((b[1] & 0x80) != 0) continue; break; + } + break; + } + + size = end - b; + if(size > sizeof(long)) { + /* Still cannot fit the long */ + errno = ERANGE; + return -1; + } + } + + /* Shortcut processing of a corner case */ + if(end == b) { + *lptr = 0; + return 0; + } + + /* Perform the sign initialization */ + /* Actually l = -(*b >> 7); gains nothing, yet unreadable! */ + if((*b >> 7)) l = -1; else l = 0; + + /* Conversion engine */ + for(; b < end; b++) + l = (l << 8) | *b; + + *lptr = l; + return 0; +} + +int +asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *lptr) { + uint8_t *b, *end; + unsigned long l; + size_t size; + + if(!iptr || !iptr->buf || !lptr) { + errno = EINVAL; + return -1; + } + + b = iptr->buf; + size = iptr->size; + end = b + size; + + /* If all extra leading bytes are zeroes, ignore them */ + for(; size > sizeof(unsigned long); b++, size--) { + if(*b) { + /* Value won't fit unsigned long */ + errno = ERANGE; + return -1; + } + } + + /* Conversion engine */ + for(l = 0; b < end; b++) + l = (l << 8) | *b; + + *lptr = l; + return 0; +} + +int +asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { + uint8_t *buf; + uint8_t *end; + uint8_t *b; + int shr; + + if(value <= LONG_MAX) + return asn_long2INTEGER(st, value); + + buf = (uint8_t *)MALLOC(1 + sizeof(value)); + if(!buf) return -1; + + end = buf + (sizeof(value) + 1); + buf[0] = 0; + for(b = buf + 1, shr = (sizeof(long)-1)*8; b < end; shr -= 8, b++) + *b = (uint8_t)(value >> shr); + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = 1 + sizeof(value); + + return 0; +} + +int +asn_long2INTEGER(INTEGER_t *st, long value) { + uint8_t *buf, *bp; + uint8_t *p; + uint8_t *pstart; + uint8_t *pend1; + int littleEndian = 1; /* Run-time detection */ + int add; + + if(!st) { + errno = EINVAL; + return -1; + } + + buf = (uint8_t *)MALLOC(sizeof(value)); + if(!buf) return -1; + + if(*(char *)&littleEndian) { + pstart = (uint8_t *)&value + sizeof(value) - 1; + pend1 = (uint8_t *)&value; + add = -1; + } else { + pstart = (uint8_t *)&value; + pend1 = pstart + sizeof(value) - 1; + add = 1; + } + + /* + * If the contents octet consists of more than one octet, + * then bits of the first octet and bit 8 of the second octet: + * a) shall not all be ones; and + * b) shall not all be zero. + */ + for(p = pstart; p != pend1; p += add) { + switch(*p) { + case 0x00: if((*(p+add) & 0x80) == 0) + continue; + break; + case 0xff: if((*(p+add) & 0x80)) + continue; + break; + } + break; + } + /* Copy the integer body */ + for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) + *bp++ = *p; + + if(st->buf) FREEMEM(st->buf); + st->buf = buf; + st->size = bp - buf; + + return 0; +} + +/* + * This function is going to be DEPRECATED soon. + */ +enum asn_strtol_result_e +asn_strtol(const char *str, const char *end, long *lp) { + const char *endp = end; + + switch(asn_strtol_lim(str, &endp, lp)) { + case ASN_STRTOL_ERROR_RANGE: + return ASN_STRTOL_ERROR_RANGE; + case ASN_STRTOL_ERROR_INVAL: + return ASN_STRTOL_ERROR_INVAL; + case ASN_STRTOL_EXPECT_MORE: + return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ + case ASN_STRTOL_OK: + return ASN_STRTOL_OK; + case ASN_STRTOL_EXTRA_DATA: + return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ + } + + return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ +} + +/* + * Parse the number in the given string until the given *end position, + * returning the position after the last parsed character back using the + * same (*end) pointer. + * WARNING: This behavior is different from the standard strtol(3). + */ +enum asn_strtol_result_e +asn_strtol_lim(const char *str, const char **end, long *lp) { + int sign = 1; + long l; + + const long upper_boundary = LONG_MAX / 10; + long last_digit_max = LONG_MAX % 10; + + if(str >= *end) return ASN_STRTOL_ERROR_INVAL; + + switch(*str) { + case '-': + last_digit_max++; + sign = -1; + case '+': + str++; + if(str >= *end) { + *end = str; + return ASN_STRTOL_EXPECT_MORE; + } + } + + for(l = 0; str < (*end); str++) { + switch(*str) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { + int d = *str - '0'; + if(l < upper_boundary) { + l = l * 10 + d; + } else if(l == upper_boundary) { + if(d <= last_digit_max) { + if(sign > 0) { + l = l * 10 + d; + } else { + sign = 1; + l = -l * 10 - d; + } + } else { + *end = str; + return ASN_STRTOL_ERROR_RANGE; + } + } else { + *end = str; + return ASN_STRTOL_ERROR_RANGE; + } + } + continue; + default: + *end = str; + *lp = sign * l; + return ASN_STRTOL_EXTRA_DATA; + } + } + + *end = str; + *lp = sign * l; + return ASN_STRTOL_OK; +} + diff --git a/lte/rrc/asn/INTEGER.h b/lte/rrc/asn/INTEGER.h new file mode 100644 index 000000000..2813f0cb5 --- /dev/null +++ b/lte/rrc/asn/INTEGER.h @@ -0,0 +1,82 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _INTEGER_H_ +#define _INTEGER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ASN__PRIMITIVE_TYPE_t INTEGER_t; + +extern asn_TYPE_descriptor_t asn_DEF_INTEGER; + +/* Map with to integer value association */ +typedef struct asn_INTEGER_enum_map_s { + long nat_value; /* associated native integer value */ + size_t enum_len; /* strlen("tag") */ + const char *enum_name; /* "tag" */ +} asn_INTEGER_enum_map_t; + +/* This type describes an enumeration for INTEGER and ENUMERATED types */ +typedef const struct asn_INTEGER_specifics_s { + const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + const unsigned int *enum2value; /* "tag" => N; sorted by tag */ + int map_count; /* Elements in either map */ + int extension; /* This map is extensible */ + int strict_enumeration; /* Enumeration set is fixed */ + int field_width; /* Size of native integer */ + int field_unsigned; /* Signed=0, unsigned=1 */ +} asn_INTEGER_specifics_t; + +asn_struct_print_f INTEGER_print; +ber_type_decoder_f INTEGER_decode_ber; +der_type_encoder_f INTEGER_encode_der; +xer_type_decoder_f INTEGER_decode_xer; +xer_type_encoder_f INTEGER_encode_xer; +per_type_decoder_f INTEGER_decode_uper; +per_type_encoder_f INTEGER_encode_uper; + +/*********************************** + * Some handy conversion routines. * + ***********************************/ + +/* + * Returns 0 if it was possible to convert, -1 otherwise. + * -1/EINVAL: Mandatory argument missing + * -1/ERANGE: Value encoded is out of range for long representation + * -1/ENOMEM: Memory allocation failed (in asn_long2INTEGER()). + */ +int asn_INTEGER2long(const INTEGER_t *i, long *l); +int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); +int asn_long2INTEGER(INTEGER_t *i, long l); +int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); + +/* A a reified version of strtol(3) with nicer error reporting. */ +enum asn_strtol_result_e { + ASN_STRTOL_ERROR_RANGE = -3, /* Input outside of numeric range for long type */ + ASN_STRTOL_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ + ASN_STRTOL_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ + ASN_STRTOL_OK = 0, /* Conversion succeded, number ends at (*end) */ + ASN_STRTOL_EXTRA_DATA = 1, /* Conversion succeded, but the string has extra stuff */ +}; +enum asn_strtol_result_e asn_strtol_lim(const char *str, const char **end, long *l); + +/* The asn_strtol is going to be DEPRECATED soon */ +enum asn_strtol_result_e asn_strtol(const char *str, const char *end, long *l); + +/* + * Convert the integer value into the corresponding enumeration map entry. + */ +const asn_INTEGER_enum_map_t *INTEGER_map_value2enum(asn_INTEGER_specifics_t *specs, long value); + +#ifdef __cplusplus +} +#endif + +#endif /* _INTEGER_H_ */ diff --git a/lte/rrc/asn/InitialUE-Identity.c b/lte/rrc/asn/InitialUE-Identity.c new file mode 100644 index 000000000..5de76fea5 --- /dev/null +++ b/lte/rrc/asn/InitialUE-Identity.c @@ -0,0 +1,106 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "InitialUE-Identity.h" + +static int +memb_randomValue_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 40)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_randomValue_constr_3 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_InitialUE_Identity_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InitialUE_Identity_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InitialUE_Identity, choice.s_TMSI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_S_TMSI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-TMSI" + }, + { ATF_NOFLAGS, 0, offsetof(struct InitialUE_Identity, choice.randomValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_randomValue_constraint_1, + &asn_PER_memb_randomValue_constr_3, + 0, + "randomValue" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_InitialUE_Identity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-TMSI */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* randomValue */ +}; +static asn_CHOICE_specifics_t asn_SPC_InitialUE_Identity_specs_1 = { + sizeof(struct InitialUE_Identity), + offsetof(struct InitialUE_Identity, _asn_ctx), + offsetof(struct InitialUE_Identity, present), + sizeof(((struct InitialUE_Identity *)0)->present), + asn_MAP_InitialUE_Identity_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_InitialUE_Identity = { + "InitialUE-Identity", + "InitialUE-Identity", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_InitialUE_Identity_constr_1, + asn_MBR_InitialUE_Identity_1, + 2, /* Elements count */ + &asn_SPC_InitialUE_Identity_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InitialUE-Identity.h b/lte/rrc/asn/InitialUE-Identity.h new file mode 100644 index 000000000..72470fdfc --- /dev/null +++ b/lte/rrc/asn/InitialUE-Identity.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _InitialUE_Identity_H_ +#define _InitialUE_Identity_H_ + + +#include + +/* Including external dependencies */ +#include "S-TMSI.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InitialUE_Identity_PR { + InitialUE_Identity_PR_NOTHING, /* No components present */ + InitialUE_Identity_PR_s_TMSI, + InitialUE_Identity_PR_randomValue +} InitialUE_Identity_PR; + +/* InitialUE-Identity */ +typedef struct InitialUE_Identity { + InitialUE_Identity_PR present; + union InitialUE_Identity_u { + S_TMSI_t s_TMSI; + BIT_STRING_t randomValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InitialUE_Identity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InitialUE_Identity; + +#ifdef __cplusplus +} +#endif + +#endif /* _InitialUE_Identity_H_ */ +#include diff --git a/lte/rrc/asn/MMEC.c b/lte/rrc/asn/MMEC.c new file mode 100644 index 000000000..87bb04573 --- /dev/null +++ b/lte/rrc/asn/MMEC.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "MMEC.h" + +int +MMEC_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +MMEC_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->check_constraints = asn_DEF_BIT_STRING.check_constraints; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +MMEC_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MMEC_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MMEC_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MMEC_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MMEC_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MMEC_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MMEC_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MMEC_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MMEC_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MMEC_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MMEC_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MMEC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MMEC = { + "MMEC", + "MMEC", + MMEC_free, + MMEC_print, + MMEC_constraint, + MMEC_decode_ber, + MMEC_encode_der, + MMEC_decode_xer, + MMEC_encode_xer, + MMEC_decode_uper, + MMEC_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MMEC_tags_1, + sizeof(asn_DEF_MMEC_tags_1) + /sizeof(asn_DEF_MMEC_tags_1[0]), /* 1 */ + asn_DEF_MMEC_tags_1, /* Same as above */ + sizeof(asn_DEF_MMEC_tags_1) + /sizeof(asn_DEF_MMEC_tags_1[0]), /* 1 */ + &asn_PER_type_MMEC_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/MMEC.h b/lte/rrc/asn/MMEC.h new file mode 100644 index 000000000..84466bb56 --- /dev/null +++ b/lte/rrc/asn/MMEC.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _MMEC_H_ +#define _MMEC_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MMEC */ +typedef BIT_STRING_t MMEC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MMEC; +asn_struct_free_f MMEC_free; +asn_struct_print_f MMEC_print; +asn_constr_check_f MMEC_constraint; +ber_type_decoder_f MMEC_decode_ber; +der_type_encoder_f MMEC_encode_der; +xer_type_decoder_f MMEC_decode_xer; +xer_type_encoder_f MMEC_encode_xer; +per_type_decoder_f MMEC_decode_uper; +per_type_encoder_f MMEC_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MMEC_H_ */ +#include diff --git a/lte/rrc/asn/MasterInformationBlock.c b/lte/rrc/asn/MasterInformationBlock.c new file mode 100644 index 000000000..825e63a5a --- /dev/null +++ b/lte/rrc/asn/MasterInformationBlock.c @@ -0,0 +1,309 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "MasterInformationBlock.h" + +static int +dl_Bandwidth_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dl_Bandwidth_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dl_Bandwidth_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dl_Bandwidth_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dl_Bandwidth_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dl_Bandwidth_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dl_Bandwidth_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_systemFrameNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_spare_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 10)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_dl_Bandwidth_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_systemFrameNumber_constr_10 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_spare_constr_11 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 10, 10 } /* (SIZE(10..10)) */, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_dl_Bandwidth_value2enum_2[] = { + { 0, 2, "n6" }, + { 1, 3, "n15" }, + { 2, 3, "n25" }, + { 3, 3, "n50" }, + { 4, 3, "n75" }, + { 5, 4, "n100" } +}; +static const unsigned int asn_MAP_dl_Bandwidth_enum2value_2[] = { + 5, /* n100(5) */ + 1, /* n15(1) */ + 2, /* n25(2) */ + 3, /* n50(3) */ + 0, /* n6(0) */ + 4 /* n75(4) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_dl_Bandwidth_specs_2 = { + asn_MAP_dl_Bandwidth_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_dl_Bandwidth_enum2value_2, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_dl_Bandwidth_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dl_Bandwidth_2 = { + "dl-Bandwidth", + "dl-Bandwidth", + dl_Bandwidth_2_free, + dl_Bandwidth_2_print, + dl_Bandwidth_2_constraint, + dl_Bandwidth_2_decode_ber, + dl_Bandwidth_2_encode_der, + dl_Bandwidth_2_decode_xer, + dl_Bandwidth_2_encode_xer, + dl_Bandwidth_2_decode_uper, + dl_Bandwidth_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dl_Bandwidth_tags_2, + sizeof(asn_DEF_dl_Bandwidth_tags_2) + /sizeof(asn_DEF_dl_Bandwidth_tags_2[0]) - 1, /* 1 */ + asn_DEF_dl_Bandwidth_tags_2, /* Same as above */ + sizeof(asn_DEF_dl_Bandwidth_tags_2) + /sizeof(asn_DEF_dl_Bandwidth_tags_2[0]), /* 2 */ + &asn_PER_type_dl_Bandwidth_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dl_Bandwidth_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MasterInformationBlock_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MasterInformationBlock, dl_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dl_Bandwidth_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-Bandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct MasterInformationBlock, phich_Config), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PHICH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phich-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct MasterInformationBlock, systemFrameNumber), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_systemFrameNumber_constraint_1, + &asn_PER_memb_systemFrameNumber_constr_10, + 0, + "systemFrameNumber" + }, + { ATF_NOFLAGS, 0, offsetof(struct MasterInformationBlock, spare), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_spare_constraint_1, + &asn_PER_memb_spare_constr_11, + 0, + "spare" + }, +}; +static const ber_tlv_tag_t asn_DEF_MasterInformationBlock_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_MasterInformationBlock_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-Bandwidth */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* phich-Config */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* systemFrameNumber */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MasterInformationBlock_specs_1 = { + sizeof(struct MasterInformationBlock), + offsetof(struct MasterInformationBlock, _asn_ctx), + asn_MAP_MasterInformationBlock_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MasterInformationBlock = { + "MasterInformationBlock", + "MasterInformationBlock", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MasterInformationBlock_tags_1, + sizeof(asn_DEF_MasterInformationBlock_tags_1) + /sizeof(asn_DEF_MasterInformationBlock_tags_1[0]), /* 1 */ + asn_DEF_MasterInformationBlock_tags_1, /* Same as above */ + sizeof(asn_DEF_MasterInformationBlock_tags_1) + /sizeof(asn_DEF_MasterInformationBlock_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MasterInformationBlock_1, + 4, /* Elements count */ + &asn_SPC_MasterInformationBlock_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MasterInformationBlock.h b/lte/rrc/asn/MasterInformationBlock.h new file mode 100644 index 000000000..9ac24560a --- /dev/null +++ b/lte/rrc/asn/MasterInformationBlock.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _MasterInformationBlock_H_ +#define _MasterInformationBlock_H_ + + +#include "liblte/config.h" +#include + +/* Including external dependencies */ +#include +#include "PHICH-Config.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum dl_Bandwidth { + dl_Bandwidth_n6 = 0, + dl_Bandwidth_n15 = 1, + dl_Bandwidth_n25 = 2, + dl_Bandwidth_n50 = 3, + dl_Bandwidth_n75 = 4, + dl_Bandwidth_n100 = 5 +} e_dl_Bandwidth; + +/* MasterInformationBlock */ +typedef struct MasterInformationBlock { + long dl_Bandwidth; + PHICH_Config_t phich_Config; + BIT_STRING_t systemFrameNumber; + BIT_STRING_t spare; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MasterInformationBlock_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_dl_Bandwidth_2; // (Use -fall-defs-global to expose) */ +LIBLTE_API extern asn_TYPE_descriptor_t asn_DEF_MasterInformationBlock; + +#ifdef __cplusplus +} +#endif + +#endif /* _MasterInformationBlock_H_ */ +#include diff --git a/lte/rrc/asn/NativeEnumerated.c b/lte/rrc/asn/NativeEnumerated.c new file mode 100644 index 000000000..ecf66d1b6 --- /dev/null +++ b/lte/rrc/asn/NativeEnumerated.c @@ -0,0 +1,207 @@ +/*- + * Copyright (c) 2004, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeEnumerated basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { + "ENUMERATED", /* The ASN.1 type is still ENUMERATED */ + "ENUMERATED", + NativeInteger_free, + NativeInteger_print, + asn_generic_no_constraint, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeEnumerated_encode_xer, + NativeEnumerated_decode_uper, + NativeEnumerated_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NativeEnumerated_tags, + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + asn_DEF_NativeEnumerated_tags, /* Same as above */ + sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er; + const long *native = (const long *)sptr; + const asn_INTEGER_enum_map_t *el; + + (void)ilevel; + (void)flags; + + if(!native) _ASN_ENCODE_FAILED; + + el = INTEGER_map_value2enum(specs, *native); + if(el) { + size_t srcsize = el->enum_len + 5; + char *src = (char *)alloca(srcsize); + + er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name); + assert(er.encoded > 0 && (size_t)er.encoded < srcsize); + if(cb(src, er.encoded, app_key) < 0) _ASN_ENCODE_FAILED; + _ASN_ENCODED_OK(er); + } else { + ASN_DEBUG("ASN.1 forbids dealing with " + "unknown value of ENUMERATED type"); + _ASN_ENCODE_FAILED; + } +} + +asn_dec_rval_t +NativeEnumerated_decode_uper(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval = { RC_OK, 0 }; + long *native = (long *)*sptr; + asn_per_constraint_t *ct; + long value; + + (void)opt_codec_ctx; + + if(constraints) ct = &constraints->value; + else if(td->per_constraints) ct = &td->per_constraints->value; + else _ASN_DECODE_FAILED; /* Mandatory! */ + if(!specs) _ASN_DECODE_FAILED; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) _ASN_DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); + + if(ct->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) _ASN_DECODE_STARVED; + if(inext) ct = 0; + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) _ASN_DECODE_STARVED; + if(value >= (specs->extension + ? specs->extension - 1 : specs->map_count)) + _ASN_DECODE_FAILED; + } else { + if(!specs->extension) + _ASN_DECODE_FAILED; + /* + * X.691, #10.6: normally small non-negative whole number; + */ + value = uper_get_nsnnwn(pd); + if(value < 0) _ASN_DECODE_STARVED; + value += specs->extension - 1; + if(value >= specs->map_count) + _ASN_DECODE_FAILED; + } + + *native = specs->value2enum[value].nat_value; + ASN_DEBUG("Decoded %s = %ld", td->name, *native); + + return rval; +} + +static int +NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { + const asn_INTEGER_enum_map_t *a = ap; + const asn_INTEGER_enum_map_t *b = bp; + if(a->nat_value == b->nat_value) + return 0; + if(a->nat_value < b->nat_value) + return -1; + return 1; +} + +asn_enc_rval_t +NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er; + long native, value; + asn_per_constraint_t *ct; + int inext = 0; + asn_INTEGER_enum_map_t key; + const asn_INTEGER_enum_map_t *kf; + + if(!sptr) _ASN_ENCODE_FAILED; + if(!specs) _ASN_ENCODE_FAILED; + + if(constraints) ct = &constraints->value; + else if(td->per_constraints) ct = &td->per_constraints->value; + else _ASN_ENCODE_FAILED; /* Mandatory! */ + + ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); + + er.encoded = 0; + + native = *(long *)sptr; + if(native < 0) _ASN_ENCODE_FAILED; + + key.nat_value = native; + kf = bsearch(&key, specs->value2enum, specs->map_count, + sizeof(key), NativeEnumerated__compar_value2enum); + if(!kf) { + ASN_DEBUG("No element corresponds to %ld", native); + _ASN_ENCODE_FAILED; + } + value = kf - specs->value2enum; + + if(ct->range_bits >= 0) { + int cmpWith = specs->extension + ? specs->extension - 1 : specs->map_count; + if(value >= cmpWith) + inext = 1; + } + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, inext, 1)) + _ASN_ENCODE_FAILED; + if(inext) ct = 0; + } else if(inext) { + _ASN_ENCODE_FAILED; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, value, ct->range_bits)) + _ASN_ENCODE_FAILED; + _ASN_ENCODED_OK(er); + } + + if(!specs->extension) + _ASN_ENCODE_FAILED; + + /* + * X.691, #10.6: normally small non-negative whole number; + */ + ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", + value, specs->extension, inext, + value - (inext ? (specs->extension - 1) : 0)); + if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) + _ASN_ENCODE_FAILED; + + _ASN_ENCODED_OK(er); +} + diff --git a/lte/rrc/asn/NativeEnumerated.h b/lte/rrc/asn/NativeEnumerated.h new file mode 100644 index 000000000..c59bb1ba9 --- /dev/null +++ b/lte/rrc/asn/NativeEnumerated.h @@ -0,0 +1,32 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard ENUMERATED in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeEnumerated_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeEnumerated_H_ +#define _NativeEnumerated_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeEnumerated; + +xer_type_encoder_f NativeEnumerated_encode_xer; +per_type_decoder_f NativeEnumerated_decode_uper; +per_type_encoder_f NativeEnumerated_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeEnumerated_H_ */ diff --git a/lte/rrc/asn/NativeInteger.c b/lte/rrc/asn/NativeInteger.c new file mode 100644 index 000000000..7f8e9276f --- /dev/null +++ b/lte/rrc/asn/NativeInteger.c @@ -0,0 +1,332 @@ +/*- + * Copyright (c) 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Read the NativeInteger.h for the explanation wrt. differences between + * INTEGER and NativeInteger. + * Basically, both are decoders and encoders of ASN.1 INTEGER type, but this + * implementation deals with the standard (machine-specific) representation + * of them instead of using the platform-independent buffer. + */ +#include +#include + +/* + * NativeInteger basic type description. + */ +static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NativeInteger = { + "INTEGER", /* The ASN.1 type is still INTEGER */ + "INTEGER", + NativeInteger_free, + NativeInteger_print, + asn_generic_no_constraint, + NativeInteger_decode_ber, + NativeInteger_encode_der, + NativeInteger_decode_xer, + NativeInteger_encode_xer, + NativeInteger_decode_uper, /* Unaligned PER decoder */ + NativeInteger_encode_uper, /* Unaligned PER encoder */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NativeInteger_tags, + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + asn_DEF_NativeInteger_tags, /* Same as above */ + sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode INTEGER type. + */ +asn_dec_rval_t +NativeInteger_decode_ber(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, + void **nint_ptr, const void *buf_ptr, size_t size, int tag_mode) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + long *native = (long *)*nint_ptr; + asn_dec_rval_t rval; + ber_tlv_len_t length; + + /* + * If the structure is not there, allocate it. + */ + if(native == NULL) { + native = (long *)(*nint_ptr = CALLOC(1, sizeof(*native))); + if(native == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as INTEGER (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * ASN.1 encoded INTEGER: buf_ptr, length + * Fill the native, at the same time checking for overflow. + * If overflow occured, return with RC_FAIL. + */ + { + INTEGER_t tmp; + union { + const void *constbuf; + void *nonconstbuf; + } unconst_buf; + long l; + + unconst_buf.constbuf = buf_ptr; + tmp.buf = (uint8_t *)unconst_buf.nonconstbuf; + tmp.size = length; + + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&tmp, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + + *native = l; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s (%ld)", + (long)rval.consumed, (long)length, td->name, (long)*native); + + return rval; +} + +/* + * Encode the NativeInteger using the standard INTEGER type DER encoder. + */ +asn_enc_rval_t +NativeInteger_encode_der(asn_TYPE_descriptor_t *sd, void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + unsigned long native = *(unsigned long *)ptr; /* Disable sign ext. */ + asn_enc_rval_t erval; + INTEGER_t tmp; + +#ifdef WORDS_BIGENDIAN /* Opportunistic optimization */ + + tmp.buf = (uint8_t *)&native; + tmp.size = sizeof(native); + +#else /* Works even if WORDS_BIGENDIAN is not set where should've been */ + uint8_t buf[sizeof(native)]; + uint8_t *p; + + /* Prepare a fake INTEGER */ + for(p = buf + sizeof(buf) - 1; p >= buf; p--, native >>= 8) + *p = (uint8_t)native; + + tmp.buf = buf; + tmp.size = sizeof(buf); +#endif /* WORDS_BIGENDIAN */ + + /* Encode fake INTEGER */ + erval = INTEGER_encode_der(sd, &tmp, tag_mode, tag, cb, app_key); + if(erval.encoded == -1) { + assert(erval.structure_ptr == &tmp); + erval.structure_ptr = ptr; + } + return erval; +} + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +asn_dec_rval_t +NativeInteger_decode_xer(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + INTEGER_t st; + void *st_ptr = (void *)&st; + long *native = (long *)*sptr; + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) _ASN_DECODE_FAILED; + } + + memset(&st, 0, sizeof(st)); + rval = INTEGER_decode_xer(opt_codec_ctx, td, &st_ptr, + opt_mname, buf_ptr, size); + if(rval.code == RC_OK) { + long l; + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + : asn_INTEGER2long(&st, &l)) { + rval.code = RC_FAIL; + rval.consumed = 0; + } else { + *native = l; + } + } else { + /* + * Cannot restart from the middle; + * there is no place to save state in the native type. + * Request a continuation from the very beginning. + */ + rval.consumed = 0; + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &st); + return rval; +} + + +asn_enc_rval_t +NativeInteger_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + char scratch[32]; /* Enough for 64-bit int */ + asn_enc_rval_t er; + const long *native = (const long *)sptr; + + (void)ilevel; + (void)flags; + + if(!native) _ASN_ENCODE_FAILED; + + er.encoded = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + if(er.encoded <= 0 || (size_t)er.encoded >= sizeof(scratch) + || cb(scratch, er.encoded, app_key) < 0) + _ASN_ENCODE_FAILED; + + _ASN_ENCODED_OK(er); +} + +asn_dec_rval_t +NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + asn_dec_rval_t rval; + long *native = (long *)*sptr; + INTEGER_t tmpint; + void *tmpintptr = &tmpint; + + (void)opt_codec_ctx; + ASN_DEBUG("Decoding NativeInteger %s (UPER)", td->name); + + if(!native) { + native = (long *)(*sptr = CALLOC(1, sizeof(*native))); + if(!native) _ASN_DECODE_FAILED; + } + + memset(&tmpint, 0, sizeof tmpint); + rval = INTEGER_decode_uper(opt_codec_ctx, td, constraints, + &tmpintptr, pd); + if(rval.code == RC_OK) { + if((specs&&specs->field_unsigned) + ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + : asn_INTEGER2long(&tmpint, native)) + rval.code = RC_FAIL; + else + ASN_DEBUG("NativeInteger %s got value %ld", + td->name, *native); + } + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + + return rval; +} + +asn_enc_rval_t +NativeInteger_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + asn_enc_rval_t er; + long native; + INTEGER_t tmpint; + + if(!sptr) _ASN_ENCODE_FAILED; + + native = *(long *)sptr; + + ASN_DEBUG("Encoding NativeInteger %s %ld (UPER)", td->name, native); + + memset(&tmpint, 0, sizeof(tmpint)); + if((specs&&specs->field_unsigned) + ? asn_ulong2INTEGER(&tmpint, native) + : asn_long2INTEGER(&tmpint, native)) + _ASN_ENCODE_FAILED; + er = INTEGER_encode_uper(td, constraints, &tmpint, po); + ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); + return er; +} + +/* + * INTEGER specific human-readable output. + */ +int +NativeInteger_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; + const long *native = (const long *)sptr; + char scratch[32]; /* Enough for 64-bit int */ + int ret; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(native) { + ret = snprintf(scratch, sizeof(scratch), + (specs && specs->field_unsigned) + ? "%lu" : "%ld", *native); + assert(ret > 0 && (size_t)ret < sizeof(scratch)); + return (cb(scratch, ret, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +NativeInteger_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as INTEGER (%d, %p, Native)", + td->name, contents_only, ptr); + + if(!contents_only) { + FREEMEM(ptr); + } +} + diff --git a/lte/rrc/asn/NativeInteger.h b/lte/rrc/asn/NativeInteger.h new file mode 100644 index 000000000..4e63a8355 --- /dev/null +++ b/lte/rrc/asn/NativeInteger.h @@ -0,0 +1,37 @@ +/*- + * Copyright (c) 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This type differs from the standard INTEGER in that it is modelled using + * the fixed machine type (long, int, short), so it can hold only values of + * limited length. There is no type (i.e., NativeInteger_t, any integer type + * will do). + * This type may be used when integer range is limited by subtype constraints. + */ +#ifndef _NativeInteger_H_ +#define _NativeInteger_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern asn_TYPE_descriptor_t asn_DEF_NativeInteger; + +asn_struct_free_f NativeInteger_free; +asn_struct_print_f NativeInteger_print; +ber_type_decoder_f NativeInteger_decode_ber; +der_type_encoder_f NativeInteger_encode_der; +xer_type_decoder_f NativeInteger_decode_xer; +xer_type_encoder_f NativeInteger_encode_xer; +per_type_decoder_f NativeInteger_decode_uper; +per_type_encoder_f NativeInteger_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NativeInteger_H_ */ diff --git a/lte/rrc/asn/OCTET_STRING.c b/lte/rrc/asn/OCTET_STRING.c new file mode 100644 index 000000000..ece27a283 --- /dev/null +++ b/lte/rrc/asn/OCTET_STRING.c @@ -0,0 +1,1805 @@ +/*- + * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* for .bits_unused member */ +#include + +/* + * OCTET STRING basic type description. + */ +static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +static const asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = { + sizeof(OCTET_STRING_t), + offsetof(OCTET_STRING_t, _asn_ctx), + ASN_OSUBV_STR +}; +static const asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { + { APC_CONSTRAINED, 8, 8, 0, 255 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, + 0, 0 +}; +asn_TYPE_descriptor_t asn_DEF_OCTET_STRING = { + "OCTET STRING", /* Canonical name */ + "OCTET_STRING", /* XML tag name */ + OCTET_STRING_free, + OCTET_STRING_print, /* non-ascii stuff, generally */ + asn_generic_no_constraint, + OCTET_STRING_decode_ber, + OCTET_STRING_encode_der, + OCTET_STRING_decode_xer_hex, + OCTET_STRING_encode_xer, + OCTET_STRING_decode_uper, /* Unaligned PER decoder */ + OCTET_STRING_encode_uper, /* Unaligned PER encoder */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_OCTET_STRING_tags, + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + asn_DEF_OCTET_STRING_tags, /* Same as above */ + sizeof(asn_DEF_OCTET_STRING_tags) + / sizeof(asn_DEF_OCTET_STRING_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_DEF_OCTET_STRING_specs +}; + +#undef _CH_PHASE +#undef NEXT_PHASE +#undef PREV_PHASE +#define _CH_PHASE(ctx, inc) do { \ + if(ctx->phase == 0) \ + ctx->context = 0; \ + ctx->phase += inc; \ + } while(0) +#define NEXT_PHASE(ctx) _CH_PHASE(ctx, +1) +#define PREV_PHASE(ctx) _CH_PHASE(ctx, -1) + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t tmprval; \ + tmprval.code = _code; \ + tmprval.consumed = consumed_myself; \ + return tmprval; \ + } while(0) + +#undef APPEND +#define APPEND(bufptr, bufsize) do { \ + size_t _bs = (bufsize); /* Append size */ \ + size_t _ns = ctx->context; /* Allocated now */ \ + size_t _es = st->size + _bs; /* Expected size */ \ + /* int is really a typeof(st->size): */ \ + if((int)_es < 0) RETURN(RC_FAIL); \ + if(_ns <= _es) { \ + void *ptr; \ + /* Be nice and round to the memory allocator */ \ + do { _ns = _ns ? _ns << 1 : 16; } \ + while(_ns <= _es); \ + /* int is really a typeof(st->size): */ \ + if((int)_ns < 0) RETURN(RC_FAIL); \ + ptr = REALLOC(st->buf, _ns); \ + if(ptr) { \ + st->buf = (uint8_t *)ptr; \ + ctx->context = _ns; \ + } else { \ + RETURN(RC_FAIL); \ + } \ + ASN_DEBUG("Reallocating into %ld", (long)_ns); \ + } \ + memcpy(st->buf + st->size, bufptr, _bs); \ + /* Convenient nul-termination */ \ + st->buf[_es] = '\0'; \ + st->size = _es; \ + } while(0) + +/* + * The main reason why ASN.1 is still alive is that too much time and effort + * is necessary for learning it more or less adequately, thus creating a gut + * necessity to demonstrate that aquired skill everywhere afterwards. + * No, I am not going to explain what the following stuff is. + */ +struct _stack_el { + ber_tlv_len_t left; /* What's left to read (or -1) */ + ber_tlv_len_t got; /* What was actually processed */ + int cont_level; /* Depth of subcontainment */ + int want_nulls; /* Want null "end of content" octets? */ + int bits_chopped; /* Flag in BIT STRING mode */ + ber_tlv_tag_t tag; /* For debugging purposes */ + struct _stack_el *prev; + struct _stack_el *next; +}; +struct _stack { + struct _stack_el *tail; + struct _stack_el *cur_ptr; +}; + +static struct _stack_el * +OS__add_stack_el(struct _stack *st) { + struct _stack_el *nel; + + /* + * Reuse the old stack frame or allocate a new one. + */ + if(st->cur_ptr && st->cur_ptr->next) { + nel = st->cur_ptr->next; + nel->bits_chopped = 0; + nel->got = 0; + /* Retain the nel->cont_level, it's correct. */ + } else { + nel = (struct _stack_el *)CALLOC(1, sizeof(struct _stack_el)); + if(nel == NULL) + return NULL; + + if(st->tail) { + /* Increase a subcontainment depth */ + nel->cont_level = st->tail->cont_level + 1; + st->tail->next = nel; + } + nel->prev = st->tail; + st->tail = nel; + } + + st->cur_ptr = nel; + + return nel; +} + +static struct _stack * +_new_stack() { + return (struct _stack *)CALLOC(1, sizeof(struct _stack)); +} + +/* + * Decode OCTET STRING type. + */ +asn_dec_rval_t +OCTET_STRING_decode_ber(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, + void **sptr, const void *buf_ptr, size_t size, int tag_mode) { + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + asn_dec_rval_t rval; + asn_struct_ctx_t *ctx; + ssize_t consumed_myself = 0; + struct _stack *stck; /* Expectations stack structure */ + struct _stack_el *sel = 0; /* Stack element */ + int tlv_constr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + + ASN_DEBUG("Decoding %s as %s (frame %ld)", + td->name, + (type_variant == ASN_OSUBV_STR) ? + "OCTET STRING" : "OS-SpecialCase", + (long)size); + + /* + * Create the string if does not exist. + */ + if(st == NULL) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(st == NULL) RETURN(RC_FAIL); + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + switch(ctx->phase) { + case 0: + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, ctx, + buf_ptr, size, tag_mode, -1, + &ctx->left, &tlv_constr); + if(rval.code != RC_OK) + return rval; + + if(tlv_constr) { + /* + * Complex operation, requires stack of expectations. + */ + ctx->ptr = _new_stack(); + if(ctx->ptr) { + stck = (struct _stack *)ctx->ptr; + } else { + RETURN(RC_FAIL); + } + } else { + /* + * Jump into stackless primitive decoding. + */ + _CH_PHASE(ctx, 3); + if(type_variant == ASN_OSUBV_ANY && tag_mode != 1) + APPEND(buf_ptr, rval.consumed); + ADVANCE(rval.consumed); + goto phase3; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + phase1: + /* + * Fill the stack with expectations. + */ + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + do { + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_tag_t expected_tag; + ssize_t tl, ll, tlvl; + /* This one works even if (sel->left == -1) */ + ssize_t Left = ((!sel||(size_t)sel->left >= size) + ?(ssize_t)size:sel->left); + + + ASN_DEBUG("%p, s->l=%ld, s->wn=%ld, s->g=%ld\n", sel, + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)(sel?sel->got:0) + ); + if(sel && sel->left <= 0 && sel->want_nulls == 0) { + if(sel->prev) { + struct _stack_el *prev = sel->prev; + if(prev->left != -1) { + if(prev->left < sel->got) + RETURN(RC_FAIL); + prev->left -= sel->got; + } + prev->got += sel->got; + sel = stck->cur_ptr = prev; + if(!sel) break; + tlv_constr = 1; + continue; + } else { + sel = stck->cur_ptr = 0; + break; /* Nothing to wait */ + } + } + + tl = ber_fetch_tag(buf_ptr, Left, &tlv_tag); + ASN_DEBUG("fetch tag(size=%ld,L=%ld), %sstack, left=%ld, wn=%ld, tl=%ld", + (long)size, (long)Left, sel?"":"!", + (long)(sel?sel->left:0), + (long)(sel?sel->want_nulls:0), + (long)tl); + switch(tl) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(buf_ptr); + + ll = ber_fetch_length(tlv_constr, + (const char *)buf_ptr + tl,Left - tl,&tlv_len); + ASN_DEBUG("Got tag=%s, tc=%d, left=%ld, tl=%ld, len=%ld, ll=%ld", + ber_tlv_tag_string(tlv_tag), tlv_constr, + (long)Left, (long)tl, (long)tlv_len, (long)ll); + switch(ll) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + if(sel && sel->want_nulls + && ((const uint8_t *)buf_ptr)[0] == 0 + && ((const uint8_t *)buf_ptr)[1] == 0) + { + + ASN_DEBUG("Eat EOC; wn=%d--", sel->want_nulls); + + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND("\0\0", 2); + + ADVANCE(2); + sel->got += 2; + if(sel->left != -1) { + sel->left -= 2; /* assert(sel->left >= 2) */ + } + + sel->want_nulls--; + if(sel->want_nulls == 0) { + /* Move to the next expectation */ + sel->left = 0; + tlv_constr = 1; + } + + continue; + } + + /* + * Set up expected tags, + * depending on ASN.1 type being decoded. + */ + switch(type_variant) { + case ASN_OSUBV_BIT: + /* X.690: 8.6.4.1, NOTE 2 */ + /* Fall through */ + case ASN_OSUBV_STR: + default: + if(sel) { + int level = sel->cont_level; + if(level < td->all_tags_count) { + expected_tag = td->all_tags[level]; + break; + } else if(td->all_tags_count) { + expected_tag = td->all_tags + [td->all_tags_count - 1]; + break; + } + /* else, Fall through */ + } + /* Fall through */ + case ASN_OSUBV_ANY: + expected_tag = tlv_tag; + break; + } + + + if(tlv_tag != expected_tag) { + char buf[2][32]; + ber_tlv_tag_snprint(tlv_tag, + buf[0], sizeof(buf[0])); + ber_tlv_tag_snprint(td->tags[td->tags_count-1], + buf[1], sizeof(buf[1])); + ASN_DEBUG("Tag does not match expectation: %s != %s", + buf[0], buf[1]); + RETURN(RC_FAIL); + } + + tlvl = tl + ll; /* Combined length of T and L encoding */ + if((tlv_len + tlvl) < 0) { + /* tlv_len value is too big */ + ASN_DEBUG("TLV encoding + length (%ld) is too big", + (long)tlv_len); + RETURN(RC_FAIL); + } + + /* + * Append a new expectation. + */ + sel = OS__add_stack_el(stck); + if(!sel) RETURN(RC_FAIL); + + sel->tag = tlv_tag; + + sel->want_nulls = (tlv_len==-1); + if(sel->prev && sel->prev->left != -1) { + /* Check that the parent frame is big enough */ + if(sel->prev->left < tlvl + (tlv_len==-1?0:tlv_len)) + RETURN(RC_FAIL); + if(tlv_len == -1) + sel->left = sel->prev->left - tlvl; + else + sel->left = tlv_len; + } else { + sel->left = tlv_len; + } + if(type_variant == ASN_OSUBV_ANY + && (tag_mode != 1 || sel->cont_level)) + APPEND(buf_ptr, tlvl); + sel->got += tlvl; + ADVANCE(tlvl); + + ASN_DEBUG("+EXPECT2 got=%ld left=%ld, wn=%d, clvl=%d", + (long)sel->got, (long)sel->left, + sel->want_nulls, sel->cont_level); + + } while(tlv_constr); + if(sel == NULL) { + /* Finished operation, "phase out" */ + ASN_DEBUG("Phase out"); + _CH_PHASE(ctx, +3); + break; + } + + NEXT_PHASE(ctx); + /* Fall through */ + case 2: + stck = (struct _stack *)ctx->ptr; + sel = stck->cur_ptr; + ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", + (long)sel->left, (long)size, (long)sel->got, + sel->want_nulls); + { + ber_tlv_len_t len; + + assert(sel->left >= 0); + + len = ((ber_tlv_len_t)size < sel->left) + ? (ber_tlv_len_t)size : sel->left; + if(len > 0) { + if(type_variant == ASN_OSUBV_BIT + && sel->bits_chopped == 0) { + /* Put the unused-bits-octet away */ + st->bits_unused = *(const uint8_t *)buf_ptr; + APPEND(((const char *)buf_ptr+1), (len - 1)); + sel->bits_chopped = 1; + } else { + APPEND(buf_ptr, len); + } + ADVANCE(len); + sel->left -= len; + sel->got += len; + } + + if(sel->left) { + ASN_DEBUG("OS left %ld, size = %ld, wn=%d\n", + (long)sel->left, (long)size, sel->want_nulls); + RETURN(RC_WMORE); + } + + PREV_PHASE(ctx); + goto phase1; + } + break; + case 3: + phase3: + /* + * Primitive form, no stack required. + */ + assert(ctx->left >= 0); + + if(size < (size_t)ctx->left) { + if(!size) RETURN(RC_WMORE); + if(type_variant == ASN_OSUBV_BIT && !ctx->context) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, size); + assert(ctx->context > 0); + ctx->left -= size; + ADVANCE(size); + RETURN(RC_WMORE); + } else { + if(type_variant == ASN_OSUBV_BIT + && !ctx->context && ctx->left) { + st->bits_unused = *(const uint8_t *)buf_ptr; + ctx->left--; + ADVANCE(1); + } + APPEND(buf_ptr, ctx->left); + ADVANCE(ctx->left); + ctx->left = 0; + + NEXT_PHASE(ctx); + } + break; + } + + if(sel) { + ASN_DEBUG("3sel p=%p, wn=%d, l=%ld, g=%ld, size=%ld", + sel->prev, sel->want_nulls, + (long)sel->left, (long)sel->got, (long)size); + if(sel->prev || sel->want_nulls > 1 || sel->left > 0) { + RETURN(RC_WMORE); + } + } + + /* + * BIT STRING-specific processing. + */ + if(type_variant == ASN_OSUBV_BIT && st->size) { + /* Finalize BIT STRING: zero out unused bits. */ + st->buf[st->size-1] &= 0xff << st->bits_unused; + } + + ASN_DEBUG("Took %ld bytes to encode %s: [%s]:%ld", + (long)consumed_myself, td->name, + (type_variant == ASN_OSUBV_STR) ? (char *)st->buf : "", + (long)st->size); + + + RETURN(RC_OK); +} + +/* + * Encode OCTET STRING type using DER. + */ +asn_enc_rval_t +OCTET_STRING_encode_der(asn_TYPE_descriptor_t *td, void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er; + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + enum asn_OS_Subvariant type_variant = specs->subvariant; + int fix_last_byte = 0; + + ASN_DEBUG("%s %s as OCTET STRING", + cb?"Estimating":"Encoding", td->name); + + /* + * Write tags. + */ + if(type_variant != ASN_OSUBV_ANY || tag_mode == 1) { + er.encoded = der_write_tags(td, + (type_variant == ASN_OSUBV_BIT) + st->size, + tag_mode, type_variant == ASN_OSUBV_ANY, tag, + cb, app_key); + if(er.encoded == -1) { + er.failed_type = td; + er.structure_ptr = sptr; + return er; + } + } else { + /* Disallow: [] IMPLICIT ANY */ + assert(type_variant != ASN_OSUBV_ANY || tag_mode != -1); + er.encoded = 0; + } + + if(!cb) { + er.encoded += (type_variant == ASN_OSUBV_BIT) + st->size; + _ASN_ENCODED_OK(er); + } + + /* + * Prepare to deal with the last octet of BIT STRING. + */ + if(type_variant == ASN_OSUBV_BIT) { + uint8_t b = st->bits_unused & 0x07; + if(b && st->size) fix_last_byte = 1; + _ASN_CALLBACK(&b, 1); + er.encoded++; + } + + /* Invoke callback for the main part of the buffer */ + _ASN_CALLBACK(st->buf, st->size - fix_last_byte); + + /* The last octet should be stripped off the unused bits */ + if(fix_last_byte) { + uint8_t b = st->buf[st->size-1] & (0xff << st->bits_unused); + _ASN_CALLBACK(&b, 1); + } + + er.encoded += st->size; + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +asn_enc_rval_t +OCTET_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + if(!st || (!st->buf && st->size)) + _ASN_ENCODE_FAILED; + + er.encoded = 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + if(flags & XER_F_CANONICAL) { + char *scend = scratch + (sizeof(scratch) - 2); + for(; buf < end; buf++) { + if(p >= scend) { + _ASN_CALLBACK(scratch, p - scratch); + er.encoded += p - scratch; + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + } + + _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */ + er.encoded += p - scratch; + } else { + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + _ASN_CALLBACK(scratch, p-scratch); + er.encoded += (p-scratch); + p = scratch; + _i_ASN_TEXT_INDENT(1, ilevel); + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + if(p - scratch) { + p--; /* Remove the tail space */ + _ASN_CALLBACK(scratch, p-scratch); /* Dump the rest */ + er.encoded += p - scratch; + if(st->size > 16) + _i_ASN_TEXT_INDENT(1, ilevel-1); + } + } + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +static const struct OCTET_STRING__xer_escape_table_s { + const char *string; + int size; +} OCTET_STRING__xer_escape_table[] = { +#define OSXET(s) { s, sizeof(s) - 1 } + OSXET("\074\156\165\154\057\076"), /* */ + OSXET("\074\163\157\150\057\076"), /* */ + OSXET("\074\163\164\170\057\076"), /* */ + OSXET("\074\145\164\170\057\076"), /* */ + OSXET("\074\145\157\164\057\076"), /* */ + OSXET("\074\145\156\161\057\076"), /* */ + OSXET("\074\141\143\153\057\076"), /* */ + OSXET("\074\142\145\154\057\076"), /* */ + OSXET("\074\142\163\057\076"), /* */ + OSXET("\011"), /* \t */ + OSXET("\012"), /* \n */ + OSXET("\074\166\164\057\076"), /* */ + OSXET("\074\146\146\057\076"), /* */ + OSXET("\015"), /* \r */ + OSXET("\074\163\157\057\076"), /* */ + OSXET("\074\163\151\057\076"), /* */ + OSXET("\074\144\154\145\057\076"), /* */ + OSXET("\074\144\143\061\057\076"), /* */ + OSXET("\074\144\143\062\057\076"), /* */ + OSXET("\074\144\143\063\057\076"), /* */ + OSXET("\074\144\143\064\057\076"), /* */ + OSXET("\074\156\141\153\057\076"), /* */ + OSXET("\074\163\171\156\057\076"), /* */ + OSXET("\074\145\164\142\057\076"), /* */ + OSXET("\074\143\141\156\057\076"), /* */ + OSXET("\074\145\155\057\076"), /* */ + OSXET("\074\163\165\142\057\076"), /* */ + OSXET("\074\145\163\143\057\076"), /* */ + OSXET("\074\151\163\064\057\076"), /* */ + OSXET("\074\151\163\063\057\076"), /* */ + OSXET("\074\151\163\062\057\076"), /* */ + OSXET("\074\151\163\061\057\076"), /* */ + { 0, 0 }, /* " " */ + { 0, 0 }, /* ! */ + { 0, 0 }, /* \" */ + { 0, 0 }, /* # */ + { 0, 0 }, /* $ */ + { 0, 0 }, /* % */ + OSXET("\046\141\155\160\073"), /* & */ + { 0, 0 }, /* ' */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* ()*+,-./ */ + {0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, /* 01234567 */ + {0,0},{0,0},{0,0},{0,0}, /* 89:; */ + OSXET("\046\154\164\073"), /* < */ + { 0, 0 }, /* = */ + OSXET("\046\147\164\073"), /* > */ +}; + +static int +OS__check_escaped_control_char(const void *buf, int size) { + size_t i; + /* + * Inefficient algorithm which translates the escape sequences + * defined above into characters. Returns -1 if not found. + * TODO: replace by a faster algorithm (bsearch(), hash or + * nested table lookups). + */ + for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { + const struct OCTET_STRING__xer_escape_table_s *el; + el = &OCTET_STRING__xer_escape_table[i]; + if(el->size == size && memcmp(buf, el->string, size) == 0) + return i; + } + return -1; +} + +static int +OCTET_STRING__handle_control_chars(void *struct_ptr, const void *chunk_buf, size_t chunk_size) { + /* + * This might be one of the escape sequences + * for control characters. Check it out. + * #11.15.5 + */ + int control_char = OS__check_escaped_control_char(chunk_buf,chunk_size); + if(control_char >= 0) { + OCTET_STRING_t *st = (OCTET_STRING_t *)struct_ptr; + void *p = REALLOC(st->buf, st->size + 2); + if(p) { + st->buf = (uint8_t *)p; + st->buf[st->size++] = control_char; + st->buf[st->size] = '\0'; /* nul-termination */ + return 0; + } + } + + return -1; /* No, it's not */ +} + +asn_enc_rval_t +OCTET_STRING_encode_xer_utf8(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + asn_enc_rval_t er; + uint8_t *buf, *end; + uint8_t *ss; /* Sequence start */ + ssize_t encoded_len = 0; + + (void)ilevel; /* Unused argument */ + (void)flags; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + _ASN_ENCODE_FAILED; + + buf = st->buf; + end = buf + st->size; + for(ss = buf; buf < end; buf++) { + unsigned int ch = *buf; + int s_len; /* Special encoding sequence length */ + + /* + * Escape certain characters: X.680/11.15 + */ + if(ch < sizeof(OCTET_STRING__xer_escape_table) + /sizeof(OCTET_STRING__xer_escape_table[0]) + && (s_len = OCTET_STRING__xer_escape_table[ch].size)) { + if(((buf - ss) && cb(ss, buf - ss, app_key) < 0) + || cb(OCTET_STRING__xer_escape_table[ch].string, s_len, + app_key) < 0) + _ASN_ENCODE_FAILED; + encoded_len += (buf - ss) + s_len; + ss = buf + 1; + } + } + + encoded_len += (buf - ss); + if((buf - ss) && cb(ss, buf - ss, app_key) < 0) + _ASN_ENCODE_FAILED; + + er.encoded = encoded_len; + _ASN_ENCODED_OK(er); +} + +/* + * Convert from hexadecimal format (cstring): "AB CD EF" + */ +static ssize_t OCTET_STRING__convert_hexadecimal(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *chunk_stop = (const char *)chunk_buf; + const char *p = chunk_stop; + const char *pend = p + chunk_size; + unsigned int clv = 0; + int half = 0; /* Half bit */ + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + ssize_t _ns = st->size + (chunk_size + 1) / 2; + void *nptr = REALLOC(st->buf, _ns + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * If something like " a b c " appears here, the " a b":3 will be + * converted, and the rest skipped. That is, unless buf_size is greater + * than chunk_size, then it'll be equivalent to "ABC0". + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + continue; + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + clv = (clv << 4) + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + clv = (clv << 4) + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + clv = (clv << 4) + (ch - 0x61 + 10); + break; + default: + *buf = 0; /* JIC */ + return -1; + } + if(half++) { + half = 0; + *buf++ = clv; + chunk_stop = p + 1; + } + } + + /* + * Check partial decoding. + */ + if(half) { + if(have_more) { + /* + * Partial specification is fine, + * because no more more PXER_TEXT data is available. + */ + *buf++ = clv << 4; + chunk_stop = p; + } + } else { + chunk_stop = p; + } + + st->size = buf - st->buf; /* Adjust the buffer size */ + assert(st->size <= _ns); + st->buf[st->size] = 0; /* Courtesy termination */ + + return (chunk_stop - (const char *)chunk_buf); /* Converted size */ +} + +/* + * Convert from binary format: "00101011101" + */ +static ssize_t OCTET_STRING__convert_binary(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + BIT_STRING_t *st = (BIT_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + int bits_unused = st->bits_unused & 0x7; + uint8_t *buf; + + /* Reallocate buffer according to high cap estimation */ + ssize_t _ns = st->size + (chunk_size + 7) / 8; + void *nptr = REALLOC(st->buf, _ns + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + (void)have_more; + + if(bits_unused == 0) + bits_unused = 8; + else if(st->size) + buf--; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + switch(ch) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* Ignore whitespace */ + break; + case 0x30: + case 0x31: + if(bits_unused-- <= 0) { + *++buf = 0; /* Clean the cell */ + bits_unused = 7; + } + *buf |= (ch&1) << bits_unused; + break; + default: + st->bits_unused = bits_unused; + return -1; + } + } + + if(bits_unused == 8) { + st->size = buf - st->buf; + st->bits_unused = 0; + } else { + st->size = buf - st->buf + 1; + st->bits_unused = bits_unused; + } + + assert(st->size <= _ns); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Something like strtod(), but with stricter rules. + */ +static int +OS__strtoent(int base, const char *buf, const char *end, int32_t *ret_value) { + int32_t val = 0; + const char *p; + + for(p = buf; p < end; p++) { + int ch = *p; + + /* Strange huge value */ + if((val * base + base) < 0) + return -1; + + switch(ch) { + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: /*01234*/ + case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: /*56789*/ + val = val * base + (ch - 0x30); + break; + case 0x41: case 0x42: case 0x43: /* ABC */ + case 0x44: case 0x45: case 0x46: /* DEF */ + val = val * base + (ch - 0x41 + 10); + break; + case 0x61: case 0x62: case 0x63: /* abc */ + case 0x64: case 0x65: case 0x66: /* def */ + val = val * base + (ch - 0x61 + 10); + break; + case 0x3b: /* ';' */ + *ret_value = val; + return (p - buf) + 1; + default: + return -1; /* Character set error */ + } + } + + *ret_value = -1; + return (p - buf); +} + +/* + * Convert from the plain UTF-8 format, expanding entity references: "2 < 3" + */ +static ssize_t OCTET_STRING__convert_entrefs(void *sptr, const void *chunk_buf, size_t chunk_size, int have_more) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + uint8_t *buf; + + /* Reallocate buffer */ + ssize_t _ns = st->size + chunk_size; + void *nptr = REALLOC(st->buf, _ns + 1); + if(!nptr) return -1; + st->buf = (uint8_t *)nptr; + buf = st->buf + st->size; + + /* + * Convert series of 0 and 1 into the octet string. + */ + for(; p < pend; p++) { + int ch = *(const unsigned char *)p; + int len; /* Length of the rest of the chunk */ + + if(ch != 0x26 /* '&' */) { + *buf++ = ch; + continue; /* That was easy... */ + } + + /* + * Process entity reference. + */ + len = chunk_size - (p - (const char *)chunk_buf); + if(len == 1 /* "&" */) goto want_more; + if(p[1] == 0x23 /* '#' */) { + const char *pval; /* Pointer to start of digits */ + int32_t val = 0; /* Entity reference value */ + int base; + + if(len == 2 /* "&#" */) goto want_more; + if(p[2] == 0x78 /* 'x' */) + pval = p + 3, base = 16; + else + pval = p + 2, base = 10; + len = OS__strtoent(base, pval, p + len, &val); + if(len == -1) { + /* Invalid charset. Just copy verbatim. */ + *buf++ = ch; + continue; + } + if(!len || pval[len-1] != 0x3b) goto want_more; + assert(val > 0); + p += (pval - p) + len - 1; /* Advance past entref */ + + if(val < 0x80) { + *buf++ = (char)val; + } else if(val < 0x800) { + *buf++ = 0xc0 | ((val >> 6)); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x10000) { + *buf++ = 0xe0 | ((val >> 12)); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x200000) { + *buf++ = 0xf0 | ((val >> 18)); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else if(val < 0x4000000) { + *buf++ = 0xf8 | ((val >> 24)); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } else { + *buf++ = 0xfc | ((val >> 30) & 0x1); + *buf++ = 0x80 | ((val >> 24) & 0x3f); + *buf++ = 0x80 | ((val >> 18) & 0x3f); + *buf++ = 0x80 | ((val >> 12) & 0x3f); + *buf++ = 0x80 | ((val >> 6) & 0x3f); + *buf++ = 0x80 | ((val & 0x3f)); + } + } else { + /* + * Ugly, limited parsing of & > < + */ + char *sc = (char *)memchr(p, 0x3b, len > 5 ? 5 : len); + if(!sc) goto want_more; + if((sc - p) == 4 + && p[1] == 0x61 /* 'a' */ + && p[2] == 0x6d /* 'm' */ + && p[3] == 0x70 /* 'p' */) { + *buf++ = 0x26; + p = sc; + continue; + } + if((sc - p) == 3) { + if(p[1] == 0x6c) { + *buf = 0x3c; /* '<' */ + } else if(p[1] == 0x67) { + *buf = 0x3e; /* '>' */ + } else { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + if(p[2] != 0x74) { + /* Unsupported entity reference */ + *buf++ = ch; + continue; + } + buf++; + p = sc; + continue; + } + /* Unsupported entity reference */ + *buf++ = ch; + } + + continue; + want_more: + if(have_more) { + /* + * We know that no more data (of the same type) + * is coming. Copy the rest verbatim. + */ + *buf++ = ch; + continue; + } + chunk_size = (p - (const char *)chunk_buf); + /* Processing stalled: need more data */ + break; + } + + st->size = buf - st->buf; + assert(st->size <= _ns); + st->buf[st->size] = 0; /* Courtesy termination */ + + return chunk_size; /* Converted in full */ +} + +/* + * Decode OCTET STRING from the XML element's body. + */ +static asn_dec_rval_t +OCTET_STRING__decode_xer(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_ptr, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_ptr, const void *chunk_buf, size_t chunk_size, + int have_more) +) { + OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr; + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t *ctx; /* Per-structure parser context */ + asn_dec_rval_t rval; /* Return value from the decoder */ + int st_allocated; + + /* + * Create the string if does not exist. + */ + if(!st) { + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + *sptr = (void *)st; + if(!st) goto sta_failed; + st_allocated = 1; + } else { + st_allocated = 0; + } + if(!st->buf) { + /* This is separate from above section */ + st->buf = (uint8_t *)CALLOC(1, 1); + if(!st->buf) { + if(st_allocated) { + *sptr = 0; + goto stb_failed; + } else { + goto sta_failed; + } + } + } + + /* Restore parsing context */ + ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); + + return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, + buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); + +stb_failed: + FREEMEM(st); +sta_failed: + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; +} + +/* + * Decode OCTET STRING from the hexadecimal data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_hex(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_hexadecimal); +} + +/* + * Decode OCTET STRING from the binary (0/1) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_binary(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, 0, OCTET_STRING__convert_binary); +} + +/* + * Decode OCTET STRING from the string (ASCII/UTF-8) data. + */ +asn_dec_rval_t +OCTET_STRING_decode_xer_utf8(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, + const char *opt_mname, const void *buf_ptr, size_t size) { + return OCTET_STRING__decode_xer(opt_codec_ctx, td, sptr, opt_mname, + buf_ptr, size, + OCTET_STRING__handle_control_chars, + OCTET_STRING__convert_entrefs); +} + +static int +OCTET_STRING_per_get_characters(asn_per_data_t *po, uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, asn_per_constraints_t *pc) { + uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Expanding %d characters into (%ld..%ld):%d", + (int)units, lb, ub, unit_bits); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Decode without translation */ + lb = 0; + } else if(pc && pc->code2value) { + if(unit_bits > 16) + return 1; /* FATAL: can't have constrained + * UniversalString with more than + * 16 million code points */ + for(; buf < end; buf += bpc) { + int value; + int code = per_get_few_bits(po, unit_bits); + if(code < 0) return -1; /* WMORE */ + value = pc->code2value(code); + if(value < 0) { + ASN_DEBUG("Code %d (0x%02x) is" + " not in map (%ld..%ld)", + code, code, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = value; break; + case 2: buf[0] = value >> 8; buf[1] = value; break; + case 4: buf[0] = value >> 24; buf[1] = value >> 16; + buf[2] = value >> 8; buf[3] = value; break; + } + } + return 0; + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_get_many_bits(po, buf, 0, unit_bits * units); + } + + for(; buf < end; buf += bpc) { + int code = per_get_few_bits(po, unit_bits); + int ch = code + lb; + if(code < 0) return -1; /* WMORE */ + if(ch > ub) { + ASN_DEBUG("Code %d is out of range (%ld..%ld)", + ch, lb, ub); + return 1; /* FATAL */ + } + switch(bpc) { + case 1: *buf = ch; break; + case 2: buf[0] = ch >> 8; buf[1] = ch; break; + case 4: buf[0] = ch >> 24; buf[1] = ch >> 16; + buf[2] = ch >> 8; buf[3] = ch; break; + } + } + + return 0; +} + +static int +OCTET_STRING_per_put_characters(asn_per_outp_t *po, const uint8_t *buf, + size_t units, unsigned int bpc, unsigned int unit_bits, + long lb, long ub, asn_per_constraints_t *pc) { + const uint8_t *end = buf + units * bpc; + + ASN_DEBUG("Squeezing %d characters into (%ld..%ld):%d (%d bpc)", + (int)units, lb, ub, unit_bits, bpc); + + /* X.691: 27.5.4 */ + if((unsigned long)ub <= ((unsigned long)2 << (unit_bits - 1))) { + /* Encode as is */ + lb = 0; + } else if(pc && pc->value2code) { + for(; buf < end; buf += bpc) { + int code; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + code = pc->value2code(value); + if(code < 0) { + ASN_DEBUG("Character %d (0x%02x) is" + " not in map (%ld..%ld)", + *buf, *buf, lb, ub); + return -1; + } + if(per_put_few_bits(po, code, unit_bits)) + return -1; + } + } + + /* Shortcut the no-op copying to the aligned structure */ + if(lb == 0 && (unit_bits == 8 * bpc)) { + return per_put_many_bits(po, buf, unit_bits * units); + } + + for(ub -= lb; buf < end; buf += bpc) { + int ch; + uint32_t value; + switch(bpc) { + case 1: value = *(const uint8_t *)buf; break; + case 2: value = (buf[0] << 8) | buf[1]; break; + case 4: value = (buf[0] << 24) | (buf[1] << 16) + | (buf[2] << 8) | buf[3]; break; + default: return -1; + } + ch = value - lb; + if(ch < 0 || ch > ub) { + ASN_DEBUG("Character %d (0x%02x)" + " is out of range (%ld..%ld)", + *buf, *buf, lb, ub + lb); + return -1; + } + if(per_put_few_bits(po, ch, unit_bits)) + return -1; + } + + return 0; +} + +asn_dec_rval_t +OCTET_STRING_decode_uper(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, + void **sptr, asn_per_data_t *pd) { + + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + asn_per_constraints_t *pc = constraints ? constraints + : td->per_constraints; + asn_per_constraint_t *cval; + asn_per_constraint_t *csiz; + asn_dec_rval_t rval = { RC_OK, 0 }; + BIT_STRING_t *st = (BIT_STRING_t *)*sptr; + ssize_t consumed_myself = 0; + int repeat; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + + (void)opt_codec_ctx; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); + RETURN(RC_FAIL); + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + break; + } + + /* + * Allocate the string. + */ + if(!st) { + st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); + if(!st) RETURN(RC_FAIL); + } + + ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", + csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", + csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); + + if(csiz->flags & APC_EXTENSIBLE) { + int inext = per_get_few_bits(pd, 1); + if(inext < 0) RETURN(RC_WMORE); + if(inext) { + csiz = &asn_DEF_OCTET_STRING_constraints.size; + cval = &asn_DEF_OCTET_STRING_constraints.value; + unit_bits = canonical_unit_bits; + } + } + + if(csiz->effective_bits >= 0) { + FREEMEM(st->buf); + if(bpc) { + st->size = csiz->upper_bound * bpc; + } else { + st->size = (csiz->upper_bound + 7) >> 3; + } + st->buf = (uint8_t *)MALLOC(st->size + 1); + if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits == 0) { + int ret; + if(bpc) { + ASN_DEBUG("Encoding OCTET STRING size %ld", + csiz->upper_bound); + ret = OCTET_STRING_per_get_characters(pd, st->buf, + csiz->upper_bound, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ASN_DEBUG("Encoding BIT STRING size %ld", + csiz->upper_bound); + ret = per_get_many_bits(pd, st->buf, 0, + unit_bits * csiz->upper_bound); + } + if(ret < 0) RETURN(RC_WMORE); + consumed_myself += unit_bits * csiz->upper_bound; + st->buf[st->size] = 0; + if(bpc == 0) { + int ubs = (csiz->upper_bound & 0x7); + st->bits_unused = ubs ? 8 - ubs : 0; + } + RETURN(RC_OK); + } + + st->size = 0; + do { + ssize_t raw_len; + ssize_t len_bytes; + ssize_t len_bits; + void *p; + int ret; + + /* Get the PER length */ + raw_len = uper_get_length(pd, csiz->effective_bits, &repeat); + if(raw_len < 0) RETURN(RC_WMORE); + raw_len += csiz->lower_bound; + + ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", + (long)csiz->effective_bits, (long)raw_len, + repeat ? "repeat" : "once", td->name); + if(bpc) { + len_bytes = raw_len * bpc; + len_bits = len_bytes * unit_bits; + } else { + len_bits = raw_len; + len_bytes = (len_bits + 7) >> 3; + if(len_bits & 0x7) + st->bits_unused = 8 - (len_bits & 0x7); + /* len_bits be multiple of 16K if repeat is set */ + } + p = REALLOC(st->buf, st->size + len_bytes + 1); + if(!p) RETURN(RC_FAIL); + st->buf = (uint8_t *)p; + + if(bpc) { + ret = OCTET_STRING_per_get_characters(pd, + &st->buf[st->size], raw_len, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + if(ret > 0) RETURN(RC_FAIL); + } else { + ret = per_get_many_bits(pd, &st->buf[st->size], + 0, len_bits); + } + if(ret < 0) RETURN(RC_WMORE); + st->size += len_bytes; + } while(repeat); + st->buf[st->size] = 0; /* nul-terminate */ + + return rval; +} + +asn_enc_rval_t +OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + asn_per_constraints_t *pc = constraints ? constraints + : td->per_constraints; + asn_per_constraint_t *cval; + asn_per_constraint_t *csiz; + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + int inext = 0; /* Lies not within extension root */ + unsigned int unit_bits; + unsigned int canonical_unit_bits; + unsigned int sizeinunits; + const uint8_t *buf; + int ret; + enum { + OS__BPC_BIT = 0, + OS__BPC_CHAR = 1, + OS__BPC_U16 = 2, + OS__BPC_U32 = 4 + } bpc; /* Bytes per character */ + int ct_extensible; + + if(!st || (!st->buf && st->size)) + _ASN_ENCODE_FAILED; + + if(pc) { + cval = &pc->value; + csiz = &pc->size; + } else { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + } + ct_extensible = csiz->flags & APC_EXTENSIBLE; + + switch(specs->subvariant) { + default: + case ASN_OSUBV_ANY: + _ASN_ENCODE_FAILED; + case ASN_OSUBV_BIT: + canonical_unit_bits = unit_bits = 1; + bpc = OS__BPC_BIT; + sizeinunits = st->size * 8 - (st->bits_unused & 0x07); + ASN_DEBUG("BIT STRING of %d bytes, %d bits unused", + sizeinunits, st->bits_unused); + break; + case ASN_OSUBV_STR: + canonical_unit_bits = unit_bits = 8; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_CHAR; + sizeinunits = st->size; + break; + case ASN_OSUBV_U16: + canonical_unit_bits = unit_bits = 16; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U16; + sizeinunits = st->size / 2; + break; + case ASN_OSUBV_U32: + canonical_unit_bits = unit_bits = 32; + if(cval->flags & APC_CONSTRAINED) + unit_bits = cval->range_bits; + bpc = OS__BPC_U32; + sizeinunits = st->size / 4; + break; + } + + ASN_DEBUG("Encoding %s into %d units of %d bits" + " (%ld..%ld, effective %d)%s", + td->name, sizeinunits, unit_bits, + csiz->lower_bound, csiz->upper_bound, + csiz->effective_bits, ct_extensible ? " EXT" : ""); + + /* Figure out whether size lies within PER visible constraint */ + + if(csiz->effective_bits >= 0) { + if((int)sizeinunits < csiz->lower_bound + || (int)sizeinunits > csiz->upper_bound) { + if(ct_extensible) { + cval = &asn_DEF_OCTET_STRING_constraints.value; + csiz = &asn_DEF_OCTET_STRING_constraints.size; + unit_bits = canonical_unit_bits; + inext = 1; + } else + _ASN_ENCODE_FAILED; + } + } else { + inext = 0; + } + + if(ct_extensible) { + /* Declare whether length is [not] within extension root */ + if(per_put_few_bits(po, inext, 1)) + _ASN_ENCODE_FAILED; + } + + /* X.691, #16.5: zero-length encoding */ + /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ + /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ + if(csiz->effective_bits >= 0) { + ASN_DEBUG("Encoding %d bytes (%ld), length in %d bits", + st->size, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound, + csiz->effective_bits); + if(ret) _ASN_ENCODE_FAILED; + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, st->buf, + sizeinunits, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, st->buf, + sizeinunits * unit_bits); + } + if(ret) _ASN_ENCODE_FAILED; + _ASN_ENCODED_OK(er); + } + + ASN_DEBUG("Encoding %d bytes", st->size); + + if(sizeinunits == 0) { + if(uper_put_length(po, 0)) + _ASN_ENCODE_FAILED; + _ASN_ENCODED_OK(er); + } + + buf = st->buf; + while(sizeinunits) { + ssize_t maySave = uper_put_length(po, sizeinunits); + if(maySave < 0) _ASN_ENCODE_FAILED; + + ASN_DEBUG("Encoding %ld of %ld", + (long)maySave, (long)sizeinunits); + + if(bpc) { + ret = OCTET_STRING_per_put_characters(po, buf, + maySave, bpc, unit_bits, + cval->lower_bound, cval->upper_bound, pc); + } else { + ret = per_put_many_bits(po, buf, maySave * unit_bits); + } + if(ret) _ASN_ENCODE_FAILED; + + if(bpc) + buf += maySave * bpc; + else + buf += maySave >> 3; + sizeinunits -= maySave; + assert(!(maySave & 0x07) || !sizeinunits); + } + + _ASN_ENCODED_OK(er); +} + +int +OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const char * const h2c = "0123456789ABCDEF"; + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + char scratch[16 * 3 + 4]; + char *p = scratch; + uint8_t *buf; + uint8_t *end; + size_t i; + + (void)td; /* Unused argument */ + + if(!st || (!st->buf && st->size)) + return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Dump the contents of the buffer in hexadecimal. + */ + buf = st->buf; + end = buf + st->size; + for(i = 0; buf < end; buf++, i++) { + if(!(i % 16) && (i || st->size > 16)) { + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + _i_INDENT(1); + p = scratch; + } + *p++ = h2c[(*buf >> 4) & 0x0F]; + *p++ = h2c[*buf & 0x0F]; + *p++ = 0x20; + } + + if(p > scratch) { + p--; /* Remove the tail space */ + if(cb(scratch, p - scratch, app_key) < 0) + return -1; + } + + return 0; +} + +int +OCTET_STRING_print_utf8(asn_TYPE_descriptor_t *td, const void *sptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st && (st->buf || !st->size)) { + return (cb(st->buf, st->size, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +OCTET_STRING_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { + OCTET_STRING_t *st = (OCTET_STRING_t *)sptr; + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + asn_struct_ctx_t *ctx = (asn_struct_ctx_t *) + ((char *)st + specs->ctx_offset); + struct _stack *stck; + + if(!td || !st) + return; + + ASN_DEBUG("Freeing %s as OCTET STRING", td->name); + + if(st->buf) { + FREEMEM(st->buf); + st->buf = 0; + } + + /* + * Remove decode-time stack. + */ + stck = (struct _stack *)ctx->ptr; + if(stck) { + while(stck->tail) { + struct _stack_el *sel = stck->tail; + stck->tail = sel->prev; + FREEMEM(sel); + } + FREEMEM(stck); + } + + if(!contents_only) { + FREEMEM(st); + } +} + +/* + * Conversion routines. + */ +int +OCTET_STRING_fromBuf(OCTET_STRING_t *st, const char *str, int len) { + void *buf; + + if(st == 0 || (str == 0 && len)) { + errno = EINVAL; + return -1; + } + + /* + * Clear the OCTET STRING. + */ + if(str == NULL) { + FREEMEM(st->buf); + st->buf = 0; + st->size = 0; + return 0; + } + + /* Determine the original string size, if not explicitly given */ + if(len < 0) + len = strlen(str); + + /* Allocate and fill the memory */ + buf = MALLOC(len + 1); + if(buf == NULL) + return -1; + + memcpy(buf, str, len); + ((uint8_t *)buf)[len] = '\0'; /* Couldn't use memcpy(len+1)! */ + FREEMEM(st->buf); + st->buf = (uint8_t *)buf; + st->size = len; + + return 0; +} + +OCTET_STRING_t * +OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, const char *str, int len) { + asn_OCTET_STRING_specifics_t *specs = td->specifics + ? (asn_OCTET_STRING_specifics_t *)td->specifics + : &asn_DEF_OCTET_STRING_specs; + OCTET_STRING_t *st; + + st = (OCTET_STRING_t *)CALLOC(1, specs->struct_size); + if(st && str && OCTET_STRING_fromBuf(st, str, len)) { + FREEMEM(st); + st = NULL; + } + + return st; +} + diff --git a/lte/rrc/asn/OCTET_STRING.h b/lte/rrc/asn/OCTET_STRING.h new file mode 100644 index 000000000..013c7b13f --- /dev/null +++ b/lte/rrc/asn/OCTET_STRING.h @@ -0,0 +1,86 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _OCTET_STRING_H_ +#define _OCTET_STRING_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct OCTET_STRING { + uint8_t *buf; /* Buffer with consecutive OCTET_STRING bits */ + int size; /* Size of the buffer */ + + asn_struct_ctx_t _asn_ctx; /* Parsing across buffer boundaries */ +} OCTET_STRING_t; + +extern asn_TYPE_descriptor_t asn_DEF_OCTET_STRING; + +asn_struct_free_f OCTET_STRING_free; +asn_struct_print_f OCTET_STRING_print; +asn_struct_print_f OCTET_STRING_print_utf8; +ber_type_decoder_f OCTET_STRING_decode_ber; +der_type_encoder_f OCTET_STRING_encode_der; +xer_type_decoder_f OCTET_STRING_decode_xer_hex; /* Hexadecimal */ +xer_type_decoder_f OCTET_STRING_decode_xer_binary; /* 01010111010 */ +xer_type_decoder_f OCTET_STRING_decode_xer_utf8; /* ASCII/UTF-8 */ +xer_type_encoder_f OCTET_STRING_encode_xer; +xer_type_encoder_f OCTET_STRING_encode_xer_utf8; +per_type_decoder_f OCTET_STRING_decode_uper; +per_type_encoder_f OCTET_STRING_encode_uper; + +/****************************** + * Handy conversion routines. * + ******************************/ + +/* + * This function clears the previous value of the OCTET STRING (if any) + * and then allocates a new memory with the specified content (str/size). + * If size = -1, the size of the original string will be determined + * using strlen(str). + * If str equals to NULL, the function will silently clear the + * current contents of the OCTET STRING. + * Returns 0 if it was possible to perform operation, -1 otherwise. + */ +int OCTET_STRING_fromBuf(OCTET_STRING_t *s, const char *str, int size); + +/* Handy conversion from the C string into the OCTET STRING. */ +#define OCTET_STRING_fromString(s, str) OCTET_STRING_fromBuf(s, str, -1) + +/* + * Allocate and fill the new OCTET STRING and return a pointer to the newly + * allocated object. NULL is permitted in str: the function will just allocate + * empty OCTET STRING. + */ +OCTET_STRING_t *OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, + const char *str, int size); + +/**************************** + * Internally useful stuff. * + ****************************/ + +typedef const struct asn_OCTET_STRING_specifics_s { + /* + * Target structure description. + */ + int struct_size; /* Size of the structure */ + int ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + enum asn_OS_Subvariant { + ASN_OSUBV_ANY, /* The open type (ANY) */ + ASN_OSUBV_BIT, /* BIT STRING */ + ASN_OSUBV_STR, /* String types, not {BMP,Universal}String */ + ASN_OSUBV_U16, /* 16-bit character (BMPString) */ + ASN_OSUBV_U32 /* 32-bit character (UniversalString) */ + } subvariant; +} asn_OCTET_STRING_specifics_t; + +#ifdef __cplusplus +} +#endif + +#endif /* _OCTET_STRING_H_ */ diff --git a/lte/rrc/asn/PHICH-Config.c b/lte/rrc/asn/PHICH-Config.c new file mode 100644 index 000000000..0cf225624 --- /dev/null +++ b/lte/rrc/asn/PHICH-Config.c @@ -0,0 +1,353 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "PHICH-Config.h" + +static int +phich_Duration_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +phich_Duration_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +phich_Duration_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + phich_Duration_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +phich_Duration_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +phich_Duration_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +phich_Duration_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +phich_Duration_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +phich_Duration_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +phich_Duration_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +phich_Duration_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + phich_Duration_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +phich_Resource_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +phich_Resource_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +phich_Resource_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + phich_Resource_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +phich_Resource_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +phich_Resource_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +phich_Resource_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +phich_Resource_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +phich_Resource_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +phich_Resource_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +phich_Resource_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + phich_Resource_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_phich_Duration_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_phich_Resource_constr_5 GCC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_phich_Duration_value2enum_2[] = { + { 0, 6, "normal" }, + { 1, 8, "extended" } +}; +static const unsigned int asn_MAP_phich_Duration_enum2value_2[] = { + 1, /* extended(1) */ + 0 /* normal(0) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_phich_Duration_specs_2 = { + asn_MAP_phich_Duration_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_phich_Duration_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_phich_Duration_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_phich_Duration_2 = { + "phich-Duration", + "phich-Duration", + phich_Duration_2_free, + phich_Duration_2_print, + phich_Duration_2_constraint, + phich_Duration_2_decode_ber, + phich_Duration_2_encode_der, + phich_Duration_2_decode_xer, + phich_Duration_2_encode_xer, + phich_Duration_2_decode_uper, + phich_Duration_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_phich_Duration_tags_2, + sizeof(asn_DEF_phich_Duration_tags_2) + /sizeof(asn_DEF_phich_Duration_tags_2[0]) - 1, /* 1 */ + asn_DEF_phich_Duration_tags_2, /* Same as above */ + sizeof(asn_DEF_phich_Duration_tags_2) + /sizeof(asn_DEF_phich_Duration_tags_2[0]), /* 2 */ + &asn_PER_type_phich_Duration_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_phich_Duration_specs_2 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_phich_Resource_value2enum_5[] = { + { 0, 8, "oneSixth" }, + { 1, 4, "half" }, + { 2, 3, "one" }, + { 3, 3, "two" } +}; +static const unsigned int asn_MAP_phich_Resource_enum2value_5[] = { + 1, /* half(1) */ + 2, /* one(2) */ + 0, /* oneSixth(0) */ + 3 /* two(3) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_phich_Resource_specs_5 = { + asn_MAP_phich_Resource_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_phich_Resource_enum2value_5, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_phich_Resource_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_phich_Resource_5 = { + "phich-Resource", + "phich-Resource", + phich_Resource_5_free, + phich_Resource_5_print, + phich_Resource_5_constraint, + phich_Resource_5_decode_ber, + phich_Resource_5_encode_der, + phich_Resource_5_decode_xer, + phich_Resource_5_encode_xer, + phich_Resource_5_decode_uper, + phich_Resource_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_phich_Resource_tags_5, + sizeof(asn_DEF_phich_Resource_tags_5) + /sizeof(asn_DEF_phich_Resource_tags_5[0]) - 1, /* 1 */ + asn_DEF_phich_Resource_tags_5, /* Same as above */ + sizeof(asn_DEF_phich_Resource_tags_5) + /sizeof(asn_DEF_phich_Resource_tags_5[0]), /* 2 */ + &asn_PER_type_phich_Resource_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_phich_Resource_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PHICH_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PHICH_Config, phich_Duration), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_phich_Duration_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phich-Duration" + }, + { ATF_NOFLAGS, 0, offsetof(struct PHICH_Config, phich_Resource), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_phich_Resource_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phich-Resource" + }, +}; +static const ber_tlv_tag_t asn_DEF_PHICH_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PHICH_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* phich-Duration */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* phich-Resource */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PHICH_Config_specs_1 = { + sizeof(struct PHICH_Config), + offsetof(struct PHICH_Config, _asn_ctx), + asn_MAP_PHICH_Config_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PHICH_Config = { + "PHICH-Config", + "PHICH-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PHICH_Config_tags_1, + sizeof(asn_DEF_PHICH_Config_tags_1) + /sizeof(asn_DEF_PHICH_Config_tags_1[0]), /* 1 */ + asn_DEF_PHICH_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_PHICH_Config_tags_1) + /sizeof(asn_DEF_PHICH_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PHICH_Config_1, + 2, /* Elements count */ + &asn_SPC_PHICH_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PHICH-Config.h b/lte/rrc/asn/PHICH-Config.h new file mode 100644 index 000000000..2b731f936 --- /dev/null +++ b/lte/rrc/asn/PHICH-Config.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _PHICH_Config_H_ +#define _PHICH_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum phich_Duration { + phich_Duration_normal = 0, + phich_Duration_extended = 1 +} e_phich_Duration; +typedef enum phich_Resource { + phich_Resource_oneSixth = 0, + phich_Resource_half = 1, + phich_Resource_one = 2, + phich_Resource_two = 3 +} e_phich_Resource; + +/* PHICH-Config */ +typedef struct PHICH_Config { + long phich_Duration; + long phich_Resource; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PHICH_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_phich_Duration_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_phich_Resource_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PHICH_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _PHICH_Config_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c new file mode 100644 index 000000000..cfebbfb58 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c @@ -0,0 +1,115 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "RRCConnectionRequest-r8-IEs.h" + +static int +memb_spare_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_spare_constr_4 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RRCConnectionRequest_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRequest_r8_IEs, ue_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_InitialUE_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRequest_r8_IEs, establishmentCause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_EstablishmentCause, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "establishmentCause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRequest_r8_IEs, spare), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_spare_constraint_1, + &asn_PER_memb_spare_constr_4, + 0, + "spare" + }, +}; +static const ber_tlv_tag_t asn_DEF_RRCConnectionRequest_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RRCConnectionRequest_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* establishmentCause */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* spare */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRequest_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionRequest_r8_IEs), + offsetof(struct RRCConnectionRequest_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionRequest_r8_IEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRequest_r8_IEs = { + "RRCConnectionRequest-r8-IEs", + "RRCConnectionRequest-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRequest_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionRequest_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRequest_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRequest_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRequest_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRequest_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRequest_r8_IEs_1, + 3, /* Elements count */ + &asn_SPC_RRCConnectionRequest_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h new file mode 100644 index 000000000..ad35cc007 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _RRCConnectionRequest_r8_IEs_H_ +#define _RRCConnectionRequest_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "InitialUE-Identity.h" +#include "EstablishmentCause.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionRequest-r8-IEs */ +typedef struct RRCConnectionRequest_r8_IEs { + InitialUE_Identity_t ue_Identity; + EstablishmentCause_t establishmentCause; + BIT_STRING_t spare; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRequest_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRequest_r8_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionRequest_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRequest.c b/lte/rrc/asn/RRCConnectionRequest.c new file mode 100644 index 000000000..7fce666cf --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRequest.c @@ -0,0 +1,160 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "RRCConnectionRequest.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_4 = { + sizeof(struct criticalExtensionsFuture), + offsetof(struct criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_4 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_4, + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_4, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.rrcConnectionRequest_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRequest_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionRequest-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionRequest-r8 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct criticalExtensions), + offsetof(struct criticalExtensions, _asn_ctx), + offsetof(struct criticalExtensions, present), + sizeof(((struct criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRequest, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static const ber_tlv_tag_t asn_DEF_RRCConnectionRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RRCConnectionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRequest_specs_1 = { + sizeof(struct RRCConnectionRequest), + offsetof(struct RRCConnectionRequest, _asn_ctx), + asn_MAP_RRCConnectionRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRequest = { + "RRCConnectionRequest", + "RRCConnectionRequest", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRequest_tags_1, + sizeof(asn_DEF_RRCConnectionRequest_tags_1) + /sizeof(asn_DEF_RRCConnectionRequest_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRequest_tags_1) + /sizeof(asn_DEF_RRCConnectionRequest_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRequest_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionRequest_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRequest.h b/lte/rrc/asn/RRCConnectionRequest.h new file mode 100644 index 000000000..f4cae0533 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRequest.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _RRCConnectionRequest_H_ +#define _RRCConnectionRequest_H_ + + +#include + +/* Including external dependencies */ +#include "RRCConnectionRequest-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum criticalExtensions_PR { + criticalExtensions_PR_NOTHING, /* No components present */ + criticalExtensions_PR_rrcConnectionRequest_r8, + criticalExtensions_PR_criticalExtensionsFuture +} criticalExtensions_PR; + +/* RRCConnectionRequest */ +typedef struct RRCConnectionRequest { + struct criticalExtensions { + criticalExtensions_PR present; + union RRCConnectionRequest__criticalExtensions_u { + RRCConnectionRequest_r8_IEs_t rrcConnectionRequest_r8; + struct criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionRequest_H_ */ +#include diff --git a/lte/rrc/asn/S-TMSI.c b/lte/rrc/asn/S-TMSI.c new file mode 100644 index 000000000..8e52827fa --- /dev/null +++ b/lte/rrc/asn/S-TMSI.c @@ -0,0 +1,105 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "S-TMSI.h" + +static int +memb_m_TMSI_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_m_TMSI_constr_3 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_S_TMSI_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct S_TMSI, mmec), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MMEC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mmec" + }, + { ATF_NOFLAGS, 0, offsetof(struct S_TMSI, m_TMSI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_m_TMSI_constraint_1, + &asn_PER_memb_m_TMSI_constr_3, + 0, + "m-TMSI" + }, +}; +static const ber_tlv_tag_t asn_DEF_S_TMSI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_S_TMSI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mmec */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* m-TMSI */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_S_TMSI_specs_1 = { + sizeof(struct S_TMSI), + offsetof(struct S_TMSI, _asn_ctx), + asn_MAP_S_TMSI_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_S_TMSI = { + "S-TMSI", + "S-TMSI", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_S_TMSI_tags_1, + sizeof(asn_DEF_S_TMSI_tags_1) + /sizeof(asn_DEF_S_TMSI_tags_1[0]), /* 1 */ + asn_DEF_S_TMSI_tags_1, /* Same as above */ + sizeof(asn_DEF_S_TMSI_tags_1) + /sizeof(asn_DEF_S_TMSI_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_S_TMSI_1, + 2, /* Elements count */ + &asn_SPC_S_TMSI_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/S-TMSI.h b/lte/rrc/asn/S-TMSI.h new file mode 100644 index 000000000..6f97ad88d --- /dev/null +++ b/lte/rrc/asn/S-TMSI.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _S_TMSI_H_ +#define _S_TMSI_H_ + + +#include + +/* Including external dependencies */ +#include "MMEC.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* S-TMSI */ +typedef struct S_TMSI { + MMEC_t mmec; + BIT_STRING_t m_TMSI; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} S_TMSI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_S_TMSI; + +#ifdef __cplusplus +} +#endif + +#endif /* _S_TMSI_H_ */ +#include diff --git a/lte/rrc/asn/asn_application.h b/lte/rrc/asn/asn_application.h new file mode 100644 index 000000000..f40cd86ad --- /dev/null +++ b/lte/rrc/asn/asn_application.h @@ -0,0 +1,47 @@ +/*- + * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Application-level ASN.1 callbacks. + */ +#ifndef _ASN_APPLICATION_H_ +#define _ASN_APPLICATION_H_ + +#include "asn_system.h" /* for platform-dependent types */ +#include "asn_codecs.h" /* for ASN.1 codecs specifics */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Generic type of an application-defined callback to return various + * types of data to the application. + * EXPECTED RETURN VALUES: + * -1: Failed to consume bytes. Abort the mission. + * Non-negative return values indicate success, and ignored. + */ +typedef int (asn_app_consume_bytes_f)(const void *buffer, size_t size, + void *application_specific_key); + +/* + * A callback of this type is called whenever constraint validation fails + * on some ASN.1 type. See "constraints.h" for more details on constraint + * validation. + * This callback specifies a descriptor of the ASN.1 type which failed + * the constraint check, as well as human readable message on what + * particular constraint has failed. + */ +typedef void (asn_app_constraint_failed_f)(void *application_specific_key, + struct asn_TYPE_descriptor_s *type_descriptor_which_failed, + const void *structure_which_failed_ptr, + const char *error_message_format, ...) GCC_PRINTFLIKE(4, 5); + +#ifdef __cplusplus +} +#endif + +#include "constr_TYPE.h" /* for asn_TYPE_descriptor_t */ + +#endif /* _ASN_APPLICATION_H_ */ diff --git a/lte/rrc/asn/asn_codecs.h b/lte/rrc/asn/asn_codecs.h new file mode 100644 index 000000000..e5600142a --- /dev/null +++ b/lte/rrc/asn/asn_codecs.h @@ -0,0 +1,109 @@ +/*- + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _ASN_CODECS_H_ +#define _ASN_CODECS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * This structure defines a set of parameters that may be passed + * to every ASN.1 encoder or decoder function. + * WARNING: if max_stack_size member is set, and you are calling the + * function pointers of the asn_TYPE_descriptor_t directly, + * this structure must be ALLOCATED ON THE STACK! + * If you can't always satisfy this requirement, use ber_decode(), + * xer_decode() and uper_decode() functions instead. + */ +typedef struct asn_codec_ctx_s { + /* + * Limit the decoder routines to use no (much) more stack than a given + * number of bytes. Most of decoders are stack-based, and this + * would protect against stack overflows if the number of nested + * encodings is high. + * The OCTET STRING, BIT STRING and ANY BER decoders are heap-based, + * and are safe from this kind of overflow. + * A value from getrlimit(RLIMIT_STACK) may be used to initialize + * this variable. Be careful in multithreaded environments, as the + * stack size is rather limited. + */ + size_t max_stack_size; /* 0 disables stack bounds checking */ +} asn_codec_ctx_t; + +/* + * Type of the return value of the encoding functions (der_encode, xer_encode). + */ +typedef struct asn_enc_rval_s { + /* + * Number of bytes encoded. + * -1 indicates failure to encode the structure. + * In this case, the members below this one are meaningful. + */ + ssize_t encoded; + + /* + * Members meaningful when (encoded == -1), for post mortem analysis. + */ + + /* Type which cannot be encoded */ + struct asn_TYPE_descriptor_s *failed_type; + + /* Pointer to the structure of that type */ + void *structure_ptr; +} asn_enc_rval_t; +#define _ASN_ENCODE_FAILED do { \ + asn_enc_rval_t tmp_error; \ + tmp_error.encoded = -1; \ + tmp_error.failed_type = td; \ + tmp_error.structure_ptr = sptr; \ + ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define _ASN_ENCODED_OK(rval) do { \ + rval.structure_ptr = 0; \ + rval.failed_type = 0; \ + return rval; \ +} while(0) + +/* + * Type of the return value of the decoding functions (ber_decode, xer_decode) + * + * Please note that the number of consumed bytes is ALWAYS meaningful, + * even if code==RC_FAIL. This is to indicate the number of successfully + * decoded bytes, hence providing a possibility to fail with more diagnostics + * (i.e., print the offending remainder of the buffer). + */ +enum asn_dec_rval_code_e { + RC_OK, /* Decoded successfully */ + RC_WMORE, /* More data expected, call again */ + RC_FAIL /* Failure to decode data */ +}; +typedef struct asn_dec_rval_s { + enum asn_dec_rval_code_e code; /* Result code */ + size_t consumed; /* Number of bytes consumed */ +} asn_dec_rval_t; +#define _ASN_DECODE_FAILED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_FAIL; \ + tmp_error.consumed = 0; \ + ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + return tmp_error; \ +} while(0) +#define _ASN_DECODE_STARVED do { \ + asn_dec_rval_t tmp_error; \ + tmp_error.code = RC_WMORE; \ + tmp_error.consumed = 0; \ + return tmp_error; \ +} while(0) + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_CODECS_H_ */ diff --git a/lte/rrc/asn/asn_codecs_prim.c b/lte/rrc/asn/asn_codecs_prim.c new file mode 100644 index 000000000..8e604a492 --- /dev/null +++ b/lte/rrc/asn/asn_codecs_prim.c @@ -0,0 +1,312 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Decode an always-primitive type. + */ +asn_dec_rval_t +ber_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, + void **sptr, const void *buf_ptr, size_t size, int tag_mode) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; + asn_dec_rval_t rval; + ber_tlv_len_t length = 0; // =0 to avoid [incorrect] warning. + + /* + * If the structure is not there, allocate it. + */ + if(st == NULL) { + st = (ASN__PRIMITIVE_TYPE_t *)CALLOC(1, sizeof(*st)); + if(st == NULL) _ASN_DECODE_FAILED; + *sptr = (void *)st; + } + + ASN_DEBUG("Decoding %s as plain primitive (tm=%d)", + td->name, tag_mode); + + /* + * Check tags and extract value length. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("%s length is %d bytes", td->name, (int)length); + + /* + * Make sure we have this length. + */ + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + st->size = (int)length; + /* The following better be optimized away. */ + if(sizeof(st->size) != sizeof(length) + && (ber_tlv_len_t)st->size != length) { + st->size = 0; + _ASN_DECODE_FAILED; + } + + st->buf = (uint8_t *)MALLOC(length + 1); + if(!st->buf) { + st->size = 0; + _ASN_DECODE_FAILED; + } + + memcpy(st->buf, buf_ptr, length); + st->buf[length] = '\0'; /* Just in case */ + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s", + (long)rval.consumed, + (long)length, td->name); + + return rval; +} + +/* + * Encode an always-primitive type using DER. + */ +asn_enc_rval_t +der_encode_primitive(asn_TYPE_descriptor_t *td, void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval; + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + ASN_DEBUG("%s %s as a primitive type (tm=%d)", + cb?"Encoding":"Estimating", td->name, tag_mode); + + erval.encoded = der_write_tags(td, st->size, tag_mode, 0, tag, + cb, app_key); + ASN_DEBUG("%s wrote tags %d", td->name, (int)erval.encoded); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb && st->buf) { + if(cb(st->buf, st->size, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } else { + assert(st->buf || st->size == 0); + } + + erval.encoded += st->size; + _ASN_ENCODED_OK(erval); +} + +void +ASN__PRIMITIVE_TYPE_free(asn_TYPE_descriptor_t *td, void *sptr, + int contents_only) { + ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)sptr; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as a primitive type", td->name); + + if(st->buf) + FREEMEM(st->buf); + + if(!contents_only) + FREEMEM(st); +} + + +/* + * Local internal type passed around as an argument. + */ +struct xdp_arg_s { + asn_TYPE_descriptor_t *type_descriptor; + void *struct_key; + xer_primitive_body_decoder_f *prim_body_decoder; + int decoded_something; + int want_more; +}; + +/* + * Since some kinds of primitive values can be encoded using value-specific + * tags (, , etc), the primitive decoder must + * be supplied with such tags to parse them as needed. + */ +static int +xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + + /* + * The chunk_buf is guaranteed to start at '<'. + */ + assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); + + /* + * Decoding was performed once already. Prohibit doing it again. + */ + if(arg->decoded_something) + return -1; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return 0; + } + + return -1; +} + +static ssize_t +xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { + struct xdp_arg_s *arg = (struct xdp_arg_s *)key; + enum xer_pbd_rval bret; + size_t lead_wsp_size; + + if(arg->decoded_something) { + if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { + /* + * Example: + * "123 " + * ^- chunk_buf position. + */ + return chunk_size; + } + /* + * Decoding was done once already. Prohibit doing it again. + */ + return -1; + } + + if(!have_more) { + /* + * If we've received something like "1", we can't really + * tell whether it is really `1` or `123`, until we know + * that there is no more data coming. + * The have_more argument will be set to 1 once something + * like this is available to the caller of this callback: + * "1want_more = 1; + return -1; + } + + lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); + chunk_buf = (const char *)chunk_buf + lead_wsp_size; + chunk_size -= lead_wsp_size; + + bret = arg->prim_body_decoder(arg->type_descriptor, + arg->struct_key, chunk_buf, chunk_size); + switch(bret) { + case XPBD_SYSTEM_FAILURE: + case XPBD_DECODER_LIMIT: + case XPBD_BROKEN_ENCODING: + break; + case XPBD_BODY_CONSUMED: + /* Tag decoded successfully */ + arg->decoded_something = 1; + /* Fall through */ + case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ + return lead_wsp_size + chunk_size; + } + + return -1; +} + + +asn_dec_rval_t +xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, + void **sptr, + size_t struct_size, + const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder +) { + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + asn_struct_ctx_t s_ctx; + struct xdp_arg_s s_arg; + asn_dec_rval_t rc; + + /* + * Create the structure if does not exist. + */ + if(!*sptr) { + *sptr = CALLOC(1, struct_size); + if(!*sptr) _ASN_DECODE_FAILED; + } + + memset(&s_ctx, 0, sizeof(s_ctx)); + s_arg.type_descriptor = td; + s_arg.struct_key = *sptr; + s_arg.prim_body_decoder = prim_body_decoder; + s_arg.decoded_something = 0; + s_arg.want_more = 0; + + rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, + xml_tag, buf_ptr, size, + xer_decode__unexpected_tag, xer_decode__primitive_body); + switch(rc.code) { + case RC_OK: + if(!s_arg.decoded_something) { + char ch; + ASN_DEBUG("Primitive body is not recognized, " + "supplying empty one"); + /* + * Decoding opportunity has come and gone. + * Where's the result? + * Try to feed with empty body, see if it eats it. + */ + if(prim_body_decoder(s_arg.type_descriptor, + s_arg.struct_key, &ch, 0) + != XPBD_BODY_CONSUMED) { + /* + * This decoder does not like empty stuff. + */ + _ASN_DECODE_FAILED; + } + } + break; + case RC_WMORE: + /* + * Redo the whole thing later. + * We don't have a context to save intermediate parsing state. + */ + rc.consumed = 0; + break; + case RC_FAIL: + rc.consumed = 0; + if(s_arg.want_more) + rc.code = RC_WMORE; + else + _ASN_DECODE_FAILED; + break; + } + return rc; +} + diff --git a/lte/rrc/asn/asn_codecs_prim.h b/lte/rrc/asn/asn_codecs_prim.h new file mode 100644 index 000000000..0f683fdd0 --- /dev/null +++ b/lte/rrc/asn/asn_codecs_prim.h @@ -0,0 +1,53 @@ +/*- + * Copyright (c) 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_CODECS_PRIM_H +#define ASN_CODECS_PRIM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ASN__PRIMITIVE_TYPE_s { + uint8_t *buf; /* Buffer with consecutive primitive encoding bytes */ + int size; /* Size of the buffer */ +} ASN__PRIMITIVE_TYPE_t; /* Do not use this type directly! */ + +asn_struct_free_f ASN__PRIMITIVE_TYPE_free; +ber_type_decoder_f ber_decode_primitive; +der_type_encoder_f der_encode_primitive; + +/* + * A callback specification for the xer_decode_primitive() function below. + */ +enum xer_pbd_rval { + XPBD_SYSTEM_FAILURE, /* System failure (memory shortage, etc) */ + XPBD_DECODER_LIMIT, /* Hit some decoder limitation or deficiency */ + XPBD_BROKEN_ENCODING, /* Encoding of a primitive body is broken */ + XPBD_NOT_BODY_IGNORE, /* Not a body format, but safe to ignore */ + XPBD_BODY_CONSUMED /* Body is recognized and consumed */ +}; +typedef enum xer_pbd_rval (xer_primitive_body_decoder_f) + (asn_TYPE_descriptor_t *td, void *struct_ptr, + const void *chunk_buf, size_t chunk_size); + +/* + * Specific function to decode simple primitive types. + * Also see xer_decode_general() in xer_decoder.h + */ +asn_dec_rval_t xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *type_descriptor, + void **struct_ptr, size_t struct_size, + const char *opt_mname, + const void *buf_ptr, size_t size, + xer_primitive_body_decoder_f *prim_body_decoder +); + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_CODECS_PRIM_H */ diff --git a/lte/rrc/asn/asn_internal.h b/lte/rrc/asn/asn_internal.h new file mode 100644 index 000000000..7e0f71be0 --- /dev/null +++ b/lte/rrc/asn/asn_internal.h @@ -0,0 +1,126 @@ +/*- + * Copyright (c) 2003, 2004, 2005, 2007 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Declarations internally useful for the ASN.1 support code. + */ +#ifndef _ASN_INTERNAL_H_ +#define _ASN_INTERNAL_H_ + +#include "asn_application.h" /* Application-visible API */ + +#ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ +#include /* for assert() macro */ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Environment version might be used to avoid running with the old library */ +#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +int get_asn1c_environment_version(void); /* Run-time version */ + +#define CALLOC(nmemb, size) calloc(nmemb, size) +#define MALLOC(size) malloc(size) +#define REALLOC(oldptr, size) realloc(oldptr, size) +#define FREEMEM(ptr) free(ptr) + +#define asn_debug_indent 0 +#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) + +/* + * A macro for debugging the ASN.1 internals. + * You may enable or override it. + */ +#ifndef ASN_DEBUG /* If debugging code is not defined elsewhere... */ +#if EMIT_ASN_DEBUG == 1 /* And it was asked to emit this code... */ +#ifdef __GNUC__ +#ifdef ASN_THREAD_SAFE +/* Thread safety requires sacrifice in output indentation: + * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#else /* !ASN_THREAD_SAFE */ +#undef ASN_DEBUG_INDENT_ADD +#undef asn_debug_indent +int asn_debug_indent; +#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +#endif /* ASN_THREAD_SAFE */ +#define ASN_DEBUG(fmt, args...) do { \ + int adi = asn_debug_indent; \ + while(adi--) fprintf(stderr, " "); \ + fprintf(stderr, fmt, ##args); \ + fprintf(stderr, " (%s:%d)\n", \ + __FILE__, __LINE__); \ + } while(0) +#else /* !__GNUC__ */ +void ASN_DEBUG_f(const char *fmt, ...); +#define ASN_DEBUG ASN_DEBUG_f +#endif /* __GNUC__ */ +#else /* EMIT_ASN_DEBUG != 1 */ +static inline void ASN_DEBUG(const char *fmt, ...) { (void)fmt; } +#endif /* EMIT_ASN_DEBUG */ +#endif /* ASN_DEBUG */ + +/* + * Invoke the application-supplied callback and fail, if something is wrong. + */ +#define __ASN_E_cbc(buf, size) (cb((buf), (size), app_key) < 0) +#define _ASN_E_CALLBACK(foo) do { \ + if(foo) goto cb_failed; \ + } while(0) +#define _ASN_CALLBACK(buf, size) \ + _ASN_E_CALLBACK(__ASN_E_cbc(buf, size)) +#define _ASN_CALLBACK2(buf1, size1, buf2, size2) \ + _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) || __ASN_E_cbc(buf2, size2)) +#define _ASN_CALLBACK3(buf1, size1, buf2, size2, buf3, size3) \ + _ASN_E_CALLBACK(__ASN_E_cbc(buf1, size1) \ + || __ASN_E_cbc(buf2, size2) \ + || __ASN_E_cbc(buf3, size3)) + +#define _i_ASN_TEXT_INDENT(nl, level) do { \ + int __level = (level); \ + int __nl = ((nl) != 0); \ + int __i; \ + if(__nl) _ASN_CALLBACK("\n", 1); \ + if(__level < 0) __level = 0; \ + for(__i = 0; __i < __level; __i++) \ + _ASN_CALLBACK(" ", 4); \ + er.encoded += __nl + 4 * __level; \ +} while(0) + +#define _i_INDENT(nl) do { \ + int __i; \ + if((nl) && cb("\n", 1, app_key) < 0) return -1; \ + for(__i = 0; __i < ilevel; __i++) \ + if(cb(" ", 4, app_key) < 0) return -1; \ +} while(0) + +/* + * Check stack against overflow, if limit is set. + */ +#define _ASN_DEFAULT_STACK_MAX (30000) +static inline int +_ASN_STACK_OVERFLOW_CHECK(asn_codec_ctx_t *ctx) { + if(ctx && ctx->max_stack_size) { + + /* ctx MUST be allocated on the stack */ + ptrdiff_t usedstack = ((char *)ctx - (char *)&ctx); + if(usedstack > 0) usedstack = -usedstack; /* grows up! */ + + /* double negative required to avoid int wrap-around */ + if(usedstack < -(ptrdiff_t)ctx->max_stack_size) { + ASN_DEBUG("Stack limit %ld reached", + (long)ctx->max_stack_size); + return -1; + } + } + return 0; +} + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN_INTERNAL_H_ */ diff --git a/lte/rrc/asn/asn_system.h b/lte/rrc/asn/asn_system.h new file mode 100644 index 000000000..e420ad2da --- /dev/null +++ b/lte/rrc/asn/asn_system.h @@ -0,0 +1,129 @@ +/*- + * Copyright (c) 2003, 2004, 2007 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * Miscellaneous system-dependent types. + */ +#ifndef _ASN_SYSTEM_H_ +#define _ASN_SYSTEM_H_ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include /* For snprintf(3) */ +#include /* For *alloc(3) */ +#include /* For memcpy(3) */ +#include /* For size_t */ +#include /* For LONG_MAX */ +#include /* For va_start */ +#include /* for offsetof and ptrdiff_t */ + +#ifdef _WIN32 + +#include +#define snprintf _snprintf +#define vsnprintf _vsnprintf + +/* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ +#define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ + | (((l) << 8) & 0xff0000) \ + | (((l) >> 8) & 0xff00) \ + | ((l >> 24) & 0xff)) + +#ifdef _MSC_VER /* MSVS.Net */ +#ifndef __cplusplus +#define inline __inline +#endif +#ifndef ASSUMESTDTYPES /* Standard types have been defined elsewhere */ +#define ssize_t SSIZE_T +typedef char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +#endif /* ASSUMESTDTYPES */ +#define WIN32_LEAN_AND_MEAN +#include +#include +#define isnan _isnan +#define finite _finite +#define copysign _copysign +#define ilogb _logb +#else /* !_MSC_VER */ +#include +#endif /* _MSC_VER */ + +#else /* !_WIN32 */ + +#if defined(__vxworks) +#include +#else /* !defined(__vxworks) */ + +#include /* C99 specifies this file */ +/* + * 1. Earlier FreeBSD version didn't have , + * but was present. + * 2. Sun Solaris requires for alloca(3), + * but does not have . + */ +#if (!defined(__FreeBSD__) || !defined(_SYS_INTTYPES_H_)) +#if defined(sun) +#include /* For alloca(3) */ +#include /* for finite(3) */ +#elif defined(__hpux) +#ifdef __GNUC__ +#include /* For alloca(3) */ +#else /* !__GNUC__ */ +#define inline +#endif /* __GNUC__ */ +#else +#include /* SUSv2+ and C99 specify this file, for uintXX_t */ +#endif /* defined(sun) */ +#endif + +#include /* for ntohl() */ +#define sys_ntohl(foo) ntohl(foo) + +#endif /* defined(__vxworks) */ + +#endif /* _WIN32 */ + +#if __GNUC__ >= 3 +#ifndef GCC_PRINTFLIKE +#define GCC_PRINTFLIKE(fmt,var) __attribute__((format(printf,fmt,var))) +#endif +#ifndef GCC_NOTUSED +#define GCC_NOTUSED __attribute__((unused)) +#endif +#else +#ifndef GCC_PRINTFLIKE +#define GCC_PRINTFLIKE(fmt,var) /* nothing */ +#endif +#ifndef GCC_NOTUSED +#define GCC_NOTUSED +#endif +#endif + +/* Figure out if thread safety is requested */ +#if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT)) +#define ASN_THREAD_SAFE +#endif /* Thread safety */ + +#ifndef offsetof /* If not defined by */ +#define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) +#endif /* offsetof */ + +#ifndef MIN /* Suitable for comparing primitive types (integers) */ +#if defined(__GNUC__) +#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ + ((_a)<(_b)?(_a):(_b)); }) +#else /* !__GNUC__ */ +#define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ +#endif /* __GNUC__ */ +#endif /* MIN */ + +#endif /* _ASN_SYSTEM_H_ */ diff --git a/lte/rrc/asn/ber_decoder.c b/lte/rrc/asn/ber_decoder.c new file mode 100644 index 000000000..0f9940090 --- /dev/null +++ b/lte/rrc/asn/ber_decoder.c @@ -0,0 +1,283 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) +#undef RETURN +#define RETURN(_code) do { \ + asn_dec_rval_t rval; \ + rval.code = _code; \ + if(opt_ctx) opt_ctx->step = step; /* Save context */ \ + if(_code == RC_OK || opt_ctx) \ + rval.consumed = consumed_myself; \ + else \ + rval.consumed = 0; /* Context-free */ \ + return rval; \ + } while(0) + +/* + * The BER decoder of any type. + */ +asn_dec_rval_t +ber_decode(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *type_descriptor, + void **struct_ptr, const void *ptr, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return type_descriptor->ber_decoder(opt_codec_ctx, type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + ptr, size, /* Buffer and its size */ + 0 /* Default tag mode is 0 */ + ); +} + +/* + * Check the set of >> tags matches the definition. + */ +asn_dec_rval_t +ber_check_tags(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, asn_struct_ctx_t *opt_ctx, + const void *ptr, size_t size, int tag_mode, int last_tag_form, + ber_tlv_len_t *last_length, int *opt_tlv_form) { + ssize_t consumed_myself = 0; + ssize_t tag_len; + ssize_t len_len; + ber_tlv_tag_t tlv_tag; + ber_tlv_len_t tlv_len; + ber_tlv_len_t limit_len = -1; + int expect_00_terminators = 0; + int tlv_constr = -1; /* If CHOICE, opt_tlv_form is not given */ + int step = opt_ctx ? opt_ctx->step : 0; /* Where we left previously */ + int tagno; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) + RETURN(RC_FAIL); + + /* + * So what does all this implicit skip stuff mean? + * Imagine two types, + * A ::= [5] IMPLICIT T + * B ::= [2] EXPLICIT T + * Where T is defined as + * T ::= [4] IMPLICIT SEQUENCE { ... } + * + * Let's say, we are starting to decode type A, given the + * following TLV stream: <5> <0>. What does this mean? + * It means that the type A contains type T which is, + * in turn, empty. + * Remember though, that we are still in A. We cannot + * just pass control to the type T decoder. Why? Because + * the type T decoder expects <4> <0>, not <5> <0>. + * So, we must make sure we are going to receive <5> while + * still in A, then pass control to the T decoder, indicating + * that the tag <4> was implicitly skipped. The decoder of T + * hence will be prepared to treat <4> as valid tag, and decode + * it appropriately. + */ + + tagno = step /* Continuing where left previously */ + + (tag_mode==1?-1:0) + ; + ASN_DEBUG("ber_check_tags(%s, size=%ld, tm=%d, step=%d, tagno=%d)", + td->name, (long)size, tag_mode, step, tagno); + /* assert(td->tags_count >= 1) May not be the case for CHOICE or ANY */ + + if(tag_mode == 0 && tagno == td->tags_count) { + /* + * This must be the _untagged_ ANY type, + * which outermost tag isn't known in advance. + * Fetch the tag and length separately. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + ASN_DEBUG("Advancing %ld in ANY case", + (long)(tag_len + len_len)); + ADVANCE(tag_len + len_len); + } else { + assert(tagno < td->tags_count); /* At least one loop */ + } + for((void)tagno; tagno < td->tags_count; tagno++, step++) { + + /* + * Fetch and process T from TLV. + */ + tag_len = ber_fetch_tag(ptr, size, &tlv_tag); + ASN_DEBUG("Fetching tag from {%p,%ld}: " + "len %ld, step %d, tagno %d got %s", + ptr, (long)size, + (long)tag_len, step, tagno, + ber_tlv_tag_string(tlv_tag)); + switch(tag_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + tlv_constr = BER_TLV_CONSTRUCTED(ptr); + + /* + * If {I}, don't check anything. + * If {I,B,C}, check B and C unless we're at I. + */ + if(tag_mode != 0 && step == 0) { + /* + * We don't expect tag to match here. + * It's just because we don't know how the tag + * is supposed to look like. + */ + } else { + assert(tagno >= 0); /* Guaranteed by the code above */ + if(tlv_tag != td->tags[tagno]) { + /* + * Unexpected tag. Too bad. + */ + ASN_DEBUG("Expected: %s, " + "expectation failed (tn=%d, tm=%d)", + ber_tlv_tag_string(td->tags[tagno]), + tagno, tag_mode + ); + RETURN(RC_FAIL); + } + } + + /* + * Attention: if there are more tags expected, + * ensure that the current tag is presented + * in constructed form (it contains other tags!). + * If this one is the last one, check that the tag form + * matches the one given in descriptor. + */ + if(tagno < (td->tags_count - 1)) { + if(tlv_constr == 0) { + ASN_DEBUG("tlv_constr = %d, expfail", + tlv_constr); + RETURN(RC_FAIL); + } + } else { + if(last_tag_form != tlv_constr + && last_tag_form != -1) { + ASN_DEBUG("last_tag_form %d != %d", + last_tag_form, tlv_constr); + RETURN(RC_FAIL); + } + } + + /* + * Fetch and process L from TLV. + */ + len_len = ber_fetch_length(tlv_constr, + (const char *)ptr + tag_len, size - tag_len, &tlv_len); + ASN_DEBUG("Fetching len = %ld", (long)len_len); + switch(len_len) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + } + + /* + * FIXME + * As of today, the chain of tags + * must either contain several indefinite length TLVs, + * or several definite length ones. + * No mixing is allowed. + */ + if(tlv_len == -1) { + /* + * Indefinite length. + */ + if(limit_len == -1) { + expect_00_terminators++; + } else { + ASN_DEBUG("Unexpected indefinite length " + "in a chain of definite lengths"); + RETURN(RC_FAIL); + } + ADVANCE(tag_len + len_len); + continue; + } else { + if(expect_00_terminators) { + ASN_DEBUG("Unexpected definite length " + "in a chain of indefinite lengths"); + RETURN(RC_FAIL); + } + } + + /* + * Check that multiple TLVs specify ever decreasing length, + * which is consistent. + */ + if(limit_len == -1) { + limit_len = tlv_len + tag_len + len_len; + if(limit_len < 0) { + /* Too great tlv_len value? */ + RETURN(RC_FAIL); + } + } else if(limit_len != tlv_len + tag_len + len_len) { + /* + * Inner TLV specifies length which is inconsistent + * with the outer TLV's length value. + */ + ASN_DEBUG("Outer TLV is %ld and inner is %ld", + (long)limit_len, (long)tlv_len); + RETURN(RC_FAIL); + } + + ADVANCE(tag_len + len_len); + + limit_len -= (tag_len + len_len); + if((ssize_t)size > limit_len) { + /* + * Make sure that we won't consume more bytes + * from the parent frame than the inferred limit. + */ + size = limit_len; + } + } + + if(opt_tlv_form) + *opt_tlv_form = tlv_constr; + if(expect_00_terminators) + *last_length = -expect_00_terminators; + else + *last_length = tlv_len; + + RETURN(RC_OK); +} diff --git a/lte/rrc/asn/ber_decoder.h b/lte/rrc/asn/ber_decoder.h new file mode 100644 index 000000000..9fe2e895d --- /dev/null +++ b/lte/rrc/asn/ber_decoder.h @@ -0,0 +1,64 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_DECODER_H_ +#define _BER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_codec_ctx_s; /* Forward declaration */ + +/* + * The BER decoder of any type. + * This function may be invoked directly from the application. + * The der_encode() function (der_encoder.h) is an opposite to ber_decode(). + */ +asn_dec_rval_t ber_decode(struct asn_codec_ctx_s *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of that buffer */ + ); + +/* + * Type of generic function which decodes the byte stream into the structure. + */ +typedef asn_dec_rval_t (ber_type_decoder_f)( + struct asn_codec_ctx_s *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, const void *buf_ptr, size_t size, + int tag_mode); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Check that all tags correspond to the type definition (as given in head). + * On return, last_length would contain either a non-negative length of the + * value part of the last TLV, or the negative number of expected + * "end of content" sequences. The number may only be negative if the + * head->last_tag_form is non-zero. + */ +asn_dec_rval_t ber_check_tags( + struct asn_codec_ctx_s *opt_codec_ctx, /* codec options */ + struct asn_TYPE_descriptor_s *type_descriptor, + asn_struct_ctx_t *opt_ctx, /* saved decoding context */ + const void *ptr, size_t size, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {-1,0:1}: any, primitive, constr */ + ber_tlv_len_t *last_length, + int *opt_tlv_form /* optional tag form */ + ); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_DECODER_H_ */ diff --git a/lte/rrc/asn/ber_tlv_length.c b/lte/rrc/asn/ber_tlv_length.c new file mode 100644 index 000000000..b87e75e04 --- /dev/null +++ b/lte/rrc/asn/ber_tlv_length.c @@ -0,0 +1,178 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r) { + const uint8_t *buf = (const uint8_t *)bufptr; + unsigned oct; + + if(size == 0) + return 0; /* Want more */ + + oct = *(const uint8_t *)buf; + if((oct & 0x80) == 0) { + /* + * Short definite length. + */ + *len_r = oct; /* & 0x7F */ + return 1; + } else { + ber_tlv_len_t len; + size_t skipped; + + if(_is_constructed && oct == 0x80) { + *len_r = -1; /* Indefinite length */ + return 1; + } + + if(oct == 0xff) { + /* Reserved in standard for future use. */ + return -1; + } + + oct &= 0x7F; /* Leave only the 7 LS bits */ + for(len = 0, buf++, skipped = 1; + oct && (++skipped <= size); buf++, oct--) { + + len = (len << 8) | *buf; + if(len < 0 + || (len >> ((8 * sizeof(len)) - 8) && oct > 1)) { + /* + * Too large length value. + */ + return -1; + } + } + + if(oct == 0) { + ber_tlv_len_t lenplusepsilon = (size_t)len + 1024; + /* + * Here length may be very close or equal to 2G. + * However, the arithmetics used in some decoders + * may add some (small) quantities to the length, + * to check the resulting value against some limits. + * This may result in integer wrap-around, which + * we try to avoid by checking it earlier here. + */ + if(lenplusepsilon < 0) { + /* Too large length value */ + return -1; + } + + *len_r = len; + return skipped; + } + + return 0; /* Want more */ + } + +} + +ssize_t +ber_skip_length(asn_codec_ctx_t *opt_codec_ctx, + int _is_constructed, const void *ptr, size_t size) { + ber_tlv_len_t vlen; /* Length of V in TLV */ + ssize_t tl; /* Length of L in TLV */ + ssize_t ll; /* Length of L in TLV */ + size_t skip; + + /* + * Make sure we didn't exceed the maximum stack size. + */ + if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) + return -1; + + /* + * Determine the size of L in TLV. + */ + ll = ber_fetch_length(_is_constructed, ptr, size, &vlen); + if(ll <= 0) return ll; + + /* + * Definite length. + */ + if(vlen >= 0) { + skip = ll + vlen; + if(skip > size) + return 0; /* Want more */ + return skip; + } + + /* + * Indefinite length! + */ + ASN_DEBUG("Skipping indefinite length"); + for(skip = ll, ptr = ((const char *)ptr) + ll, size -= ll;;) { + ber_tlv_tag_t tag; + + /* Fetch the tag */ + tl = ber_fetch_tag(ptr, size, &tag); + if(tl <= 0) return tl; + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + ((const char *)ptr) + tl, size - tl); + if(ll <= 0) return ll; + + skip += tl + ll; + + /* + * This may be the end of the indefinite length structure, + * two consecutive 0 octets. + * Check if it is true. + */ + if(((const uint8_t *)ptr)[0] == 0 + && ((const uint8_t *)ptr)[1] == 0) + return skip; + + ptr = ((const char *)ptr) + tl + ll; + size -= tl + ll; + } + + /* UNREACHABLE */ +} + +size_t +der_tlv_length_serialize(ber_tlv_len_t len, void *bufp, size_t size) { + size_t required_size; /* Size of len encoding */ + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t i; + + if(len <= 127) { + /* Encoded in 1 octet */ + if(size) *buf = (uint8_t)len; + return 1; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 8; i < 8 * sizeof(len); i += 8) { + if(len >> i) + required_size++; + else + break; + } + + if(size <= required_size) + return required_size + 1; + + *buf++ = (uint8_t)(0x80 | required_size); /* Length of the encoding */ + + /* + * Produce the len encoding, space permitting. + */ + end = buf + required_size; + for(i -= 8; buf < end; i -= 8, buf++) + *buf = (uint8_t)(len >> i); + + return required_size + 1; +} + diff --git a/lte/rrc/asn/ber_tlv_length.h b/lte/rrc/asn/ber_tlv_length.h new file mode 100644 index 000000000..349680224 --- /dev/null +++ b/lte/rrc/asn/ber_tlv_length.h @@ -0,0 +1,50 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_LENGTH_H_ +#define _BER_TLV_LENGTH_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef ssize_t ber_tlv_len_t; + +/* + * This function tries to fetch the length of the BER TLV value and place it + * in *len_r. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering length. + * >0: Number of bytes used from bufptr. + * On return with >0, len_r is constrained as -1..MAX, where -1 mean + * that the value is of indefinite length. + */ +ssize_t ber_fetch_length(int _is_constructed, const void *bufptr, size_t size, + ber_tlv_len_t *len_r); + +/* + * This function expects bufptr to be positioned over L in TLV. + * It returns number of bytes occupied by L and V together, suitable + * for skipping. The function properly handles indefinite length. + * RETURN VALUES: + * Standard {-1,0,>0} convention. + */ +ssize_t ber_skip_length( + struct asn_codec_ctx_s *opt_codec_ctx, /* optional context */ + int _is_constructed, const void *bufptr, size_t size); + +/* + * This function serializes the length (L from TLV) in DER format. + * It always returns number of bytes necessary to represent the length, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t der_tlv_length_serialize(ber_tlv_len_t len, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_LENGTH_H_ */ diff --git a/lte/rrc/asn/ber_tlv_tag.c b/lte/rrc/asn/ber_tlv_tag.c new file mode 100644 index 000000000..42708760e --- /dev/null +++ b/lte/rrc/asn/ber_tlv_tag.c @@ -0,0 +1,144 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +ssize_t +ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { + ber_tlv_tag_t val; + ber_tlv_tag_t tclass; + size_t skipped; + + if(size == 0) + return 0; + + val = *(const uint8_t *)ptr; + tclass = (val >> 6); + if((val &= 0x1F) != 0x1F) { + /* + * Simple form: everything encoded in a single octet. + * Tag Class is encoded using two least significant bits. + */ + *tag_r = (val << 2) | tclass; + return 1; + } + + /* + * Each octet contains 7 bits of useful information. + * The MSB is 0 if it is the last octet of the tag. + */ + for(val = 0, ptr = ((const char *)ptr) + 1, skipped = 2; + skipped <= size; + ptr = ((const char *)ptr) + 1, skipped++) { + unsigned int oct = *(const uint8_t *)ptr; + if(oct & 0x80) { + val = (val << 7) | (oct & 0x7F); + /* + * Make sure there are at least 9 bits spare + * at the MS side of a value. + */ + if(val >> ((8 * sizeof(val)) - 9)) { + /* + * We would not be able to accomodate + * any more tag bits. + */ + return -1; + } + } else { + val = (val << 7) | oct; + *tag_r = (val << 2) | tclass; + return skipped; + } + } + + return 0; /* Want more */ +} + + +ssize_t +ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { + char buf[sizeof("[APPLICATION ]") + 32]; + ssize_t ret; + + ret = ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + if(ret >= (ssize_t)sizeof(buf) || ret < 2) { + errno = EPERM; + return -1; + } + + return fwrite(buf, 1, ret, f); +} + +ssize_t +ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t size) { + char *type = 0; + int ret; + + switch(tag & 0x3) { + case ASN_TAG_CLASS_UNIVERSAL: type = "UNIVERSAL "; break; + case ASN_TAG_CLASS_APPLICATION: type = "APPLICATION "; break; + case ASN_TAG_CLASS_CONTEXT: type = ""; break; + case ASN_TAG_CLASS_PRIVATE: type = "PRIVATE "; break; + } + + ret = snprintf(buf, size, "[%s%u]", type, ((unsigned)tag) >> 2); + if(ret <= 0 && size) buf[0] = '\0'; /* against broken libc's */ + + return ret; +} + +char * +ber_tlv_tag_string(ber_tlv_tag_t tag) { + static char buf[sizeof("[APPLICATION ]") + 32]; + + (void)ber_tlv_tag_snprint(tag, buf, sizeof(buf)); + + return buf; +} + + +size_t +ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufp, size_t size) { + int tclass = BER_TAG_CLASS(tag); + ber_tlv_tag_t tval = BER_TAG_VALUE(tag); + uint8_t *buf = (uint8_t *)bufp; + uint8_t *end; + size_t required_size; + size_t i; + + if(tval <= 30) { + /* Encoded in 1 octet */ + if(size) buf[0] = (tclass << 6) | tval; + return 1; + } else if(size) { + *buf++ = (tclass << 6) | 0x1F; + size--; + } + + /* + * Compute the size of the subsequent bytes. + */ + for(required_size = 1, i = 7; i < 8 * sizeof(tval); i += 7) { + if(tval >> i) + required_size++; + else + break; + } + + if(size < required_size) + return required_size + 1; + + /* + * Fill in the buffer, space permitting. + */ + end = buf + required_size - 1; + for(i -= 7; buf < end; i -= 7, buf++) + *buf = 0x80 | ((tval >> i) & 0x7F); + *buf = (tval & 0x7F); /* Last octet without high bit */ + + return required_size + 1; +} + diff --git a/lte/rrc/asn/ber_tlv_tag.h b/lte/rrc/asn/ber_tlv_tag.h new file mode 100644 index 000000000..60e866861 --- /dev/null +++ b/lte/rrc/asn/ber_tlv_tag.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BER_TLV_TAG_H_ +#define _BER_TLV_TAG_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum asn_tag_class { + ASN_TAG_CLASS_UNIVERSAL = 0, /* 0b00 */ + ASN_TAG_CLASS_APPLICATION = 1, /* 0b01 */ + ASN_TAG_CLASS_CONTEXT = 2, /* 0b10 */ + ASN_TAG_CLASS_PRIVATE = 3 /* 0b11 */ +}; +typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */ + +/* + * Tag class is encoded together with tag value for optimization purposes. + */ +#define BER_TAG_CLASS(tag) ((tag) & 0x3) +#define BER_TAG_VALUE(tag) ((tag) >> 2) +#define BER_TLV_CONSTRUCTED(tagptr) (((*(const uint8_t *)tagptr)&0x20)?1:0) + +#define BER_TAGS_EQUAL(tag1, tag2) ((tag1) == (tag2)) + +/* + * Several functions for printing the TAG in the canonical form + * (i.e. "[PRIVATE 0]"). + * Return values correspond to their libc counterparts (if any). + */ +ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen); +ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *); +char *ber_tlv_tag_string(ber_tlv_tag_t tag); + + +/* + * This function tries to fetch the tag from the input stream. + * RETURN VALUES: + * 0: More data expected than bufptr contains. + * -1: Fatal error deciphering tag. + * >0: Number of bytes used from bufptr. tag_r will contain the tag. + */ +ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r); + +/* + * This function serializes the tag (T from TLV) in BER format. + * It always returns number of bytes necessary to represent the tag, + * it is a caller's responsibility to check the return value + * against the supplied buffer's size. + */ +size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size); + +#ifdef __cplusplus +} +#endif + +#endif /* _BER_TLV_TAG_H_ */ diff --git a/lte/rrc/asn/constr_CHOICE.c b/lte/rrc/asn/constr_CHOICE.c new file mode 100644 index 000000000..f366f7540 --- /dev/null +++ b/lte/rrc/asn/constr_CHOICE.c @@ -0,0 +1,1113 @@ +/* + * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * See the definitions. + */ +static int _fetch_present_idx(const void *struct_ptr, int off, int size); +static void _set_present_idx(void *sptr, int offset, int size, int pres); + +/* + * Tags are canonically sorted in the tag to member table. + */ +static int +_search4tag(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) + return 0; + else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + +/* + * The decoder of the CHOICE type. + */ +asn_dec_rval_t +CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + ssize_t tag_len; /* Length of TLV's T */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as CHOICE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + if(tag_mode || td->tags_count) { + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, -1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) { + /* ?Substracted below! */ + ctx->left += rval.consumed; + } + ADVANCE(rval.consumed); + } else { + ctx->left = -1; + } + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("In %s CHOICE tag length %d", td->name, (int)tag_len); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + do { + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + + key.el_tag = tlv_tag; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _search4tag); + if(t2m) { + /* + * Found the element corresponding to the tag. + */ + NEXT_PHASE(ctx); + ctx->step = t2m->el_no; + break; + } else if(specs->ext_start == -1) { + ASN_DEBUG("Unexpected tag %s " + "in non-extensible CHOICE %s", + ber_tlv_tag_string(tlv_tag), td->name); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + + ASN_DEBUG("Skipping unknown tag %s", + ber_tlv_tag_string(tlv_tag)); + + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + RETURN(RC_OK); + } + } while(0); + + case 2: + /* + * PHASE 2. + * Read in the element. + */ + do { + asn_TYPE_member_t *elm;/* CHOICE's element */ + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &elements[ctx->step]; + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + /* Set presence to be able to free it properly at any time */ + _set_present_idx(st, specs->pres_offset, + specs->pres_size, ctx->step + 1); + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->ber_decoder(opt_codec_ctx, elm->type, + memb_ptr2, ptr, LEFT, elm->tag_mode); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + RETURN(RC_FAIL); + case RC_FAIL: /* Fatal error */ + RETURN(rval.code); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } while(0); + + NEXT_PHASE(ctx); + + /* Fall through */ + case 3: + ASN_DEBUG("CHOICE %s Leftover: %ld, size = %ld, tm=%d, tc=%d", + td->name, (long)ctx->left, (long)size, + tag_mode, td->tags_count); + + if(ctx->left > 0) { + /* + * The type must be fully decoded + * by the CHOICE member-specific decoder. + */ + RETURN(RC_FAIL); + } + + if(ctx->left == -1 + && !(tag_mode || td->tags_count)) { + /* + * This is an untagged CHOICE. + * It doesn't contain nothing + * except for the member itself, including all its tags. + * The decoding is completed. + */ + NEXT_PHASE(ctx); + break; + } + + /* + * Read in the "end of data chunks"'s. + */ + while(ctx->left < 0) { + ssize_t tl; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * Expected <0><0>... + */ + if(((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + continue; + } + } else { + ASN_DEBUG("Unexpected continuation in %s", + td->name); + RETURN(RC_FAIL); + } + + /* UNREACHABLE */ + } + + NEXT_PHASE(ctx); + case 4: + /* No meaningful work here */ + break; + } + + RETURN(RC_OK); +} + +asn_enc_rval_t +CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE element */ + asn_enc_rval_t erval; + void *memb_ptr; + size_t computed_size = 0; + int present; + + if(!sptr) _ASN_ENCODE_FAILED; + + ASN_DEBUG("%s %s as CHOICE", + cb?"Encoding":"Estimating", td->name); + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || present > td->elements_count) { + if(present == 0 && td->elements_count == 0) { + /* The CHOICE is empty?! */ + erval.encoded = 0; + _ASN_ENCODED_OK(erval); + } + _ASN_ENCODE_FAILED; + } + + /* + * Seek over the present member of the structure. + */ + elm = &td->elements[present-1]; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr == 0) { + if(elm->optional) { + erval.encoded = 0; + _ASN_ENCODED_OK(erval); + } + /* Mandatory element absent */ + _ASN_ENCODE_FAILED; + } + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + } + + /* + * If the CHOICE itself is tagged EXPLICIT: + * T ::= [2] EXPLICIT CHOICE { ... } + * Then emit the appropriate tags. + */ + if(tag_mode == 1 || td->tags_count) { + /* + * For this, we need to pre-compute the member. + */ + ssize_t ret; + + /* Encode member with its tag */ + erval = elm->type->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + + /* Encode CHOICE with parent or my own tag */ + ret = der_write_tags(td, erval.encoded, tag_mode, 1, tag, + cb, app_key); + if(ret == -1) + _ASN_ENCODE_FAILED; + computed_size += ret; + } + + /* + * Encode the single underlying member. + */ + erval = elm->type->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, cb, app_key); + if(erval.encoded == -1) + return erval; + + ASN_DEBUG("Encoded CHOICE member in %ld bytes (+%ld)", + (long)erval.encoded, (long)computed_size); + + erval.encoded += computed_size; + + return erval; +} + +ber_tlv_tag_t +CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + int present; + + assert(tag_mode == 0); (void)tag_mode; + assert(tag == 0); (void)tag; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + if(present > 0 || present <= td->elements_count) { + const asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *) + ((const char *)ptr + elm->memb_offset); + } else { + memb_ptr = (const void *) + ((const char *)ptr + elm->memb_offset); + } + + return asn_TYPE_outmost_tag(elm->type, memb_ptr, + elm->tag_mode, elm->tag); + } else { + return (ber_tlv_tag_t)-1; + } +} + +int +CHOICE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + int present; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + return 0; + _ASN_CTFAIL(app_key, td, sptr, + "%s: mandatory CHOICE element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->memb_constraints) { + return elm->memb_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + } else { + int ret = elm->type->check_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + /* + * Cannot inherit it eralier: + * need to make sure we get the updated version. + */ + elm->memb_constraints = elm->type->check_constraints; + return ret; + } + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: no CHOICE element given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +CHOICE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value of a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + int edx; /* Element index */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + if(ctx->phase == 0 && !*xml_tag) + ctx->phase = 1; /* Skip the outer tag checking phase */ + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Only waiting for closing tag. + * Phase 4: Skipping unknown extensions. + * Phase 5: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 4;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + + /* + * Go inside the member. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Start/Continue decoding the inner member */ + tmprval = elm->type->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + ASN_DEBUG("XER/CHOICE: itdf: [%s] code=%d", + elm->type->name, tmprval.code); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + assert(_fetch_present_idx(st, + specs->pres_offset, specs->pres_size) == 0); + /* Record what we've got */ + _set_present_idx(st, + specs->pres_offset, specs->pres_size, edx + 1); + ctx->phase = 3; + /* Fall through */ + } + + /* No need to wait for closing tag; special mode. */ + if(ctx->phase == 3 && !*xml_tag) { + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, &ch_type); + switch(ch_size) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + default: + switch(ch_type) { + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/CHOICE checked [%c%c%c%c] vs [%s], tcv=%d", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + xml_tag, tcv); + + /* Skip the extensions section */ + if(ctx->phase == 4) { + ASN_DEBUG("skip_unknown(%d, %ld)", + tcv, (long)ctx->left); + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 5; + RETURN(RC_FAIL); + continue; + case 1: + ctx->phase = 3; + /* Fall through */ + case 0: + XER_ADVANCE(ch_size); + continue; + case 2: + ctx->phase = 3; + break; + } + } + + switch(tcv) { + case XCT_BOTH: + break; /* No CHOICE? */ + case XCT_CLOSING: + if(ctx->phase != 3) + break; + XER_ADVANCE(ch_size); + ctx->phase = 5; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + if(ctx->phase != 1) + break; /* Really unexpected */ + + /* + * Search which inner member corresponds to this tag. + */ + for(edx = 0; edx < td->elements_count; edx++) { + elm = &td->elements[edx]; + tcv = xer_check_tag(buf_ptr,ch_size,elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + edx = td->elements_count; + break; /* Phase out */ + } + break; + } + if(edx != td->elements_count) + continue; + + /* It is expected extension */ + if(specs->ext_start != -1) { + ASN_DEBUG("Got anticipated extension"); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + ctx->phase = 3; /* Terminating */ + } else { + ctx->left = 1; + ctx->phase = 4; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag [%c%c%c%c] in CHOICE [%s]" + " (ph=%d, tag=%s)", + ch_size>0?((const uint8_t *)buf_ptr)[0]:'?', + ch_size>1?((const uint8_t *)buf_ptr)[1]:'?', + ch_size>2?((const uint8_t *)buf_ptr)[2]:'?', + ch_size>3?((const uint8_t *)buf_ptr)[3]:'?', + td->name, ctx->phase, xml_tag); + break; + } + + ctx->phase = 5; /* Phase out, just in case */ + RETURN(RC_FAIL); +} + + +asn_enc_rval_t +CHOICE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_CHOICE_specifics_t *specs=(asn_CHOICE_specifics_t *)td->specifics; + asn_enc_rval_t er; + int present; + + if(!sptr) + _ASN_ENCODE_FAILED; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + if(present <= 0 || present > td->elements_count) { + _ASN_ENCODE_FAILED; + } else { + asn_enc_rval_t tmper; + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(!memb_ptr) _ASN_ENCODE_FAILED; + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + } + + er.encoded = 0; + + if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel); + _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = elm->type->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + + _ASN_CALLBACK3("", 1); + + er.encoded += 5 + (2 * mlen) + tmper.encoded; + } + + if(!(flags & XER_F_CANONICAL)) _i_ASN_TEXT_INDENT(1, ilevel - 1); + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +asn_dec_rval_t +CHOICE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + asn_dec_rval_t rv; + asn_per_constraint_t *ct; + asn_TYPE_member_t *elm; /* CHOICE's element */ + void *memb_ptr; + void **memb_ptr2; + void *st = *sptr; + int value; + + if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) + _ASN_DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) _ASN_DECODE_FAILED; + } + + if(constraints) ct = &constraints->value; + else if(td->per_constraints) ct = &td->per_constraints->value; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + value = per_get_few_bits(pd, 1); + if(value < 0) _ASN_DECODE_STARVED; + if(value) ct = 0; /* Not restricted */ + } + + if(ct && ct->range_bits >= 0) { + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) _ASN_DECODE_STARVED; + ASN_DEBUG("CHOICE %s got index %d in range %d", + td->name, value, ct->range_bits); + if(value > ct->upper_bound) + _ASN_DECODE_FAILED; + } else { + if(specs->ext_start == -1) + _ASN_DECODE_FAILED; + value = uper_get_nsnnwn(pd); + if(value < 0) _ASN_DECODE_STARVED; + value += specs->ext_start; + if(value >= td->elements_count) + _ASN_DECODE_FAILED; + } + + /* Adjust if canonical order is different from natural order */ + if(specs->canonical_order) + value = specs->canonical_order[value]; + + /* Set presence to be able to free it later */ + _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); + + elm = &td->elements[value]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); + + if(ct && ct->range_bits >= 0) { + rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, + elm->per_constraints, memb_ptr2, pd); + } else { + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->per_constraints, memb_ptr2, pd); + } + + if(rv.code != RC_OK) + ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", + elm->name, td->name, rv.code); + return rv; +} + +asn_enc_rval_t +CHOICE_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + asn_TYPE_member_t *elm; /* CHOICE's element */ + asn_per_constraint_t *ct; + void *memb_ptr; + int present; + int present_enc; + + if(!sptr) _ASN_ENCODE_FAILED; + + ASN_DEBUG("Encoding %s as CHOICE", td->name); + + if(constraints) ct = &constraints->value; + else if(td->per_constraints) ct = &td->per_constraints->value; + else ct = 0; + + present = _fetch_present_idx(sptr, + specs->pres_offset, specs->pres_size); + + /* + * If the structure was not initialized properly, it cannot be encoded: + * can't deduce what to encode in the choice type. + */ + if(present <= 0 || present > td->elements_count) + _ASN_ENCODE_FAILED; + else + present--; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); + + /* Adjust if canonical order is different from natural order */ + if(specs->canonical_order) + present_enc = specs->canonical_order[present]; + else + present_enc = present; + + if(ct && ct->range_bits >= 0) { + if(present_enc < ct->lower_bound + || present_enc > ct->upper_bound) { + if(ct->flags & APC_EXTENSIBLE) { + if(per_put_few_bits(po, 1, 1)) + _ASN_ENCODE_FAILED; + } else { + _ASN_ENCODE_FAILED; + } + ct = 0; + } + } + if(ct && ct->flags & APC_EXTENSIBLE) + if(per_put_few_bits(po, 0, 1)) + _ASN_ENCODE_FAILED; + + elm = &td->elements[present]; + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(!memb_ptr) _ASN_ENCODE_FAILED; + } else { + memb_ptr = (char *)sptr + elm->memb_offset; + } + + if(ct && ct->range_bits >= 0) { + if(per_put_few_bits(po, present_enc, ct->range_bits)) + _ASN_ENCODE_FAILED; + + return elm->type->uper_encoder(elm->type, elm->per_constraints, + memb_ptr, po); + } else { + asn_enc_rval_t rval; + if(specs->ext_start == -1) + _ASN_ENCODE_FAILED; + if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + _ASN_ENCODE_FAILED; + if(uper_open_type_put(elm->type, elm->per_constraints, + memb_ptr, po)) + _ASN_ENCODE_FAILED; + rval.encoded = 0; + _ASN_ENCODED_OK(rval); + } +} + + +int +CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + int present; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(sptr, specs->pres_offset,specs->pres_size); + + /* + * Print that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Print member's name and stuff */ + if(0) { + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + } + + return elm->type->print_struct(elm->type, memb_ptr, ilevel, + cb, app_key); + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +void +CHOICE_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { + asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; + int present; + + if(!td || !ptr) + return; + + ASN_DEBUG("Freeing %s as CHOICE", td->name); + + /* + * Figure out which CHOICE element is encoded. + */ + present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); + + /* + * Free that element. + */ + if(present > 0 && present <= td->elements_count) { + asn_TYPE_member_t *elm = &td->elements[present-1]; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)ptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)ptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + if(!contents_only) { + FREEMEM(ptr); + } +} + + +/* + * The following functions functions offer protection against -fshort-enums, + * compatible with little- and big-endian machines. + * If assertion is triggered, either disable -fshort-enums, or add an entry + * here with the ->pres_size of your target stracture. + * Unless the target structure is packed, the ".present" member + * is guaranteed to be aligned properly. ASN.1 compiler itself does not + * produce packed code. + */ +static int +_fetch_present_idx(const void *struct_ptr, int pres_offset, int pres_size) { + const void *present_ptr; + int present; + + present_ptr = ((const char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): present = *(const int *)present_ptr; break; + case sizeof(short): present = *(const short *)present_ptr; break; + case sizeof(char): present = *(const char *)present_ptr; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + return 0; /* If not aborted, pass back safe value */ + } + + return present; +} + +static void +_set_present_idx(void *struct_ptr, int pres_offset, int pres_size, int present) { + void *present_ptr; + present_ptr = ((char *)struct_ptr) + pres_offset; + + switch(pres_size) { + case sizeof(int): *(int *)present_ptr = present; break; + case sizeof(short): *(short *)present_ptr = present; break; + case sizeof(char): *(char *)present_ptr = present; break; + default: + /* ANSI C mandates enum to be equivalent to integer */ + assert(pres_size != sizeof(int)); + } +} diff --git a/lte/rrc/asn/constr_CHOICE.h b/lte/rrc/asn/constr_CHOICE.h new file mode 100644 index 000000000..e824a2206 --- /dev/null +++ b/lte/rrc/asn/constr_CHOICE.h @@ -0,0 +1,57 @@ +/*- + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef const struct asn_CHOICE_specifics_s { + /* + * Target structure description. + */ + int struct_size; /* Size of the target structure. */ + int ctx_offset; /* Offset of the asn_codec_ctx_t member */ + int pres_offset; /* Identifier of the present member */ + int pres_size; /* Size of the identifier (enum) */ + + /* + * Tags to members mapping table. + */ + const asn_TYPE_tag2member_t *tag2el; + int tag2el_count; + + /* Canonical ordering of CHOICE elements, for PER */ + int *canonical_order; + + /* + * Extensions-related stuff. + */ + int ext_start; /* First member of extensions, or -1 */ +} asn_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_struct_free_f CHOICE_free; +asn_struct_print_f CHOICE_print; +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +xer_type_decoder_f CHOICE_decode_xer; +xer_type_encoder_f CHOICE_encode_xer; +per_type_decoder_f CHOICE_decode_uper; +per_type_encoder_f CHOICE_encode_uper; +asn_outmost_tag_f CHOICE_outmost_tag; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_CHOICE_H_ */ diff --git a/lte/rrc/asn/constr_SEQUENCE.c b/lte/rrc/asn/constr_SEQUENCE.c new file mode 100644 index 000000000..07dcedfb6 --- /dev/null +++ b/lte/rrc/asn/constr_SEQUENCE.c @@ -0,0 +1,1422 @@ +/*- + * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num; \ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * Check whether we are inside the extensions group. + */ +#define IN_EXTENSION_GROUP(specs, memb_idx) \ + ( ((memb_idx) > (specs)->ext_after) \ + &&((memb_idx) < (specs)->ext_before)) + + +/* + * Tags are canonically sorted in the tag2element map. + */ +static int +_t2e_cmp(const void *ap, const void *bp) { + const asn_TYPE_tag2member_t *a = (const asn_TYPE_tag2member_t *)ap; + const asn_TYPE_tag2member_t *b = (const asn_TYPE_tag2member_t *)bp; + + int a_class = BER_TAG_CLASS(a->el_tag); + int b_class = BER_TAG_CLASS(b->el_tag); + + if(a_class == b_class) { + ber_tlv_tag_t a_value = BER_TAG_VALUE(a->el_tag); + ber_tlv_tag_t b_value = BER_TAG_VALUE(b->el_tag); + + if(a_value == b_value) { + if(a->el_no > b->el_no) + return 1; + /* + * Important: we do not check + * for a->el_no <= b->el_no! + */ + return 0; + } else if(a_value < b_value) + return -1; + else + return 1; + } else if(a_class < b_class) { + return -1; + } else { + return 1; + } +} + + +/* + * The decoder of the SEQUENCE type. + */ +asn_dec_rval_t +SEQUENCE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + int edx; /* SEQUENCE element's index */ + + ASN_DEBUG("Decoding %s as SEQUENCE", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + NEXT_PHASE(ctx); + + ASN_DEBUG("Structure consumes %ld bytes, buffer %ld", + (long)ctx->left, (long)size); + + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next member from the list of + * this structure's elements. + * (ctx->step) stores the member being processed + * between invocations and the microphase {0,1} of parsing + * that member: + * step = ( * 2 + ). + */ + for(edx = (ctx->step >> 1); edx < td->elements_count; + edx++, ctx->step = (ctx->step & ~1) + 2) { + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + ssize_t tag_len; /* Length of TLV's T */ + int opt_edx_end; /* Next non-optional element */ + int use_bsearch; + int n; + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + ASN_DEBUG("In %s SEQUENCE left %d, edx=%d flags=%d" + " opt=%d ec=%d", + td->name, (int)ctx->left, edx, + elements[edx].flags, elements[edx].optional, + td->elements_count); + + if(ctx->left == 0 /* No more stuff is expected */ + && ( + /* Explicit OPTIONAL specification reaches the end */ + (edx + elements[edx].optional + == td->elements_count) + || + /* All extensions are optional */ + (IN_EXTENSION_GROUP(specs, edx) + && specs->ext_before > td->elements_count) + ) + ) { + ASN_DEBUG("End of SEQUENCE %s", td->name); + /* + * Found the legitimate end of the structure. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + ASN_DEBUG("Current tag in %s SEQUENCE for element %d " + "(%s) is %s encoded in %d bytes, of frame %ld", + td->name, edx, elements[edx].name, + ber_tlv_tag_string(tlv_tag), (int)tag_len, (long)LEFT); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + ASN_DEBUG("edx = %d, opt = %d, ec=%d", + edx, elements[edx].optional, + td->elements_count); + if((edx + elements[edx].optional + == td->elements_count) + || (IN_EXTENSION_GROUP(specs, edx) + && specs->ext_before + > td->elements_count)) { + /* + * Yeah, baby! Found the terminator + * of the indefinite length structure. + */ + /* + * Proceed to the canonical + * finalization function. + * No advancing is necessary. + */ + goto phase3; + } + } + } + + /* + * Find the next available type with this tag. + */ + use_bsearch = 0; + opt_edx_end = edx + elements[edx].optional + 1; + if(opt_edx_end > td->elements_count) + opt_edx_end = td->elements_count; /* Cap */ + else if(opt_edx_end - edx > 8) { + /* Limit the scope of linear search... */ + opt_edx_end = edx + 8; + use_bsearch = 1; + /* ... and resort to bsearch() */ + } + for(n = edx; n < opt_edx_end; n++) { + if(BER_TAGS_EQUAL(tlv_tag, elements[n].tag)) { + /* + * Found element corresponding to the tag + * being looked at. + * Reposition over the right element. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].flags & ATF_OPEN_TYPE) { + /* + * This is the ANY type, which may bear + * any flag whatsoever. + */ + edx = n; + ctx->step = 1 + 2 * edx; /* Remember! */ + goto microphase2; + } else if(elements[n].tag == (ber_tlv_tag_t)-1) { + use_bsearch = 1; + break; + } + } + if(use_bsearch) { + /* + * Resort to a binary search over + * sorted array of tags. + */ + const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t key; + key.el_tag = tlv_tag; + key.el_no = edx; + t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + specs->tag2el, specs->tag2el_count, + sizeof(specs->tag2el[0]), _t2e_cmp); + if(t2m) { + const asn_TYPE_tag2member_t *best = 0; + const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + int edx_max = edx + elements[edx].optional; + /* + * Rewind to the first element with that tag, + * `cause bsearch() does not guarantee order. + */ + t2m_f = t2m + t2m->toff_first; + t2m_l = t2m + t2m->toff_last; + for(t2m = t2m_f; t2m <= t2m_l; t2m++) { + if(t2m->el_no > edx_max) break; + if(t2m->el_no < edx) continue; + best = t2m; + } + if(best) { + edx = best->el_no; + ctx->step = 1 + 2 * edx; + goto microphase2; + } + } + n = opt_edx_end; + } + if(n == opt_edx_end) { + /* + * If tag is unknown, it may be either + * an unknown (thus, incorrect) tag, + * or an extension (...), + * or an end of the indefinite-length structure. + */ + if(!IN_EXTENSION_GROUP(specs, + edx + elements[edx].optional)) { + ASN_DEBUG("Unexpected tag %s (at %d)", + ber_tlv_tag_string(tlv_tag), edx); + ASN_DEBUG("Expected tag %s (%s)%s", + ber_tlv_tag_string(elements[edx].tag), + elements[edx].name, + elements[edx].optional + ?" or alternatives":""); + RETURN(RC_FAIL); + } else { + /* Skip this tag */ + ssize_t skip; + edx += elements[edx].optional; + + ASN_DEBUG("Skipping unexpected %s (at %d)", + ber_tlv_tag_string(tlv_tag), edx); + skip = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tag_len, + LEFT - tag_len); + ASN_DEBUG("Skip length %d in %s", + (int)skip, td->name); + switch(skip) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(skip + tag_len); + ctx->step -= 2; + edx--; + continue; /* Try again with the next tag */ + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + ASN_DEBUG("Inside SEQUENCE %s MF2", td->name); + + /* + * Compute the position of the member inside a structure, + * and also a type of containment (it may be contained + * as pointer or using inline inclusion). + */ + if(elements[edx].flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); + } else { + /* + * A pointer to a pointer + * holding the start of the structure + */ + memb_ptr = (char *)st + elements[edx].memb_offset; + memb_ptr2 = &memb_ptr; + } + /* + * Invoke the member fetch routine according to member's type + */ + rval = elements[edx].type->ber_decoder(opt_codec_ctx, + elements[edx].type, + memb_ptr2, ptr, LEFT, + elements[edx].tag_mode); + ASN_DEBUG("In %s SEQUENCE decoded %d %s of %d " + "in %d bytes rval.code %d, size=%d", + td->name, edx, elements[edx].type->name, + (int)LEFT, (int)rval.consumed, rval.code, (int)size); + switch(rval.code) { + case RC_OK: + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + ASN_DEBUG("Size violation (c->l=%ld <= s=%ld)", + (long)ctx->left, (long)size); + /* Fall through */ + case RC_FAIL: /* Fatal error */ + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all structure members) */ + + phase3: + ctx->phase = 3; + case 3: /* 00 and other tags expected */ + case 4: /* only 00's expected */ + + ASN_DEBUG("SEQUENCE %s Leftover: %ld, size = %ld", + td->name, (long)ctx->left, (long)size); + + /* + * Skip everything until the end of the SEQUENCE. + */ + while(ctx->left) { + ssize_t tl, ll; + + tl = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tl) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + /* + * If expected <0><0>... + */ + if(ctx->left < 0 + && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Correctly finished with <0><0>. + */ + ADVANCE(2); + ctx->left++; + ctx->phase = 4; + continue; + } + } + + if(!IN_EXTENSION_GROUP(specs, td->elements_count) + || ctx->phase == 4) { + ASN_DEBUG("Unexpected continuation " + "of a non-extensible type " + "%s (SEQUENCE): %s", + td->name, + ber_tlv_tag_string(tlv_tag)); + RETURN(RC_FAIL); + } + + ll = ber_skip_length(opt_codec_ctx, + BER_TLV_CONSTRUCTED(ptr), + (const char *)ptr + tl, LEFT - tl); + switch(ll) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + ADVANCE(tl + ll); + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + + +/* + * The DER encoder of the SEQUENCE type. + */ +asn_enc_rval_t +SEQUENCE_encode_der(asn_TYPE_descriptor_t *td, + void *sptr, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + size_t computed_size = 0; + asn_enc_rval_t erval; + ssize_t ret; + int edx; + + ASN_DEBUG("%s %s as SEQUENCE", + cb?"Encoding":"Estimating", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Mandatory element is missing */ + _ASN_ENCODE_FAILED; + } + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + } + erval = elm->type->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + ASN_DEBUG("Member %d %s estimated %ld bytes", + edx, elm->name, (long)erval.encoded); + } + + /* + * Encode the TLV for the sequence itself. + */ + ret = der_write_tags(td, computed_size, tag_mode, 1, tag, cb, app_key); + ASN_DEBUG("Wrote tags: %ld (+%ld)", (long)ret, (long)computed_size); + if(ret == -1) + _ASN_ENCODE_FAILED; + erval.encoded = computed_size + ret; + + if(!cb) _ASN_ENCODED_OK(erval); + + /* + * Encode all members. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + asn_enc_rval_t tmperval; + void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(!memb_ptr) continue; + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + } + tmperval = elm->type->der_encoder(elm->type, memb_ptr, + elm->tag_mode, elm->tag, + cb, app_key); + if(tmperval.encoded == -1) + return tmperval; + computed_size -= tmperval.encoded; + ASN_DEBUG("Member %d %s of SEQUENCE %s encoded in %ld bytes", + edx, elm->name, td->name, (long)tmperval.encoded); + } + + if(computed_size != 0) + /* + * Encoded size is not equal to the computed size. + */ + _ASN_ENCODE_FAILED; + + _ASN_ENCODED_OK(erval); +} + + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + asn_SEQUENCE_specifics_t *specs + = (asn_SEQUENCE_specifics_t *)td->specifics; + asn_TYPE_member_t *elements = td->elements; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + int edx; /* Element index */ + int edx_end; + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + * Phase 3: Skipping unknown extensions. + * Phase 4: PHASED OUT + */ + for(edx = ctx->step; ctx->phase <= 3;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + asn_TYPE_member_t *elm; + int n; + + /* + * Go inside the inner member of a sequence. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + elm = &td->elements[edx]; + + if(elm->flags & ATF_POINTER) { + /* Member is a pointer to another structure */ + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Invoke the inner type decoder, m.b. multiple times */ + tmprval = elm->type->xer_decoder(opt_codec_ctx, + elm->type, memb_ptr2, elm->name, + buf_ptr, size); + XER_ADVANCE(tmprval.consumed); + if(tmprval.code != RC_OK) + RETURN(tmprval.code); + ctx->phase = 1; /* Back to body processing */ + ctx->step = ++edx; + ASN_DEBUG("XER/SEQUENCE phase => %d, step => %d", + ctx->phase, ctx->step); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + switch(ch_size) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + default: + switch(ch_type) { + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SEQUENCE: tcv = %d, ph=%d [%s]", + tcv, ctx->phase, xml_tag); + + /* Skip the extensions section */ + if(ctx->phase == 3) { + switch(xer_skip_unknown(tcv, &ctx->left)) { + case -1: + ctx->phase = 4; + RETURN(RC_FAIL); + case 0: + XER_ADVANCE(ch_size); + continue; + case 1: + XER_ADVANCE(ch_size); + ctx->phase = 1; + continue; + case 2: + ctx->phase = 1; + break; + } + } + + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + if(edx >= td->elements_count + || + /* Explicit OPTIONAL specs reaches the end */ + (edx + elements[edx].optional + == td->elements_count) + || + /* All extensions are optional */ + (IN_EXTENSION_GROUP(specs, edx) + && specs->ext_before + > td->elements_count) + ) { + XER_ADVANCE(ch_size); + ctx->phase = 4; /* Phase out */ + RETURN(RC_OK); + } else { + ASN_DEBUG("Premature end of XER SEQUENCE"); + RETURN(RC_FAIL); + } + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%d", + tcv, ctx->phase, edx); + if(ctx->phase != 1) { + break; /* Really unexpected */ + } + + if(edx < td->elements_count) { + /* + * Search which member corresponds to this tag. + */ + edx_end = edx + elements[edx].optional + 1; + if(edx_end > td->elements_count) + edx_end = td->elements_count; + for(n = edx; n < edx_end; n++) { + elm = &td->elements[n]; + tcv = xer_check_tag(buf_ptr, + ch_size, elm->name); + switch(tcv) { + case XCT_BOTH: + case XCT_OPENING: + /* + * Process this member. + */ + ctx->step = edx = n; + ctx->phase = 2; + break; + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + continue; + default: + n = edx_end; + break; /* Phase out */ + } + break; + } + if(n != edx_end) + continue; + } else { + ASN_DEBUG("Out of defined members: %d/%d", + edx, td->elements_count); + } + + /* It is expected extension */ + if(IN_EXTENSION_GROUP(specs, + edx + (edx < td->elements_count + ? elements[edx].optional : 0))) { + ASN_DEBUG("Got anticipated extension at %d", + edx); + /* + * Check for (XCT_BOTH or XCT_UNKNOWN_BO) + * By using a mask. Only record a pure + * tags. + */ + if(tcv & XCT_CLOSING) { + /* Found without body */ + } else { + ctx->left = 1; + ctx->phase = 3; /* Skip ...'s */ + } + XER_ADVANCE(ch_size); + continue; + } + + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SEQUENCE [%c%c%c%c%c%c]", + size>0?((const char *)buf_ptr)[0]:'.', + size>1?((const char *)buf_ptr)[1]:'.', + size>2?((const char *)buf_ptr)[2]:'.', + size>3?((const char *)buf_ptr)[3]:'.', + size>4?((const char *)buf_ptr)[4]:'.', + size>5?((const char *)buf_ptr)[5]:'.'); + break; + } + + ctx->phase = 4; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + +asn_enc_rval_t +SEQUENCE_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er; + int xcan = (flags & XER_F_CANONICAL); + int edx; + + if(!sptr) + _ASN_ENCODE_FAILED; + + er.encoded = 0; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_enc_rval_t tmper; + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + const char *mname = elm->name; + unsigned int mlen = strlen(mname); + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + /* Mandatory element is missing */ + _ASN_ENCODE_FAILED; + } + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + } + + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); + _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); + + /* Print the member itself */ + tmper = elm->type->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + + _ASN_CALLBACK3("", 1); + er.encoded += 5 + (2 * mlen) + tmper.encoded; + } + + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +int +SEQUENCE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + int edx; + int ret; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) continue; + /* Print line */ + /* Fall through */ + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + /* Indentation */ + _i_INDENT(1); + + /* Print the member's name and stuff */ + if(cb(elm->name, strlen(elm->name), app_key) < 0 + || cb(": ", 2, app_key) < 0) + return -1; + + /* Print the member itself */ + ret = elm->type->print_struct(elm->type, memb_ptr, ilevel + 1, + cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SEQUENCE_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) { + int edx; + + if(!td || !sptr) + return; + + ASN_DEBUG("Freeing %s as SEQUENCE", td->name); + + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; + if(elm->flags & ATF_POINTER) { + memb_ptr = *(void **)((char *)sptr + elm->memb_offset); + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); + } + } + + if(!contents_only) { + FREEMEM(sptr); + } +} + +int +SEQUENCE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + int edx; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* + * Iterate over structure members and check their validity. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + const void *memb_ptr; + + if(elm->flags & ATF_POINTER) { + memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); + if(!memb_ptr) { + if(elm->optional) + continue; + _ASN_CTFAIL(app_key, td, sptr, + "%s: mandatory element %s absent (%s:%d)", + td->name, elm->name, __FILE__, __LINE__); + return -1; + } + } else { + memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); + } + + if(elm->memb_constraints) { + int ret = elm->memb_constraints(elm->type, memb_ptr, + ctfailcb, app_key); + if(ret) return ret; + } else { + int ret = elm->type->check_constraints(elm->type, + memb_ptr, ctfailcb, app_key); + if(ret) return ret; + /* + * Cannot inherit it earlier: + * need to make sure we get the updated version. + */ + elm->memb_constraints = elm->type->check_constraints; + } + } + + return 0; +} + +asn_dec_rval_t +SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; + void *st = *sptr; /* Target structure. */ + int extpresent; /* Extension additions are present */ + uint8_t *opres; /* Presence of optional root members */ + asn_per_data_t opmd; + asn_dec_rval_t rv; + int edx; + + (void)constraints; + + if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) + _ASN_DECODE_FAILED; + + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) _ASN_DECODE_FAILED; + } + + ASN_DEBUG("Decoding %s as SEQUENCE (UPER)", td->name); + + /* Handle extensions */ + if(specs->ext_before >= 0) { + extpresent = per_get_few_bits(pd, 1); + if(extpresent < 0) _ASN_DECODE_STARVED; + } else { + extpresent = 0; + } + + /* Prepare a place and read-in the presence bitmap */ + memset(&opmd, 0, sizeof(opmd)); + if(specs->roms_count) { + opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); + if(!opres) _ASN_DECODE_FAILED; + /* Get the presence map */ + if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { + FREEMEM(opres); + _ASN_DECODE_STARVED; + } + opmd.buffer = opres; + opmd.nbits = specs->roms_count; + ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", + td->name, specs->roms_count, *opres); + } else { + opres = 0; + } + + /* + * Get the sequence ROOT elements. + */ + for(edx = 0; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (char *)st + elm->memb_offset; + memb_ptr2 = &memb_ptr; + } + + /* Deal with optionality */ + if(elm->optional) { + int present = per_get_few_bits(&opmd, 1); + ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", + td->name, elm->name, present, + (int)opmd.nboff, (int)opmd.nbits); + if(present == 0) { + /* This element is not present */ + if(elm->default_value) { + /* Fill-in DEFAULT */ + if(elm->default_value(1, memb_ptr2)) { + FREEMEM(opres); + _ASN_DECODE_FAILED; + } + ASN_DEBUG("Filled-in default"); + } + /* The member is just not present */ + continue; + } + /* Fall through */ + } + + /* Fetch the member from the stream */ + ASN_DEBUG("Decoding member %s in %s", elm->name, td->name); + rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, + elm->per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + ASN_DEBUG("Failed decode %s in %s", + elm->name, td->name); + FREEMEM(opres); + return rv; + } + } + + /* Optionality map is not needed anymore */ + FREEMEM(opres); + + /* + * Deal with extensions. + */ + if(extpresent) { + ssize_t bmlength; + uint8_t *epres; /* Presence of extension members */ + asn_per_data_t epmd; + + bmlength = uper_get_nslength(pd); + if(bmlength < 0) _ASN_DECODE_STARVED; + + ASN_DEBUG("Extensions %ld present in %s", (long)bmlength, td->name); + + epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); + if(!epres) _ASN_DECODE_STARVED; + + /* Get the extensions map */ + if(per_get_many_bits(pd, epres, 0, bmlength)) + _ASN_DECODE_STARVED; + + memset(&epmd, 0, sizeof(epmd)); + epmd.buffer = epres; + epmd.nbits = bmlength; + ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", + td->name, (long)bmlength, *epres); + + /* Go over extensions and read them in */ + for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%d is not extension", edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + elm->memb_offset); + } else { + memb_ptr = (void *)((char *)st + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + present = per_get_few_bits(&epmd, 1); + if(present <= 0) { + if(present < 0) break; /* No more extensions */ + continue; + } + + ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); + rv = uper_open_type_get(opt_codec_ctx, elm->type, + elm->per_constraints, memb_ptr2, pd); + if(rv.code != RC_OK) { + FREEMEM(epres); + return rv; + } + } + + /* Skip over overflow extensions which aren't present + * in this system's version of the protocol */ + for(;;) { + ASN_DEBUG("Getting overflow extensions"); + switch(per_get_few_bits(&epmd, 1)) { + case -1: break; + case 0: continue; + default: + if(uper_open_type_skip(opt_codec_ctx, pd)) { + FREEMEM(epres); + _ASN_DECODE_STARVED; + } + } + break; + } + + FREEMEM(epres); + } + + /* Fill DEFAULT members in extensions */ + for(edx = specs->roms_count; edx < specs->roms_count + + specs->aoms_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void **memb_ptr2; /* Pointer to member pointer */ + + if(!elm->default_value) continue; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); + if(*memb_ptr2) continue; + } else { + continue; /* Extensions are all optionals */ + } + + /* Set default value */ + if(elm->default_value(1, memb_ptr2)) { + _ASN_DECODE_FAILED; + } + } + + rv.consumed = 0; + rv.code = RC_OK; + return rv; +} + +static int +SEQUENCE_handle_extensions(asn_TYPE_descriptor_t *td, void *sptr, + asn_per_outp_t *po1, asn_per_outp_t *po2) { + asn_SEQUENCE_specifics_t *specs + = (asn_SEQUENCE_specifics_t *)td->specifics; + int exts_present = 0; + int exts_count = 0; + int edx; + + if(specs->ext_before < 0) + return 0; + + /* Find out which extensions are present */ + for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + if(!IN_EXTENSION_GROUP(specs, edx)) { + ASN_DEBUG("%s (@%d) is not extension", elm->type->name, edx); + continue; + } + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + ASN_DEBUG("checking %s (@%d) present => %d", + elm->type->name, edx, present); + exts_count++; + exts_present += present; + + /* Encode as presence marker */ + if(po1 && per_put_few_bits(po1, present, 1)) + return -1; + /* Encode as open type field */ + if(po2 && present && uper_open_type_put(elm->type, + elm->per_constraints, *memb_ptr2, po2)) + return -1; + + } + + return exts_present ? exts_count : 0; +} + +asn_enc_rval_t +SEQUENCE_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + asn_SEQUENCE_specifics_t *specs + = (asn_SEQUENCE_specifics_t *)td->specifics; + asn_enc_rval_t er; + int n_extensions; + int edx; + int i; + + (void)constraints; + + if(!sptr) + _ASN_ENCODE_FAILED; + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE (UPER)", td->name); + + + /* + * X.691#18.1 Whether structure is extensible + * and whether to encode extensions + */ + if(specs->ext_before >= 0) { + n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0); + per_put_few_bits(po, n_extensions ? 1 : 0, 1); + } else { + n_extensions = 0; /* There are no extensions to encode */ + } + + /* Encode a presence bitmap */ + for(i = 0; i < specs->roms_count; i++) { + asn_TYPE_member_t *elm; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + int present; + + edx = specs->oms[i]; + elm = &td->elements[edx]; + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + present = (*memb_ptr2 != 0); + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + present = 1; + } + + /* Eliminate default values */ + if(present && elm->default_value + && elm->default_value(0, memb_ptr2) == 1) + present = 0; + + ASN_DEBUG("Element %s %s %s->%s is %s", + elm->flags & ATF_POINTER ? "ptr" : "inline", + elm->default_value ? "def" : "wtv", + td->name, elm->name, present ? "present" : "absent"); + if(per_put_few_bits(po, present, 1)) + _ASN_ENCODE_FAILED; + } + + /* + * Encode the sequence ROOT elements. + */ + ASN_DEBUG("ext_after = %d, ec = %d, eb = %d", specs->ext_after, td->elements_count, specs->ext_before); + for(edx = 0; edx < ((specs->ext_after < 0) + ? td->elements_count : specs->ext_before - 1); edx++) { + + asn_TYPE_member_t *elm = &td->elements[edx]; + void *memb_ptr; /* Pointer to the member */ + void **memb_ptr2; /* Pointer to that pointer */ + + if(IN_EXTENSION_GROUP(specs, edx)) + continue; + + ASN_DEBUG("About to encode %s", elm->type->name); + + /* Fetch the pointer to this member */ + if(elm->flags & ATF_POINTER) { + memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); + if(!*memb_ptr2) { + ASN_DEBUG("Element %s %d not present", + elm->name, edx); + if(elm->optional) + continue; + /* Mandatory element is missing */ + _ASN_ENCODE_FAILED; + } + } else { + memb_ptr = (void *)((char *)sptr + elm->memb_offset); + memb_ptr2 = &memb_ptr; + } + + /* Eliminate default values */ + if(elm->default_value && elm->default_value(0, memb_ptr2) == 1) + continue; + + ASN_DEBUG("Encoding %s->%s", td->name, elm->name); + er = elm->type->uper_encoder(elm->type, elm->per_constraints, + *memb_ptr2, po); + if(er.encoded == -1) + return er; + } + + /* No extensions to encode */ + if(!n_extensions) _ASN_ENCODED_OK(er); + + ASN_DEBUG("Length of %d bit-map", n_extensions); + /* #18.8. Write down the presence bit-map length. */ + if(uper_put_nslength(po, n_extensions)) + _ASN_ENCODE_FAILED; + + ASN_DEBUG("Bit-map of %d elements", n_extensions); + /* #18.7. Encoding the extensions presence bit-map. */ + /* TODO: act upon NOTE in #18.7 for canonical PER */ + if(SEQUENCE_handle_extensions(td, sptr, po, 0) != n_extensions) + _ASN_ENCODE_FAILED; + + ASN_DEBUG("Writing %d extensions", n_extensions); + /* #18.9. Encode extensions as open type fields. */ + if(SEQUENCE_handle_extensions(td, sptr, 0, po) != n_extensions) + _ASN_ENCODE_FAILED; + + _ASN_ENCODED_OK(er); +} + diff --git a/lte/rrc/asn/constr_SEQUENCE.h b/lte/rrc/asn/constr_SEQUENCE.h new file mode 100644 index 000000000..c2aeb6676 --- /dev/null +++ b/lte/rrc/asn/constr_SEQUENCE.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_H_ +#define _CONSTR_SEQUENCE_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef const struct asn_SEQUENCE_specifics_s { + /* + * Target structure description. + */ + int struct_size; /* Size of the target structure. */ + int ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* + * Tags to members mapping table (sorted). + */ + const asn_TYPE_tag2member_t *tag2el; + int tag2el_count; + + /* + * Optional members of the extensions root (roms) or additions (aoms). + * Meaningful for PER. + */ + const int *oms; /* Optional MemberS */ + int roms_count; /* Root optional members count */ + int aoms_count; /* Additions optional members count */ + + /* + * Description of an extensions group. + */ + int ext_after; /* Extensions start after this member */ + int ext_before; /* Extensions stop before this member */ +} asn_SEQUENCE_specifics_t; + + +/* + * A set specialized functions dealing with the SEQUENCE type. + */ +asn_struct_free_f SEQUENCE_free; +asn_struct_print_f SEQUENCE_print; +asn_constr_check_f SEQUENCE_constraint; +ber_type_decoder_f SEQUENCE_decode_ber; +der_type_encoder_f SEQUENCE_encode_der; +xer_type_decoder_f SEQUENCE_decode_xer; +xer_type_encoder_f SEQUENCE_encode_xer; +per_type_decoder_f SEQUENCE_decode_uper; +per_type_encoder_f SEQUENCE_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SEQUENCE_H_ */ diff --git a/lte/rrc/asn/constr_TYPE.c b/lte/rrc/asn/constr_TYPE.c new file mode 100644 index 000000000..322f68c86 --- /dev/null +++ b/lte/rrc/asn/constr_TYPE.c @@ -0,0 +1,77 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Version of the ASN.1 infrastructure shipped with compiler. + */ +int get_asn1c_environment_version() { return ASN1C_ENVIRONMENT_VERSION; } + +static asn_app_consume_bytes_f _print2fp; + +/* + * Return the outmost tag of the type. + */ +ber_tlv_tag_t +asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { + + if(tag_mode) + return tag; + + if(type_descriptor->tags_count) + return type_descriptor->tags[0]; + + return type_descriptor->outmost_tag(type_descriptor, struct_ptr, 0, 0); +} + +/* + * Print the target language's structure in human readable form. + */ +int +asn_fprint(FILE *stream, asn_TYPE_descriptor_t *td, const void *struct_ptr) { + if(!stream) stream = stdout; + if(!td || !struct_ptr) { + errno = EINVAL; + return -1; + } + + /* Invoke type-specific printer */ + if(td->print_struct(td, struct_ptr, 1, _print2fp, stream)) + return -1; + + /* Terminate the output */ + if(_print2fp("\n", 1, stream)) + return -1; + + return fflush(stream); +} + +/* Dump the data into the specified stdio stream */ +static int +_print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + + +/* + * Some compilers do not support variable args macros. + * This function is a replacement of ASN_DEBUG() macro. + */ +void ASN_DEBUG_f(const char *fmt, ...); +void ASN_DEBUG_f(const char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); +} diff --git a/lte/rrc/asn/constr_TYPE.h b/lte/rrc/asn/constr_TYPE.h new file mode 100644 index 000000000..7739f63b7 --- /dev/null +++ b/lte/rrc/asn/constr_TYPE.h @@ -0,0 +1,182 @@ +/*- + * Copyright (c) 2003, 2004, 2005, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +/* + * This file contains the declaration structure called "ASN.1 Type Definition", + * which holds all information necessary for encoding and decoding routines. + * This structure even contains pointer to these encoding and decoding routines + * for each defined ASN.1 type. + */ +#ifndef _CONSTR_TYPE_H_ +#define _CONSTR_TYPE_H_ + +#include "liblte/config.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ +struct asn_TYPE_member_s; /* Forward declaration */ + +/* + * This type provides the context information for various ASN.1 routines, + * primarily ones doing decoding. A member _asn_ctx of this type must be + * included into certain target language's structures, such as compound types. + */ +typedef struct asn_struct_ctx_s { + short phase; /* Decoding phase */ + short step; /* Elementary step of a phase */ + int context; /* Other context information */ + void *ptr; /* Decoder-specific stuff (stack elements) */ + ber_tlv_len_t left; /* Number of bytes left, -1 for indefinite */ +} asn_struct_ctx_t; + +#include /* Basic Encoding Rules decoder */ +#include /* Distinguished Encoding Rules encoder */ +#include /* Decoder of XER (XML, text) */ +#include /* Encoder into XER (XML, text) */ +#include /* Packet Encoding Rules decoder */ +#include /* Packet Encoding Rules encoder */ +#include /* Subtype constraints support */ + +/* + * Free the structure according to its specification. + * If (free_contents_only) is set, the wrapper structure itself (struct_ptr) + * will not be freed. (It may be useful in case the structure is allocated + * statically or arranged on the stack, yet its elements are allocated + * dynamically.) + */ +typedef void (asn_struct_free_f)( + struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, int free_contents_only); +#define ASN_STRUCT_FREE(asn_DEF, ptr) (asn_DEF).free_struct(&(asn_DEF),ptr,0) +#define ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF, ptr) \ + (asn_DEF).free_struct(&(asn_DEF),ptr,1) + +/* + * Print the structure according to its specification. + */ +typedef int (asn_struct_print_f)( + struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + int level, /* Indentation level */ + asn_app_consume_bytes_f *callback, void *app_key); + +/* + * Return the outmost tag of the type. + * If the type is untagged CHOICE, the dynamic operation is performed. + * NOTE: This function pointer type is only useful internally. + * Do not use it in your application. + */ +typedef ber_tlv_tag_t (asn_outmost_tag_f)( + const struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); +/* The instance of the above function type; used internally. */ +asn_outmost_tag_f asn_TYPE_outmost_tag; + + +/* + * The definitive description of the destination language's structure. + */ +typedef struct asn_TYPE_descriptor_s { + const char *name; /* A name of the ASN.1 type. "" in some cases. */ + const char *xml_tag; /* Name used in XML tag */ + + /* + * Generalized functions for dealing with the specific type. + * May be directly invoked by applications. + */ + asn_struct_free_f *free_struct; /* Free the structure */ + asn_struct_print_f *print_struct; /* Human readable output */ + asn_constr_check_f *check_constraints; /* Constraints validator */ + ber_type_decoder_f *ber_decoder; /* Generic BER decoder */ + der_type_encoder_f *der_encoder; /* Canonical DER encoder */ + xer_type_decoder_f *xer_decoder; /* Generic XER decoder */ + xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ + per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ + per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ + + /*********************************************************************** + * Internally useful members. Not to be used by applications directly. * + **********************************************************************/ + + /* + * Tags that are expected to occur. + */ + asn_outmost_tag_f *outmost_tag; /* */ + const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + int tags_count; /* Number of tags which are expected */ + const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ + int all_tags_count; /* Number of tags */ + + asn_per_constraints_t *per_constraints; /* PER compiled constraints */ + + /* + * An ASN.1 production type members (members of SEQUENCE, SET, CHOICE). + */ + struct asn_TYPE_member_s *elements; + int elements_count; + + /* + * Additional information describing the type, used by appropriate + * functions above. + */ + const void *specifics; +} asn_TYPE_descriptor_t; + +/* + * This type describes an element of the constructed type, + * i.e. SEQUENCE, SET, CHOICE, etc. + */ + enum asn_TYPE_flags_e { + ATF_NOFLAGS, + ATF_POINTER = 0x01, /* Represented by the pointer */ + ATF_OPEN_TYPE = 0x02 /* ANY type, without meaningful tag */ + }; +typedef struct asn_TYPE_member_s { + enum asn_TYPE_flags_e flags; /* Element's presentation flags */ + int optional; /* Following optional members, including current */ + int memb_offset; /* Offset of the element */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn_TYPE_descriptor_t *type; /* Member type descriptor */ + asn_constr_check_f *memb_constraints; /* Constraints validator */ + asn_per_constraints_t *per_constraints; /* PER compiled constraints */ + int (*default_value)(int setval, void **sptr); /* DEFAULT */ + const char *name; /* ASN.1 identifier of the element */ +} asn_TYPE_member_t; + +/* + * BER tag to element number mapping. + */ +typedef struct asn_TYPE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + int el_no; /* Index of the associated member, base 0 */ + int toff_first; /* First occurence of the el_tag, relative */ + int toff_last; /* Last occurence of the el_tag, relatvie */ +} asn_TYPE_tag2member_t; + +/* + * This function is a wrapper around (td)->print_struct, which prints out + * the contents of the target language's structure (struct_ptr) into the + * file pointer (stream) in human readable form. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem dumping the structure. + * (See also xer_fprint() in xer_encoder.h) + */ +LIBLTE_API int asn_fprint(FILE *stream, /* Destination stream descriptor */ + asn_TYPE_descriptor_t *td, /* ASN.1 type descriptor */ + const void *struct_ptr); /* Structure to be printed */ + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_TYPE_H_ */ diff --git a/lte/rrc/asn/constraints.c b/lte/rrc/asn/constraints.c new file mode 100644 index 000000000..1bdda73e5 --- /dev/null +++ b/lte/rrc/asn/constraints.c @@ -0,0 +1,93 @@ +#include "asn_internal.h" +#include "constraints.h" + +int +asn_generic_no_constraint(asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { + + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Nothing to check */ + return 0; +} + +int +asn_generic_unknown_constraint(asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, asn_app_constraint_failed_f *cb, void *key) { + + (void)type_descriptor; /* Unused argument */ + (void)struct_ptr; /* Unused argument */ + (void)cb; /* Unused argument */ + (void)key; /* Unused argument */ + + /* Unknown how to check */ + return 0; +} + +struct errbufDesc { + asn_TYPE_descriptor_t *failed_type; + const void *failed_struct_ptr; + char *errbuf; + size_t errlen; +}; + +static void +_asn_i_ctfailcb(void *key, asn_TYPE_descriptor_t *td, const void *sptr, const char *fmt, ...) { + struct errbufDesc *arg = key; + va_list ap; + ssize_t vlen; + ssize_t maxlen; + + arg->failed_type = td; + arg->failed_struct_ptr = sptr; + + maxlen = arg->errlen; + if(maxlen <= 0) + return; + + va_start(ap, fmt); + vlen = vsnprintf(arg->errbuf, maxlen, fmt, ap); + va_end(ap); + if(vlen >= maxlen) { + arg->errbuf[maxlen-1] = '\0'; /* Ensuring libc correctness */ + arg->errlen = maxlen - 1; /* Not counting termination */ + return; + } else if(vlen >= 0) { + arg->errbuf[vlen] = '\0'; /* Ensuring libc correctness */ + arg->errlen = vlen; /* Not counting termination */ + } else { + /* + * The libc on this system is broken. + */ + vlen = sizeof("") - 1; + maxlen--; + arg->errlen = vlen < maxlen ? vlen : maxlen; + memcpy(arg->errbuf, "", arg->errlen); + arg->errbuf[arg->errlen] = 0; + } + + return; +} + +int +asn_check_constraints(asn_TYPE_descriptor_t *type_descriptor, + const void *struct_ptr, char *errbuf, size_t *errlen) { + struct errbufDesc arg; + int ret; + + arg.failed_type = 0; + arg.failed_struct_ptr = 0; + arg.errbuf = errbuf; + arg.errlen = errlen ? *errlen : 0; + + ret = type_descriptor->check_constraints(type_descriptor, + struct_ptr, _asn_i_ctfailcb, &arg); + if(ret == -1 && errlen) + *errlen = arg.errlen; + + return ret; +} + diff --git a/lte/rrc/asn/constraints.h b/lte/rrc/asn/constraints.h new file mode 100644 index 000000000..5032345ee --- /dev/null +++ b/lte/rrc/asn/constraints.h @@ -0,0 +1,63 @@ +/*- + * Copyright (c) 2004, 2006 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _ASN1_CONSTRAINTS_VALIDATOR_H_ +#define _ASN1_CONSTRAINTS_VALIDATOR_H_ + +#include /* Platform-dependent types */ + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Validate the structure according to the ASN.1 constraints. + * If errbuf and errlen are given, they shall be pointing to the appropriate + * buffer space and its length before calling this function. Alternatively, + * they could be passed as NULL's. If constraints validation fails, + * errlen will contain the actual number of bytes taken from the errbuf + * to encode an error message (properly 0-terminated). + * + * RETURN VALUES: + * This function returns 0 in case all ASN.1 constraints are met + * and -1 if one or more constraints were failed. + */ +int +asn_check_constraints(struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, /* Target language's structure */ + char *errbuf, /* Returned error description */ + size_t *errlen /* Length of the error description */ + ); + + +/* + * Generic type for constraint checking callback, + * associated with every type descriptor. + */ +typedef int (asn_constr_check_f)( + struct asn_TYPE_descriptor_s *type_descriptor, + const void *struct_ptr, + asn_app_constraint_failed_f *optional_callback, /* Log the error */ + void *optional_app_key /* Opaque key passed to a callback */ + ); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +asn_constr_check_f asn_generic_no_constraint; /* No constraint whatsoever */ +asn_constr_check_f asn_generic_unknown_constraint; /* Not fully supported */ + +/* + * Invoke the callback with a complete error message. + */ +#define _ASN_CTFAIL if(ctfailcb) ctfailcb + +#ifdef __cplusplus +} +#endif + +#endif /* _ASN1_CONSTRAINTS_VALIDATOR_H_ */ diff --git a/lte/rrc/asn/der_encoder.c b/lte/rrc/asn/der_encoder.c new file mode 100644 index 000000000..1c014802a --- /dev/null +++ b/lte/rrc/asn/der_encoder.c @@ -0,0 +1,201 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, int constructed); + +/* + * The DER encoder of any type. + */ +asn_enc_rval_t +der_encode(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, + asn_app_consume_bytes_f *consume_bytes, void *app_key) { + + ASN_DEBUG("DER encoder invoked for %s", + type_descriptor->name); + + /* + * Invoke type-specific encoder. + */ + return type_descriptor->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, + consume_bytes, app_key); +} + +/* + * Argument type and callback necessary for der_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +/* + * A variant of the der_encode() which encodes the data into the provided buffer + */ +asn_enc_rval_t +der_encode_to_buffer(asn_TYPE_descriptor_t *type_descriptor, void *struct_ptr, + void *buffer, size_t buffer_size) { + enc_to_buf_arg arg; + asn_enc_rval_t ec; + + arg.buffer = buffer; + arg.left = buffer_size; + + ec = type_descriptor->der_encoder(type_descriptor, + struct_ptr, /* Pointer to the destination structure */ + 0, 0, encode_to_buffer_cb, &arg); + if(ec.encoded != -1) { + assert(ec.encoded == (ssize_t)(buffer_size - arg.left)); + /* Return the encoded contents size */ + } + return ec; +} + + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t +der_write_tags(asn_TYPE_descriptor_t *sd, + size_t struct_length, + int tag_mode, int last_tag_form, + ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ + asn_app_consume_bytes_f *cb, + void *app_key) { + const ber_tlv_tag_t *tags; /* Copy of tags stream */ + int tags_count; /* Number of tags */ + size_t overall_length; + ssize_t *lens; + int i; + + ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", + sd->name, tag_mode, sd->tags_count, + ber_tlv_tag_string(tag), + tag_mode + ?(sd->tags_count+1 + -((tag_mode == -1) && sd->tags_count)) + :sd->tags_count + ); + + if(tag_mode) { + /* + * Instead of doing shaman dance like we do in ber_check_tags(), + * allocate a small array on the stack + * and initialize it appropriately. + */ + int stag_offset; + ber_tlv_tag_t *tags_buf; + tags_buf = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t)); + if(!tags_buf) { /* Can fail on !x86 */ + errno = ENOMEM; + return -1; + } + tags_count = sd->tags_count + + 1 /* EXPLICIT or IMPLICIT tag is given */ + - ((tag_mode == -1) && sd->tags_count); + /* Copy tags over */ + tags_buf[0] = tag; + stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); + for(i = 1; i < tags_count; i++) + tags_buf[i] = sd->tags[i + stag_offset]; + tags = tags_buf; + } else { + tags = sd->tags; + tags_count = sd->tags_count; + } + + /* No tags to write */ + if(tags_count == 0) + return 0; + + lens = (ssize_t *)alloca(tags_count * sizeof(lens[0])); + if(!lens) { + errno = ENOMEM; + return -1; + } + + /* + * Array of tags is initialized. + * Now, compute the size of the TLV pairs, from right to left. + */ + overall_length = struct_length; + for(i = tags_count - 1; i >= 0; --i) { + lens[i] = der_write_TL(tags[i], overall_length, 0, 0, 0); + if(lens[i] == -1) return -1; + overall_length += lens[i]; + lens[i] = overall_length - lens[i]; + } + + if(!cb) return overall_length - struct_length; + + ASN_DEBUG("%s %s TL sequence (%d elements)", + cb?"Encoding":"Estimating", sd->name, tags_count); + + /* + * Encode the TL sequence for real. + */ + for(i = 0; i < tags_count; i++) { + ssize_t len; + int _constr; + + /* Check if this tag happens to be constructed */ + _constr = (last_tag_form || i < (tags_count - 1)); + + len = der_write_TL(tags[i], lens[i], cb, app_key, _constr); + if(len == -1) return -1; + } + + return overall_length - struct_length; +} + +static ssize_t +der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, + asn_app_consume_bytes_f *cb, void *app_key, + int constructed) { + uint8_t buf[32]; + size_t size = 0; + int buf_size = cb?sizeof(buf):0; + ssize_t tmp; + + /* Serialize tag (T from TLV) into possibly zero-length buffer */ + tmp = ber_tlv_tag_serialize(tag, buf, buf_size); + if(tmp == -1 || tmp > (ssize_t)sizeof(buf)) return -1; + size += tmp; + + /* Serialize length (L from TLV) into possibly zero-length buffer */ + tmp = der_tlv_length_serialize(len, buf+size, buf_size?buf_size-size:0); + if(tmp == -1) return -1; + size += tmp; + + if(size > sizeof(buf)) + return -1; + + /* + * If callback is specified, invoke it, and check its return value. + */ + if(cb) { + if(constructed) *buf |= 0x20; + if(cb(buf, size, app_key) < 0) + return -1; + } + + return size; +} diff --git a/lte/rrc/asn/der_encoder.h b/lte/rrc/asn/der_encoder.h new file mode 100644 index 000000000..61431c6db --- /dev/null +++ b/lte/rrc/asn/der_encoder.h @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _DER_ENCODER_H_ +#define _DER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The DER encoder of any type. May be invoked by the application. + * The ber_decode() function (ber_decoder.h) is an opposite of der_encode(). + */ +asn_enc_rval_t der_encode(struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ + ); + +/* A variant of der_encode() which encodes data into the pre-allocated buffer */ +asn_enc_rval_t der_encode_to_buffer( + struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (maximum) */ + ); + +/* + * Type of the generic DER encoder. + */ +typedef asn_enc_rval_t (der_type_encoder_f)( + struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ + ); + + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Write out leading TL[v] sequence according to the type definition. + */ +ssize_t der_write_tags( + struct asn_TYPE_descriptor_s *type_descriptor, + size_t struct_length, + int tag_mode, /* {-1,0,1}: IMPLICIT, no, EXPLICIT */ + int last_tag_form, /* {0,!0}: prim, constructed */ + ber_tlv_tag_t tag, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key + ); + +#ifdef __cplusplus +} +#endif + +#endif /* _DER_ENCODER_H_ */ diff --git a/lte/rrc/asn/per_decoder.c b/lte/rrc/asn/per_decoder.c new file mode 100644 index 000000000..220d7f9f7 --- /dev/null +++ b/lte/rrc/asn/per_decoder.c @@ -0,0 +1,93 @@ +#include +#include +#include + +/* + * Decode a "Production of a complete encoding", X.691#10.1. + * The complete encoding contains at least one byte, and is an integral + * multiple of 8 bytes. + */ +asn_dec_rval_t +uper_decode_complete(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size) { + asn_dec_rval_t rval; + + rval = uper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); + if(rval.consumed) { + /* + * We've always given 8-aligned data, + * so convert bits to integral bytes. + */ + rval.consumed += 7; + rval.consumed >>= 3; + } else if(rval.code == RC_OK) { + if(size) { + if(((const uint8_t *)buffer)[0] == 0) { + rval.consumed = 1; /* 1 byte */ + } else { + ASN_DEBUG("Expecting single zeroed byte"); + rval.code = RC_FAIL; + } + } else { + /* Must contain at least 8 bits. */ + rval.code = RC_WMORE; + } + } + + return rval; +} + +asn_dec_rval_t +uper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size, int skip_bits, int unused_bits) { + asn_codec_ctx_t s_codec_ctx; + asn_dec_rval_t rval; + asn_per_data_t pd; + + if(skip_bits < 0 || skip_bits > 7 + || unused_bits < 0 || unused_bits > 7 + || (unused_bits > 0 && !size)) + _ASN_DECODE_FAILED; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* Fill in the position indicator */ + memset(&pd, 0, sizeof(pd)); + pd.buffer = (const uint8_t *)buffer; + pd.nboff = skip_bits; + pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from */ + if(pd.nboff > pd.nbits) + _ASN_DECODE_FAILED; + + /* + * Invoke type-specific decoder. + */ + if(!td->uper_decoder) + _ASN_DECODE_FAILED; /* PER is not compiled in */ + rval = td->uper_decoder(opt_codec_ctx, td, 0, sptr, &pd); + if(rval.code == RC_OK) { + /* Return the number of consumed bits */ + rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + + pd.nboff - skip_bits; + ASN_DEBUG("PER decoding consumed %ld, counted %ld", + (long)rval.consumed, (long)pd.moved); + assert(rval.consumed == pd.moved); + } else { + /* PER codec is not a restartable */ + rval.consumed = 0; + } + return rval; +} + diff --git a/lte/rrc/asn/per_decoder.h b/lte/rrc/asn/per_decoder.h new file mode 100644 index 000000000..3b99c07ee --- /dev/null +++ b/lte/rrc/asn/per_decoder.h @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2005, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_DECODER_H_ +#define _PER_DECODER_H_ + +#include "liblte/config.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER decoder of a "complete encoding" as per X.691#10.1. + * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. + */ + asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Unaligned PER decoder of any ASN.1 type. May be invoked by the application. + * WARNING: This call returns the number of BITS read from the stream. Beware. + */ +LIBLTE_API asn_dec_rval_t uper_decode(struct asn_codec_ctx_s *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size, /* Size of data buffer */ + int skip_bits, /* Number of unused leading bits, 0..7 */ + int unused_bits /* Number of unused tailing bits, 0..7 */ + ); + + +/* + * Type of the type-specific PER decoder function. + */ +typedef asn_dec_rval_t (per_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, + asn_per_constraints_t *constraints, + void **struct_ptr, + asn_per_data_t *per_data + ); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_DECODER_H_ */ diff --git a/lte/rrc/asn/per_encoder.c b/lte/rrc/asn/per_encoder.c new file mode 100644 index 000000000..e76ef74a9 --- /dev/null +++ b/lte/rrc/asn/per_encoder.c @@ -0,0 +1,151 @@ +#include +#include +#include + +static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key); + +asn_enc_rval_t +uper_encode(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + return uper_encode_internal(td, 0, sptr, cb, app_key); +} + +/* + * Argument type and callback necessary for uper_encode_to_buffer(). + */ +typedef struct enc_to_buf_arg { + void *buffer; + size_t left; +} enc_to_buf_arg; +static int encode_to_buffer_cb(const void *buffer, size_t size, void *key) { + enc_to_buf_arg *arg = (enc_to_buf_arg *)key; + + if(arg->left < size) + return -1; /* Data exceeds the available buffer size */ + + memcpy(arg->buffer, buffer, size); + arg->buffer = ((char *)arg->buffer) + size; + arg->left -= size; + + return 0; +} + +asn_enc_rval_t +uper_encode_to_buffer(asn_TYPE_descriptor_t *td, void *sptr, void *buffer, size_t buffer_size) { + enc_to_buf_arg key; + + key.buffer = buffer; + key.left = buffer_size; + + if(td) ASN_DEBUG("Encoding \"%s\" using UNALIGNED PER", td->name); + + return uper_encode_internal(td, 0, sptr, encode_to_buffer_cb, &key); +} + +typedef struct enc_dyn_arg { + void *buffer; + size_t length; + size_t allocated; +} enc_dyn_arg; +static int +encode_dyn_cb(const void *buffer, size_t size, void *key) { + enc_dyn_arg *arg = key; + if(arg->length + size >= arg->allocated) { + void *p; + arg->allocated = arg->allocated ? (arg->allocated << 2) : size; + p = REALLOC(arg->buffer, arg->allocated); + if(!p) { + FREEMEM(arg->buffer); + memset(arg, 0, sizeof(*arg)); + return -1; + } + arg->buffer = p; + } + memcpy(((char *)arg->buffer) + arg->length, buffer, size); + arg->length += size; + return 0; +} +ssize_t +uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, void **buffer_r) { + asn_enc_rval_t er; + enc_dyn_arg key; + + memset(&key, 0, sizeof(key)); + + er = uper_encode_internal(td, constraints, sptr, encode_dyn_cb, &key); + switch(er.encoded) { + case -1: + FREEMEM(key.buffer); + return -1; + case 0: + FREEMEM(key.buffer); + key.buffer = MALLOC(1); + if(key.buffer) { + *(char *)key.buffer = '\0'; + *buffer_r = key.buffer; + return 1; + } else { + return -1; + } + default: + *buffer_r = key.buffer; + ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + return ((er.encoded + 7) >> 3); + } +} + +/* + * Internally useful functions. + */ + +/* Flush partially filled buffer */ +static int +_uper_encode_flush_outp(asn_per_outp_t *po) { + uint8_t *buf; + + if(po->nboff == 0 && po->buffer == po->tmpspace) + return 0; + + buf = po->buffer + (po->nboff >> 3); + /* Make sure we account for the last, partially filled */ + if(po->nboff & 0x07) { + buf[0] &= 0xff << (8 - (po->nboff & 0x07)); + buf++; + } + + return po->outper(po->tmpspace, buf - po->tmpspace, po->op_key); +} + +static asn_enc_rval_t +uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { + asn_per_outp_t po; + asn_enc_rval_t er; + + /* + * Invoke type-specific encoder. + */ + if(!td || !td->uper_encoder) + _ASN_ENCODE_FAILED; /* PER is not compiled in */ + + po.buffer = po.tmpspace; + po.nboff = 0; + po.nbits = 8 * sizeof(po.tmpspace); + po.outper = cb; + po.op_key = app_key; + po.flushed_bytes = 0; + + er = td->uper_encoder(td, constraints, sptr, &po); + if(er.encoded != -1) { + size_t bits_to_flush; + + bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; + + /* Set number of bits encoded to a firm value */ + er.encoded = (po.flushed_bytes << 3) + bits_to_flush; + + if(_uper_encode_flush_outp(&po)) + _ASN_ENCODE_FAILED; + } + + return er; +} + diff --git a/lte/rrc/asn/per_encoder.h b/lte/rrc/asn/per_encoder.h new file mode 100644 index 000000000..72cd6ba3e --- /dev/null +++ b/lte/rrc/asn/per_encoder.h @@ -0,0 +1,71 @@ +/*- + * Copyright (c) 2006, 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_ENCODER_H_ +#define _PER_ENCODER_H_ + +#include "liblte/config.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * Unaligned PER encoder of any ASN.1 type. May be invoked by the application. + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. Use the following formula to convert to bytes: + * bytes = ((.encoded + 7) / 8) + */ +asn_enc_rval_t uper_encode(struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ + void *app_key /* Arbitrary callback argument */ +); + +/* + * A variant of uper_encode() which encodes data into the existing buffer + * WARNING: This function returns the number of encoded bits in the .encoded + * field of the return value. + */ +LIBLTE_API asn_enc_rval_t uper_encode_to_buffer( + struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + void *buffer, /* Pre-allocated buffer */ + size_t buffer_size /* Initial buffer size (max) */ +); + +/* + * A variant of uper_encode_to_buffer() which allocates buffer itself. + * Returns the number of bytes in the buffer or -1 in case of failure. + * WARNING: This function produces a "Production of the complete encoding", + * with length of at least one octet. Contrast this to precise bit-packing + * encoding of uper_encode() and uper_encode_to_buffer(). + */ +ssize_t uper_encode_to_new_buffer( + struct asn_TYPE_descriptor_s *type_descriptor, + asn_per_constraints_t *constraints, + void *struct_ptr, /* Structure to be encoded */ + void **buffer_r /* Buffer allocated and returned */ +); + +/* + * Type of the generic PER encoder function. + */ +typedef asn_enc_rval_t (per_type_encoder_f)( + struct asn_TYPE_descriptor_s *type_descriptor, + asn_per_constraints_t *constraints, + void *struct_ptr, + asn_per_outp_t *per_output +); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_ENCODER_H_ */ diff --git a/lte/rrc/asn/per_opentype.c b/lte/rrc/asn/per_opentype.c new file mode 100644 index 000000000..ec404cf9b --- /dev/null +++ b/lte/rrc/asn/per_opentype.c @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include + +typedef struct uper_ugot_key { + asn_per_data_t oldpd; /* Old per data source */ + size_t unclaimed; + size_t ot_moved; /* Number of bits moved by OT processing */ + int repeat; +} uper_ugot_key; + +static int uper_ugot_refill(asn_per_data_t *pd); +static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); +static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); + +/* + * Encode an "open type field". + * #10.1, #10.2 + */ +int +uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + void *buf; + void *bptr; + ssize_t size; + size_t toGo; + + ASN_DEBUG("Open type put %s ...", td->name); + + size = uper_encode_to_new_buffer(td, constraints, sptr, &buf); + if(size <= 0) return -1; + + for(bptr = buf, toGo = size; toGo;) { + ssize_t maySave = uper_put_length(po, toGo); + ASN_DEBUG("Prepending length %d to %s and allowing to save %d", + (int)size, td->name, (int)maySave); + if(maySave < 0) break; + if(per_put_many_bits(po, bptr, maySave * 8)) break; + bptr = (char *)bptr + maySave; + toGo -= maySave; + } + + FREEMEM(buf); + if(toGo) return -1; + + ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", + td->name, (long)size); + + return 0; +} + +static asn_dec_rval_t +uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + ssize_t chunk_bytes; + int repeat; + uint8_t *buf = 0; + size_t bufLen = 0; + size_t bufSize = 0; + asn_per_data_t spd; + size_t padding; + + _ASN_STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s...", td->name); + + do { + chunk_bytes = uper_get_length(pd, -1, &repeat); + if(chunk_bytes < 0) { + FREEMEM(buf); + _ASN_DECODE_STARVED; + } + if(bufLen + chunk_bytes > bufSize) { + void *ptr; + bufSize = chunk_bytes + (bufSize << 2); + ptr = REALLOC(buf, bufSize); + if(!ptr) { + FREEMEM(buf); + _ASN_DECODE_FAILED; + } + buf = ptr; + } + if(per_get_many_bits(pd, buf + bufLen, 0, chunk_bytes << 3)) { + FREEMEM(buf); + _ASN_DECODE_STARVED; + } + bufLen += chunk_bytes; + } while(repeat); + + ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, + (long)bufLen); + + memset(&spd, 0, sizeof(spd)); + spd.buffer = buf; + spd.nbits = bufLen << 3; + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->uper_decoder(ctx, td, constraints, sptr, &spd); + ASN_DEBUG_INDENT_ADD(-4); + + if(rv.code == RC_OK) { + /* Check padding validity */ + padding = spd.nbits - spd.nboff; + if ((padding < 8 || + /* X.691#10.1.3 */ + (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && + per_get_few_bits(&spd, padding) == 0) { + /* Everything is cool */ + FREEMEM(buf); + return rv; + } + FREEMEM(buf); + if(padding >= 8) { + ASN_DEBUG("Too large padding %d in open type", (int)padding); + _ASN_DECODE_FAILED; + } else { + ASN_DEBUG("Non-zero padding"); + _ASN_DECODE_FAILED; + } + } else { + FREEMEM(buf); + /* rv.code could be RC_WMORE, nonsense in this context */ + rv.code = RC_FAIL; /* Noone would give us more */ + } + + return rv; +} + +static asn_dec_rval_t GCC_NOTUSED +uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + uper_ugot_key arg; + asn_dec_rval_t rv; + ssize_t padding; + + _ASN_STACK_OVERFLOW_CHECK(ctx); + + ASN_DEBUG("Getting open type %s from %s", td->name, + per_data_string(pd)); + arg.oldpd = *pd; + arg.unclaimed = 0; + arg.ot_moved = 0; + arg.repeat = 1; + pd->refill = uper_ugot_refill; + pd->refill_key = &arg; + pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ + pd->moved = 0; /* This now counts the open type size in bits */ + + ASN_DEBUG_INDENT_ADD(+4); + rv = td->uper_decoder(ctx, td, constraints, sptr, pd); + ASN_DEBUG_INDENT_ADD(-4); + +#define UPDRESTOREPD do { \ + /* buffer and nboff are valid, preserve them. */ \ + pd->nbits = arg.oldpd.nbits - (pd->moved - arg.ot_moved); \ + pd->moved = arg.oldpd.moved + (pd->moved - arg.ot_moved); \ + pd->refill = arg.oldpd.refill; \ + pd->refill_key = arg.oldpd.refill_key; \ + } while(0) + + if(rv.code != RC_OK) { + UPDRESTOREPD; + return rv; + } + + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + per_data_string(pd), + per_data_string(&arg.oldpd), + (int)arg.unclaimed, (int)arg.repeat); + + padding = pd->moved % 8; + if(padding) { + int32_t pvalue; + if(padding > 7) { + ASN_DEBUG("Too large padding %d in open type", + (int)padding); + rv.code = RC_FAIL; + UPDRESTOREPD; + return rv; + } + padding = 8 - padding; + ASN_DEBUG("Getting padding of %d bits", (int)padding); + pvalue = per_get_few_bits(pd, padding); + switch(pvalue) { + case -1: + ASN_DEBUG("Padding skip failed"); + UPDRESTOREPD; + _ASN_DECODE_STARVED; + case 0: break; + default: + ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", + (int)padding, (int)pvalue); + UPDRESTOREPD; + _ASN_DECODE_FAILED; + } + } + if(pd->nboff != pd->nbits) { + ASN_DEBUG("Open type %s overhead pd%s old%s", td->name, + per_data_string(pd), per_data_string(&arg.oldpd)); + if(1) { + UPDRESTOREPD; + _ASN_DECODE_FAILED; + } else { + arg.unclaimed += pd->nbits - pd->nboff; + } + } + + /* Adjust pd back so it points to original data */ + UPDRESTOREPD; + + /* Skip data not consumed by the decoder */ + if(arg.unclaimed) { + ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); + switch(per_skip_bits(pd, arg.unclaimed)) { + case -1: + ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + _ASN_DECODE_STARVED; + case 0: + ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + break; + default: + /* Padding must be blank */ + ASN_DEBUG("Non-blank unconsumed padding"); + _ASN_DECODE_FAILED; + } + arg.unclaimed = 0; + } + + if(arg.repeat) { + ASN_DEBUG("Not consumed the whole thing"); + rv.code = RC_FAIL; + return rv; + } + + return rv; +} + + +asn_dec_rval_t +uper_open_type_get(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + + return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); +} + +int +uper_open_type_skip(asn_codec_ctx_t *ctx, asn_per_data_t *pd) { + asn_TYPE_descriptor_t s_td; + asn_dec_rval_t rv; + + s_td.name = ""; + s_td.uper_decoder = uper_sot_suck; + + rv = uper_open_type_get(ctx, &s_td, 0, 0, pd); + if(rv.code != RC_OK) + return -1; + else + return 0; +} + +/* + * Internal functions. + */ + +static asn_dec_rval_t +uper_sot_suck(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)ctx; + (void)td; + (void)constraints; + (void)sptr; + + while(per_get_few_bits(pd, 24) >= 0); + + rv.code = RC_OK; + rv.consumed = pd->moved; + + return rv; +} + +static int +uper_ugot_refill(asn_per_data_t *pd) { + uper_ugot_key *arg = pd->refill_key; + ssize_t next_chunk_bytes, next_chunk_bits; + ssize_t avail; + + asn_per_data_t *oldpd = &arg->oldpd; + + ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", + (long)pd->moved, (long)oldpd->moved); + + /* Advance our position to where pd is */ + oldpd->buffer = pd->buffer; + oldpd->nboff = pd->nboff; + oldpd->nbits -= pd->moved - arg->ot_moved; + oldpd->moved += pd->moved - arg->ot_moved; + arg->ot_moved = pd->moved; + + if(arg->unclaimed) { + /* Refill the container */ + if(per_get_few_bits(oldpd, 1)) + return -1; + if(oldpd->nboff == 0) { + assert(0); + return -1; + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff - 1; + pd->nbits = oldpd->nbits; + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", + (long)pd->moved); + return 0; + } + + if(!arg->repeat) { + ASN_DEBUG("Want more but refill doesn't have it"); + return -1; + } + + next_chunk_bytes = uper_get_length(oldpd, -1, &arg->repeat); + ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", + (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + if(next_chunk_bytes < 0) return -1; + if(next_chunk_bytes == 0) { + pd->refill = 0; /* No more refills, naturally */ + assert(!arg->repeat); /* Implementation guarantee */ + } + next_chunk_bits = next_chunk_bytes << 3; + avail = oldpd->nbits - oldpd->nboff; + if(avail >= next_chunk_bits) { + pd->nbits = oldpd->nboff + next_chunk_bits; + arg->unclaimed = 0; + ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", + (long)next_chunk_bits, (long)oldpd->moved, + (long)oldpd->nboff, (long)oldpd->nbits, + (long)(oldpd->nbits - oldpd->nboff)); + } else { + pd->nbits = oldpd->nbits; + arg->unclaimed = next_chunk_bits - avail; + ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", + (long)avail, (long)next_chunk_bits, + (long)arg->unclaimed); + } + pd->buffer = oldpd->buffer; + pd->nboff = oldpd->nboff; + ASN_DEBUG("Refilled pd%s old%s", + per_data_string(pd), per_data_string(oldpd)); + return 0; +} + +static int +per_skip_bits(asn_per_data_t *pd, int skip_nbits) { + int hasNonZeroBits = 0; + while(skip_nbits > 0) { + int skip; + + /* per_get_few_bits() is more efficient when nbits <= 24 */ + if(skip_nbits < 24) + skip = skip_nbits; + else + skip = 24; + skip_nbits -= skip; + + switch(per_get_few_bits(pd, skip)) { + case -1: return -1; /* Starving */ + case 0: continue; /* Skipped empty space */ + default: hasNonZeroBits = 1; continue; + } + } + return hasNonZeroBits; +} diff --git a/lte/rrc/asn/per_opentype.h b/lte/rrc/asn/per_opentype.h new file mode 100644 index 000000000..facfaa637 --- /dev/null +++ b/lte/rrc/asn/per_opentype.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2007 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_OPENTYPE_H_ +#define _PER_OPENTYPE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); + +int uper_open_type_skip(asn_codec_ctx_t *opt_codec_ctx, asn_per_data_t *pd); + +int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_OPENTYPE_H_ */ diff --git a/lte/rrc/asn/per_support.c b/lte/rrc/asn/per_support.c new file mode 100644 index 000000000..0d089f495 --- /dev/null +++ b/lte/rrc/asn/per_support.c @@ -0,0 +1,483 @@ +/* + * Copyright (c) 2005-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +char * +per_data_string(asn_per_data_t *pd) { + static char buf[2][32]; + static int n; + n = (n+1) % 2; + snprintf(buf[n], sizeof(buf), + "{m=%ld span %+ld[%d..%d] (%d)}", + (long)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + (int)(pd->nbits - pd->nboff)); + return buf[n]; +} + +void +per_get_undo(asn_per_data_t *pd, int nbits) { + if((ssize_t)pd->nboff < nbits) { + assert((ssize_t)pd->nboff < nbits); + } else { + pd->nboff -= nbits; + pd->moved -= nbits; + } +} + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + */ +int32_t +per_get_few_bits(asn_per_data_t *pd, int nbits) { + size_t off; /* Next after last bit offset */ + ssize_t nleft; /* Number of bits left in this stream */ + uint32_t accum; + const uint8_t *buf; + + if(nbits < 0) + return -1; + + nleft = pd->nbits - pd->nboff; + if(nbits > nleft) { + int32_t tailv, vhead; + if(!pd->refill || nbits > 31) return -1; + /* Accumulate unused bytes before refill */ + ASN_DEBUG("Obtain the rest %d bits (want %d)", + (int)nleft, (int)nbits); + tailv = per_get_few_bits(pd, nleft); + if(tailv < 0) return -1; + /* Refill (replace pd contents with new data) */ + if(pd->refill(pd)) + return -1; + nbits -= nleft; + vhead = per_get_few_bits(pd, nbits); + /* Combine the rest of previous pd with the head of new one */ + tailv = (tailv << nbits) | vhead; /* Could == -1 */ + return tailv; + } + + /* + * Normalize position indicator. + */ + if(pd->nboff >= 8) { + pd->buffer += (pd->nboff >> 3); + pd->nbits -= (pd->nboff & ~0x07); + pd->nboff &= 0x07; + } + pd->moved += nbits; + pd->nboff += nbits; + off = pd->nboff; + buf = pd->buffer; + + /* + * Extract specified number of bits. + */ + if(off <= 8) + accum = nbits ? (buf[0]) >> (8 - off) : 0; + else if(off <= 16) + accum = ((buf[0] << 8) + buf[1]) >> (16 - off); + else if(off <= 24) + accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off); + else if(off <= 31) + accum = ((buf[0] << 24) + (buf[1] << 16) + + (buf[2] << 8) + (buf[3])) >> (32 - off); + else if(nbits <= 31) { + asn_per_data_t tpd = *pd; + /* Here are we with our 31-bits limit plus 1..7 bits offset. */ + per_get_undo(&tpd, nbits); + /* The number of available bits in the stream allow + * for the following operations to take place without + * invoking the ->refill() function */ + accum = per_get_few_bits(&tpd, nbits - 24) << 24; + accum |= per_get_few_bits(&tpd, 24); + } else { + per_get_undo(pd, nbits); + return -1; + } + + accum &= (((uint32_t)1 << nbits) - 1); + + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", + (int)nbits, (int)nleft, + (int)pd->moved, + (((long)pd->buffer) & 0xf), + (int)pd->nboff, (int)pd->nbits, + pd->buffer[0], + (int)(pd->nbits - pd->nboff), + (int)accum); + + return accum; +} + +/* + * Extract a large number of bits from the specified PER data pointer. + */ +int +per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int alright, int nbits) { + int32_t value; + + if(alright && (nbits & 7)) { + /* Perform right alignment of a first few bits */ + value = per_get_few_bits(pd, nbits & 0x07); + if(value < 0) return -1; + *dst++ = value; /* value is already right-aligned */ + nbits &= ~7; + } + + while(nbits) { + if(nbits >= 24) { + value = per_get_few_bits(pd, 24); + if(value < 0) return -1; + *(dst++) = value >> 16; + *(dst++) = value >> 8; + *(dst++) = value; + nbits -= 24; + } else { + value = per_get_few_bits(pd, nbits); + if(value < 0) return -1; + if(nbits & 7) { /* implies left alignment */ + value <<= 8 - (nbits & 7), + nbits += 8 - (nbits & 7); + if(nbits > 24) + *dst++ = value >> 24; + } + if(nbits > 16) + *dst++ = value >> 16; + if(nbits > 8) + *dst++ = value >> 8; + *dst++ = value; + break; + } + } + + return 0; +} + +/* + * Get the length "n" from the stream. + */ +ssize_t +uper_get_length(asn_per_data_t *pd, int ebits, int *repeat) { + ssize_t value; + + *repeat = 0; + + if(ebits >= 0) return per_get_few_bits(pd, ebits); + + value = per_get_few_bits(pd, 8); + if(value < 0) return -1; + if((value & 128) == 0) /* #10.9.3.6 */ + return (value & 0x7F); + if((value & 64) == 0) { /* #10.9.3.7 */ + value = ((value & 63) << 8) | per_get_few_bits(pd, 8); + if(value < 0) return -1; + return value; + } + value &= 63; /* this is "m" from X.691, #10.9.3.8 */ + if(value < 1 || value > 4) + return -1; + *repeat = 1; + return (16384 * value); +} + +/* + * Get the normally small length "n". + * This procedure used to decode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +ssize_t +uper_get_nslength(asn_per_data_t *pd) { + ssize_t length; + + ASN_DEBUG("Getting normally small length"); + + if(per_get_few_bits(pd, 1) == 0) { + length = per_get_few_bits(pd, 6) + 1; + if(length <= 0) return -1; + ASN_DEBUG("l=%d", (int)length); + return length; + } else { + int repeat; + length = uper_get_length(pd, -1, &repeat); + if(length >= 0 && !repeat) return length; + return -1; /* Error, or do not support >16K extensions */ + } +} + +/* + * Get the normally small non-negative whole number. + * X.691, #10.6 + */ +ssize_t +uper_get_nsnnwn(asn_per_data_t *pd) { + ssize_t value; + + value = per_get_few_bits(pd, 7); + if(value & 64) { /* implicit (value < 0) */ + value &= 63; + value <<= 2; + value |= per_get_few_bits(pd, 2); + if(value & 128) /* implicit (value < 0) */ + return -1; + if(value == 0) + return 0; + if(value >= 3) + return -1; + value = per_get_few_bits(pd, 8 * value); + return value; + } + + return value; +} + +/* + * X.691-11/2008, #11.6 + * Encoding of a normally small non-negative whole number + */ +int +uper_put_nsnnwn(asn_per_outp_t *po, int n) { + int bytes; + + if(n <= 63) { + if(n < 0) return -1; + return per_put_few_bits(po, n, 7); + } + if(n < 256) + bytes = 1; + else if(n < 65536) + bytes = 2; + else if(n < 256 * 65536) + bytes = 3; + else + return -1; /* This is not a "normally small" value */ + if(per_put_few_bits(po, bytes, 8)) + return -1; + + return per_put_few_bits(po, n, 8 * bytes); +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { + unsigned long lhalf; /* Lower half of the number*/ + long half; + + if(nbits <= 31) { + half = per_get_few_bits(pd, nbits); + if(half < 0) return -1; + *out_value = half; + return 0; + } + + if((size_t)nbits > 8 * sizeof(*out_value)) + return -1; /* RANGE */ + + half = per_get_few_bits(pd, 31); + if(half < 0) return -1; + + if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) + return -1; + + *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; + return 0; +} + + +/* X.691-2008/11, #11.5.6 -> #11.3 */ +int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits) { + /* + * Assume signed number can be safely coerced into + * unsigned of the same range. + * The following testing code will likely be optimized out + * by compiler if it is true. + */ + unsigned long uvalue1 = ULONG_MAX; + long svalue = uvalue1; + unsigned long uvalue2 = svalue; + assert(uvalue1 == uvalue2); + return uper_put_constrained_whole_number_u(po, v, nbits); +} + +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits) { + if(nbits <= 31) { + return per_put_few_bits(po, v, nbits); + } else { + /* Put higher portion first, followed by lower 31-bit */ + if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) + return -1; + return per_put_few_bits(po, v, 31); + } +} + +/* + * Put a small number of bits (<= 31). + */ +int +per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { + size_t off; /* Next after last bit offset */ + size_t omsk; /* Existing last byte meaningful bits mask */ + uint8_t *buf; + + if(obits <= 0 || obits >= 32) return obits ? -1 : 0; + + ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", + obits, (int)bits, po->buffer, (int)po->nboff); + + /* + * Normalize position indicator. + */ + if(po->nboff >= 8) { + po->buffer += (po->nboff >> 3); + po->nbits -= (po->nboff & ~0x07); + po->nboff &= 0x07; + } + + /* + * Flush whole-bytes output, if necessary. + */ + if(po->nboff + obits > po->nbits) { + int complete_bytes = (po->buffer - po->tmpspace); + ASN_DEBUG("[PER output %ld complete + %ld]", + (long)complete_bytes, (long)po->flushed_bytes); + if(po->outper(po->tmpspace, complete_bytes, po->op_key) < 0) + return -1; + if(po->nboff) + po->tmpspace[0] = po->buffer[0]; + po->buffer = po->tmpspace; + po->nbits = 8 * sizeof(po->tmpspace); + po->flushed_bytes += complete_bytes; + } + + /* + * Now, due to sizeof(tmpspace), we are guaranteed large enough space. + */ + buf = po->buffer; + omsk = ~((1 << (8 - po->nboff)) - 1); + off = (po->nboff + obits); + + /* Clear data of debris before meaningful bits */ + bits &= (((uint32_t)1 << obits) - 1); + + ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, + (int)bits, (int)bits, + (int)po->nboff, (int)off, + buf[0], (int)(omsk&0xff), + (int)(buf[0] & omsk)); + + if(off <= 8) /* Completely within 1 byte */ + po->nboff = off, + bits <<= (8 - off), + buf[0] = (buf[0] & omsk) | bits; + else if(off <= 16) + po->nboff = off, + bits <<= (16 - off), + buf[0] = (buf[0] & omsk) | (bits >> 8), + buf[1] = bits; + else if(off <= 24) + po->nboff = off, + bits <<= (24 - off), + buf[0] = (buf[0] & omsk) | (bits >> 16), + buf[1] = bits >> 8, + buf[2] = bits; + else if(off <= 31) + po->nboff = off, + bits <<= (32 - off), + buf[0] = (buf[0] & omsk) | (bits >> 24), + buf[1] = bits >> 16, + buf[2] = bits >> 8, + buf[3] = bits; + else { + per_put_few_bits(po, bits >> (obits - 24), 24); + per_put_few_bits(po, bits, obits - 24); + } + + ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", + (int)bits, (int)bits, buf[0], + (long)(po->buffer - po->tmpspace)); + + return 0; +} + + +/* + * Output a large number of bits. + */ +int +per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int nbits) { + + while(nbits) { + uint32_t value; + + if(nbits >= 24) { + value = (src[0] << 16) | (src[1] << 8) | src[2]; + src += 3; + nbits -= 24; + if(per_put_few_bits(po, value, 24)) + return -1; + } else { + value = src[0]; + if(nbits > 8) + value = (value << 8) | src[1]; + if(nbits > 16) + value = (value << 8) | src[2]; + if(nbits & 0x07) + value >>= (8 - (nbits & 0x07)); + if(per_put_few_bits(po, value, nbits)) + return -1; + break; + } + } + + return 0; +} + +/* + * Put the length "n" (or part of it) into the stream. + */ +ssize_t +uper_put_length(asn_per_outp_t *po, size_t length) { + + if(length <= 127) /* #10.9.3.6 */ + return per_put_few_bits(po, length, 8) + ? -1 : (ssize_t)length; + else if(length < 16384) /* #10.9.3.7 */ + return per_put_few_bits(po, length|0x8000, 16) + ? -1 : (ssize_t)length; + + length >>= 14; + if(length > 4) length = 4; + + return per_put_few_bits(po, 0xC0 | length, 8) + ? -1 : (ssize_t)(length << 14); +} + + +/* + * Put the normally small length "n" into the stream. + * This procedure used to encode length of extensions bit-maps + * for SET and SEQUENCE types. + */ +int +uper_put_nslength(asn_per_outp_t *po, size_t length) { + + if(length <= 64) { + /* #10.9.3.4 */ + if(length == 0) return -1; + return per_put_few_bits(po, length-1, 7) ? -1 : 0; + } else { + if(uper_put_length(po, length) != (ssize_t)length) { + /* This might happen in case of >16K extensions */ + return -1; + } + } + + return 0; +} + diff --git a/lte/rrc/asn/per_support.h b/lte/rrc/asn/per_support.h new file mode 100644 index 000000000..a75ac94fc --- /dev/null +++ b/lte/rrc/asn/per_support.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2005-2014 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _PER_SUPPORT_H_ +#define _PER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Pre-computed PER constraints. + */ +typedef const struct asn_per_constraint_s { + enum asn_per_constraint_flags { + APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ + APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ + APC_CONSTRAINED = 0x2, /* Fully constrained */ + APC_EXTENSIBLE = 0x4 /* May have extension */ + } flags; + int range_bits; /* Full number of bits in the range */ + int effective_bits; /* Effective bits */ + long lower_bound; /* "lb" value */ + long upper_bound; /* "ub" value */ +} asn_per_constraint_t; +typedef const struct asn_per_constraints_s { + struct asn_per_constraint_s value; + struct asn_per_constraint_s size; + int (*value2code)(unsigned int value); + int (*code2value)(unsigned int code); +} asn_per_constraints_t; + +/* + * This structure describes a position inside an incoming PER bit stream. + */ +typedef struct asn_per_data_s { + const uint8_t *buffer; /* Pointer to the octet stream */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits in the stream */ + size_t moved; /* Number of bits moved through this bit stream */ + int (*refill)(struct asn_per_data_s *); + void *refill_key; +} asn_per_data_t; + +/* + * Extract a small number of bits (<= 31) from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int32_t per_get_few_bits(asn_per_data_t *per_data, int get_nbits); + +/* Undo the immediately preceeding "get_few_bits" operation */ +void per_get_undo(asn_per_data_t *per_data, int get_nbits); + +/* + * Extract a large number of bits from the specified PER data pointer. + * This function returns -1 if the specified number of bits could not be + * extracted due to EOD or other conditions. + */ +int per_get_many_bits(asn_per_data_t *pd, uint8_t *dst, int right_align, + int get_nbits); + +/* + * Get the length "n" from the Unaligned PER stream. + */ +ssize_t uper_get_length(asn_per_data_t *pd, + int effective_bound_bits, + int *repeat); + +/* + * Get the normally small length "n". + */ +ssize_t uper_get_nslength(asn_per_data_t *pd); + +/* + * Get the normally small non-negative whole number. + */ +ssize_t uper_get_nsnnwn(asn_per_data_t *pd); + +/* X.691-2008/11, #11.5.6 */ +int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); + +/* Non-thread-safe debugging function, don't use it */ +char *per_data_string(asn_per_data_t *pd); + +/* + * This structure supports forming PER output. + */ +typedef struct asn_per_outp_s { + uint8_t *buffer; /* Pointer into the (tmpspace) */ + size_t nboff; /* Bit offset to the meaningful bit */ + size_t nbits; /* Number of bits left in (tmpspace) */ + uint8_t tmpspace[32]; /* Preliminary storage to hold data */ + int (*outper)(const void *data, size_t size, void *op_key); + void *op_key; /* Key for (outper) data callback */ + size_t flushed_bytes; /* Bytes already flushed through (outper) */ +} asn_per_outp_t; + +/* Output a small number of bits (<= 31) */ +int per_put_few_bits(asn_per_outp_t *per_data, uint32_t bits, int obits); + +/* Output a large number of bits */ +int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int put_nbits); + +/* X.691-2008/11, #11.5 */ +int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits); +int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); + +/* + * Put the length "n" to the Unaligned PER stream. + * This function returns the number of units which may be flushed + * in the next units saving iteration. + */ +ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length); + +/* + * Put the normally small length "n" to the Unaligned PER stream. + * Returns 0 or -1. + */ +int uper_put_nslength(asn_per_outp_t *po, size_t length); + +/* + * Put the normally small non-negative whole number. + */ +int uper_put_nsnnwn(asn_per_outp_t *po, int n); + +#ifdef __cplusplus +} +#endif + +#endif /* _PER_SUPPORT_H_ */ diff --git a/lte/rrc/asn/rrc_asn.h b/lte/rrc/asn/rrc_asn.h new file mode 100644 index 000000000..2feb85e25 --- /dev/null +++ b/lte/rrc/asn/rrc_asn.h @@ -0,0 +1,32 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#define EMIT_ASN_DEBUG 1 + +#include "MasterInformationBlock.h" +#include "per_encoder.h" +#include "xer_encoder.h" diff --git a/lte/rrc/asn/xer_decoder.c b/lte/rrc/asn/xer_decoder.c new file mode 100644 index 000000000..cb4b5f878 --- /dev/null +++ b/lte/rrc/asn/xer_decoder.c @@ -0,0 +1,365 @@ +/* + * Copyright (c) 2004, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include /* XER/XML parsing support */ + + +/* + * Decode the XER encoding of a given type. + */ +asn_dec_rval_t +xer_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const void *buffer, size_t size) { + asn_codec_ctx_t s_codec_ctx; + + /* + * Stack checker requires that the codec context + * must be allocated on the stack. + */ + if(opt_codec_ctx) { + if(opt_codec_ctx->max_stack_size) { + s_codec_ctx = *opt_codec_ctx; + opt_codec_ctx = &s_codec_ctx; + } + } else { + /* If context is not given, be security-conscious anyway */ + memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); + s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; + opt_codec_ctx = &s_codec_ctx; + } + + /* + * Invoke type-specific decoder. + */ + return td->xer_decoder(opt_codec_ctx, td, struct_ptr, 0, buffer, size); +} + + + +struct xer__cb_arg { + pxml_chunk_type_e chunk_type; + size_t chunk_size; + const void *chunk_buf; + int callback_not_invoked; +}; + +static int +xer__token_cb(pxml_chunk_type_e type, const void *_chunk_data, size_t _chunk_size, void *key) { + struct xer__cb_arg *arg = (struct xer__cb_arg *)key; + arg->chunk_type = type; + arg->chunk_size = _chunk_size; + arg->chunk_buf = _chunk_data; + arg->callback_not_invoked = 0; + return -1; /* Terminate the XML parsing */ +} + +/* + * Fetch the next token from the XER/XML stream. + */ +ssize_t +xer_next_token(int *stateContext, const void *buffer, size_t size, pxer_chunk_type_e *ch_type) { + struct xer__cb_arg arg; + int new_stateContext = *stateContext; + ssize_t ret; + + arg.callback_not_invoked = 1; + ret = pxml_parse(&new_stateContext, buffer, size, xer__token_cb, &arg); + if(ret < 0) return -1; + if(arg.callback_not_invoked) { + assert(ret == 0); /* No data was consumed */ + return 0; /* Try again with more data */ + } else { + assert(arg.chunk_size); + assert(arg.chunk_buf == buffer); + } + + /* + * Translate the XML chunk types into more convenient ones. + */ + switch(arg.chunk_type) { + case PXML_TEXT: + *ch_type = PXER_TEXT; + break; + case PXML_TAG: return 0; /* Want more */ + case PXML_TAG_END: + *ch_type = PXER_TAG; + break; + case PXML_COMMENT: + case PXML_COMMENT_END: + *ch_type = PXER_COMMENT; + break; + } + + *stateContext = new_stateContext; + return arg.chunk_size; +} + +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define RANGLE 0x3e /* '>' */ + +xer_check_tag_e +xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { + const char *buf = (const char *)buf_ptr; + const char *end; + xer_check_tag_e ct = XCT_OPENING; + + if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { + if(size >= 2) + ASN_DEBUG("Broken XML tag: \"%c...%c\"", + buf[0], buf[size - 1]); + return XCT_BROKEN; + } + + /* + * Determine the tag class. + */ + if(buf[1] == CSLASH) { + buf += 2; /* advance past "" */ + ct = XCT_CLOSING; + if(size > 0 && buf[size-1] == CSLASH) + return XCT_BROKEN; /* */ + } else { + buf++; /* advance past "<" */ + size -= 2; /* strip "<" and ">" */ + if(size > 0 && buf[size-1] == CSLASH) { + ct = XCT_BOTH; + size--; /* One more, for "/" */ + } + } + + /* Sometimes we don't care about the tag */ + if(!need_tag || !*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + /* + * Determine the tag name. + */ + for(end = buf + size; buf < end; buf++, need_tag++) { + int b = *buf, n = *need_tag; + if(b != n) { + if(n == 0) { + switch(b) { + case 0x09: case 0x0a: case 0x0c: case 0x0d: + case 0x20: + /* "": whitespace is normal */ + return ct; + } + } + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + } + if(b == 0) + return XCT_BROKEN; /* Embedded 0 in buf?! */ + } + if(*need_tag) + return (xer_check_tag_e)(XCT__UNK__MASK | ct); + + return ct; +} + + +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = (num_bytes); \ + buf_ptr = ((const char *)buf_ptr) + num; \ + size -= num; \ + consumed_myself += num; \ + } while(0) + +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself; \ + if(rval.code != RC_OK) \ + ASN_DEBUG("Failed with %d", rval.code); \ + return rval; \ + } while(0) + +#define XER_GOT_BODY(chunk_buf, chunk_size, size) do { \ + ssize_t converted_size = body_receiver \ + (struct_key, chunk_buf, chunk_size, \ + (size_t)chunk_size < size); \ + if(converted_size == -1) RETURN(RC_FAIL); \ + if(converted_size == 0 \ + && size == (size_t)chunk_size) \ + RETURN(RC_WMORE); \ + chunk_size = converted_size; \ + } while(0) +#define XER_GOT_EMPTY() do { \ + if(body_receiver(struct_key, 0, 0, size > 0) == -1) \ + RETURN(RC_FAIL); \ + } while(0) + +/* + * Generalized function for decoding the primitive values. + */ +asn_dec_rval_t +xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, + const char *xml_tag, /* Expected XML tag */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ) { + + asn_dec_rval_t rval; + ssize_t consumed_myself = 0; + + (void)opt_codec_ctx; + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + */ + if(ctx->phase > 1) RETURN(RC_FAIL); + for(;;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, buf_ptr, size, + &ch_type); + switch(ch_size) { + case -1: RETURN(RC_FAIL); + case 0: + RETURN(RC_WMORE); + default: + switch(ch_type) { + case PXER_COMMENT: /* Got XML comment */ + ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TEXT: + if(ctx->phase == 0) { + /* + * We have to ignore whitespace here, + * but in order to be forward compatible + * with EXTENDED-XER (EMBED-VALUES, #25) + * any text is just ignored here. + */ + } else { + XER_GOT_BODY(buf_ptr, ch_size, size); + } + ADVANCE(ch_size); + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + assert(ch_type == PXER_TAG && size); + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + /* + * Phase 0: + * Expecting the opening tag + * for the type being processed. + * Phase 1: + * Waiting for the closing XML tag. + */ + switch(tcv) { + case XCT_BOTH: + if(ctx->phase) break; + /* Finished decoding of an empty element */ + XER_GOT_EMPTY(); + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_OPENING: + if(ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + case XCT_CLOSING: + if(!ctx->phase) break; + ADVANCE(ch_size); + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + case XCT_UNKNOWN_BO: + /* + * Certain tags in the body may be expected. + */ + if(opt_unexpected_tag_decoder + && opt_unexpected_tag_decoder(struct_key, + buf_ptr, ch_size) >= 0) { + /* Tag's processed fine */ + ADVANCE(ch_size); + if(!ctx->phase) { + /* We are not expecting + * the closing tag anymore. */ + ctx->phase = 2; /* Phase out */ + RETURN(RC_OK); + } + continue; + } + /* Fall through */ + default: + break; /* Unexpected tag */ + } + + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); + break; /* Dark and mysterious things have just happened */ + } + + RETURN(RC_FAIL); +} + + +size_t +xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { + const char *p = (const char *)chunk_buf; + const char *pend = p + chunk_size; + + for(; p < pend; p++) { + switch(*p) { + /* X.693, #8.1.4 + * HORISONTAL TAB (9) + * LINE FEED (10) + * CARRIAGE RETURN (13) + * SPACE (32) + */ + case 0x09: case 0x0a: case 0x0d: case 0x20: + continue; + default: + break; + } + break; + } + return (p - (const char *)chunk_buf); +} + +/* + * This is a vastly simplified, non-validating XML tree skipper. + */ +int +xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth) { + assert(*depth > 0); + switch(tcv) { + case XCT_BOTH: + case XCT_UNKNOWN_BO: + /* These negate each other. */ + return 0; + case XCT_OPENING: + case XCT_UNKNOWN_OP: + ++(*depth); + return 0; + case XCT_CLOSING: + case XCT_UNKNOWN_CL: + if(--(*depth) == 0) + return (tcv == XCT_CLOSING) ? 2 : 1; + return 0; + default: + return -1; + } +} diff --git a/lte/rrc/asn/xer_decoder.h b/lte/rrc/asn/xer_decoder.h new file mode 100644 index 000000000..6988648e8 --- /dev/null +++ b/lte/rrc/asn/xer_decoder.h @@ -0,0 +1,105 @@ +/*- + * Copyright (c) 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_DECODER_H_ +#define _XER_DECODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* + * The XER decoder of any ASN.1 type. May be invoked by the application. + */ +asn_dec_rval_t xer_decode(struct asn_codec_ctx_s *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, /* Pointer to a target structure's pointer */ + const void *buffer, /* Data to be decoded */ + size_t size /* Size of data buffer */ + ); + +/* + * Type of the type-specific XER decoder function. + */ +typedef asn_dec_rval_t (xer_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, + struct asn_TYPE_descriptor_s *type_descriptor, + void **struct_ptr, + const char *opt_mname, /* Member name */ + const void *buf_ptr, size_t size + ); + +/******************************* + * INTERNALLY USEFUL FUNCTIONS * + *******************************/ + +/* + * Generalized function for decoding the primitive values. + * Used by more specialized functions, such as OCTET_STRING_decode_xer_utf8 + * and others. This function should not be used by applications, as its API + * is subject to changes. + */ +asn_dec_rval_t xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, + asn_struct_ctx_t *ctx, /* Type decoder context */ + void *struct_key, /* Treated as opaque pointer */ + const char *xml_tag, /* Expected XML tag name */ + const void *buf_ptr, size_t size, + int (*opt_unexpected_tag_decoder) + (void *struct_key, const void *chunk_buf, size_t chunk_size), + ssize_t (*body_receiver) + (void *struct_key, const void *chunk_buf, size_t chunk_size, + int have_more) + ); + + +/* + * Fetch the next XER (XML) token from the stream. + * The function returns the number of bytes occupied by the chunk type, + * returned in the _ch_type. The _ch_type is only set (and valid) when + * the return value is greater than 0. + */ + typedef enum pxer_chunk_type { + PXER_TAG, /* Complete XER tag */ + PXER_TEXT, /* Plain text between XER tags */ + PXER_COMMENT /* A comment, may be part of */ + } pxer_chunk_type_e; +ssize_t xer_next_token(int *stateContext, + const void *buffer, size_t size, pxer_chunk_type_e *_ch_type); + +/* + * This function checks the buffer against the tag name is expected to occur. + */ + typedef enum xer_check_tag { + XCT_BROKEN = 0, /* The tag is broken */ + XCT_OPENING = 1, /* This is the tag */ + XCT_CLOSING = 2, /* This is the tag */ + XCT_BOTH = 3, /* This is the tag */ + XCT__UNK__MASK = 4, /* Mask of everything unexpected */ + XCT_UNKNOWN_OP = 5, /* Unexpected tag */ + XCT_UNKNOWN_CL = 6, /* Unexpected tag */ + XCT_UNKNOWN_BO = 7 /* Unexpected tag */ + } xer_check_tag_e; +xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, + const char *need_tag); + +/* + * Get the number of bytes consisting entirely of XER whitespace characters. + * RETURN VALUES: + * >=0: Number of whitespace characters in the string. + */ +size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); + +/* + * Skip the series of anticipated extensions. + */ +int xer_skip_unknown(xer_check_tag_e tcv, ber_tlv_len_t *depth); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_DECODER_H_ */ diff --git a/lte/rrc/asn/xer_encoder.c b/lte/rrc/asn/xer_encoder.c new file mode 100644 index 000000000..aa7cf040a --- /dev/null +++ b/lte/rrc/asn/xer_encoder.c @@ -0,0 +1,67 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t +xer_encode(asn_TYPE_descriptor_t *td, void *sptr, + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er, tmper; + const char *mname; + size_t mlen; + int xcan = (xer_flags & XER_F_CANONICAL) ? 1 : 2; + + if(!td || !sptr) goto cb_failed; + + mname = td->xml_tag; + mlen = strlen(mname); + + _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); + + tmper = td->xer_encoder(td, sptr, 1, xer_flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + + _ASN_CALLBACK3("\n", xcan); + + er.encoded = 4 + xcan + (2 * mlen) + tmper.encoded; + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +/* + * This is a helper function for xer_fprint, which directs all incoming data + * into the provided file descriptor. + */ +static int +xer__print2fp(const void *buffer, size_t size, void *app_key) { + FILE *stream = (FILE *)app_key; + + if(fwrite(buffer, 1, size, stream) != size) + return -1; + + return 0; +} + +int +xer_fprint(FILE *stream, asn_TYPE_descriptor_t *td, void *sptr) { + asn_enc_rval_t er; + + if(!stream) stream = stdout; + if(!td || !sptr) + return -1; + + er = xer_encode(td, sptr, XER_F_BASIC, xer__print2fp, stream); + if(er.encoded == -1) + return -1; + + return fflush(stream); +} diff --git a/lte/rrc/asn/xer_encoder.h b/lte/rrc/asn/xer_encoder.h new file mode 100644 index 000000000..055e73c0c --- /dev/null +++ b/lte/rrc/asn/xer_encoder.h @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_ENCODER_H_ +#define _XER_ENCODER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct asn_TYPE_descriptor_s; /* Forward declaration */ + +/* Flags used by the xer_encode() and (*xer_type_encoder_f), defined below */ +enum xer_encoder_flags_e { + /* Mode of encoding */ + XER_F_BASIC = 0x01, /* BASIC-XER (pretty-printing) */ + XER_F_CANONICAL = 0x02 /* Canonical XER (strict rules) */ +}; + +/* + * The XER encoder of any type. May be invoked by the application. + */ +asn_enc_rval_t xer_encode(struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, + void *app_key /* Arbitrary callback argument */ + ); + +/* + * The variant of the above function which dumps the BASIC-XER (XER_F_BASIC) + * output into the chosen file pointer. + * RETURN VALUES: + * 0: The structure is printed. + * -1: Problem printing the structure. + * WARNING: No sensible errno value is returned. + */ +int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr); + +/* + * Type of the generic XER encoder. + */ +typedef asn_enc_rval_t (xer_type_encoder_f)( + struct asn_TYPE_descriptor_s *type_descriptor, + void *struct_ptr, /* Structure to be encoded */ + int ilevel, /* Level of indentation */ + enum xer_encoder_flags_e xer_flags, + asn_app_consume_bytes_f *consume_bytes_cb, /* Callback */ + void *app_key /* Arbitrary callback argument */ + ); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_ENCODER_H_ */ diff --git a/lte/rrc/asn/xer_support.c b/lte/rrc/asn/xer_support.c new file mode 100644 index 000000000..36b4bfbfc --- /dev/null +++ b/lte/rrc/asn/xer_support.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +/* Parser states */ +typedef enum { + ST_TEXT, + ST_TAG_START, + ST_TAG_BODY, + ST_TAG_QUOTE_WAIT, + ST_TAG_QUOTED_STRING, + ST_TAG_UNQUOTED_STRING, + ST_COMMENT_WAIT_DASH1, /* ""[0] */ + ST_COMMENT_CLO_RT /* "-->"[1] */ +} pstate_e; + +static const int +_charclass[256] = { + 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, + 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2, 2,2,0,0,0,0,0,0, /* 01234567 89 */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* ABCDEFG HIJKLMNO */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0, /* PQRSTUVW XYZ */ + 0,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3, /* abcdefg hijklmno */ + 3,3,3,3,3,3,3,3, 3,3,3,0,0,0,0,0 /* pqrstuvw xyz */ +}; +#define WHITESPACE(c) (_charclass[(unsigned char)(c)] == 1) +#define ALNUM(c) (_charclass[(unsigned char)(c)] >= 2) +#define ALPHA(c) (_charclass[(unsigned char)(c)] == 3) + +/* Aliases for characters, ASCII/UTF-8 */ +#define EXCLAM 0x21 /* '!' */ +#define CQUOTE 0x22 /* '"' */ +#define CDASH 0x2d /* '-' */ +#define CSLASH 0x2f /* '/' */ +#define LANGLE 0x3c /* '<' */ +#define CEQUAL 0x3d /* '=' */ +#define RANGLE 0x3e /* '>' */ +#define CQUEST 0x3f /* '?' */ + +/* Invoke token callback */ +#define TOKEN_CB_CALL(type, _ns, _current_too, _final) do { \ + int _ret; \ + pstate_e ns = _ns; \ + ssize_t _sz = (p - chunk_start) + _current_too; \ + if (!_sz) { \ + /* Shortcut */ \ + state = _ns; \ + break; \ + } \ + _ret = cb(type, chunk_start, _sz, key); \ + if(_ret < _sz) { \ + if(_current_too && _ret == -1) \ + state = ns; \ + goto finish; \ + } \ + chunk_start = p + _current_too; \ + state = ns; \ + } while(0) + +#define TOKEN_CB(_type, _ns, _current_too) \ + TOKEN_CB_CALL(_type, _ns, _current_too, 0) + +#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END +#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END + +#define TOKEN_CB_FINAL(_type, _ns, _current_too) \ + TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + +/* + * Parser itself + */ +ssize_t pxml_parse(int *stateContext, const void *xmlbuf, size_t size, pxml_callback_f *cb, void *key) { + pstate_e state = (pstate_e)*stateContext; + const char *chunk_start = (const char *)xmlbuf; + const char *p = chunk_start; + const char *end = p + size; + + for(; p < end; p++) { + int C = *(const unsigned char *)p; + switch(state) { + case ST_TEXT: + /* + * Initial state: we're in the middle of some text, + * or just have started. + */ + if (C == LANGLE) + /* We're now in the tag, probably */ + TOKEN_CB(PXML_TEXT, ST_TAG_START, 0); + break; + case ST_TAG_START: + if (ALPHA(C) || (C == CSLASH)) + state = ST_TAG_BODY; + else if (C == EXCLAM) + state = ST_COMMENT_WAIT_DASH1; + else + /* + * Not characters and not whitespace. + * Must be something like "3 < 4". + */ + TOKEN_CB(PXML_TEXT, ST_TEXT, 1);/* Flush as data */ + break; + case ST_TAG_BODY: + switch(C) { + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + case LANGLE: + /* + * The previous tag wasn't completed, but still + * recognized as valid. (Mozilla-compatible) + */ + TOKEN_CB_FINAL(PXML_TAG, ST_TAG_START, 0); + break; + case CEQUAL: + state = ST_TAG_QUOTE_WAIT; + break; + } + break; + case ST_TAG_QUOTE_WAIT: + /* + * State after the equal sign ("=") in the tag. + */ + switch(C) { + case CQUOTE: + state = ST_TAG_QUOTED_STRING; + break; + case RANGLE: + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + break; + default: + if(!WHITESPACE(C)) + /* Unquoted string value */ + state = ST_TAG_UNQUOTED_STRING; + } + break; + case ST_TAG_QUOTED_STRING: + /* + * Tag attribute's string value in quotes. + */ + if(C == CQUOTE) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_TAG_UNQUOTED_STRING: + if(C == RANGLE) { + /* End of the tag */ + TOKEN_CB_FINAL(PXML_TAG, ST_TEXT, 1); + } else if(WHITESPACE(C)) { + /* Return back to the tag state */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH1: + if(C == CDASH) { + state = ST_COMMENT_WAIT_DASH2; + } else { + /* Some ordinary tag. */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT_WAIT_DASH2: + if(C == CDASH) { + /* Seen "<--" */ + state = ST_COMMENT; + } else { + /* Some ordinary tag */ + state = ST_TAG_BODY; + } + break; + case ST_COMMENT: + if(C == CDASH) { + state = ST_COMMENT_CLO_DASH2; + } + break; + case ST_COMMENT_CLO_DASH2: + if(C == CDASH) { + state = ST_COMMENT_CLO_RT; + } else { + /* This is not an end of a comment */ + state = ST_COMMENT; + } + break; + case ST_COMMENT_CLO_RT: + if(C == RANGLE) { + TOKEN_CB_FINAL(PXML_COMMENT, ST_TEXT, 1); + } else if(C == CDASH) { + /* Maintain current state, still waiting for '>' */ + } else { + state = ST_COMMENT; + } + break; + } /* switch(*ptr) */ + } /* for() */ + + /* + * Flush the partially processed chunk, state permitting. + */ + if(p - chunk_start) { + switch (state) { + case ST_COMMENT: + TOKEN_CB(PXML_COMMENT, state, 0); + break; + case ST_TEXT: + TOKEN_CB(PXML_TEXT, state, 0); + break; + default: break; /* a no-op */ + } + } + +finish: + *stateContext = (int)state; + return chunk_start - (const char *)xmlbuf; +} + diff --git a/lte/rrc/asn/xer_support.h b/lte/rrc/asn/xer_support.h new file mode 100644 index 000000000..8b01944ab --- /dev/null +++ b/lte/rrc/asn/xer_support.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2003, 2004 X/IO Labs, xiolabs.com. + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _XER_SUPPORT_H_ +#define _XER_SUPPORT_H_ + +#include /* Platform-specific types */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Types of data transferred to the application. + */ +typedef enum { + PXML_TEXT, /* Plain text between XML tags. */ + PXML_TAG, /* A tag, starting with '<'. */ + PXML_COMMENT, /* An XML comment, including "". */ + /* + * The following chunk types are reported if the chunk + * terminates the specified XML element. + */ + PXML_TAG_END, /* Tag ended */ + PXML_COMMENT_END /* Comment ended */ +} pxml_chunk_type_e; + +/* + * Callback function that is called by the parser when parsed data is + * available. The _opaque is the pointer to a field containing opaque user + * data specified in pxml_create() call. The chunk type is _type and the text + * data is the piece of buffer identified by _bufid (as supplied to + * pxml_feed() call) starting at offset _offset and of _size bytes size. + * The chunk is NOT '\0'-terminated. + */ +typedef int (pxml_callback_f)(pxml_chunk_type_e _type, + const void *_chunk_data, size_t _chunk_size, void *_key); + +/* + * Parse the given buffer as it were a chunk of XML data. + * Invoke the specified callback each time the meaninful data is found. + * This function returns number of bytes consumed from the bufer. + * It will always be lesser than or equal to the specified _size. + * The next invocation of this function must account the difference. + */ +ssize_t pxml_parse(int *_stateContext, const void *_buf, size_t _size, + pxml_callback_f *cb, void *_key); + +#ifdef __cplusplus +} +#endif + +#endif /* _XER_SUPPORT_H_ */ diff --git a/lte/rrc/include/liblte/rrc/rrc.h b/lte/rrc/include/liblte/rrc/rrc.h new file mode 100644 index 000000000..05c84936f --- /dev/null +++ b/lte/rrc/include/liblte/rrc/rrc.h @@ -0,0 +1,47 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + +#include +#include + +#ifndef _LTE_RRC_ +#define _LTE_RRC_ + +#ifdef __cplusplus + extern "C" { +#endif + +#include "liblte/config.h" + +#include "liblte/rrc/rrc_msg/bcch.h" + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h b/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h new file mode 100644 index 000000000..193c5e4f6 --- /dev/null +++ b/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h @@ -0,0 +1,48 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + + +#ifndef BCCH_ +#define BCCH_ + +#include "liblte/config.h" +#include "liblte/phy/common/phy_common.h" + +#include + +LIBLTE_API int bcch_bch_mib_pack(lte_cell_t *cell, + uint32_t sfn, + uint8_t *buffer, + uint32_t buffer_size_bytes); + +LIBLTE_API int bcch_bch_mib_unpack(uint8_t *buffer, + uint32_t msg_nof_bits, + lte_cell_t *cell, + uint32_t *sfn); + +#endif // AGC_ diff --git a/lte/rrc/lib/CMakeLists.txt b/lte/rrc/lib/CMakeLists.txt new file mode 100644 index 000000000..eb1896ff3 --- /dev/null +++ b/lte/rrc/lib/CMakeLists.txt @@ -0,0 +1,54 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + +######################################################################## +# Recurse subdirectories and compile all source files into the same lib +######################################################################## +FILE(GLOB modules *) +SET(SOURCES_ALL "") +FOREACH (_module ${modules}) + IF(IS_DIRECTORY ${_module}) + FILE(GLOB_RECURSE tmp "${_module}/src/*.c") + LIST(APPEND SOURCES_ALL ${tmp}) + ENDIF(IS_DIRECTORY ${_module}) +ENDFOREACH() + +ADD_LIBRARY(lte_rrc SHARED ${SOURCES_ALL}) +TARGET_LINK_LIBRARIES(lte_rrc rrc_asn m) +INSTALL(TARGETS lte_rrc DESTINATION ${LIBRARY_DIR}) +LIBLTE_SET_PIC(lte_rrc) + +######################################################################## +# Recurse subdirectories and find all directories with a CMakeLists.txt file in it +######################################################################## +FILE(GLOB_RECURSE cmakefiles CMakeLists.txt) +FOREACH (_file ${cmakefiles}) + GET_FILENAME_COMPONENT(dir ${_file} PATH) + IF (NOT ${dir} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) + ADD_SUBDIRECTORY(${dir}) + ENDIF () +ENDFOREACH() + + + + + + diff --git a/lte/rrc/lib/rrc_msg/src/bcch.c b/lte/rrc/lib/rrc_msg/src/bcch.c new file mode 100644 index 000000000..c97e724bf --- /dev/null +++ b/lte/rrc/lib/rrc_msg/src/bcch.c @@ -0,0 +1,160 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include + +#include "liblte/rrc/rrc_msg/bcch.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + + +int bcch_bch_mib_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buffer_size_bytes) { + + MasterInformationBlock_t req; + + switch (cell->nof_prb) { + case 6: + req.dl_Bandwidth = dl_Bandwidth_n6; + break; + case 15: + req.dl_Bandwidth = dl_Bandwidth_n15; + break; + case 25: + req.dl_Bandwidth = dl_Bandwidth_n25; + break; + case 50: + req.dl_Bandwidth = dl_Bandwidth_n50; + break; + case 75: + req.dl_Bandwidth = dl_Bandwidth_n75; + break; + case 100: + req.dl_Bandwidth = dl_Bandwidth_n100; + break; + default: + fprintf(stderr, "Invalid bandwidth %d PRB\n", cell->nof_prb); + return LIBLTE_ERROR; + } + if (cell->phich_length == PHICH_NORM) { + req.phich_Config.phich_Duration = phich_Duration_normal; + } else { + req.phich_Config.phich_Duration = phich_Duration_extended; + } + switch(cell->phich_resources) { + case R_1: + req.phich_Config.phich_Resource = phich_Resource_one; + break; + case R_1_2: + req.phich_Config.phich_Resource = phich_Resource_half; + break; + case R_1_6: + req.phich_Config.phich_Resource = phich_Resource_oneSixth; + break; + case R_2: + req.phich_Config.phich_Resource = phich_Resource_two; + break; + } + sfn=(sfn>>2); + req.systemFrameNumber.buf = (uint8_t*) &sfn; + req.systemFrameNumber.size = 1; + int spare = 0; + req.spare.buf = (uint8_t*) &spare; + req.spare.size = 2; + req.spare.bits_unused = 6; + + asn_enc_rval_t n = uper_encode_to_buffer(&asn_DEF_MasterInformationBlock, (void*) &req, buffer, buffer_size_bytes); + if (n.encoded == -1) { + printf("Encoding failed.\n"); + printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); + return LIBLTE_ERROR; + } else { + printf("Encoding ok\n"); + } + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); + return LIBLTE_SUCCESS; +} + +int bcch_bch_mib_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, uint32_t *sfn) { + asn_codec_ctx_t *opt_codec_ctx = NULL; + MasterInformationBlock_t *req = calloc(1, sizeof(MasterInformationBlock_t)); + if (!req) { + perror("calloc"); + return LIBLTE_ERROR; + } + asn_dec_rval_t n = uper_decode(opt_codec_ctx, &asn_DEF_MasterInformationBlock, (void**) &req, &buffer, msg_nof_bits/8,0,msg_nof_bits%8); + if (n.consumed == -1) { + printf("Decoding failed.\n"); + return LIBLTE_ERROR; + } else { + printf("Decoding ok\n"); + } + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); + + switch(req->dl_Bandwidth) { + case dl_Bandwidth_n6: + cell->nof_ports = 6; + break; + case dl_Bandwidth_n15: + cell->nof_ports = 15; + break; + case dl_Bandwidth_n25: + cell->nof_ports = 25; + break; + case dl_Bandwidth_n50: + cell->nof_ports = 50; + break; + case dl_Bandwidth_n75: + cell->nof_ports = 75; + break; + } + if (req->phich_Config.phich_Duration == phich_Duration_normal) { + cell->phich_length = PHICH_NORM; + } else { + cell->phich_length = PHICH_EXT; + } + switch(req->phich_Config.phich_Resource) { + case phich_Resource_one: + cell->phich_resources = R_1; + break; + case phich_Resource_half: + cell->phich_resources = R_1_2; + break; + case phich_Resource_oneSixth: + cell->phich_resources = R_1_6; + break; + case phich_Resource_two: + cell->phich_resources = R_2; + break; + } + int sfn_i=0;; + memcpy(&sfn_i, req->systemFrameNumber.buf, req->systemFrameNumber.size); + if (sfn) { + *sfn=(sfn_i<<2); + } + return LIBLTE_SUCCESS; +} diff --git a/lte/rrc/lib/rrc_msg/test/CMakeLists.txt b/lte/rrc/lib/rrc_msg/test/CMakeLists.txt new file mode 100644 index 000000000..4d89fa392 --- /dev/null +++ b/lte/rrc/lib/rrc_msg/test/CMakeLists.txt @@ -0,0 +1,29 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + +######################################################################## +# BCCH packing TEST +######################################################################## + +ADD_EXECUTABLE(bcch_bch_test bcch_bch_test.c) +TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc) + +ADD_TEST(bcch_bch_test_1 bcch_bch_test) diff --git a/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c b/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c new file mode 100644 index 000000000..6b403920b --- /dev/null +++ b/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c @@ -0,0 +1,50 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liblte/rrc/rrc.h" +#include "rrc_asn.h" + + + +int main(int argc, char **argv) { + uint8_t buffer[1024]; + lte_cell_t cell; + cell.nof_ports = 1; + cell.nof_prb = 25; + cell.phich_length = PHICH_NORM; + cell.phich_resources = 1; + bcch_bch_mib_pack(&cell, 123, buffer, 1024); +} \ No newline at end of file From 0b3cbb0740bf6c77120c901e2cc551498b707a27 Mon Sep 17 00:00:00 2001 From: ismagom Date: Fri, 17 Oct 2014 20:16:20 +0200 Subject: [PATCH 02/55] BCCH-BCH test compiling ok --- CMakeLists.txt | 2 ++ lte/CMakeLists.txt | 1 + lte/phy/include/liblte/phy/common/phy_common.h | 8 +++++--- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8abc0c063..58d95f281 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -152,6 +152,8 @@ MESSAGE(STATUS "Building for version: ${VERSION}") ######################################################################## INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/common/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/phy/include/) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/include/) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/asn/) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/cuhd/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/graphics/include) diff --git a/lte/CMakeLists.txt b/lte/CMakeLists.txt index a20e90685..83bc98dce 100644 --- a/lte/CMakeLists.txt +++ b/lte/CMakeLists.txt @@ -25,4 +25,5 @@ ADD_SUBDIRECTORY(phy) ADD_SUBDIRECTORY(mac) ADD_SUBDIRECTORY(rlc) +ADD_SUBDIRECTORY(rrc) ADD_SUBDIRECTORY(pdcp) diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index 52dc3a3b6..7ae251baf 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -107,20 +107,22 @@ typedef enum {CPNORM, CPEXT} lte_cp_t; #define NOF_TC_CB_SIZES 188 +typedef enum LIBLTE_API { PHICH_NORM, PHICH_EXT} phich_length_t; +typedef enum LIBLTE_API { R_1_6, R_1_2, R_1, R_2} phich_resources_t; + typedef struct LIBLTE_API { uint32_t nof_prb; uint32_t nof_ports; uint32_t id; lte_cp_t cp; + phich_length_t phich_length; + phich_resources_t phich_resources; }lte_cell_t; typedef enum LIBLTE_API { SINGLE_ANTENNA,TX_DIVERSITY, SPATIAL_MULTIPLEX } lte_mimo_type_t; -typedef enum LIBLTE_API { PHICH_NORM, PHICH_EXT} phich_length_t; -typedef enum LIBLTE_API { R_1_6, R_1_2, R_1, R_2} phich_resources_t; - typedef enum LIBLTE_API { LTE_BPSK = 1, LTE_QPSK = 2, LTE_QAM16 = 4, LTE_QAM64 = 6 } lte_mod_t; From 1adfc16e1de51f4e9e7da3da039f30a611c53565 Mon Sep 17 00:00:00 2001 From: ismagom Date: Fri, 17 Oct 2014 20:44:01 +0200 Subject: [PATCH 03/55] Changed char for bits to uint8_t --- cmake/modules/CheckFunctionExists.c | 6 +-- lte/phy/examples/cell_measurement.c | 4 +- lte/phy/examples/hl_example.c | 2 +- lte/phy/examples/ll_example.c | 2 +- lte/phy/examples/pdsch_enodeb.c | 4 +- lte/phy/examples/pdsch_ue.c | 2 +- lte/phy/include/liblte/phy/common/sequence.h | 2 +- lte/phy/include/liblte/phy/fec/convcoder.h | 6 +-- lte/phy/include/liblte/phy/fec/crc.h | 10 ++-- lte/phy/include/liblte/phy/fec/rm_conv.h | 6 +-- lte/phy/include/liblte/phy/fec/rm_turbo.h | 8 ++-- lte/phy/include/liblte/phy/fec/turbocoder.h | 2 +- lte/phy/include/liblte/phy/fec/turbodecoder.h | 4 +- lte/phy/include/liblte/phy/fec/viterbi.h | 14 +++--- lte/phy/include/liblte/phy/io/binsource.h | 12 ++--- lte/phy/include/liblte/phy/modem/demod_hard.h | 4 +- lte/phy/include/liblte/phy/modem/mod.h | 4 +- lte/phy/include/liblte/phy/phch/dci.h | 2 +- lte/phy/include/liblte/phy/phch/pbch.h | 6 +-- lte/phy/include/liblte/phy/phch/pcfich.h | 2 +- lte/phy/include/liblte/phy/phch/pdcch.h | 2 +- lte/phy/include/liblte/phy/phch/pdsch.h | 8 ++-- lte/phy/include/liblte/phy/phch/phich.h | 6 +-- .../liblte/phy/scrambling/scrambling.h | 6 +-- lte/phy/include/liblte/phy/ue/ue_celldetect.h | 2 +- lte/phy/include/liblte/phy/ue/ue_dl.h | 2 +- lte/phy/include/liblte/phy/utils/bit.h | 8 ++-- lte/phy/include/liblte/phy/utils/pack.h | 9 +++- lte/phy/include/liblte/phy/utils/vector.h | 10 ++-- lte/phy/lib/ch_estimation/src/refsignal.c | 2 +- .../lib/ch_estimation/test/chest_test_ul.c | 2 +- lte/phy/lib/common/src/sequence.c | 2 +- lte/phy/lib/fec/src/convcoder.c | 4 +- lte/phy/lib/fec/src/crc.c | 24 +++++----- lte/phy/lib/fec/src/rm_conv.c | 4 +- lte/phy/lib/fec/src/rm_turbo.c | 2 +- lte/phy/lib/fec/src/tc_interl_umts.c | 2 +- lte/phy/lib/fec/src/turbocoder.c | 8 ++-- lte/phy/lib/fec/src/turbodecoder.c | 4 +- lte/phy/lib/fec/src/viterbi.c | 16 +++---- lte/phy/lib/fec/src/viterbi37.h | 4 +- lte/phy/lib/fec/src/viterbi37_port.c | 8 ++-- lte/phy/lib/fec/src/viterbi39.h | 2 +- lte/phy/lib/fec/src/viterbi39_port.c | 8 ++-- lte/phy/lib/fec/test/crc_test.c | 14 +++--- lte/phy/lib/fec/test/crc_test.h | 8 ++-- lte/phy/lib/fec/test/rm_conv_test.c | 6 +-- lte/phy/lib/fec/test/rm_turbo_test.c | 8 ++-- lte/phy/lib/fec/test/turbocoder_test.c | 14 +++--- lte/phy/lib/fec/test/turbocoder_test.h | 8 ++-- lte/phy/lib/fec/test/viterbi_test.c | 18 +++---- lte/phy/lib/fec/test/viterbi_test.h | 4 +- lte/phy/lib/io/src/binsource.c | 8 ++-- lte/phy/lib/modem/src/demod_hard.c | 2 +- lte/phy/lib/modem/src/hard_demod_lte.c | 16 +++---- lte/phy/lib/modem/src/hard_demod_lte.h | 8 ++-- lte/phy/lib/modem/src/mod.c | 4 +- lte/phy/lib/modem/test/modem_test.c | 6 +-- lte/phy/lib/modem/test/soft_demod_test.c | 6 +-- lte/phy/lib/phch/src/dci.c | 16 +++---- lte/phy/lib/phch/src/pbch.c | 18 +++---- lte/phy/lib/phch/src/pcfich.c | 8 ++-- lte/phy/lib/phch/src/pdcch.c | 16 +++---- lte/phy/lib/phch/src/pdsch.c | 48 +++++++++---------- lte/phy/lib/phch/src/phich.c | 12 ++--- lte/phy/lib/phch/src/regs.c | 2 +- lte/phy/lib/phch/test/dci_unpacking.c | 4 +- lte/phy/lib/phch/test/pdsch_file_test.c | 2 +- lte/phy/lib/phch/test/pdsch_test.c | 4 +- lte/phy/lib/phch/test/phich_file_test.c | 2 +- lte/phy/lib/phch/test/phich_test.c | 2 +- lte/phy/lib/scrambling/src/scrambling.c | 6 +-- lte/phy/lib/scrambling/test/scrambling_test.c | 6 +-- lte/phy/lib/ue/src/ue_celldetect.c | 2 +- lte/phy/lib/ue/src/ue_dl.c | 2 +- lte/phy/lib/ue/src/ue_sync.c | 2 +- lte/phy/lib/utils/src/bit.c | 12 ++--- lte/phy/lib/utils/src/dft.c | 8 ++-- lte/phy/lib/utils/src/mux.c | 10 ++-- lte/phy/lib/utils/src/pack.c | 8 ++-- lte/phy/lib/utils/src/vector.c | 10 ++-- lte/rrc/asn/INTEGER.c | 2 +- lte/rrc/asn/per_support.c | 2 +- lte/rrc/asn/xer_decoder.c | 2 +- 84 files changed, 294 insertions(+), 289 deletions(-) diff --git a/cmake/modules/CheckFunctionExists.c b/cmake/modules/CheckFunctionExists.c index 9fdea2866..1fbdf9c53 100644 --- a/cmake/modules/CheckFunctionExists.c +++ b/cmake/modules/CheckFunctionExists.c @@ -1,12 +1,12 @@ #ifdef CHECK_FUNCTION_EXISTS -char CHECK_FUNCTION_EXISTS(); +uint8_t CHECK_FUNCTION_EXISTS(); #ifdef __CLASSIC_C__ int main(){ int ac; - char*av[]; + uint8_t*av[]; #else -int main(int ac, char*av[]){ +int main(int ac, uint8_t*av[]){ #endif float ac2 = sqrtf(rand()); diff --git a/lte/phy/examples/cell_measurement.c b/lte/phy/examples/cell_measurement.c index 1e2baf724..4e01b0262 100644 --- a/lte/phy/examples/cell_measurement.c +++ b/lte/phy/examples/cell_measurement.c @@ -105,7 +105,7 @@ void parse_args(prog_args_t *args, int argc, char **argv) { /**********************************************************************/ /* TODO: Do something with the output data */ -char data[10000]; +uint8_t data[10000]; int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { DEBUG(" ---- Receive %d samples ---- \n", nsamples); @@ -167,7 +167,7 @@ int main(int argc, char **argv) { int sf_re = SF_LEN_RE(cell.nof_prb, cell.cp); cf_t *sf_symbols = vec_malloc(sf_re * sizeof(cf_t)); - unsigned int nframes=0; + uint32_t nframes=0; /* Main loop */ while (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1) { diff --git a/lte/phy/examples/hl_example.c b/lte/phy/examples/hl_example.c index 2d0aa1734..1e5541265 100644 --- a/lte/phy/examples/hl_example.c +++ b/lte/phy/examples/hl_example.c @@ -103,7 +103,7 @@ int main(int argc, char **argv) { demod_soft_work(&demod_s); /* hard decision for soft demodulation */ - char* tmp = malloc(nbits); + uint8_t* tmp = malloc(nbits); for (int i=0;i0?1:0; } diff --git a/lte/phy/examples/ll_example.c b/lte/phy/examples/ll_example.c index fc9fec359..e5e1b023e 100644 --- a/lte/phy/examples/ll_example.c +++ b/lte/phy/examples/ll_example.c @@ -33,7 +33,7 @@ int main(int argc, char **argv) { binsource_t bs; - char* output; + uint8_t* output; binsource_init(&bs); binsource_seed_time(&bs); diff --git a/lte/phy/examples/pdsch_enodeb.c b/lte/phy/examples/pdsch_enodeb.c index b0b9ffc95..2e1660e54 100644 --- a/lte/phy/examples/pdsch_enodeb.c +++ b/lte/phy/examples/pdsch_enodeb.c @@ -241,7 +241,7 @@ int main(int argc, char **argv) { ra_prb_t prb_alloc; refsignal_t refs[NSLOTS_X_FRAME]; int i, n; - char *data; + uint8_t *data; cf_t *sf_symbols[MAX_PORTS]; dci_msg_t dci_msg; dci_location_t locations[NSUBFRAMES_X_FRAME][10]; @@ -315,7 +315,7 @@ int main(int argc, char **argv) { pdcch_ue_locations(&pdcch, locations[i], 10, i, cfi, 1234); } - data = malloc(sizeof(char) * ra_dl.mcs.tbs); + data = malloc(sizeof(uint8_t) * ra_dl.mcs.tbs); if (!data) { perror("malloc"); exit(-1); diff --git a/lte/phy/examples/pdsch_ue.c b/lte/phy/examples/pdsch_ue.c index 07d3dae32..f1949ad50 100644 --- a/lte/phy/examples/pdsch_ue.c +++ b/lte/phy/examples/pdsch_ue.c @@ -159,7 +159,7 @@ void sigintHandler(int x) { } /* TODO: Do something with the output data */ -char data[10000]; +uint8_t data[10000]; extern float mean_exec_time; diff --git a/lte/phy/include/liblte/phy/common/sequence.h b/lte/phy/include/liblte/phy/common/sequence.h index a3dae142b..183d5cddc 100644 --- a/lte/phy/include/liblte/phy/common/sequence.h +++ b/lte/phy/include/liblte/phy/common/sequence.h @@ -32,7 +32,7 @@ #include "liblte/phy/common/phy_common.h" typedef struct LIBLTE_API { - char *c; + uint8_t *c; uint32_t len; } sequence_t; diff --git a/lte/phy/include/liblte/phy/fec/convcoder.h b/lte/phy/include/liblte/phy/fec/convcoder.h index 38dd5857d..0c1a9481e 100644 --- a/lte/phy/include/liblte/phy/fec/convcoder.h +++ b/lte/phy/include/liblte/phy/fec/convcoder.h @@ -40,7 +40,7 @@ typedef struct LIBLTE_API { bool tail_biting; }convcoder_t; -LIBLTE_API int convcoder_encode(convcoder_t *q, char *input, char *output, uint32_t frame_length); +LIBLTE_API int convcoder_encode(convcoder_t *q, uint8_t *input, uint8_t *output, uint32_t frame_length); /* High-level API */ @@ -55,9 +55,9 @@ typedef struct LIBLTE_API { int generator_2; int frame_length; } ctrl_in; - char *input; + uint8_t *input; int in_len; - char *output; + uint8_t *output; int out_len; }convcoder_hl; diff --git a/lte/phy/include/liblte/phy/fec/crc.h b/lte/phy/include/liblte/phy/fec/crc.h index e9d148a52..54f9ede4d 100644 --- a/lte/phy/include/liblte/phy/fec/crc.h +++ b/lte/phy/include/liblte/phy/fec/crc.h @@ -34,18 +34,18 @@ typedef struct LIBLTE_API { unsigned long table[256]; - unsigned char byte; + uint8_t byte; int polynom; int order; unsigned long crcinit; unsigned long crcmask; unsigned long crchighbit; - unsigned int crc_out; + uint32_t crc_out; } crc_t; -LIBLTE_API int crc_init(crc_t *h, unsigned int crc_poly, int crc_order); +LIBLTE_API int crc_init(crc_t *h, uint32_t crc_poly, int crc_order); LIBLTE_API int crc_set_init(crc_t *h, unsigned long crc_init_value); -LIBLTE_API void crc_attach(crc_t *h, char *data, int len); -LIBLTE_API uint32_t crc_checksum(crc_t *h, char *data, int len); +LIBLTE_API void crc_attach(crc_t *h, uint8_t *data, int len); +LIBLTE_API uint32_t crc_checksum(crc_t *h, uint8_t *data, int len); #endif diff --git a/lte/phy/include/liblte/phy/fec/rm_conv.h b/lte/phy/include/liblte/phy/fec/rm_conv.h index 6a37177b0..102d04640 100644 --- a/lte/phy/include/liblte/phy/fec/rm_conv.h +++ b/lte/phy/include/liblte/phy/fec/rm_conv.h @@ -33,9 +33,9 @@ #define RX_NULL 10000 #define TX_NULL 80 -LIBLTE_API int rm_conv_tx(char *input, +LIBLTE_API int rm_conv_tx(uint8_t *input, uint32_t in_len, - char *output, + uint8_t *output, uint32_t out_len); LIBLTE_API int rm_conv_rx(float *input, @@ -49,7 +49,7 @@ typedef struct struct rm_conv_init { int direction; } init; - void *input; // input type may be char or float depending on hard + void *input; // input type may be uint8_t or float depending on hard int in_len; struct rm_conv_ctrl_in { int E; diff --git a/lte/phy/include/liblte/phy/fec/rm_turbo.h b/lte/phy/include/liblte/phy/fec/rm_turbo.h index 0b5fad70e..d8550517d 100644 --- a/lte/phy/include/liblte/phy/fec/rm_turbo.h +++ b/lte/phy/include/liblte/phy/fec/rm_turbo.h @@ -41,11 +41,11 @@ #include "liblte/config.h" -LIBLTE_API int rm_turbo_tx(char *w_buff, +LIBLTE_API int rm_turbo_tx(uint8_t *w_buff, uint32_t buff_len, - char *input, + uint8_t *input, uint32_t in_len, - char *output, + uint8_t *output, uint32_t out_len, uint32_t rv_idx); @@ -63,7 +63,7 @@ typedef struct LIBLTE_API { struct rm_turbo_init { int direction; } init; - void *input; // input type may be char or float depending on hard + void *input; // input type may be uint8_t or float depending on hard int in_len; struct rm_turbo_ctrl_in { int E; diff --git a/lte/phy/include/liblte/phy/fec/turbocoder.h b/lte/phy/include/liblte/phy/fec/turbocoder.h index af272e223..e78eaf85e 100644 --- a/lte/phy/include/liblte/phy/fec/turbocoder.h +++ b/lte/phy/include/liblte/phy/fec/turbocoder.h @@ -43,7 +43,7 @@ typedef struct LIBLTE_API { LIBLTE_API int tcod_init(tcod_t *h, uint32_t max_long_cb); LIBLTE_API void tcod_free(tcod_t *h); -LIBLTE_API int tcod_encode(tcod_t *h, char *input, char *output, uint32_t long_cb); +LIBLTE_API int tcod_encode(tcod_t *h, uint8_t *input, uint8_t *output, uint32_t long_cb); #endif diff --git a/lte/phy/include/liblte/phy/fec/turbodecoder.h b/lte/phy/include/liblte/phy/fec/turbodecoder.h index 178f51956..9f4b9ea6c 100644 --- a/lte/phy/include/liblte/phy/fec/turbodecoder.h +++ b/lte/phy/include/liblte/phy/fec/turbodecoder.h @@ -80,12 +80,12 @@ LIBLTE_API void tdec_iteration(tdec_t * h, uint32_t long_cb); LIBLTE_API void tdec_decision(tdec_t * h, - char *output, + uint8_t *output, uint32_t long_cb); LIBLTE_API void tdec_run_all(tdec_t * h, llr_t * input, - char *output, + uint8_t *output, uint32_t nof_iterations, uint32_t long_cb); diff --git a/lte/phy/include/liblte/phy/fec/viterbi.h b/lte/phy/include/liblte/phy/fec/viterbi.h index a94c58e19..e3d8a9f59 100644 --- a/lte/phy/include/liblte/phy/fec/viterbi.h +++ b/lte/phy/include/liblte/phy/fec/viterbi.h @@ -40,13 +40,13 @@ typedef struct LIBLTE_API{ void *ptr; uint32_t R; uint32_t K; - unsigned int framebits; + uint32_t framebits; bool tail_biting; uint32_t poly[3]; - int (*decode) (void*, uint8_t*, char*, uint32_t); + int (*decode) (void*, uint8_t*, uint8_t*, uint32_t); void (*free) (void*); - unsigned char *tmp; - unsigned char *symbols_uc; + uint8_t *tmp; + uint8_t *symbols_uc; }viterbi_t; LIBLTE_API int viterbi_init(viterbi_t *q, @@ -59,12 +59,12 @@ LIBLTE_API void viterbi_free(viterbi_t *q); LIBLTE_API int viterbi_decode_f(viterbi_t *q, float *symbols, - char *data, + uint8_t *data, uint32_t frame_length); LIBLTE_API int viterbi_decode_uc(viterbi_t *q, uint8_t *symbols, - char *data, + uint8_t *data, uint32_t frame_length); @@ -82,7 +82,7 @@ typedef struct LIBLTE_API{ } init; float *input; int in_len; - char *output; + uint8_t *output; int out_len; }viterbi_hl; diff --git a/lte/phy/include/liblte/phy/io/binsource.h b/lte/phy/include/liblte/phy/io/binsource.h index 7e5a06ddf..475d6c221 100644 --- a/lte/phy/include/liblte/phy/io/binsource.h +++ b/lte/phy/include/liblte/phy/io/binsource.h @@ -35,7 +35,7 @@ /* Low-level API */ typedef struct LIBLTE_API{ - unsigned int seed; + uint32_t seed; uint32_t *seq_buff; int seq_buff_nwords; int seq_cache_nbits; @@ -44,23 +44,23 @@ typedef struct LIBLTE_API{ LIBLTE_API void binsource_init(binsource_t* q); LIBLTE_API void binsource_free(binsource_t* q); -LIBLTE_API void binsource_seed_set(binsource_t* q, unsigned int seed); +LIBLTE_API void binsource_seed_set(binsource_t* q, uint32_t seed); LIBLTE_API void binsource_seed_time(binsource_t *q); LIBLTE_API int binsource_cache_gen(binsource_t* q, int nbits); -LIBLTE_API void binsource_cache_cpy(binsource_t* q, char *bits, int nbits); -LIBLTE_API int binsource_generate(binsource_t* q, char *bits, int nbits); +LIBLTE_API void binsource_cache_cpy(binsource_t* q, uint8_t *bits, int nbits); +LIBLTE_API int binsource_generate(binsource_t* q, uint8_t *bits, int nbits); /* High-level API */ typedef struct LIBLTE_API { binsource_t obj; struct binsource_init { int cache_seq_nbits; // If non-zero, generates random bits on init - unsigned int seed; // If non-zero, uses as random seed, otherwise local time is used. + uint32_t seed; // If non-zero, uses as random seed, otherwise local time is used. } init; struct binsource_ctrl_in { int nbits; // Number of bits to generate } ctrl_in; - char* output; + uint8_t* output; int out_len; }binsource_hl; diff --git a/lte/phy/include/liblte/phy/modem/demod_hard.h b/lte/phy/include/liblte/phy/modem/demod_hard.h index 51f5b6c53..d10a230c3 100644 --- a/lte/phy/include/liblte/phy/modem/demod_hard.h +++ b/lte/phy/include/liblte/phy/modem/demod_hard.h @@ -44,7 +44,7 @@ typedef struct LIBLTE_API { LIBLTE_API void demod_hard_init(demod_hard_t* q); LIBLTE_API void demod_hard_table_set(demod_hard_t* q, lte_mod_t mod); -LIBLTE_API int demod_hard_demodulate(demod_hard_t* q, cf_t* symbols, char *bits, uint32_t nsymbols); +LIBLTE_API int demod_hard_demodulate(demod_hard_t* q, cf_t* symbols, uint8_t *bits, uint32_t nsymbols); @@ -58,7 +58,7 @@ typedef struct LIBLTE_API { cf_t* input; int in_len; - char* output; + uint8_t* output; int out_len; }demod_hard_hl; diff --git a/lte/phy/include/liblte/phy/modem/mod.h b/lte/phy/include/liblte/phy/modem/mod.h index 8ee5defc8..c8c64ad43 100644 --- a/lte/phy/include/liblte/phy/modem/mod.h +++ b/lte/phy/include/liblte/phy/modem/mod.h @@ -37,7 +37,7 @@ typedef _Complex float cf_t; -LIBLTE_API int mod_modulate(modem_table_t* table, const char *bits, cf_t* symbols, uint32_t nbits); +LIBLTE_API int mod_modulate(modem_table_t* table, const uint8_t *bits, cf_t* symbols, uint32_t nbits); /* High-level API */ typedef struct LIBLTE_API { @@ -46,7 +46,7 @@ typedef struct LIBLTE_API { lte_mod_t std; // symbol mapping standard (see modem_table.h) } init; - const char* input; + const uint8_t* input; int in_len; cf_t* output; diff --git a/lte/phy/include/liblte/phy/phch/dci.h b/lte/phy/include/liblte/phy/phch/dci.h index be57914c0..66e166571 100644 --- a/lte/phy/include/liblte/phy/phch/dci.h +++ b/lte/phy/include/liblte/phy/phch/dci.h @@ -67,7 +67,7 @@ typedef struct LIBLTE_API { } dci_location_t; typedef struct LIBLTE_API { - char data[DCI_MAX_BITS]; + uint8_t data[DCI_MAX_BITS]; uint32_t nof_bits; } dci_msg_t; diff --git a/lte/phy/include/liblte/phy/phch/pbch.h b/lte/phy/include/liblte/phy/phch/pbch.h index e8a79b513..22b7bb106 100644 --- a/lte/phy/include/liblte/phy/phch/pbch.h +++ b/lte/phy/include/liblte/phy/phch/pbch.h @@ -68,9 +68,9 @@ typedef struct LIBLTE_API { float *pbch_llr; float *temp; float *pbch_rm_f; - char *pbch_rm_b; - char *data; - char *data_enc; + uint8_t *pbch_rm_b; + uint8_t *data; + uint8_t *data_enc; uint32_t frame_idx; diff --git a/lte/phy/include/liblte/phy/phch/pcfich.h b/lte/phy/include/liblte/phy/phch/pcfich.h index 80ad465f9..cbbf84bf1 100644 --- a/lte/phy/include/liblte/phy/phch/pcfich.h +++ b/lte/phy/include/liblte/phy/phch/pcfich.h @@ -58,7 +58,7 @@ typedef struct LIBLTE_API { cf_t pcfich_d[PCFICH_RE]; /* bit message */ - char data[PCFICH_CFI_LEN]; + uint8_t data[PCFICH_CFI_LEN]; /* tx & rx objects */ modem_table_t mod; diff --git a/lte/phy/include/liblte/phy/phch/pdcch.h b/lte/phy/include/liblte/phy/phch/pdcch.h index f15dd1519..d854dacf4 100644 --- a/lte/phy/include/liblte/phy/phch/pdcch.h +++ b/lte/phy/include/liblte/phy/phch/pdcch.h @@ -65,7 +65,7 @@ typedef struct LIBLTE_API { cf_t *pdcch_symbols[MAX_PORTS]; cf_t *pdcch_x[MAX_PORTS]; cf_t *pdcch_d; - char *pdcch_e; + uint8_t *pdcch_e; float *pdcch_llr; /* tx & rx objects */ diff --git a/lte/phy/include/liblte/phy/phch/pdsch.h b/lte/phy/include/liblte/phy/phch/pdsch.h index 173837b98..fc7b4b0c9 100644 --- a/lte/phy/include/liblte/phy/phch/pdsch.h +++ b/lte/phy/include/liblte/phy/phch/pdsch.h @@ -55,7 +55,7 @@ typedef struct LIBLTE_API { uint32_t max_cb; uint32_t w_buff_size; float **pdsch_w_buff_f; - char **pdsch_w_buff_c; + uint8_t **pdsch_w_buff_c; struct cb_segm { uint32_t F; @@ -85,7 +85,7 @@ typedef struct LIBLTE_API { cf_t *pdsch_symbols[MAX_PORTS]; cf_t *pdsch_x[MAX_PORTS]; cf_t *pdsch_d; - char *cb_in; + uint8_t *cb_in; void *cb_out; void *pdsch_e; @@ -117,7 +117,7 @@ LIBLTE_API int pdsch_harq_setup(pdsch_harq_t *p, LIBLTE_API void pdsch_harq_free(pdsch_harq_t *p); LIBLTE_API int pdsch_encode(pdsch_t *q, - char *data, + uint8_t *data, cf_t *sf_symbols[MAX_PORTS], uint32_t nsubframe, pdsch_harq_t *harq_process, @@ -126,7 +126,7 @@ LIBLTE_API int pdsch_encode(pdsch_t *q, LIBLTE_API int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], - char *data, + uint8_t *data, uint32_t nsubframe, pdsch_harq_t *harq_process, uint32_t rv_idx); diff --git a/lte/phy/include/liblte/phy/phch/phich.h b/lte/phy/include/liblte/phy/phch/phich.h index dbe68dfea..845794e97 100644 --- a/lte/phy/include/liblte/phy/phch/phich.h +++ b/lte/phy/include/liblte/phy/phch/phich.h @@ -69,7 +69,7 @@ typedef struct LIBLTE_API { cf_t phich_z[PHICH_NBITS]; /* bit message */ - char data[PHICH_NBITS]; + uint8_t data[PHICH_NBITS]; /* tx & rx objects */ modem_table_t mod; @@ -90,11 +90,11 @@ LIBLTE_API int phich_decode(phich_t *q, uint32_t ngroup, uint32_t nseq, uint32_t nsubframe, - char *ack, + uint8_t *ack, uint32_t *distance); LIBLTE_API int phich_encode(phich_t *q, - char ack, + uint8_t ack, uint32_t ngroup, uint32_t nseq, uint32_t nsubframe, diff --git a/lte/phy/include/liblte/phy/scrambling/scrambling.h b/lte/phy/include/liblte/phy/scrambling/scrambling.h index 0a1323bef..70e1560d3 100644 --- a/lte/phy/include/liblte/phy/scrambling/scrambling.h +++ b/lte/phy/include/liblte/phy/scrambling/scrambling.h @@ -36,8 +36,8 @@ typedef _Complex float cf_t; /* Scrambling has no state */ -LIBLTE_API void scrambling_b(sequence_t *s, char *data); -LIBLTE_API void scrambling_b_offset(sequence_t *s, char *data, int offset, int len); +LIBLTE_API void scrambling_b(sequence_t *s, uint8_t *data); +LIBLTE_API void scrambling_b_offset(sequence_t *s, uint8_t *data, int offset, int len); LIBLTE_API void scrambling_f(sequence_t *s, float *data); LIBLTE_API void scrambling_f_offset(sequence_t *s, float *data, int offset, int len); @@ -71,7 +71,7 @@ typedef struct LIBLTE_API { int channel; int nof_symbols; // 7 normal 6 extended } init; - void *input; // input type may be char or float depending on hard + void *input; // input type may be uint8_t or float depending on hard int in_len; struct scrambling_ctrl_in { int subframe; diff --git a/lte/phy/include/liblte/phy/ue/ue_celldetect.h b/lte/phy/include/liblte/phy/ue/ue_celldetect.h index 3478ee02f..46984274d 100644 --- a/lte/phy/include/liblte/phy/ue/ue_celldetect.h +++ b/lte/phy/include/liblte/phy/ue/ue_celldetect.h @@ -88,7 +88,7 @@ typedef struct LIBLTE_API { uint32_t current_nof_total; uint32_t *mode_ntimes; - char *mode_counted; + uint8_t *mode_counted; ue_celldetect_result_t *candidates; } ue_celldetect_t; diff --git a/lte/phy/include/liblte/phy/ue/ue_dl.h b/lte/phy/include/liblte/phy/ue/ue_dl.h index e38d0ebf0..c60e49ae4 100644 --- a/lte/phy/include/liblte/phy/ue/ue_dl.h +++ b/lte/phy/include/liblte/phy/ue/ue_dl.h @@ -92,7 +92,7 @@ LIBLTE_API void ue_dl_free(ue_dl_t *q); LIBLTE_API int ue_dl_decode(ue_dl_t *q, cf_t *sf_buffer, - char *data, + uint8_t *data, uint32_t sf_idx, uint16_t rnti); diff --git a/lte/phy/include/liblte/phy/utils/bit.h b/lte/phy/include/liblte/phy/utils/bit.h index acfdbce3c..3100ccf95 100644 --- a/lte/phy/include/liblte/phy/utils/bit.h +++ b/lte/phy/include/liblte/phy/utils/bit.h @@ -34,10 +34,10 @@ #include "liblte/config.h" -LIBLTE_API uint32_t bit_unpack(char **bits, int nof_bits); -LIBLTE_API void bit_pack(uint32_t value, char **bits, int nof_bits); -LIBLTE_API void bit_fprint(FILE *stream, char *bits, int nof_bits); -LIBLTE_API unsigned int bit_diff(char *x, char *y, int nbits); +LIBLTE_API uint32_t bit_unpack(uint8_t **bits, int nof_bits); +LIBLTE_API void bit_pack(uint32_t value, uint8_t **bits, int nof_bits); +LIBLTE_API void bit_fprint(FILE *stream, uint8_t *bits, int nof_bits); +LIBLTE_API uint32_t bit_diff(uint8_t *x, uint8_t *y, int nbits); LIBLTE_API uint32_t bit_count(uint32_t n); #endif // BIT_ diff --git a/lte/phy/include/liblte/phy/utils/pack.h b/lte/phy/include/liblte/phy/utils/pack.h index cae0be966..73a5f9678 100644 --- a/lte/phy/include/liblte/phy/utils/pack.h +++ b/lte/phy/include/liblte/phy/utils/pack.h @@ -30,8 +30,13 @@ #define PACK_ #include "liblte/config.h" +#include -LIBLTE_API unsigned int unpack_bits(char **bits, int nof_bits); -LIBLTE_API void pack_bits(unsigned int value, char **bits, int nof_bits); +LIBLTE_API uint32_t unpack_bits(uint8_t **bits, + int nof_bits); + +LIBLTE_API void pack_bits(uint32_t value, + uint8_t **bits, + int nof_bits); #endif // PACK_ diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index a0e89471a..1bb679a53 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -53,15 +53,15 @@ LIBLTE_API void *vec_realloc(void *ptr, uint32_t old_size, uint32_t new_size); /* print vectors */ LIBLTE_API void vec_fprint_c(FILE *stream, cf_t *x, uint32_t len); LIBLTE_API void vec_fprint_f(FILE *stream, float *x, uint32_t len); -LIBLTE_API void vec_fprint_b(FILE *stream, char *x, uint32_t len); +LIBLTE_API void vec_fprint_b(FILE *stream, uint8_t *x, uint32_t len); LIBLTE_API void vec_fprint_i(FILE *stream, int *x, uint32_t len); -LIBLTE_API void vec_fprint_hex(FILE *stream, char *x, uint32_t len); +LIBLTE_API void vec_fprint_hex(FILE *stream, uint8_t *x, uint32_t len); /* Saves a vector to a file */ LIBLTE_API void vec_save_file(char *filename, void *buffer, uint32_t len); /* sum two vectors */ -LIBLTE_API void vec_sum_ch(char *x, char *y, char *z, uint32_t len); +LIBLTE_API void vec_sum_ch(uint8_t *x, uint8_t *y, char *z, uint32_t len); LIBLTE_API void vec_sum_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); /* substract two vectors z=x-y */ @@ -107,8 +107,8 @@ LIBLTE_API float vec_avg_power_cf(cf_t *x, uint32_t len); LIBLTE_API uint32_t vec_max_fi(float *x, uint32_t len); LIBLTE_API uint32_t vec_max_abs_ci(cf_t *x, uint32_t len); -/* quantify vector of floats and convert to unsigned char */ -LIBLTE_API void vec_quant_fuc(float *in, unsigned char *out, float gain, float offset, float clip, uint32_t len); +/* quantify vector of floats and convert to uint8_t */ +LIBLTE_API void vec_quant_fuc(float *in, uint8_t *out, float gain, float offset, float clip, uint32_t len); /* magnitude of each vector element */ LIBLTE_API void vec_abs_cf(cf_t *x, float *abs, uint32_t len); diff --git a/lte/phy/lib/ch_estimation/src/refsignal.c b/lte/phy/lib/ch_estimation/src/refsignal.c index bec652743..2002eb47a 100644 --- a/lte/phy/lib/ch_estimation/src/refsignal.c +++ b/lte/phy/lib/ch_estimation/src/refsignal.c @@ -238,7 +238,7 @@ int rs_sequence(ref_t * refs, uint32_t len, float alpha, uint32_t ns, uint32_t c } } if (len >= 3 * RE_X_RB) { - uint32_t n_sz; + uint32_t n_sz=0; uint32_t q; float q_hat; /* get largest prime n_zcc); } if (!q->c) { - q->c = malloc(len * sizeof(char)); + q->c = malloc(len * sizeof(uint8_t)); if (!q->c) { return LIBLTE_ERROR; } diff --git a/lte/phy/lib/fec/src/convcoder.c b/lte/phy/lib/fec/src/convcoder.c index 2153327ac..d62507f87 100644 --- a/lte/phy/lib/fec/src/convcoder.c +++ b/lte/phy/lib/fec/src/convcoder.c @@ -34,7 +34,7 @@ #include "liblte/phy/fec/convcoder.h" #include "parity.h" -int convcoder_encode(convcoder_t *q, char *input, char *output, uint32_t frame_length) { +int convcoder_encode(convcoder_t *q, uint8_t *input, uint8_t *output, uint32_t frame_length) { uint32_t sr; uint32_t i,j; uint32_t len = q->tail_biting ? frame_length : (frame_length + q->K - 1); @@ -53,7 +53,7 @@ int convcoder_encode(convcoder_t *q, char *input, char *output, uint32_t frame_l sr = 0; } for (i = 0; i < len; i++) { - char bit = (i < frame_length) ? (input[i] & 1) : 0; + uint8_t bit = (i < frame_length) ? (input[i] & 1) : 0; sr = (sr << 1) | bit; for (j=0;jR;j++) { output[q->R * i + j] = parity(sr & q->poly[j]); diff --git a/lte/phy/lib/fec/src/crc.c b/lte/phy/lib/fec/src/crc.c index c286c2f63..d252c6598 100644 --- a/lte/phy/lib/fec/src/crc.c +++ b/lte/phy/lib/fec/src/crc.c @@ -54,14 +54,14 @@ unsigned long crctable(crc_t *h) { // Polynom order 8, 16, 24 or 32 only. int ord = h->order - 8; unsigned long crc = h->crcinit; - unsigned char byte = h->byte; + uint8_t byte = h->byte; crc = (crc << 8) ^ h->table[((crc >> (ord)) & 0xff) ^ byte]; h->crcinit = crc; return (crc & h->crcmask); } -unsigned long reversecrcbit(unsigned int crc, int nbits, crc_t *h) { +unsigned long reversecrcbit(uint32_t crc, int nbits, crc_t *h) { unsigned long m, rmask = 0x1; @@ -84,7 +84,7 @@ int crc_set_init(crc_t *crc_par, unsigned long crc_init_value) { return 0; } -int crc_init(crc_t *h, unsigned int crc_poly, int crc_order) { +int crc_init(crc_t *h, uint32_t crc_poly, int crc_order) { // Set crc working default parameters h->polynom = crc_poly; @@ -114,10 +114,10 @@ int crc_init(crc_t *h, unsigned int crc_poly, int crc_order) { return 0; } -uint32_t crc_checksum(crc_t *h, char *data, int len) { +uint32_t crc_checksum(crc_t *h, uint8_t *data, int len) { int i, k, len8, res8, a = 0; - unsigned int crc = 0; - char *pter; + uint32_t crc = 0; + uint8_t *pter; crc_set_init(h, 0); @@ -130,14 +130,14 @@ uint32_t crc_checksum(crc_t *h, char *data, int len) { // Calculate CRC for (i = 0; i < len8 + a; i++) { - pter = (char *) (data + 8 * i); + pter = (uint8_t *) (data + 8 * i); if (i == len8) { h->byte = 0x00; for (k = 0; k < res8; k++) { - h->byte |= ((unsigned char) *(pter + k)) << (7 - k); + h->byte |= ((uint8_t) *(pter + k)) << (7 - k); } } else { - h->byte = (unsigned char) (unpack_bits(&pter, 8) & 0xFF); + h->byte = (uint8_t) (unpack_bits(&pter, 8) & 0xFF); } crc = crctable(h); } @@ -155,11 +155,11 @@ uint32_t crc_checksum(crc_t *h, char *data, int len) { /** Appends crc_order checksum bits to the buffer data. * The buffer data must be len + crc_order bytes */ -void crc_attach(crc_t *h, char *data, int len) { - unsigned int checksum = crc_checksum(h, data, len); +void crc_attach(crc_t *h, uint8_t *data, int len) { + uint32_t checksum = crc_checksum(h, data, len); // Add CRC - char *ptr = &data[len]; + uint8_t *ptr = &data[len]; pack_bits(checksum, &ptr, h->order); } diff --git a/lte/phy/lib/fec/src/rm_conv.c b/lte/phy/lib/fec/src/rm_conv.c index 0c10c9a0d..e01e81876 100644 --- a/lte/phy/lib/fec/src/rm_conv.c +++ b/lte/phy/lib/fec/src/rm_conv.c @@ -40,9 +40,9 @@ uint8_t RM_PERM_CC_INV[NCOLS] = { 16, 0, 24, 8, 20, 4, 28, 12, 18, 2, 26, 10, 22, 6, 30, 14, 17, 1, 25, 9, 21, 5, 29, 13, 19, 3, 27, 11, 23, 7, 31, 15 }; -int rm_conv_tx(char *input, uint32_t in_len, char *output, uint32_t out_len) { +int rm_conv_tx(uint8_t *input, uint32_t in_len, uint8_t *output, uint32_t out_len) { - char tmp[3 * NCOLS * NROWS_MAX]; + uint8_t tmp[3 * NCOLS * NROWS_MAX]; int nrows, ndummy, K_p; int i, j, k, s; diff --git a/lte/phy/lib/fec/src/rm_turbo.c b/lte/phy/lib/fec/src/rm_turbo.c index ae52d9593..742726717 100644 --- a/lte/phy/lib/fec/src/rm_turbo.c +++ b/lte/phy/lib/fec/src/rm_turbo.c @@ -53,7 +53,7 @@ uint8_t RM_PERM_TC[NCOLS] = { 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, * * TODO: Soft buffer size limitation according to UE category */ -int rm_turbo_tx(char *w_buff, uint32_t w_buff_len, char *input, uint32_t in_len, char *output, +int rm_turbo_tx(uint8_t *w_buff, uint32_t w_buff_len, uint8_t *input, uint32_t in_len, uint8_t *output, uint32_t out_len, uint32_t rv_idx) { int ndummy, kidx; diff --git a/lte/phy/lib/fec/src/tc_interl_umts.c b/lte/phy/lib/fec/src/tc_interl_umts.c index 931749347..25e4d620a 100644 --- a/lte/phy/lib/fec/src/tc_interl_umts.c +++ b/lte/phy/lib/fec/src/tc_interl_umts.c @@ -50,7 +50,7 @@ const unsigned short table_p[52] = { 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257 }; -const unsigned char table_v[52] = { 3, 2, 2, 3, 2, 5, 2, 3, 2, 6, 3, 5, 2, 2, 2, +const uint8_t table_v[52] = { 3, 2, 2, 3, 2, 5, 2, 3, 2, 6, 3, 5, 2, 2, 2, 2, 7, 5, 3, 2, 3, 5, 2, 5, 2, 6, 3, 3, 2, 3, 2, 2, 6, 5, 2, 5, 2, 2, 2, 19, 5, 2, 3, 2, 3, 2, 6, 3, 7, 7, 6, 3 }; diff --git a/lte/phy/lib/fec/src/turbocoder.c b/lte/phy/lib/fec/src/turbocoder.c index 7483601d9..882d8081f 100644 --- a/lte/phy/lib/fec/src/turbocoder.c +++ b/lte/phy/lib/fec/src/turbocoder.c @@ -47,12 +47,12 @@ void tcod_free(tcod_t *h) { h->max_long_cb = 0; } -int tcod_encode(tcod_t *h, char *input, char *output, uint32_t long_cb) { +int tcod_encode(tcod_t *h, uint8_t *input, uint8_t *output, uint32_t long_cb) { - char reg1_0, reg1_1, reg1_2, reg2_0, reg2_1, reg2_2; + uint8_t reg1_0, reg1_1, reg1_2, reg2_0, reg2_1, reg2_2; uint32_t i, k = 0, j; - char bit; - char in, out; + uint8_t bit; + uint8_t in, out; uint32_t *per; if (long_cb > h->max_long_cb) { diff --git a/lte/phy/lib/fec/src/turbodecoder.c b/lte/phy/lib/fec/src/turbodecoder.c index 171eefde3..262bace7f 100644 --- a/lte/phy/lib/fec/src/turbodecoder.c +++ b/lte/phy/lib/fec/src/turbodecoder.c @@ -317,7 +317,7 @@ int tdec_reset(tdec_t * h, uint32_t long_cb) return tc_interl_LTE_gen(&h->interleaver, long_cb); } -void tdec_decision(tdec_t * h, char *output, uint32_t long_cb) +void tdec_decision(tdec_t * h, uint8_t *output, uint32_t long_cb) { uint32_t i; for (i = 0; i < long_cb; i++) { @@ -325,7 +325,7 @@ void tdec_decision(tdec_t * h, char *output, uint32_t long_cb) } } -void tdec_run_all(tdec_t * h, llr_t * input, char *output, +void tdec_run_all(tdec_t * h, llr_t * input, uint8_t *output, uint32_t nof_iterations, uint32_t long_cb) { uint32_t iter = 0; diff --git a/lte/phy/lib/fec/src/viterbi.c b/lte/phy/lib/fec/src/viterbi.c index b9fb2b0ec..cf6b506ce 100644 --- a/lte/phy/lib/fec/src/viterbi.c +++ b/lte/phy/lib/fec/src/viterbi.c @@ -40,7 +40,7 @@ #define DEB 0 -int decode37(void *o, uint8_t *symbols, char *data, uint32_t frame_length) { +int decode37(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length) { viterbi_t *q = o; uint32_t i; @@ -57,7 +57,7 @@ int decode37(void *o, uint8_t *symbols, char *data, uint32_t frame_length) { /* Decode block */ if (q->tail_biting) { - memcpy(q->tmp, symbols, 3 * frame_length * sizeof(char)); + memcpy(q->tmp, symbols, 3 * frame_length * sizeof(uint8_t)); for (i = 0; i < 3 * (q->K - 1); i++) { q->tmp[i + 3 * frame_length] = q->tmp[i]; } @@ -75,7 +75,7 @@ int decode37(void *o, uint8_t *symbols, char *data, uint32_t frame_length) { return q->framebits; } -int decode39(void *o, uint8_t *symbols, char *data, uint32_t frame_length) { +int decode39(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length) { viterbi_t *q = o; if (frame_length > q->framebits) { @@ -122,13 +122,13 @@ int init37(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) q->tail_biting = tail_biting; q->decode = decode37; q->free = free37; - q->symbols_uc = malloc(3 * (q->framebits + q->K - 1) * sizeof(char)); + q->symbols_uc = malloc(3 * (q->framebits + q->K - 1) * sizeof(uint8_t)); if (!q->symbols_uc) { perror("malloc"); return -1; } if (q->tail_biting) { - q->tmp = malloc(3 * (q->framebits + q->K - 1) * sizeof(char)); + q->tmp = malloc(3 * (q->framebits + q->K - 1) * sizeof(uint8_t)); if (!q->tmp) { perror("malloc"); free37(q); @@ -159,7 +159,7 @@ int init39(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) "Error: Tailbitting not supported in 1/3 K=9 decoder\n"); return -1; } - q->symbols_uc = malloc(3 * (q->framebits + q->K - 1) * sizeof(char)); + q->symbols_uc = malloc(3 * (q->framebits + q->K - 1) * sizeof(uint8_t)); if (!q->symbols_uc) { perror("malloc"); return -1; @@ -193,7 +193,7 @@ void viterbi_free(viterbi_t *q) { } /* symbols are real-valued */ -int viterbi_decode_f(viterbi_t *q, float *symbols, char *data, uint32_t frame_length) { +int viterbi_decode_f(viterbi_t *q, float *symbols, uint8_t *data, uint32_t frame_length) { uint32_t len; if (frame_length > q->framebits) { fprintf(stderr, "Initialized decoder for max frame length %d bits\n", @@ -209,7 +209,7 @@ int viterbi_decode_f(viterbi_t *q, float *symbols, char *data, uint32_t frame_le return q->decode(q, q->symbols_uc, data, frame_length); } -int viterbi_decode_uc(viterbi_t *q, uint8_t *symbols, char *data, +int viterbi_decode_uc(viterbi_t *q, uint8_t *symbols, uint8_t *data, uint32_t frame_length) { return q->decode(q, symbols, data, frame_length); } diff --git a/lte/phy/lib/fec/src/viterbi37.h b/lte/phy/lib/fec/src/viterbi37.h index 7bacca2c8..2e5bc4e58 100644 --- a/lte/phy/lib/fec/src/viterbi37.h +++ b/lte/phy/lib/fec/src/viterbi37.h @@ -34,13 +34,13 @@ int init_viterbi37_port(void *p, uint32_t starting_state); int chainback_viterbi37_port(void *p, - char *data, + uint8_t *data, uint32_t nbits, uint32_t endstate); void delete_viterbi37_port(void *p); int update_viterbi37_blk_port(void *p, - unsigned char *syms, + uint8_t *syms, uint32_t nbits, uint32_t *best_state); diff --git a/lte/phy/lib/fec/src/viterbi37_port.c b/lte/phy/lib/fec/src/viterbi37_port.c index 09dfa4bdc..37070268a 100644 --- a/lte/phy/lib/fec/src/viterbi37_port.c +++ b/lte/phy/lib/fec/src/viterbi37_port.c @@ -12,14 +12,14 @@ #include typedef union { - unsigned int w[64]; + uint32_t w[64]; } metric_t; typedef union { unsigned long w[2]; } decision_t; static union { - unsigned char c[128]; + uint8_t c[128]; } Branchtab37[3]; /* State info for instance of Viterbi decoder */ @@ -83,7 +83,7 @@ void *create_viterbi37_port(uint32_t polys[3], uint32_t len) { } /* Viterbi chainback */ -int chainback_viterbi37_port(void *p, char *data, /* Decoded output data */ +int chainback_viterbi37_port(void *p, uint8_t *data, /* Decoded output data */ uint32_t nbits, /* Number of data bits */ uint32_t endstate) { /* Terminal encoder state */ struct v37 *vp = p; @@ -127,7 +127,7 @@ void delete_viterbi37_port(void *p) { /* C-language butterfly */ #define BFLY(i) {\ -unsigned int metric,m0,m1,decision;\ +uint32_t metric,m0,m1,decision;\ metric = (Branchtab37[0].c[i] ^ sym0) + (Branchtab37[1].c[i] ^ sym1) + \ (Branchtab37[2].c[i] ^ sym2);\ m0 = vp->old_metrics->w[i] + metric;\ diff --git a/lte/phy/lib/fec/src/viterbi39.h b/lte/phy/lib/fec/src/viterbi39.h index 09a3280cf..8c36b3429 100644 --- a/lte/phy/lib/fec/src/viterbi39.h +++ b/lte/phy/lib/fec/src/viterbi39.h @@ -34,7 +34,7 @@ int init_viterbi39_port(void *p, uint32_t starting_state); int chainback_viterbi39_port(void *p, - char *data, /* Decoded output data */ + uint8_t *data, /* Decoded output data */ uint32_t nbits, /* Number of data bits */ uint32_t endstate); diff --git a/lte/phy/lib/fec/src/viterbi39_port.c b/lte/phy/lib/fec/src/viterbi39_port.c index 1d87b2c4a..c039f5d88 100644 --- a/lte/phy/lib/fec/src/viterbi39_port.c +++ b/lte/phy/lib/fec/src/viterbi39_port.c @@ -10,14 +10,14 @@ #include "parity.h" typedef union { - unsigned int w[256]; + uint32_t w[256]; } metric_t; typedef union { unsigned long w[8]; } decision_t; static union { - unsigned char c[128]; + uint8_t c[128]; } Branchtab39[3]; /* State info for instance of Viterbi decoder */ @@ -79,7 +79,7 @@ void *create_viterbi39_port(uint32_t polys[3], uint32_t len) { } /* Viterbi chainback */ -int chainback_viterbi39_port(void *p, char *data, /* Decoded output data */ +int chainback_viterbi39_port(void *p, uint8_t *data, /* Decoded output data */ uint32_t nbits, /* Number of data bits */ uint32_t endstate) { /* Terminal encoder state */ struct v39 *vp = p; @@ -121,7 +121,7 @@ void delete_viterbi39_port(void *p) { /* C-language butterfly */ #define BFLY(i) {\ -unsigned int metric,m0,m1,decision;\ +uint32_t metric,m0,m1,decision;\ metric = (Branchtab39[0].c[i] ^ sym0) + (Branchtab39[1].c[i] ^ sym1) + \ (Branchtab39[2].c[i] ^ sym2);\ m0 = vp->old_metrics->w[i] + metric;\ diff --git a/lte/phy/lib/fec/test/crc_test.c b/lte/phy/lib/fec/test/crc_test.c index 476bad1b3..5f53c5f87 100644 --- a/lte/phy/lib/fec/test/crc_test.c +++ b/lte/phy/lib/fec/test/crc_test.c @@ -37,8 +37,8 @@ #include "crc_test.h" int num_bits = 5001, crc_length = 24; -unsigned int crc_poly = 0x1864CFB; -unsigned int seed = 1; +uint32_t crc_poly = 0x1864CFB; +uint32_t seed = 1; void usage(char *prog) { printf("Usage: %s [nlps]\n", prog); @@ -59,10 +59,10 @@ void parse_args(int argc, char **argv) { crc_length = atoi(argv[optind]); break; case 'p': - crc_poly = (unsigned int) strtoul(argv[optind], NULL, 16); + crc_poly = (uint32_t) strtoul(argv[optind], NULL, 16); break; case 's': - seed = (unsigned int) strtoul(argv[optind], NULL, 0); + seed = (uint32_t) strtoul(argv[optind], NULL, 0); break; default: usage(argv[0]); @@ -73,13 +73,13 @@ void parse_args(int argc, char **argv) { int main(int argc, char **argv) { int i; - char *data; - unsigned int crc_word, expected_word; + uint8_t *data; + uint32_t crc_word, expected_word; crc_t crc_p; parse_args(argc, argv); - data = malloc(sizeof(char) * (num_bits + crc_length * 2)); + data = malloc(sizeof(uint8_t) * (num_bits + crc_length * 2)); if (!data) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/fec/test/crc_test.h b/lte/phy/lib/fec/test/crc_test.h index 152e77e5c..40b48979d 100644 --- a/lte/phy/lib/fec/test/crc_test.h +++ b/lte/phy/lib/fec/test/crc_test.h @@ -32,9 +32,9 @@ typedef struct { int n; int l; - unsigned int p; - unsigned int s; - unsigned int word; + uint32_t p; + uint32_t s; + uint32_t word; }expected_word_t; @@ -48,7 +48,7 @@ static expected_word_t expected_words[] = { {-1, -1, 0, 0, 0} }; -int get_expected_word(int n, int l, unsigned int p, unsigned int s, unsigned int *word) { +int get_expected_word(int n, int l, uint32_t p, unsigned int s, unsigned int *word) { int i; i=0; while(expected_words[i].n != -1) { diff --git a/lte/phy/lib/fec/test/rm_conv_test.c b/lte/phy/lib/fec/test/rm_conv_test.c index 84910527b..09ffc2b01 100644 --- a/lte/phy/lib/fec/test/rm_conv_test.c +++ b/lte/phy/lib/fec/test/rm_conv_test.c @@ -69,18 +69,18 @@ void parse_args(int argc, char **argv) { int main(int argc, char **argv) { int i; - char *bits, *rm_bits; + uint8_t *bits, *rm_bits; float *rm_symbols, *unrm_symbols; int nof_errors; parse_args(argc, argv); - bits = malloc(sizeof(char) * nof_tx_bits); + bits = malloc(sizeof(uint8_t) * nof_tx_bits); if (!bits) { perror("malloc"); exit(-1); } - rm_bits = malloc(sizeof(char) * nof_rx_bits); + rm_bits = malloc(sizeof(uint8_t) * nof_rx_bits); if (!rm_bits) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/fec/test/rm_turbo_test.c b/lte/phy/lib/fec/test/rm_turbo_test.c index 42db72696..8397361a8 100644 --- a/lte/phy/lib/fec/test/rm_turbo_test.c +++ b/lte/phy/lib/fec/test/rm_turbo_test.c @@ -73,23 +73,23 @@ void parse_args(int argc, char **argv) { int main(int argc, char **argv) { int i; - char *bits, *rm_bits, *w_buff_c; + uint8_t *bits, *rm_bits, *w_buff_c; float *rm_symbols, *unrm_symbols, *w_buff_f; int nof_errors; parse_args(argc, argv); - bits = malloc(sizeof(char) * nof_tx_bits); + bits = malloc(sizeof(uint8_t) * nof_tx_bits); if (!bits) { perror("malloc"); exit(-1); } - w_buff_c = malloc(sizeof(char) * nof_tx_bits * 10); + w_buff_c = malloc(sizeof(uint8_t) * nof_tx_bits * 10); if (!w_buff_c) { perror("malloc"); exit(-1); } - rm_bits = malloc(sizeof(char) * nof_rx_bits); + rm_bits = malloc(sizeof(uint8_t) * nof_rx_bits); if (!rm_bits) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/fec/test/turbocoder_test.c b/lte/phy/lib/fec/test/turbocoder_test.c index fb0fabc85..2fcea3fb2 100644 --- a/lte/phy/lib/fec/test/turbocoder_test.c +++ b/lte/phy/lib/fec/test/turbocoder_test.c @@ -90,7 +90,7 @@ void parse_args(int argc, char **argv) { ebno_db = atof(argv[optind]); break; case 's': - seed = (unsigned int) strtoul(argv[optind], NULL, 0); + seed = (uint32_t) strtoul(argv[optind], NULL, 0); break; case 'v': verbose++; @@ -129,8 +129,8 @@ void output_matlab(float ber[MAX_ITERATIONS][SNR_POINTS], int snr_points) { int main(int argc, char **argv) { uint32_t frame_cnt; float *llr; - unsigned char *llr_c; - char *data_tx, *data_rx, *symbols; + uint8_t *llr_c; + uint8_t *data_tx, *data_rx, *symbols; uint32_t i, j; float var[SNR_POINTS]; uint32_t snr_points; @@ -162,19 +162,19 @@ int main(int argc, char **argv) { printf(" EbNo: %.2f\n", ebno_db); } - data_tx = malloc(frame_length * sizeof(char)); + data_tx = malloc(frame_length * sizeof(uint8_t)); if (!data_tx) { perror("malloc"); exit(-1); } - data_rx = malloc(frame_length * sizeof(char)); + data_rx = malloc(frame_length * sizeof(uint8_t)); if (!data_rx) { perror("malloc"); exit(-1); } - symbols = malloc(coded_length * sizeof(char)); + symbols = malloc(coded_length * sizeof(uint8_t)); if (!symbols) { perror("malloc"); exit(-1); @@ -184,7 +184,7 @@ int main(int argc, char **argv) { perror("malloc"); exit(-1); } - llr_c = malloc(coded_length * sizeof(char)); + llr_c = malloc(coded_length * sizeof(uint8_t)); if (!llr_c) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/fec/test/turbocoder_test.h b/lte/phy/lib/fec/test/turbocoder_test.h index b0b64ded1..3ec91ed27 100644 --- a/lte/phy/lib/fec/test/turbocoder_test.h +++ b/lte/phy/lib/fec/test/turbocoder_test.h @@ -29,7 +29,7 @@ typedef struct { int n; - unsigned int s; + uint32_t s; int iterations; int len; float ebno; @@ -55,7 +55,7 @@ static expected_errors_t expected_errors[] = { }; -int get_expected_errors(int n, unsigned int s, int iterations, int len, float ebno) { +int get_expected_errors(int n, uint32_t s, int iterations, int len, float ebno) { int i; i = 0; while (expected_errors[i].n != -1) { @@ -78,7 +78,7 @@ int get_expected_errors(int n, unsigned int s, int iterations, int len, float eb const int known_data_errors[4] = {47, 18, 0, 0}; #define KNOWN_DATA_LEN 504 -const char known_data[KNOWN_DATA_LEN] = { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, +const uint8_t known_data[KNOWN_DATA_LEN] = { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, @@ -101,7 +101,7 @@ const char known_data[KNOWN_DATA_LEN] = { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1 }; -const char known_data_encoded[3 * KNOWN_DATA_LEN + 12] = { 0, 0, 0, 0, 0, 1, 1, +const uint8_t known_data_encoded[3 * KNOWN_DATA_LEN + 12] = { 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, diff --git a/lte/phy/lib/fec/test/viterbi_test.c b/lte/phy/lib/fec/test/viterbi_test.c index 7354e3c28..c1803e52e 100644 --- a/lte/phy/lib/fec/test/viterbi_test.c +++ b/lte/phy/lib/fec/test/viterbi_test.c @@ -41,7 +41,7 @@ typedef _Complex float cf_t; int frame_length = 1000, nof_frames = 128; float ebno_db = 100.0; -unsigned int seed = 0; +uint32_t seed = 0; bool tail_biting = false; int K = -1; @@ -76,7 +76,7 @@ void parse_args(int argc, char **argv) { ebno_db = atof(argv[optind]); break; case 's': - seed = (unsigned int) strtoul(argv[optind], NULL, 0); + seed = (uint32_t) strtoul(argv[optind], NULL, 0); break; case 't': tail_biting = true; @@ -122,13 +122,13 @@ void output_matlab(float ber[NTYPES][SNR_POINTS], int snr_points, int main(int argc, char **argv) { int frame_cnt; float *llr; - unsigned char *llr_c; - char *data_tx, *data_rx[NTYPES], *symbols; + uint8_t *llr_c; + uint8_t *data_tx, *data_rx[NTYPES], *symbols; int i, j; float var[SNR_POINTS], varunc[SNR_POINTS]; int snr_points; float ber[NTYPES][SNR_POINTS]; - unsigned int errors[NTYPES]; + uint32_t errors[NTYPES]; viterbi_type_t viterbi_type[NCODS]; viterbi_t dec[NCODS]; convcoder_t cod[NCODS]; @@ -200,21 +200,21 @@ int main(int argc, char **argv) { printf(" EbNo: %.2f\n", ebno_db); } - data_tx = malloc(frame_length * sizeof(char)); + data_tx = malloc(frame_length * sizeof(uint8_t)); if (!data_tx) { perror("malloc"); exit(-1); } for (i = 0; i < NTYPES; i++) { - data_rx[i] = malloc(frame_length * sizeof(char)); + data_rx[i] = malloc(frame_length * sizeof(uint8_t)); if (!data_rx[i]) { perror("malloc"); exit(-1); } } - symbols = malloc(max_coded_length * sizeof(char)); + symbols = malloc(max_coded_length * sizeof(uint8_t)); if (!symbols) { perror("malloc"); exit(-1); @@ -224,7 +224,7 @@ int main(int argc, char **argv) { perror("malloc"); exit(-1); } - llr_c = malloc(2 * max_coded_length * sizeof(char)); + llr_c = malloc(2 * max_coded_length * sizeof(uint8_t)); if (!llr_c) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/fec/test/viterbi_test.h b/lte/phy/lib/fec/test/viterbi_test.h index b01d4b03a..c54c0c132 100644 --- a/lte/phy/lib/fec/test/viterbi_test.h +++ b/lte/phy/lib/fec/test/viterbi_test.h @@ -29,7 +29,7 @@ typedef struct { int n; - unsigned int s; + uint32_t s; int len; int k; bool tail; @@ -52,7 +52,7 @@ static expected_errors_t expected_errors[] = { {-1, -1, -1, -1, true, -1.0, -1} }; -int get_expected_errors(int n, unsigned int s, int len, int k, bool tail, float ebno) { +int get_expected_errors(int n, uint32_t s, int len, int k, bool tail, float ebno) { int i; i=0; while(expected_errors[i].n != -1) { diff --git a/lte/phy/lib/io/src/binsource.c b/lte/phy/lib/io/src/binsource.c index 962cd3c04..f4cd3043e 100644 --- a/lte/phy/lib/io/src/binsource.c +++ b/lte/phy/lib/io/src/binsource.c @@ -77,7 +77,7 @@ void binsource_free(binsource_t* q) { /** * Sets a new seed */ -void binsource_seed_set(binsource_t* q, unsigned int seed) { +void binsource_seed_set(binsource_t* q, uint32_t seed) { q->seed = seed; } @@ -102,7 +102,7 @@ int binsource_cache_gen(binsource_t* q, int nbits) { return 0; } -static int int_2_bits(uint32_t* src, char* dst, int nbits) { +static int int_2_bits(uint32_t* src, uint8_t* dst, int nbits) { int n; n=nbits/32; for (int i=0;iseq_cache_rp += int_2_bits(&q->seq_buff[q->seq_cache_rp],bits,nbits); } @@ -123,7 +123,7 @@ void binsource_cache_cpy(binsource_t* q, char *bits, int nbits) { * Stores in the bits buffer a sequence of nbits pseudo-random bits. * Overwrites the bits generated using binsource_cache_gen. */ -int binsource_generate(binsource_t* q, char *bits, int nbits) { +int binsource_generate(binsource_t* q, uint8_t *bits, int nbits) { if (gen_seq_buff(q,DIV(nbits,32))) { return -1; diff --git a/lte/phy/lib/modem/src/demod_hard.c b/lte/phy/lib/modem/src/demod_hard.c index a3b306e0b..75a170a89 100644 --- a/lte/phy/lib/modem/src/demod_hard.c +++ b/lte/phy/lib/modem/src/demod_hard.c @@ -41,7 +41,7 @@ void demod_hard_table_set(demod_hard_t* q, lte_mod_t mod) { q->mod = mod; } -int demod_hard_demodulate(demod_hard_t* q, cf_t* symbols, char *bits, uint32_t nsymbols) { +int demod_hard_demodulate(demod_hard_t* q, cf_t* symbols, uint8_t *bits, uint32_t nsymbols) { int nbits=-1; switch(q->mod) { diff --git a/lte/phy/lib/modem/src/hard_demod_lte.c b/lte/phy/lib/modem/src/hard_demod_lte.c index f841f3ac7..94176acd1 100644 --- a/lte/phy/lib/modem/src/hard_demod_lte.c +++ b/lte/phy/lib/modem/src/hard_demod_lte.c @@ -43,11 +43,11 @@ *---------> I *1 | * \param in input symbols (_Complex float) - * \param out output symbols (chars) + * \param out output symbols (uint8_ts) * \param N Number of input symbols * \param modulation Modulation type */ -inline void hard_bpsk_demod(const cf_t* in, char* out, uint32_t N) +inline void hard_bpsk_demod(const cf_t* in, uint8_t* out, uint32_t N) { uint32_t s; @@ -78,11 +78,11 @@ inline void hard_bpsk_demod(const cf_t* in, char* out, uint32_t N) *11 | 01 * * \param in input symbols (_Complex float) - * \param out output symbols (chars) + * \param out output symbols (uint8_ts) * \param N Number of input symbols * \param modulation Modulation type */ -inline void hard_qpsk_demod(const cf_t* in, char* out, uint32_t N) +inline void hard_qpsk_demod(const cf_t* in, uint8_t* out, uint32_t N) { uint32_t s; @@ -112,11 +112,11 @@ inline void hard_qpsk_demod(const cf_t* in, char* out, uint32_t N) * 1111 1101 | 0101 0111 * * \param in input symbols (_Complex float) - * \param out output symbols (chars) + * \param out output symbols (uint8_ts) * \param N Number of input symbols * \param modulation Modulation type */ -inline void hard_qam16_demod(const cf_t* in, char* out, uint32_t N) +inline void hard_qam16_demod(const cf_t* in, uint8_t* out, uint32_t N) { uint32_t s; @@ -154,11 +154,11 @@ inline void hard_qam16_demod(const cf_t* in, char* out, uint32_t N) * see [3GPP TS 36.211 version 10.5.0 Release 10, Section 7.1.4] * * \param in input symbols (_Complex float) - * \param out output symbols (chars) + * \param out output symbols (uint8_ts) * \param N Number of input symbols * \param modulation Modulation type */ -inline void hard_qam64_demod(const cf_t* in, char* out, uint32_t N) +inline void hard_qam64_demod(const cf_t* in, uint8_t* out, uint32_t N) { uint32_t s; diff --git a/lte/phy/lib/modem/src/hard_demod_lte.h b/lte/phy/lib/modem/src/hard_demod_lte.h index 49741c659..e655f1cc9 100644 --- a/lte/phy/lib/modem/src/hard_demod_lte.h +++ b/lte/phy/lib/modem/src/hard_demod_lte.h @@ -35,17 +35,17 @@ #define QAM64_THRESHOLD_3 6/sqrt(42) void hard_bpsk_demod(const cf_t* in, - char* out, + uint8_t* out, uint32_t N); void hard_qpsk_demod(const cf_t* in, - char* out, + uint8_t* out, uint32_t N); void hard_qam16_demod(const cf_t* in, - char* out, + uint8_t* out, uint32_t N); void hard_qam64_demod(const cf_t* in, - char* out, + uint8_t* out, uint32_t N); diff --git a/lte/phy/lib/modem/src/mod.c b/lte/phy/lib/modem/src/mod.c index ef6a600e7..6bfc6a6c4 100644 --- a/lte/phy/lib/modem/src/mod.c +++ b/lte/phy/lib/modem/src/mod.c @@ -35,9 +35,9 @@ /** Low-level API */ -int mod_modulate(modem_table_t* q, const char *bits, cf_t* symbols, uint32_t nbits) { +int mod_modulate(modem_table_t* q, const uint8_t *bits, cf_t* symbols, uint32_t nbits) { uint32_t i,j,idx; - char *b_ptr=(char*) bits; + uint8_t *b_ptr=(uint8_t*) bits; j=0; for (i=0;inbits_x_symbol) { idx = bit_unpack(&b_ptr,q->nbits_x_symbol); diff --git a/lte/phy/lib/modem/test/modem_test.c b/lte/phy/lib/modem/test/modem_test.c index 97c97ff17..b163ddf03 100644 --- a/lte/phy/lib/modem/test/modem_test.c +++ b/lte/phy/lib/modem/test/modem_test.c @@ -97,7 +97,7 @@ int main(int argc, char **argv) { modem_table_t mod; demod_hard_t demod_hard; demod_soft_t demod_soft; - char *input, *output; + uint8_t *input, *output; cf_t *symbols; float *llr; @@ -129,12 +129,12 @@ int main(int argc, char **argv) { } /* allocate buffers */ - input = malloc(sizeof(char) * num_bits); + input = malloc(sizeof(uint8_t) * num_bits); if (!input) { perror("malloc"); exit(-1); } - output = malloc(sizeof(char) * num_bits); + output = malloc(sizeof(uint8_t) * num_bits); if (!output) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/modem/test/soft_demod_test.c b/lte/phy/lib/modem/test/soft_demod_test.c index 5849f4693..0a11231be 100644 --- a/lte/phy/lib/modem/test/soft_demod_test.c +++ b/lte/phy/lib/modem/test/soft_demod_test.c @@ -110,7 +110,7 @@ int main(int argc, char **argv) { int i; modem_table_t mod; demod_soft_t demod_soft; - char *input, *output; + uint8_t *input, *output; cf_t *symbols; float *llr_exact, *llr_approx; @@ -131,12 +131,12 @@ int main(int argc, char **argv) { /* allocate buffers */ - input = malloc(sizeof(char) * num_bits); + input = malloc(sizeof(uint8_t) * num_bits); if (!input) { perror("malloc"); exit(-1); } - output = malloc(sizeof(char) * num_bits); + output = malloc(sizeof(uint8_t) * num_bits); if (!output) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/phch/src/dci.c b/lte/phy/lib/phch/src/dci.c index 5d57a28ab..62542fdb0 100644 --- a/lte/phy/lib/phch/src/dci.c +++ b/lte/phy/lib/phch/src/dci.c @@ -207,7 +207,7 @@ uint32_t dci_format_sizeof(dci_format_t format, uint32_t nof_prb) { int dci_format0_pack(ra_pusch_t *data, dci_msg_t *msg, uint32_t nof_prb) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; uint32_t n_ul_hop; *y++ = 0; // format differentiation @@ -269,7 +269,7 @@ int dci_format0_pack(ra_pusch_t *data, dci_msg_t *msg, uint32_t nof_prb) { int dci_format0_unpack(dci_msg_t *msg, ra_pusch_t *data, uint32_t nof_prb) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; uint32_t n_ul_hop; /* Make sure it's a Format0 message */ @@ -338,7 +338,7 @@ int dci_format0_unpack(dci_msg_t *msg, ra_pusch_t *data, uint32_t nof_prb) { int dci_format1_pack(ra_pdsch_t *data, dci_msg_t *msg, uint32_t nof_prb) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; if (nof_prb > 10) { *y++ = data->alloc_type; @@ -391,7 +391,7 @@ int dci_format1_pack(ra_pdsch_t *data, dci_msg_t *msg, uint32_t nof_prb) { int dci_format1_unpack(dci_msg_t *msg, ra_pdsch_t *data, uint32_t nof_prb) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; /* Make sure it's a Format1 message */ if (msg->nof_bits != dci_format_sizeof(Format1, nof_prb)) { @@ -451,7 +451,7 @@ int dci_format1As_pack(ra_pdsch_t *data, dci_msg_t *msg, uint32_t nof_prb, bool crc_is_crnti) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; *y++ = 1; // format differentiation @@ -537,7 +537,7 @@ int dci_format1As_unpack(dci_msg_t *msg, ra_pdsch_t *data, uint32_t nof_prb, bool crc_is_crnti) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; /* Make sure it's a Format0 message */ if (msg->nof_bits != dci_format_sizeof(Format1A, nof_prb)) { @@ -614,7 +614,7 @@ int dci_format1As_unpack(dci_msg_t *msg, ra_pdsch_t *data, uint32_t nof_prb, int dci_format1Cs_pack(ra_pdsch_t *data, dci_msg_t *msg, uint32_t nof_prb) { /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; if (data->alloc_type != alloc_type2 || data->type2_alloc.mode != t2_dist) { fprintf(stderr, @@ -665,7 +665,7 @@ int dci_format1Cs_unpack(dci_msg_t *msg, ra_pdsch_t *data, uint32_t nof_prb) { uint32_t L_p, RB_p; /* pack bits */ - char *y = msg->data; + uint8_t *y = msg->data; if (msg->nof_bits != dci_format_sizeof(Format1C, nof_prb)) { fprintf(stderr, "Invalid message length for format 1C\n"); diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index d2f5ca450..beab9976f 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -41,7 +41,7 @@ #include "liblte/phy/utils/vector.h" #include "liblte/phy/utils/debug.h" -const char crc_mask[4][16] = { +const uint8_t crc_mask[4][16] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 } }; @@ -193,11 +193,11 @@ int pbch_init(pbch_t *q, lte_cell_t cell) { if (!q->pbch_rm_b) { goto clean; } - q->data = malloc(sizeof(char) * 40); + q->data = malloc(sizeof(uint8_t) * 40); if (!q->data) { goto clean; } - q->data_enc = malloc(sizeof(char) * 120); + q->data_enc = malloc(sizeof(uint8_t) * 120); if (!q->data_enc) { goto clean; } @@ -252,7 +252,7 @@ void pbch_free(pbch_t *q) { /** Unpacks MIB from PBCH message. * msg buffer must be 24 byte length at least */ -void pbch_mib_unpack(char *msg, pbch_mib_t *mib) { +void pbch_mib_unpack(uint8_t *msg, pbch_mib_t *mib) { int bw, phich_res; bw = bit_unpack(&msg, 3); @@ -295,7 +295,7 @@ void pbch_mib_unpack(char *msg, pbch_mib_t *mib) { /** Unpacks MIB from PBCH message. * msg buffer must be 24 byte length at least */ -void pbch_mib_pack(pbch_mib_t *mib, char *msg) { +void pbch_mib_pack(pbch_mib_t *mib, uint8_t *msg) { int bw, phich_res = 0; bzero(msg, 24); @@ -359,7 +359,7 @@ void pbch_decode_reset(pbch_t *q) { q->frame_idx = 0; } -void crc_set_mask(char *data, int nof_ports) { +void crc_set_mask(uint8_t *data, int nof_ports) { int i; for (i = 0; i < 16; i++) { data[24 + i] = (data[24 + i] + crc_mask[nof_ports - 1][i]) % 2; @@ -373,9 +373,9 @@ void crc_set_mask(char *data, int nof_ports) { * * Returns 0 if the data is correct, -1 otherwise */ -uint32_t pbch_crc_check(pbch_t *q, char *bits, uint32_t nof_ports) { - char data[40]; - memcpy(data, bits, 40 * sizeof(char)); +uint32_t pbch_crc_check(pbch_t *q, uint8_t *bits, uint32_t nof_ports) { + uint8_t data[40]; + memcpy(data, bits, 40 * sizeof(uint8_t)); crc_set_mask(data, nof_ports); int ret = crc_checksum(&q->crc, data, 40); if (ret == 0) { diff --git a/lte/phy/lib/phch/src/pcfich.c b/lte/phy/lib/phch/src/pcfich.c index f65d3394e..8a783c104 100644 --- a/lte/phy/lib/phch/src/pcfich.c +++ b/lte/phy/lib/phch/src/pcfich.c @@ -42,7 +42,7 @@ #include "liblte/phy/utils/debug.h" // Table 5.3.4-1 -static char cfi_table[4][PCFICH_CFI_LEN] = { { 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, +static uint8_t cfi_table[4][PCFICH_CFI_LEN] = { { 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, { 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, @@ -105,7 +105,7 @@ void pcfich_free(pcfich_t *q) { /** Finds the CFI with minimum distance with the vector of received 32 bits. * Saves the CFI value in the cfi pointer and returns the distance. */ -int pcfich_cfi_decode(char bits[PCFICH_CFI_LEN], uint32_t *cfi) { +int pcfich_cfi_decode(uint8_t bits[PCFICH_CFI_LEN], uint32_t *cfi) { int i, j; int distance, index = -1; int min = 32; @@ -130,11 +130,11 @@ int pcfich_cfi_decode(char bits[PCFICH_CFI_LEN], uint32_t *cfi) { /** Encodes the CFI producing a vector of 32 bits. * 36.211 10.3 section 5.3.4 */ -int pcfich_cfi_encode(int cfi, char bits[PCFICH_CFI_LEN]) { +int pcfich_cfi_encode(int cfi, uint8_t bits[PCFICH_CFI_LEN]) { if (cfi < 1 || cfi > 3) { return LIBLTE_ERROR_INVALID_INPUTS; } else{ - memcpy(bits, cfi_table[cfi - 1], PCFICH_CFI_LEN * sizeof(char)); + memcpy(bits, cfi_table[cfi - 1], PCFICH_CFI_LEN * sizeof(uint8_t)); return LIBLTE_SUCCESS; } } diff --git a/lte/phy/lib/phch/src/pdcch.c b/lte/phy/lib/phch/src/pdcch.c index 99d49b4aa..8775dacc5 100644 --- a/lte/phy/lib/phch/src/pdcch.c +++ b/lte/phy/lib/phch/src/pdcch.c @@ -108,7 +108,7 @@ int pdcch_init(pdcch_t *q, regs_t *regs, lte_cell_t cell) { goto clean; } - q->pdcch_e = malloc(sizeof(char) * q->max_bits); + q->pdcch_e = malloc(sizeof(uint8_t) * q->max_bits); if (!q->pdcch_e) { goto clean; } @@ -271,11 +271,11 @@ uint32_t pdcch_common_locations(pdcch_t *q, dci_location_t *c, uint32_t max_cand * * TODO: UE transmit antenna selection CRC mask */ -static int dci_decode(pdcch_t *q, float *e, char *data, uint32_t E, uint32_t nof_bits, uint16_t *crc) { +static int dci_decode(pdcch_t *q, float *e, uint8_t *data, uint32_t E, uint32_t nof_bits, uint16_t *crc) { float tmp[3 * (DCI_MAX_BITS + 16)]; uint16_t p_bits, crc_res; - char *x; + uint8_t *x; if (q != NULL && data != NULL && @@ -428,10 +428,10 @@ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], -static void crc_set_mask_rnti(char *crc, uint16_t rnti) { +static void crc_set_mask_rnti(uint8_t *crc, uint16_t rnti) { uint32_t i; - char mask[16]; - char *r = mask; + uint8_t mask[16]; + uint8_t *r = mask; INFO("Mask CRC with RNTI 0x%x\n", rnti); @@ -444,10 +444,10 @@ static void crc_set_mask_rnti(char *crc, uint16_t rnti) { /** 36.212 5.3.3.2 to 5.3.3.4 * TODO: UE transmit antenna selection CRC mask */ -static int dci_encode(pdcch_t *q, char *data, char *e, uint32_t nof_bits, uint32_t E, +static int dci_encode(pdcch_t *q, uint8_t *data, uint8_t *e, uint32_t nof_bits, uint32_t E, uint16_t rnti) { convcoder_t encoder; - char tmp[3 * (DCI_MAX_BITS + 16)]; + uint8_t tmp[3 * (DCI_MAX_BITS + 16)]; if (q != NULL && data != NULL && diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index 87d84f7c7..ec54c8db6 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -214,7 +214,7 @@ int pdsch_init(pdsch_t *q, lte_cell_t cell) { } // Allocate floats for reception (LLRs) - q->cb_in = malloc(sizeof(char) * MAX_LONG_CB); + q->cb_in = malloc(sizeof(uint8_t) * MAX_LONG_CB); if (!q->cb_in) { goto clean; } @@ -369,7 +369,7 @@ int pdsch_harq_init(pdsch_harq_t *p, pdsch_t *pdsch) { return LIBLTE_ERROR; } - p->pdsch_w_buff_c = malloc(sizeof(char*) * p->max_cb); + p->pdsch_w_buff_c = malloc(sizeof(uint8_t*) * p->max_cb); if (!p->pdsch_w_buff_c) { perror("malloc"); return LIBLTE_ERROR; @@ -384,7 +384,7 @@ int pdsch_harq_init(pdsch_harq_t *p, pdsch_t *pdsch) { perror("malloc"); return LIBLTE_ERROR; } - p->pdsch_w_buff_c[i] = malloc(sizeof(char) * p->w_buff_size); + p->pdsch_w_buff_c[i] = malloc(sizeof(uint8_t) * p->w_buff_size); if (!p->pdsch_w_buff_c[i]) { perror("malloc"); return LIBLTE_ERROR; @@ -471,11 +471,11 @@ uint32_t pdsch_last_noi(pdsch_t *q) { /* Decode a transport block according to 36.212 5.3.2 * */ -int pdsch_decode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, +int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, pdsch_harq_t *harq_process, uint32_t rv_idx) { - char parity[24]; - char *p_parity = parity; + uint8_t parity[24]; + uint8_t *p_parity = parity; uint32_t par_rx, par_tx; uint32_t i; uint32_t cb_len, rp, wp, rlen, F, n_e; @@ -530,7 +530,7 @@ int pdsch_decode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, q->nof_iterations = 0; bool early_stop = false; uint32_t len_crc; - char *cb_in_ptr; + uint8_t *cb_in_ptr; crc_t *crc_ptr; tdec_reset(&q->decoder, cb_len); @@ -545,7 +545,7 @@ int pdsch_decode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, crc_ptr = &q->crc_cb; } else { len_crc = tbs+24; - bzero(q->cb_in, F*sizeof(char)); + bzero(q->cb_in, F*sizeof(uint8_t)); cb_in_ptr = &q->cb_in[F]; crc_ptr = &q->crc_tb; } @@ -566,14 +566,14 @@ int pdsch_decode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, /* Copy data to another buffer, removing the Codeblock CRC */ if (i < harq_process->cb_segm.C - 1) { - memcpy(&data[wp], &q->cb_in[F], (rlen - F) * sizeof(char)); + memcpy(&data[wp], &q->cb_in[F], (rlen - F) * sizeof(uint8_t)); } else { DEBUG("Last CB, appending parity: %d to %d from %d and 24 from %d\n", rlen - F - 24, wp, F, rlen - 24); /* Append Transport Block parity bits to the last CB */ - memcpy(&data[wp], &q->cb_in[F], (rlen - F - 24) * sizeof(char)); - memcpy(parity, &q->cb_in[rlen - 24], 24 * sizeof(char)); + memcpy(&data[wp], &q->cb_in[F], (rlen - F - 24) * sizeof(uint8_t)); + memcpy(parity, &q->cb_in[rlen - 24], 24 * sizeof(uint8_t)); } /* Set read/write pointers */ @@ -607,7 +607,7 @@ int pdsch_decode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, /** Decodes the PDSCH from the received symbols */ -int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], char *data, uint32_t subframe, +int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], uint8_t *data, uint32_t subframe, pdsch_harq_t *harq_process, uint32_t rv_idx) { @@ -699,15 +699,15 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], char *data, /* Encode a transport block according to 36.212 5.3.2 * */ -int pdsch_encode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, +int pdsch_encode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, pdsch_harq_t *harq_process, uint32_t rv_idx) { - char parity[24]; - char *p_parity = parity; + uint8_t parity[24]; + uint8_t *p_parity = parity; uint32_t par; uint32_t i; uint32_t cb_len, rp, wp, rlen, F, n_e; - char *e_bits = q->pdsch_e; + uint8_t *e_bits = q->pdsch_e; int ret = LIBLTE_ERROR_INVALID_INPUTS; if (q != NULL && @@ -769,13 +769,13 @@ int pdsch_encode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, if (rv_idx == 0) { /* Copy data to another buffer, making space for the Codeblock CRC */ if (i < harq_process->cb_segm.C - 1) { - memcpy(&q->cb_in[F], &data[rp], (rlen - F) * sizeof(char)); + memcpy(&q->cb_in[F], &data[rp], (rlen - F) * sizeof(uint8_t)); } else { INFO("Last CB, appending parity: %d from %d and 24 to %d\n", rlen - F - 24, rp, rlen - 24); /* Append Transport Block parity bits to the last CB */ - memcpy(&q->cb_in[F], &data[rp], (rlen - F - 24) * sizeof(char)); - memcpy(&q->cb_in[rlen - 24], parity, 24 * sizeof(char)); + memcpy(&q->cb_in[F], &data[rp], (rlen - F - 24) * sizeof(uint8_t)); + memcpy(&q->cb_in[rlen - 24], parity, 24 * sizeof(uint8_t)); } if (harq_process->cb_segm.C > 1) { /* Attach Codeblock CRC */ @@ -786,12 +786,12 @@ int pdsch_encode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, vec_fprint_b(stdout, q->cb_in, cb_len); } /* Turbo Encoding */ - tcod_encode(&q->encoder, q->cb_in, (char*) q->cb_out, cb_len); + tcod_encode(&q->encoder, q->cb_in, (uint8_t*) q->cb_out, cb_len); } /* Rate matching */ if (rm_turbo_tx(harq_process->pdsch_w_buff_c[i], harq_process->w_buff_size, - (char*) q->cb_out, 3 * cb_len + 12, + (uint8_t*) q->cb_out, 3 * cb_len + 12, &e_bits[wp], n_e, rv_idx)) { fprintf(stderr, "Error in rate matching\n"); @@ -815,7 +815,7 @@ int pdsch_encode_tb(pdsch_t *q, char *data, uint32_t tbs, uint32_t nb_e, /** Converts the PDSCH data bits to symbols mapped to the slot ready for transmission */ -int pdsch_encode(pdsch_t *q, char *data, cf_t *sf_symbols[MAX_PORTS], uint32_t subframe, +int pdsch_encode(pdsch_t *q, uint8_t *data, cf_t *sf_symbols[MAX_PORTS], uint32_t subframe, pdsch_harq_t *harq_process, uint32_t rv_idx) { int i; @@ -871,9 +871,9 @@ int pdsch_encode(pdsch_t *q, char *data, cf_t *sf_symbols[MAX_PORTS], uint32_t s return LIBLTE_ERROR; } - scrambling_b_offset(&q->seq_pdsch[subframe], (char*) q->pdsch_e, 0, nof_bits_e); + scrambling_b_offset(&q->seq_pdsch[subframe], (uint8_t*) q->pdsch_e, 0, nof_bits_e); - mod_modulate(&q->mod[harq_process->mcs.mod - 1], (char*) q->pdsch_e, q->pdsch_d, nof_bits_e); + mod_modulate(&q->mod[harq_process->mcs.mod - 1], (uint8_t*) q->pdsch_e, q->pdsch_d, nof_bits_e); /* TODO: only diversity supported */ if (q->cell.nof_ports > 1) { diff --git a/lte/phy/lib/phch/src/phich.c b/lte/phy/lib/phch/src/phich.c index d27765269..3d6fa182f 100644 --- a/lte/phy/lib/phch/src/phich.c +++ b/lte/phy/lib/phch/src/phich.c @@ -107,7 +107,7 @@ void phich_free(phich_t *q) { /* Decodes ACK * */ -char phich_ack_decode(char bits[PHICH_NBITS], uint32_t *distance) { +uint8_t phich_ack_decode(uint8_t bits[PHICH_NBITS], uint32_t *distance) { int i, n; n = 0; @@ -131,8 +131,8 @@ char phich_ack_decode(char bits[PHICH_NBITS], uint32_t *distance) { /** Encodes the ACK * 36.212 */ -void phich_ack_encode(char ack, char bits[PHICH_NBITS]) { - memset(bits, ack, 3 * sizeof(char)); +void phich_ack_encode(uint8_t ack, uint8_t bits[PHICH_NBITS]) { + memset(bits, ack, 3 * sizeof(uint8_t)); } /* Decodes the phich channel and saves the CFI in the cfi pointer. @@ -140,7 +140,7 @@ void phich_ack_encode(char ack, char bits[PHICH_NBITS]) { * Returns 1 if successfully decoded the CFI, 0 if not and -1 on error */ int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], - uint32_t ngroup, uint32_t nseq, uint32_t subframe, char *ack, uint32_t *distance) { + uint32_t ngroup, uint32_t nseq, uint32_t subframe, uint8_t *ack, uint32_t *distance) { /* Set pointers for layermapping & precoding */ int i, j; @@ -268,9 +268,9 @@ int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], } /** Encodes ACK/NACK bits, modulates and inserts into resource. - * The parameter ack is an array of phich_ngroups() pointers to buffers of nof_sequences chars + * The parameter ack is an array of phich_ngroups() pointers to buffers of nof_sequences uint8_ts */ -int phich_encode(phich_t *q, char ack, uint32_t ngroup, uint32_t nseq, uint32_t subframe, +int phich_encode(phich_t *q, uint8_t ack, uint32_t ngroup, uint32_t nseq, uint32_t subframe, cf_t *slot_symbols[MAX_PORTS]) { int i; diff --git a/lte/phy/lib/phch/src/regs.c b/lte/phy/lib/phch/src/regs.c index 0c0bf5405..1f6112f9d 100644 --- a/lte/phy/lib/phch/src/regs.c +++ b/lte/phy/lib/phch/src/regs.c @@ -72,7 +72,7 @@ void regs_pdcch_free(regs_t *h) { } #define PDCCH_NCOLS 32 -const unsigned char PDCCH_PERM[PDCCH_NCOLS] = +const uint8_t PDCCH_PERM[PDCCH_NCOLS] = { 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31, 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30 }; diff --git a/lte/phy/lib/phch/test/dci_unpacking.c b/lte/phy/lib/phch/test/dci_unpacking.c index 6a1087d11..8688c0ff2 100644 --- a/lte/phy/lib/phch/test/dci_unpacking.c +++ b/lte/phy/lib/phch/test/dci_unpacking.c @@ -44,7 +44,7 @@ int main(int argc, char **argv) { int nof_prb; int nwords; int i; - char *y; + uint8_t *y; if (argc < 3) { usage(argv[0]); @@ -63,7 +63,7 @@ int main(int argc, char **argv) { y = msg.data; rlen = 0; - unsigned int x; + uint32_t x; for (i = 0; i < nwords; i++) { x = strtoul(argv[i + 3], NULL, 16); if (len - rlen < 32) { diff --git a/lte/phy/lib/phch/test/pdsch_file_test.c b/lte/phy/lib/phch/test/pdsch_file_test.c index 6cd8bd0e5..b367e07d2 100644 --- a/lte/phy/lib/phch/test/pdsch_file_test.c +++ b/lte/phy/lib/phch/test/pdsch_file_test.c @@ -227,7 +227,7 @@ int main(int argc, char **argv) { int i; int nof_frames; int ret; - char *data; + uint8_t *data; dci_location_t locations[10]; uint32_t nof_locations; dci_msg_t dci_msg; diff --git a/lte/phy/lib/phch/test/pdsch_test.c b/lte/phy/lib/phch/test/pdsch_test.c index 271b3c471..4275ef219 100644 --- a/lte/phy/lib/phch/test/pdsch_test.c +++ b/lte/phy/lib/phch/test/pdsch_test.c @@ -118,7 +118,7 @@ void parse_args(int argc, char **argv) { int main(int argc, char **argv) { pdsch_t pdsch; uint32_t i, j; - char *data = NULL; + uint8_t *data = NULL; cf_t *ce[MAX_PORTS]; uint32_t nof_re; cf_t *slot_symbols[MAX_PORTS]; @@ -160,7 +160,7 @@ int main(int argc, char **argv) { } } - data = malloc(sizeof(char) * mcs.tbs); + data = malloc(sizeof(uint8_t) * mcs.tbs); if (!data) { perror("malloc"); goto quit; diff --git a/lte/phy/lib/phch/test/phich_file_test.c b/lte/phy/lib/phch/test/phich_file_test.c index 45a514ed8..0efb7a352 100644 --- a/lte/phy/lib/phch/test/phich_file_test.c +++ b/lte/phy/lib/phch/test/phich_file_test.c @@ -216,7 +216,7 @@ int main(int argc, char **argv) { uint32_t distance; int i, n; uint32_t ngroup, nseq, max_nseq; - char ack_rx; + uint8_t ack_rx; if (argc < 3) { usage(argv[0]); diff --git a/lte/phy/lib/phch/test/phich_test.c b/lte/phy/lib/phch/test/phich_test.c index 52ef05d74..1fb45f770 100644 --- a/lte/phy/lib/phch/test/phich_test.c +++ b/lte/phy/lib/phch/test/phich_test.c @@ -105,7 +105,7 @@ int main(int argc, char **argv) { cf_t *ce[MAX_PORTS]; int nof_re; cf_t *slot_symbols[MAX_PORTS]; - char ack[50][PHICH_NORM_NSEQUENCES], ack_rx; + uint8_t ack[50][PHICH_NORM_NSEQUENCES], ack_rx; uint32_t nsf, distance; int cid, max_cid; uint32_t ngroup, nseq, max_nseq; diff --git a/lte/phy/lib/scrambling/src/scrambling.c b/lte/phy/lib/scrambling/src/scrambling.c index d6ebead94..5bf0d6f99 100644 --- a/lte/phy/lib/scrambling/src/scrambling.c +++ b/lte/phy/lib/scrambling/src/scrambling.c @@ -57,7 +57,7 @@ void scrambling_c_offset(sequence_t *s, cf_t *data, int offset, int len) { } } -void scrambling_b(sequence_t *s, char *data) { +void scrambling_b(sequence_t *s, uint8_t *data) { int i; for (i = 0; i < s->len; i++) { @@ -65,7 +65,7 @@ void scrambling_b(sequence_t *s, char *data) { } } -void scrambling_b_offset(sequence_t *s, char *data, int offset, int len) { +void scrambling_b_offset(sequence_t *s, uint8_t *data, int offset, int len) { int i; assert (len + offset <= s->len); for (i = 0; i < len; i++) { @@ -125,7 +125,7 @@ int scrambling_work(scrambling_hl* hl) { sequence_t *seq = &hl->obj.seq[sf]; if (hl->init.hard) { - memcpy(hl->output, hl->input, sizeof(char) * hl->in_len); + memcpy(hl->output, hl->input, sizeof(uint8_t) * hl->in_len); scrambling_b(seq, hl->output); } else { memcpy(hl->output, hl->input, sizeof(float) * hl->in_len); diff --git a/lte/phy/lib/scrambling/test/scrambling_test.c b/lte/phy/lib/scrambling/test/scrambling_test.c index 02056590d..75053ae00 100644 --- a/lte/phy/lib/scrambling/test/scrambling_test.c +++ b/lte/phy/lib/scrambling/test/scrambling_test.c @@ -91,7 +91,7 @@ int init_sequence(sequence_t *seq, char *name) { int main(int argc, char **argv) { int i; sequence_t seq; - char *input_b, *scrambled_b; + uint8_t *input_b, *scrambled_b; float *input_f, *scrambled_f; parse_args(argc, argv); @@ -102,12 +102,12 @@ int main(int argc, char **argv) { } if (!do_floats) { - input_b = malloc(sizeof(char) * seq.len); + input_b = malloc(sizeof(uint8_t) * seq.len); if (!input_b) { perror("malloc"); exit(-1); } - scrambled_b = malloc(sizeof(char) * seq.len); + scrambled_b = malloc(sizeof(uint8_t) * seq.len); if (!scrambled_b) { perror("malloc"); exit(-1); diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index ca20b38f1..909dd3f69 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -64,7 +64,7 @@ int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total, uint3 perror("malloc"); goto clean_exit; } - q->mode_counted = malloc(sizeof(char) * max_frames_detected); + q->mode_counted = malloc(sizeof(uint8_t) * max_frames_detected); if (!q->mode_counted) { perror("malloc"); goto clean_exit; diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index c6957cf55..73a6044af 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -145,7 +145,7 @@ void ue_dl_free(ue_dl_t *q) { LIBLTE_API float mean_exec_time=0; int frame_cnt=0; -int ue_dl_decode(ue_dl_t *q, cf_t *input, char *data, uint32_t sf_idx, uint16_t rnti) +int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16_t rnti) { uint32_t cfi, cfi_distance, i; ra_pdsch_t ra_dl; diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 9122794f5..5681d33c8 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -180,7 +180,7 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { /* Make sure subframe idx is what we expect */ if ((q->sf_idx != sync_get_sf_idx(&q->strack)) && q->decode_sss_on_track) { INFO("Warning: Expected SF idx %d but got %d (%d,%g - %d,%g)!\n", - q->sf_idx, sync_get_sf_idx(&q->strack), q->strack.m0, q->strack.m1, q->strack.m0_value, q->strack.m1_value); + q->sf_idx, sync_get_sf_idx(&q->strack), q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value); /* FIXME: What should we do in this case? */ q->sf_idx = sync_get_sf_idx(&q->strack); q->state = SF_TRACK; diff --git a/lte/phy/lib/utils/src/bit.c b/lte/phy/lib/utils/src/bit.c index 46b27a426..4443bc744 100644 --- a/lte/phy/lib/utils/src/bit.c +++ b/lte/phy/lib/utils/src/bit.c @@ -31,7 +31,7 @@ #include "liblte/phy/utils/bit.h" -void bit_pack(uint32_t value, char **bits, int nof_bits) +void bit_pack(uint32_t value, uint8_t **bits, int nof_bits) { int i; @@ -41,10 +41,10 @@ void bit_pack(uint32_t value, char **bits, int nof_bits) *bits += nof_bits; } -uint32_t bit_unpack(char **bits, int nof_bits) +uint32_t bit_unpack(uint8_t **bits, int nof_bits) { int i; - unsigned int value=0; + uint32_t value=0; for(i=0; idc = val; } -static void copy_pre(char *dst, char *src, int size_d, int len, +static void copy_pre(uint8_t *dst, uint8_t *src, int size_d, int len, bool forward, bool mirror, bool dc) { int offset = dc?1:0; if(mirror && !forward){ @@ -116,7 +116,7 @@ static void copy_pre(char *dst, char *src, int size_d, int len, } } -static void copy_post(char *dst, char *src, int size_d, int len, +static void copy_post(uint8_t *dst, uint8_t *src, int size_d, int len, bool forward, bool mirror, bool dc) { int offset = dc?1:0; if(mirror && forward){ @@ -141,7 +141,7 @@ void dft_run_c(dft_plan_t *plan, dft_c_t *in, dft_c_t *out) { int i; fftwf_complex *f_out = plan->out; - copy_pre((char*)plan->in, (char*)in, sizeof(dft_c_t), plan->size, + copy_pre((uint8_t*)plan->in, (uint8_t*)in, sizeof(dft_c_t), plan->size, plan->forward, plan->mirror, plan->dc); fftwf_execute(plan->p); if (plan->norm) { @@ -153,7 +153,7 @@ void dft_run_c(dft_plan_t *plan, dft_c_t *in, dft_c_t *out) { f_out[i] = 10*log10(f_out[i]); } } - copy_post((char*)out, (char*)plan->out, sizeof(dft_c_t), plan->size, + copy_post((uint8_t*)out, (uint8_t*)plan->out, sizeof(dft_c_t), plan->size, plan->forward, plan->mirror, plan->dc); } diff --git a/lte/phy/lib/utils/src/mux.c b/lte/phy/lib/utils/src/mux.c index 6cf92ebef..e5c8b4166 100644 --- a/lte/phy/lib/utils/src/mux.c +++ b/lte/phy/lib/utils/src/mux.c @@ -27,7 +27,7 @@ - +#include #include /** @@ -38,8 +38,8 @@ void mux(void **input, void *output, int *input_lengths, int *input_padding_pre, int nof_inputs, int sample_sz) { int i,r; - char *out = (char*) output; - char **in = (char**) input; + uint8_t *out = (uint8_t*) output; + uint8_t **in = (uint8_t**) input; r=0; for (i=0;i clip) tmp = clip; - out[i] = (unsigned char) tmp; + out[i] = (uint8_t) tmp; } } diff --git a/lte/rrc/asn/INTEGER.c b/lte/rrc/asn/INTEGER.c index 8ead23d51..54feb00e9 100644 --- a/lte/rrc/asn/INTEGER.c +++ b/lte/rrc/asn/INTEGER.c @@ -307,7 +307,7 @@ INTEGER_st_prealloc(INTEGER_t *st, int min_size) { static enum xer_pbd_rval INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { INTEGER_t *st = (INTEGER_t *)sptr; - long dec_value; + long dec_value=0; long hex_value = 0; const char *lp; const char *lstart = (const char *)chunk_buf; diff --git a/lte/rrc/asn/per_support.c b/lte/rrc/asn/per_support.c index 0d089f495..9beee04e4 100644 --- a/lte/rrc/asn/per_support.c +++ b/lte/rrc/asn/per_support.c @@ -302,7 +302,7 @@ int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits) { long svalue = uvalue1; unsigned long uvalue2 = svalue; assert(uvalue1 == uvalue2); - return uper_put_constrained_whole_number_u(po, v, nbits); + return uper_put_constrained_whole_number_u(po, v, nbits); } int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits) { diff --git a/lte/rrc/asn/xer_decoder.c b/lte/rrc/asn/xer_decoder.c index cb4b5f878..a714ee463 100644 --- a/lte/rrc/asn/xer_decoder.c +++ b/lte/rrc/asn/xer_decoder.c @@ -222,7 +222,7 @@ xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, */ if(ctx->phase > 1) RETURN(RC_FAIL); for(;;) { - pxer_chunk_type_e ch_type; /* XER chunk type */ + pxer_chunk_type_e ch_type=0; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ From 423202055739e84a765299a3acd039b65c67143c Mon Sep 17 00:00:00 2001 From: ismagom Date: Sat, 18 Oct 2014 18:26:21 +0200 Subject: [PATCH 04/55] Moved BCCH-BCH MIB unpacking to RRC layer --- lte/phy/examples/CMakeLists.txt | 8 +- lte/phy/examples/cell_measurement.c | 3 +- lte/phy/examples/cell_search.c | 12 +- lte/phy/examples/cell_search_utils.c | 21 +- lte/phy/examples/cell_search_utils.h | 7 +- lte/phy/examples/iodev.c | 8 +- lte/phy/examples/iodev.h | 3 +- lte/phy/examples/pdsch_enodeb.c | 28 +-- lte/phy/examples/pdsch_ue.c | 5 +- lte/phy/include/liblte/phy/phch/pbch.h | 32 ++- lte/phy/include/liblte/phy/phch/regs.h | 2 - lte/phy/include/liblte/phy/ue/ue_dl.h | 2 - lte/phy/include/liblte/phy/ue/ue_mib.h | 4 +- lte/phy/include/liblte/phy/utils/bit.h | 27 ++- lte/phy/lib/phch/src/pbch.c | 199 ++++--------------- lte/phy/lib/phch/src/regs.c | 6 +- lte/phy/lib/phch/test/pbch_file_test.c | 21 +- lte/phy/lib/phch/test/pbch_test.c | 30 +-- lte/phy/lib/phch/test/pcfich_file_test.c | 6 +- lte/phy/lib/phch/test/pcfich_test.c | 7 +- lte/phy/lib/phch/test/pdcch_file_test.c | 6 +- lte/phy/lib/phch/test/pdcch_test.c | 6 +- lte/phy/lib/phch/test/pdsch_file_test.c | 6 +- lte/phy/lib/phch/test/pdsch_test.c | 4 +- lte/phy/lib/phch/test/phich_file_test.c | 18 +- lte/phy/lib/phch/test/phich_test.c | 6 +- lte/phy/lib/ue/src/ue_dl.c | 9 +- lte/phy/lib/ue/src/ue_mib.c | 11 +- lte/phy/lib/ue/test/ue_celldetect_mib_test.c | 9 +- lte/phy/lib/utils/src/bit.c | 25 +++ 30 files changed, 235 insertions(+), 296 deletions(-) diff --git a/lte/phy/examples/CMakeLists.txt b/lte/phy/examples/CMakeLists.txt index 573a9772b..114674cc5 100644 --- a/lte/phy/examples/CMakeLists.txt +++ b/lte/phy/examples/CMakeLists.txt @@ -52,10 +52,10 @@ LIST(FIND OPTIONAL_LIBS graphics GRAPHICS_FIND) ################################################################# add_executable(pdsch_ue pdsch_ue.c iodev.c cell_search_utils.c) -target_link_libraries(pdsch_ue lte_phy) +target_link_libraries(pdsch_ue lte_rrc lte_phy) add_executable(pdsch_enodeb pdsch_enodeb.c) -target_link_libraries(pdsch_enodeb lte_phy) +target_link_libraries(pdsch_enodeb lte_rrc lte_phy) IF(${CUHD_FIND} EQUAL -1) SET_TARGET_PROPERTIES(pdsch_ue PROPERTIES COMPILE_DEFINITIONS "DISABLE_UHD") @@ -82,10 +82,10 @@ ENDIF(${GRAPHICS_FIND} EQUAL -1) IF(${CUHD_FIND} GREATER -1) add_executable(cell_search cell_search.c cell_search_utils.c) - target_link_libraries(cell_search lte_phy cuhd ) + target_link_libraries(cell_search lte_rrc lte_phy cuhd ) add_executable(cell_measurement cell_measurement.c cell_search_utils.c) - target_link_libraries(cell_measurement cuhd lte_phy) + target_link_libraries(cell_measurement cuhd lte_rrc lte_phy) MESSAGE(STATUS " UHD examples will be installed.") diff --git a/lte/phy/examples/cell_measurement.c b/lte/phy/examples/cell_measurement.c index 4e01b0262..ba1a1961f 100644 --- a/lte/phy/examples/cell_measurement.c +++ b/lte/phy/examples/cell_measurement.c @@ -119,7 +119,6 @@ int main(int argc, char **argv) { prog_args_t prog_args; lte_cell_t cell; int64_t sf_cnt; - pbch_mib_t mib; ue_sync_t ue_sync; void *uhd; @@ -138,7 +137,7 @@ int main(int argc, char **argv) { cuhd_rx_wait_lo_locked(uhd); printf("Tunning receiver to %.3f MHz\n", (double ) prog_args.uhd_freq/1000000); - if (cell_search(uhd, prog_args.force_N_id_2, &cell, &mib)) { + if (cell_search(uhd, prog_args.force_N_id_2, &cell)) { fprintf(stderr, "Cell not found\n"); exit(-1); } diff --git a/lte/phy/examples/cell_search.c b/lte/phy/examples/cell_search.c index bf3d83112..0242457fe 100644 --- a/lte/phy/examples/cell_search.c +++ b/lte/phy/examples/cell_search.c @@ -124,8 +124,9 @@ int main(int argc, char **argv) { int nof_freqs; lte_earfcn_t channels[MAX_EARFCN]; uint32_t freq; - pbch_mib_t mib; - + uint8_t bch_payload[BCH_PAYLOAD_LEN]; + uint32_t nof_tx_ports; + parse_args(argc, argv); printf("Opening UHD device...\n"); @@ -179,10 +180,13 @@ int main(int argc, char **argv) { if (n == CS_CELL_DETECTED) { for (int i=0;i<3;i++) { if (found_cells[i].peak > threshold/2) { - if (decode_pbch(uhd, &found_cells[i], nof_frames_total, &mib)) { + if (decode_pbch(uhd, &found_cells[i], nof_frames_total, bch_payload, &nof_tx_ports, NULL)) { fprintf(stderr, "Error decoding PBCH\n"); exit(-1); - } + } else { + printf("Cell found with %d ports. Decoded MIB: \n", nof_tx_ports); + vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); + } } } } diff --git a/lte/phy/examples/cell_search_utils.c b/lte/phy/examples/cell_search_utils.c index f7a3d1d30..e511af237 100644 --- a/lte/phy/examples/cell_search_utils.c +++ b/lte/phy/examples/cell_search_utils.c @@ -36,11 +36,13 @@ #include #include "liblte/phy/phy.h" +#include "liblte/rrc/rrc.h" #ifndef DISABLE_UHD #include "liblte/cuhd/cuhd.h" -int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_frames_total, pbch_mib_t *mib) +int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_frames_total, + uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { ue_mib_t uemib; int n; @@ -55,8 +57,6 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram goto free_and_exit; } - bzero(mib, sizeof(pbch_mib_t)); - if (ue_mib_init(&uemib, found_cell->cell_id, found_cell->cp)) { fprintf(stderr, "Error initiating PBCH decoder\n"); goto free_and_exit; @@ -75,7 +75,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram DEBUG("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - n = ue_mib_decode(&uemib, buffer, flen, mib); + n = ue_mib_decode(&uemib, buffer, flen, bch_payload, nof_tx_ports, sfn_offset); if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling ue_mib_decode()\n"); goto free_and_exit; @@ -93,7 +93,6 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram if (n == MIB_FOUND) { printf("\n\nMIB decoded in %d ms (%d half frames)\n", nof_frames*5, nof_frames); - pbch_mib_fprint(stdout, mib, found_cell->cell_id); ret = LIBLTE_SUCCESS; } else { ret = LIBLTE_ERROR; @@ -211,9 +210,11 @@ int find_all_cells(void *uhd, ue_celldetect_result_t found_cell[3]) return nof_detected_cells; } -int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell, pbch_mib_t *mib) +int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) { int ret; + uint32_t nof_tx_ports; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_packed[BCH_PAYLOAD_LEN]; ue_celldetect_result_t found_cells[3]; bzero(found_cells, 3*sizeof(ue_celldetect_result_t)); @@ -243,7 +244,7 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell, pbch_mib_t *mib) } printf("Decoding PBCH for cell %d (N_id_2=%d)\n", found_cells[max_peak_cell].cell_id, max_peak_cell); - if (decode_pbch(uhd, &found_cells[max_peak_cell], 400, mib)) { + if (decode_pbch(uhd, &found_cells[max_peak_cell], 400, bch_payload, &nof_tx_ports, NULL)) { fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", found_cells[max_peak_cell].cell_id); return LIBLTE_ERROR; } @@ -254,8 +255,10 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell, pbch_mib_t *mib) cell->cp = found_cells[max_peak_cell].cp; cell->id = found_cells[max_peak_cell].cell_id; - cell->nof_prb = mib->nof_prb; - cell->nof_ports = mib->nof_ports; + cell->nof_ports = nof_tx_ports; + + bit_pack_vector(bch_payload, bch_payload_packed, BCH_PAYLOAD_LEN); + bcch_bch_mib_unpack(bch_payload_packed, BCH_PAYLOAD_LEN, cell, NULL); /* set sampling frequency */ int srate = lte_sampling_freq_hz(cell->nof_prb); diff --git a/lte/phy/examples/cell_search_utils.h b/lte/phy/examples/cell_search_utils.h index 8d5d4f5dd..a73a52ec5 100644 --- a/lte/phy/examples/cell_search_utils.h +++ b/lte/phy/examples/cell_search_utils.h @@ -31,7 +31,9 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_frames_total, - pbch_mib_t *mib); + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); int find_all_cells(void *uhd, ue_celldetect_result_t found_cell[3]); @@ -42,5 +44,4 @@ int find_cell(void *uhd, int cell_search(void *uhd, int force_N_id_2, - lte_cell_t *cell, - pbch_mib_t *mib); \ No newline at end of file + lte_cell_t *cell); \ No newline at end of file diff --git a/lte/phy/examples/iodev.c b/lte/phy/examples/iodev.c index d617221b3..1f1e63b17 100644 --- a/lte/phy/examples/iodev.c +++ b/lte/phy/examples/iodev.c @@ -51,12 +51,12 @@ int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { } /* Setup USRP or input file */ -int iodev_init(iodev_t *q, iodev_cfg_t *config, lte_cell_t *cell, pbch_mib_t *mib) { +int iodev_init(iodev_t *q, iodev_cfg_t *config, lte_cell_t *cell) { if (config->input_file_name) { - mib->phich_resources = R_1; - mib->phich_length = PHICH_NORM; + cell->phich_resources = R_1; + cell->phich_length = PHICH_NORM; cell->id = config->cell_id_file; cell->cp = CPNORM; @@ -99,7 +99,7 @@ int iodev_init(iodev_t *q, iodev_cfg_t *config, lte_cell_t *cell, pbch_mib_t *mi cuhd_rx_wait_lo_locked(q->uhd); DEBUG("Set uhd_freq to %.3f MHz\n", (double ) config->uhd_freq); - if (cell_search(q->uhd, config->force_N_id_2, cell, mib)) { + if (cell_search(q->uhd, config->force_N_id_2, cell)) { fprintf(stderr, "Cell not found\n"); return LIBLTE_ERROR; } diff --git a/lte/phy/examples/iodev.h b/lte/phy/examples/iodev.h index b6c36adc5..a437325a1 100644 --- a/lte/phy/examples/iodev.h +++ b/lte/phy/examples/iodev.h @@ -81,8 +81,7 @@ typedef struct LIBLTE_API { LIBLTE_API int iodev_init(iodev_t *q, iodev_cfg_t *config, - lte_cell_t *cell, - pbch_mib_t *mib); + lte_cell_t *cell); LIBLTE_API void iodev_free(iodev_t *q); diff --git a/lte/phy/examples/pdsch_enodeb.c b/lte/phy/examples/pdsch_enodeb.c index 2e1660e54..6f78098cf 100644 --- a/lte/phy/examples/pdsch_enodeb.c +++ b/lte/phy/examples/pdsch_enodeb.c @@ -32,6 +32,7 @@ #include #include "liblte/phy/phy.h" +#include "liblte/rrc/rrc.h" #ifndef DISABLE_UHD #include "liblte/cuhd/cuhd.h" @@ -44,7 +45,9 @@ lte_cell_t cell = { 6, // nof_prb 1, // nof_ports 1, // cell_id - CPNORM // cyclic prefix + CPNORM, // cyclic prefix + R_1, // PHICH resources + PHICH_NORM // PHICH length }; uint32_t cfi=1; @@ -173,7 +176,7 @@ void base_init() { exit(-1); } - if (regs_init(®s, R_1, PHICH_NORM, cell)) { + if (regs_init(®s, cell)) { fprintf(stderr, "Error initiating regs\n"); exit(-1); } @@ -236,7 +239,7 @@ int main(int argc, char **argv) { cf_t pss_signal[PSS_LEN]; float sss_signal0[SSS_LEN]; // for subframe 0 float sss_signal5[SSS_LEN]; // for subframe 5 - pbch_mib_t mib; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_packed[BCH_PAYLOAD_LEN/8]; ra_pdsch_t ra_dl; ra_prb_t prb_alloc; refsignal_t refs[NSLOTS_X_FRAME]; @@ -245,7 +248,8 @@ int main(int argc, char **argv) { cf_t *sf_symbols[MAX_PORTS]; dci_msg_t dci_msg; dci_location_t locations[NSUBFRAMES_X_FRAME][10]; - + uint32_t sfn; + #ifdef DISABLE_UHD if (argc < 3) { usage(argv[0]); @@ -274,11 +278,9 @@ int main(int argc, char **argv) { } } - mib.nof_ports = cell.nof_ports; - mib.nof_prb = cell.nof_prb; - mib.phich_length = PHICH_NORM; - mib.phich_resources = R_1; - mib.sfn = 0; + cell.phich_length = PHICH_NORM; + cell.phich_resources = R_1; + sfn = 0; for (i = 0; i < MAX_PORTS; i++) { // now there's only 1 port sf_symbols[i] = sf_buffer; @@ -338,8 +340,10 @@ int main(int argc, char **argv) { CPNORM); } + bcch_bch_mib_pack(&cell, sfn, bch_payload_packed, BCH_PAYLOAD_LEN/8); + bit_pack_vector(bch_payload_packed, bch_payload, BCH_PAYLOAD_LEN); if (sf_idx == 0) { - pbch_encode(&pbch, &mib, sf_symbols); + pbch_encode(&pbch, bch_payload, sf_symbols); } for (n=0;n<2;n++) { @@ -379,8 +383,8 @@ int main(int argc, char **argv) { } nf++; } - mib.sfn = (mib.sfn + 1) % 1024; - printf("SFN: %4d\r", mib.sfn); + sfn = (sfn + 1) % 1024; + printf("SFN: %4d\r", sfn); fflush(stdout); } diff --git a/lte/phy/examples/pdsch_ue.c b/lte/phy/examples/pdsch_ue.c index f1949ad50..3095ec8e7 100644 --- a/lte/phy/examples/pdsch_ue.c +++ b/lte/phy/examples/pdsch_ue.c @@ -171,7 +171,6 @@ int main(int argc, char **argv) { lte_cell_t cell; ue_dl_t ue_dl; int64_t sf_cnt; - pbch_mib_t mib; bool printed_sib = false; int rlen; @@ -186,11 +185,11 @@ int main(int argc, char **argv) { /* Initialize subframe counter */ sf_cnt = 0; - if (iodev_init(&iodev, &prog_args.io_config, &cell, &mib)) { + if (iodev_init(&iodev, &prog_args.io_config, &cell)) { exit(-1); } - if (ue_dl_init(&ue_dl, cell, mib.phich_resources, mib.phich_length, 1234)) { + if (ue_dl_init(&ue_dl, cell, 1234)) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } diff --git a/lte/phy/include/liblte/phy/phch/pbch.h b/lte/phy/include/liblte/phy/phch/pbch.h index 22b7bb106..2716f1d89 100644 --- a/lte/phy/include/liblte/phy/phch/pbch.h +++ b/lte/phy/include/liblte/phy/phch/pbch.h @@ -41,19 +41,15 @@ #include "liblte/phy/fec/viterbi.h" #include "liblte/phy/fec/crc.h" +#define BCH_PAYLOAD_LEN 24 +#define BCH_PAYLOADCRC_LEN (BCH_PAYLOAD_LEN+16) +#define BCH_ENCODED_LEN 3*(BCH_PAYLOADCRC_LEN) + #define PBCH_RE_CPNORM 240 -#define PBCH_RE_CPEXT 216 +#define PBCH_RE_CPEXT 216 typedef _Complex float cf_t; -typedef struct LIBLTE_API { - uint32_t nof_ports; - uint32_t nof_prb; - uint32_t sfn; - phich_length_t phich_length; - phich_resources_t phich_resources; -}pbch_mib_t; - /* PBCH object */ typedef struct LIBLTE_API { lte_cell_t cell; @@ -67,10 +63,10 @@ typedef struct LIBLTE_API { cf_t *pbch_d; float *pbch_llr; float *temp; - float *pbch_rm_f; + float pbch_rm_f[BCH_ENCODED_LEN]; uint8_t *pbch_rm_b; - uint8_t *data; - uint8_t *data_enc; + uint8_t data[BCH_PAYLOADCRC_LEN]; + uint8_t data_enc[BCH_ENCODED_LEN]; uint32_t frame_idx; @@ -91,16 +87,14 @@ LIBLTE_API void pbch_free(pbch_t *q); LIBLTE_API int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], - pbch_mib_t *mib); + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); LIBLTE_API int pbch_encode(pbch_t *q, - pbch_mib_t *mib, - cf_t *slot1_symbols[MAX_PORTS]); + uint8_t bch_payload[BCH_PAYLOAD_LEN], + cf_t *slot1_symbols[MAX_PORTS]); LIBLTE_API void pbch_decode_reset(pbch_t *q); -LIBLTE_API void pbch_mib_fprint(FILE *stream, - pbch_mib_t *mib, - uint32_t cell_id); - #endif // PBCH_ diff --git a/lte/phy/include/liblte/phy/phch/regs.h b/lte/phy/include/liblte/phy/phch/regs.h index 1b2f470d6..b3e015016 100644 --- a/lte/phy/include/liblte/phy/phch/regs.h +++ b/lte/phy/include/liblte/phy/phch/regs.h @@ -76,8 +76,6 @@ typedef struct LIBLTE_API { }regs_t; LIBLTE_API int regs_init(regs_t *h, - phich_resources_t phich_res, - phich_length_t phich_len, lte_cell_t cell); LIBLTE_API void regs_free(regs_t *h); diff --git a/lte/phy/include/liblte/phy/ue/ue_dl.h b/lte/phy/include/liblte/phy/ue/ue_dl.h index c60e49ae4..8a8ad8630 100644 --- a/lte/phy/include/liblte/phy/ue/ue_dl.h +++ b/lte/phy/include/liblte/phy/ue/ue_dl.h @@ -84,8 +84,6 @@ typedef struct LIBLTE_API { /* This function shall be called just after the initial synchronization */ LIBLTE_API int ue_dl_init(ue_dl_t *q, lte_cell_t cell, - phich_resources_t phich_resources, - phich_length_t phich_length, uint16_t user_rnti); LIBLTE_API void ue_dl_free(ue_dl_t *q); diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index 75f8c69bb..272c56b37 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -91,7 +91,9 @@ LIBLTE_API void ue_mib_reset(ue_mib_t *q); LIBLTE_API int ue_mib_decode(ue_mib_t *q, cf_t *signal, uint32_t nsamples, - pbch_mib_t *mib); + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); LIBLTE_API void ue_mib_set_threshold(ue_mib_t *q, float threshold); diff --git a/lte/phy/include/liblte/phy/utils/bit.h b/lte/phy/include/liblte/phy/utils/bit.h index 3100ccf95..6a2f53831 100644 --- a/lte/phy/include/liblte/phy/utils/bit.h +++ b/lte/phy/include/liblte/phy/utils/bit.h @@ -34,10 +34,29 @@ #include "liblte/config.h" -LIBLTE_API uint32_t bit_unpack(uint8_t **bits, int nof_bits); -LIBLTE_API void bit_pack(uint32_t value, uint8_t **bits, int nof_bits); -LIBLTE_API void bit_fprint(FILE *stream, uint8_t *bits, int nof_bits); -LIBLTE_API uint32_t bit_diff(uint8_t *x, uint8_t *y, int nbits); +LIBLTE_API void bit_pack_vector(uint8_t *bit_unpacked, + uint8_t *bits_packed, + int nof_bits); + +LIBLTE_API void bit_unpack_vector(uint8_t *bits_packed, + uint8_t *bit_unpacked, + int nof_bits); + +LIBLTE_API uint32_t bit_unpack(uint8_t **bits, + int nof_bits); + +LIBLTE_API void bit_pack(uint32_t value, + uint8_t **bits, + int nof_bits); + +LIBLTE_API void bit_fprint(FILE *stream, + uint8_t *bits, + int nof_bits); + +LIBLTE_API uint32_t bit_diff(uint8_t *x, + uint8_t *y, + int nbits); + LIBLTE_API uint32_t bit_count(uint32_t n); #endif // BIT_ diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index beab9976f..26f10a3b6 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -185,22 +185,10 @@ int pbch_init(pbch_t *q, lte_cell_t cell) { if (!q->temp) { goto clean; } - q->pbch_rm_f = malloc(sizeof(float) * 120); - if (!q->pbch_rm_f) { - goto clean; - } q->pbch_rm_b = malloc(sizeof(float) * q->nof_symbols * 4 * 2); if (!q->pbch_rm_b) { goto clean; } - q->data = malloc(sizeof(uint8_t) * 40); - if (!q->data) { - goto clean; - } - q->data_enc = malloc(sizeof(uint8_t) * 120); - if (!q->data_enc) { - goto clean; - } ret = LIBLTE_SUCCESS; } clean: @@ -232,129 +220,14 @@ void pbch_free(pbch_t *q) { if (q->temp) { free(q->temp); } - if (q->pbch_rm_f) { - free(q->pbch_rm_f); - } if (q->pbch_rm_b) { free(q->pbch_rm_b); } - if (q->data_enc) { - free(q->data_enc); - } - if (q->data) { - free(q->data); - } sequence_free(&q->seq_pbch); modem_table_free(&q->mod); viterbi_free(&q->decoder); } -/** Unpacks MIB from PBCH message. - * msg buffer must be 24 byte length at least - */ -void pbch_mib_unpack(uint8_t *msg, pbch_mib_t *mib) { - int bw, phich_res; - - bw = bit_unpack(&msg, 3); - switch (bw) { - case 0: - mib->nof_prb = 6; - break; - case 1: - mib->nof_prb = 15; - break; - default: - mib->nof_prb = (bw - 1) * 25; - break; - } - if (*msg) { - mib->phich_length = PHICH_EXT; - } else { - mib->phich_length = PHICH_NORM; - } - msg++; - - phich_res = bit_unpack(&msg, 2); - switch (phich_res) { - case 0: - mib->phich_resources = R_1_6; - break; - case 1: - mib->phich_resources = R_1_2; - break; - case 2: - mib->phich_resources = R_1; - break; - case 3: - mib->phich_resources = R_2; - break; - } - mib->sfn = bit_unpack(&msg, 8) << 2; -} - -/** Unpacks MIB from PBCH message. - * msg buffer must be 24 byte length at least - */ -void pbch_mib_pack(pbch_mib_t *mib, uint8_t *msg) { - int bw, phich_res = 0; - - bzero(msg, 24); - - if (mib->nof_prb <= 6) { - bw = 0; - } else if (mib->nof_prb <= 15) { - bw = 1; - } else { - bw = 1 + mib->nof_prb / 25; - } - bit_pack(bw, &msg, 3); - - *msg = mib->phich_length == PHICH_EXT; - msg++; - - switch (mib->phich_resources) { - case R_1_6: - phich_res = 0; - break; - case R_1_2: - phich_res = 1; - break; - case R_1: - phich_res = 2; - break; - case R_2: - phich_res = 3; - break; - } - bit_pack(phich_res, &msg, 2); - bit_pack(mib->sfn >> 2, &msg, 8); -} - -void pbch_mib_fprint(FILE *stream, pbch_mib_t *mib, uint32_t cell_id) { - printf(" - Cell ID: %d\n", cell_id); - printf(" - Nof ports: %d\n", mib->nof_ports); - printf(" - PRB: %d\n", mib->nof_prb); - printf(" - PHICH Length: %s\n", - mib->phich_length == PHICH_EXT ? "Extended" : "Normal"); - printf(" - PHICH Resources: "); - switch (mib->phich_resources) { - case R_1_6: - printf("1/6"); - break; - case R_1_2: - printf("1/2"); - break; - case R_1: - printf("1"); - break; - case R_2: - printf("2"); - break; - } - printf("\n"); - printf(" - SFN: %d\n", mib->sfn); -} - void pbch_decode_reset(pbch_t *q) { q->frame_idx = 0; } @@ -362,7 +235,7 @@ void pbch_decode_reset(pbch_t *q) { void crc_set_mask(uint8_t *data, int nof_ports) { int i; for (i = 0; i < 16; i++) { - data[24 + i] = (data[24 + i] + crc_mask[nof_ports - 1][i]) % 2; + data[BCH_PAYLOAD_LEN + i] = (data[BCH_PAYLOAD_LEN + i] + crc_mask[nof_ports - 1][i]) % 2; } } @@ -374,13 +247,13 @@ void crc_set_mask(uint8_t *data, int nof_ports) { * Returns 0 if the data is correct, -1 otherwise */ uint32_t pbch_crc_check(pbch_t *q, uint8_t *bits, uint32_t nof_ports) { - uint8_t data[40]; - memcpy(data, bits, 40 * sizeof(uint8_t)); + uint8_t data[BCH_PAYLOADCRC_LEN]; + memcpy(data, bits, BCH_PAYLOADCRC_LEN * sizeof(uint8_t)); crc_set_mask(data, nof_ports); - int ret = crc_checksum(&q->crc, data, 40); + int ret = crc_checksum(&q->crc, data, BCH_PAYLOADCRC_LEN); if (ret == 0) { uint32_t chkzeros=0; - for (int i=0;i<24 && !chkzeros;i++) { + for (int i=0;itemp, 4 * nof_bits, q->pbch_rm_f, 120); + rm_conv_rx(q->temp, 4 * nof_bits, q->pbch_rm_f, BCH_ENCODED_LEN); /* FIXME: If channel estimates are zero, received LLR are NaN. Check and return error */ - for (j = 0; j < 120; j++) { + for (j = 0; j < BCH_ENCODED_LEN; j++) { if (isnan(q->pbch_rm_f[j]) || isinf(q->pbch_rm_f[j])) { return 0; } } /* decode */ - viterbi_decode_f(&q->decoder, q->pbch_rm_f, q->data, 40); - - int c = 0; - for (j = 0; j < 40; j++) { - c += q->data[j]; - } - if (!c) { - c = 1; - } - - if (!pbch_crc_check(q, q->data, nof_ports)) { - /* unpack MIB */ - pbch_mib_unpack(q->data, mib); - - mib->nof_ports = nof_ports; - mib->sfn += dst - src; + viterbi_decode_f(&q->decoder, q->pbch_rm_f, q->data, BCH_PAYLOADCRC_LEN); + if (!pbch_crc_check(q, q->data, nof_ports)) { return 1; } else { - return 0; + return LIBLTE_SUCCESS; } } @@ -453,7 +312,9 @@ int pbch_decode_frame(pbch_t *q, pbch_mib_t *mib, uint32_t src, uint32_t dst, ui * * Returns 1 if successfully decoded MIB, 0 if not and -1 on error */ -int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], pbch_mib_t *mib) { +int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], + uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) +{ uint32_t src, dst, nb; uint32_t nant_[3] = { 1, 2, 4 }; uint32_t na, nant; @@ -464,8 +325,7 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], pbch_ int ret = LIBLTE_ERROR_INVALID_INPUTS; if (q != NULL && - slot1_symbols != NULL && - mib != NULL) + slot1_symbols != NULL) { for (i=0;icell.nof_ports;i++) { if (ce_slot1[i] == NULL) { @@ -531,8 +391,7 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], pbch_ for (nb = 0; nb < q->frame_idx && !ret; nb++) { for (dst = 0; (dst < 4 - nb) && !ret; dst++) { for (src = 0; src < q->frame_idx - nb && !ret; src++) { - ret = pbch_decode_frame(q, mib, src, dst, nb + 1, nof_bits, nant); - + ret = pbch_decode_frame(q, src, dst, nb + 1, nof_bits, nant); } } } @@ -544,18 +403,29 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], pbch_ q->frame_idx = 3; } } + if (ret == 1) { + if (sfn_offset) { + *sfn_offset = dst - src; + } + if (nof_tx_ports) { + *nof_tx_ports = nant; + } + if (bch_payload) { + memcpy(bch_payload, q->data, sizeof(uint8_t) * BCH_PAYLOAD_LEN); + } + } return ret; } /** Converts the MIB message to symbols mapped to SLOT #1 ready for transmission */ -int pbch_encode(pbch_t *q, pbch_mib_t *mib, cf_t *slot1_symbols[MAX_PORTS]) { +int pbch_encode(pbch_t *q, uint8_t bch_payload[BCH_PAYLOAD_LEN], cf_t *slot1_symbols[MAX_PORTS]) { int i; int nof_bits; cf_t *x[MAX_LAYERS]; if (q != NULL && - mib != NULL) + bch_payload != NULL) { for (i=0;icell.nof_ports;i++) { if (slot1_symbols[i] == NULL) { @@ -572,16 +442,15 @@ int pbch_encode(pbch_t *q, pbch_mib_t *mib, cf_t *slot1_symbols[MAX_PORTS]) { memset(&x[q->cell.nof_ports], 0, sizeof(cf_t*) * (MAX_LAYERS - q->cell.nof_ports)); if (q->frame_idx == 0) { - /* pack MIB */ - pbch_mib_pack(mib, q->data); + memcpy(q->data, bch_payload, sizeof(uint8_t) * BCH_PAYLOAD_LEN); /* encode & modulate */ - crc_attach(&q->crc, q->data, 24); + crc_attach(&q->crc, q->data, BCH_PAYLOAD_LEN); crc_set_mask(q->data, q->cell.nof_ports); + + convcoder_encode(&q->encoder, q->data, q->data_enc, BCH_PAYLOADCRC_LEN); - convcoder_encode(&q->encoder, q->data, q->data_enc, 40); - - rm_conv_tx(q->data_enc, 120, q->pbch_rm_b, 4 * nof_bits); + rm_conv_tx(q->data_enc, BCH_ENCODED_LEN, q->pbch_rm_b, 4 * nof_bits); } diff --git a/lte/phy/lib/phch/src/regs.c b/lte/phy/lib/phch/src/regs.c index 1f6112f9d..902ef2375 100644 --- a/lte/phy/lib/phch/src/regs.c +++ b/lte/phy/lib/phch/src/regs.c @@ -672,7 +672,7 @@ int regs_set_cfi(regs_t *h, uint32_t cfi) { * Sets all REG indices and initializes PCFICH, PHICH and PDCCH REGs * Returns 0 if OK, -1 on error */ -int regs_init(regs_t *h, phich_resources_t phich_res, phich_length_t phich_len, lte_cell_t cell) { +int regs_init(regs_t *h, lte_cell_t cell) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t i, k; uint32_t j[4], jmax, prb; @@ -690,8 +690,8 @@ int regs_init(regs_t *h, phich_resources_t phich_res, phich_length_t phich_len, h->cell = cell; h->max_ctrl_symbols = max_ctrl_symbols; h->cfi_initiated = false; - h->phich_res = phich_res; - h->phich_len = phich_len; + h->phich_res = cell.phich_resources; + h->phich_len = cell.phich_length; h->nof_regs = 0; for (i = 0; i < max_ctrl_symbols; i++) { diff --git a/lte/phy/lib/phch/test/pbch_file_test.c b/lte/phy/lib/phch/test/pbch_file_test.c index 78e2b982a..e4d52b459 100644 --- a/lte/phy/lib/phch/test/pbch_file_test.c +++ b/lte/phy/lib/phch/test/pbch_file_test.c @@ -42,9 +42,13 @@ lte_cell_t cell = { 6, // nof_prb 2, // nof_ports 150, // cell_id - CPNORM // cyclic prefix + CPNORM, // cyclic prefix + R_1, // PHICH resources + PHICH_NORM // PHICH length }; +uint8_t bch_payload_file[BCH_PAYLOAD_LEN] = {0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + #define FLEN 9600 filesource_t fsrc; @@ -177,9 +181,10 @@ void base_free() { } int main(int argc, char **argv) { - pbch_mib_t mib; + uint8_t bch_payload[BCH_PAYLOAD_LEN]; int n; - + uint32_t nof_tx_ports, sfn_offset; + if (argc < 3) { usage(argv[0]); exit(-1); @@ -209,10 +214,9 @@ int main(int argc, char **argv) { INFO("Decoding PBCH\n", 0); - n = pbch_decode(&pbch, fft_buffer, ce, &mib); + n = pbch_decode(&pbch, fft_buffer, ce, bch_payload, &nof_tx_ports, &sfn_offset); base_free(); - if (n < 0) { fprintf(stderr, "Error decoding PBCH\n"); exit(-1); @@ -220,13 +224,12 @@ int main(int argc, char **argv) { printf("Could not decode PBCH\n"); exit(-1); } else { - if (mib.nof_ports == 2 && mib.nof_prb == 50 && mib.phich_length == PHICH_NORM - && mib.phich_resources == R_1 && mib.sfn == 28) { - pbch_mib_fprint(stdout, &mib, cell.id); + printf("MIB decoded OK. Nof ports: %d. SFN offset: %d Payload: ", nof_tx_ports, sfn_offset); + vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); + if (nof_tx_ports == 2 && sfn_offset == 0 && !memcmp(bch_payload, bch_payload_file, BCH_PAYLOAD_LEN)) { printf("This is the signal.1.92M.dat file\n"); exit(0); } else { - pbch_mib_fprint(stdout, &mib, cell.id); printf("This is an unknown file\n"); exit(-1); } diff --git a/lte/phy/lib/phch/test/pbch_test.c b/lte/phy/lib/phch/test/pbch_test.c index 77ad172bb..4f1a106b1 100644 --- a/lte/phy/lib/phch/test/pbch_test.c +++ b/lte/phy/lib/phch/test/pbch_test.c @@ -37,7 +37,9 @@ lte_cell_t cell = { 6, // nof_prb 1, // nof_ports 1, // cell_id - CPNORM // cyclic prefix + CPNORM, // cyclic prefix + R_1, // PHICH resources + PHICH_NORM // PHICH length }; void usage(char *prog) { @@ -74,11 +76,12 @@ void parse_args(int argc, char **argv) { int main(int argc, char **argv) { pbch_t pbch; - pbch_mib_t mib_tx, mib_rx; + uint8_t bch_payload_tx[BCH_PAYLOAD_LEN], bch_payload_rx[BCH_PAYLOAD_LEN]; int i, j; cf_t *ce[MAX_PORTS]; int nof_re; cf_t *slot1_symbols[MAX_PORTS]; + uint32_t nof_rx_ports; parse_args(argc,argv); @@ -106,13 +109,11 @@ int main(int argc, char **argv) { exit(-1); } - mib_tx.nof_ports = cell.nof_ports; - mib_tx.nof_prb = 50; - mib_tx.phich_length = PHICH_EXT; - mib_tx.phich_resources = R_1_6; - mib_tx.sfn = 124; + for (i=0;iregs, phich_resources, phich_length, q->cell)) { + if (regs_init(&q->regs, q->cell)) { fprintf(stderr, "Error initiating REGs\n"); goto clean_exit; } @@ -154,7 +153,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16 uint32_t nof_locations; uint16_t crc_rem; dci_format_t format; - pbch_mib_t mib; int ret = LIBLTE_ERROR; cf_t *ce_slot1[MAX_PORTS]; struct timeval t[3]; @@ -180,14 +178,13 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16 if (sf_idx == 0) { // FIXME: There is no need to do this every frame! pbch_decode_reset(&q->pbch); - if (pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp)], ce_slot1, &mib) == 1) { - q->sfn = mib.sfn; + if (pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp)], ce_slot1, NULL, NULL, &q->sfn) == 1) { q->pbch_decoded = true; INFO("Decoded SFN: %d\n", q->sfn); } else { INFO("Not decoded MIB (SFN: %d)\n", q->sfn); q->sfn++; - if (q->sfn == 1024) { + if (q->sfn == 4) { q->sfn = 0; } } diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 855f855c9..82d16046a 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -139,7 +139,8 @@ void ue_mib_set_threshold(ue_mib_t * q, float threshold) sync_set_threshold(&q->sfind, threshold); } -static int mib_decoder_run(ue_mib_t * q, cf_t *input, pbch_mib_t *mib) +static int mib_decoder_run(ue_mib_t * q, cf_t *input, + uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { int ret = LIBLTE_SUCCESS; @@ -162,7 +163,7 @@ static int mib_decoder_run(ue_mib_t * q, cf_t *input, pbch_mib_t *mib) } /* Decode PBCH */ - ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, mib); + ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, bch_payload, nof_tx_ports, sfn_offset); if (ret < 0) { fprintf(stderr, "Error decoding PBCH\n"); } else if (ret == 1) { @@ -181,7 +182,9 @@ int counter1=0,counter2=0,counter3=0,counter4=0; int ue_mib_decode(ue_mib_t * q, cf_t *signal, uint32_t nsamples, - pbch_mib_t *mib) + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t peak_idx=0; @@ -226,7 +229,7 @@ int ue_mib_decode(ue_mib_t * q, sync_get_sf_idx(&q->sfind) == 0) { INFO("Trying to decode MIB\n",0); - ret = mib_decoder_run(q, &signal[nf*MIB_FRAME_SIZE+peak_idx], mib); + ret = mib_decoder_run(q, &signal[nf*MIB_FRAME_SIZE+peak_idx], bch_payload, nof_tx_ports, sfn_offset); counter3++; } else if ((ret == LIBLTE_SUCCESS && peak_idx != 0) || (ret == 1 && nf*MIB_FRAME_SIZE + peak_idx + 960 > nsamples)) diff --git a/lte/phy/lib/ue/test/ue_celldetect_mib_test.c b/lte/phy/lib/ue/test/ue_celldetect_mib_test.c index 027f9b33e..040f60baf 100644 --- a/lte/phy/lib/ue/test/ue_celldetect_mib_test.c +++ b/lte/phy/lib/ue/test/ue_celldetect_mib_test.c @@ -97,8 +97,9 @@ void parse_args(int argc, char **argv) { int decode_pbch(void *uhd, cf_t *buffer, ue_celldetect_result_t *found_cell) { ue_mib_t uemib; - pbch_mib_t mib; + uint8_t bch_payload[BCH_PAYLOAD_LEN]; int n; + uint32_t nof_tx_ports; uint32_t nof_frames = 0; uint32_t flen = MIB_FRAME_SIZE; @@ -121,7 +122,7 @@ int decode_pbch(void *uhd, cf_t *buffer, ue_celldetect_result_t *found_cell) INFO("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - n = ue_mib_decode(&uemib, buffer, flen, &mib); + n = ue_mib_decode(&uemib, buffer, flen, bch_payload, &nof_tx_ports, NULL); if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling ue_mib_decode()\n"); return LIBLTE_ERROR; @@ -136,8 +137,8 @@ int decode_pbch(void *uhd, cf_t *buffer, ue_celldetect_result_t *found_cell) nof_frames++; } while (n != MIB_FOUND && nof_frames < nof_frames_total); if (n == MIB_FOUND) { - printf("\n\nMIB decoded in %d ms (%d half frames)\n", nof_frames*5, nof_frames); - pbch_mib_fprint(stdout, &mib, found_cell->cell_id); + printf("\n\nMIB decoded in %d ms (%d half frames). %d TX ports\n", nof_frames*5, nof_frames, nof_tx_ports); + vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); } else { printf("\nCould not decode MIB\n"); } diff --git a/lte/phy/lib/utils/src/bit.c b/lte/phy/lib/utils/src/bit.c index 4443bc744..c2637281e 100644 --- a/lte/phy/lib/utils/src/bit.c +++ b/lte/phy/lib/utils/src/bit.c @@ -31,6 +31,19 @@ #include "liblte/phy/utils/bit.h" + +void bit_pack_vector(uint8_t *bit_unpacked, uint8_t *bits_packed, int nof_bits) +{ + uint32_t i, nbytes; + nbytes = nof_bits/8; + for (i=0;i Date: Sun, 19 Oct 2014 12:03:44 +0200 Subject: [PATCH 05/55] Fixed CFO correction --- lte/phy/examples/synch_file.c | 2 +- lte/phy/lib/ue/src/ue_sync.c | 2 +- lte/rrc/lib/rrc_msg/src/bcch.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lte/phy/examples/synch_file.c b/lte/phy/examples/synch_file.c index fad7478f8..9580a7176 100644 --- a/lte/phy/examples/synch_file.c +++ b/lte/phy/examples/synch_file.c @@ -195,7 +195,7 @@ int main(int argc, char **argv) { gettimeofday(&tdata[1], NULL); if (force_cfo != CFO_AUTO) { - cfo_correct(&cfocorr, input, input, -force_cfo/128); + cfo_correct(&cfocorr, input, input, force_cfo/128); } if (force_N_id_2 != -1) { diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 5681d33c8..f2e03bc00 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -328,7 +328,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { } /* Do CFO Correction and deliver the frame */ - cfo_correct(&q->cfocorr, q->input_buffer, q->input_buffer, -q->cur_cfo / CURRENT_FFTSIZE); + cfo_correct(&q->cfocorr, q->input_buffer, q->input_buffer, q->cur_cfo / CURRENT_FFTSIZE); *sf_symbols = q->input_buffer; break; diff --git a/lte/rrc/lib/rrc_msg/src/bcch.c b/lte/rrc/lib/rrc_msg/src/bcch.c index c97e724bf..5c74aea40 100644 --- a/lte/rrc/lib/rrc_msg/src/bcch.c +++ b/lte/rrc/lib/rrc_msg/src/bcch.c @@ -117,19 +117,19 @@ int bcch_bch_mib_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell switch(req->dl_Bandwidth) { case dl_Bandwidth_n6: - cell->nof_ports = 6; + cell->nof_prb = 6; break; case dl_Bandwidth_n15: - cell->nof_ports = 15; + cell->nof_prb = 15; break; case dl_Bandwidth_n25: - cell->nof_ports = 25; + cell->nof_prb = 25; break; case dl_Bandwidth_n50: - cell->nof_ports = 50; + cell->nof_prb = 50; break; case dl_Bandwidth_n75: - cell->nof_ports = 75; + cell->nof_prb = 75; break; } if (req->phich_Config.phich_Duration == phich_Duration_normal) { From 83316aeb9a897fe109492e902aca2741f8f9ea06 Mon Sep 17 00:00:00 2001 From: ismagom Date: Sun, 19 Oct 2014 12:47:48 +0200 Subject: [PATCH 06/55] Fixed MIB decoding through ASN --- lte/phy/examples/cell_search_utils.c | 8 ++++---- lte/phy/lib/phch/src/pbch.c | 9 +++++---- lte/phy/lib/phch/test/pbch_test.c | 12 +++++++----- lte/phy/lib/utils/src/bit.c | 13 ++++++------- lte/rrc/lib/rrc_msg/src/bcch.c | 11 ++++------- 5 files changed, 26 insertions(+), 27 deletions(-) diff --git a/lte/phy/examples/cell_search_utils.c b/lte/phy/examples/cell_search_utils.c index e511af237..0ba0d8393 100644 --- a/lte/phy/examples/cell_search_utils.c +++ b/lte/phy/examples/cell_search_utils.c @@ -214,7 +214,7 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) { int ret; uint32_t nof_tx_ports; - uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_packed[BCH_PAYLOAD_LEN]; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; ue_celldetect_result_t found_cells[3]; bzero(found_cells, 3*sizeof(ue_celldetect_result_t)); @@ -256,9 +256,9 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) cell->cp = found_cells[max_peak_cell].cp; cell->id = found_cells[max_peak_cell].cell_id; cell->nof_ports = nof_tx_ports; - - bit_pack_vector(bch_payload, bch_payload_packed, BCH_PAYLOAD_LEN); - bcch_bch_mib_unpack(bch_payload_packed, BCH_PAYLOAD_LEN, cell, NULL); + + bit_unpack_vector(bch_payload, bch_payload_unpacked, BCH_PAYLOAD_LEN); + bcch_bch_mib_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); /* set sampling frequency */ int srate = lte_sampling_freq_hz(cell->nof_prb); diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index 26f10a3b6..b2171b831 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -253,13 +253,13 @@ uint32_t pbch_crc_check(pbch_t *q, uint8_t *bits, uint32_t nof_ports) { int ret = crc_checksum(&q->crc, data, BCH_PAYLOADCRC_LEN); if (ret == 0) { uint32_t chkzeros=0; - for (int i=0;ipbch_rm_f[j]) || isinf(q->pbch_rm_f[j])) { - return 0; + return LIBLTE_ERROR; } } - + /* decode */ viterbi_decode_f(&q->decoder, q->pbch_rm_f, q->data, BCH_PAYLOADCRC_LEN); @@ -412,6 +412,7 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], } if (bch_payload) { memcpy(bch_payload, q->data, sizeof(uint8_t) * BCH_PAYLOAD_LEN); + vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); } } return ret; diff --git a/lte/phy/lib/phch/test/pbch_test.c b/lte/phy/lib/phch/test/pbch_test.c index 4f1a106b1..ffeece5a0 100644 --- a/lte/phy/lib/phch/test/pbch_test.c +++ b/lte/phy/lib/phch/test/pbch_test.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "liblte/phy/phy.h" @@ -109,6 +110,7 @@ int main(int argc, char **argv) { exit(-1); } + srand(time(NULL)); for (i=0;iname : ""); return LIBLTE_ERROR; - } else { - printf("Encoding ok\n"); - } + } asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); return LIBLTE_SUCCESS; } @@ -106,13 +104,12 @@ int bcch_bch_mib_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell perror("calloc"); return LIBLTE_ERROR; } - asn_dec_rval_t n = uper_decode(opt_codec_ctx, &asn_DEF_MasterInformationBlock, (void**) &req, &buffer, msg_nof_bits/8,0,msg_nof_bits%8); + asn_dec_rval_t n = uper_decode(opt_codec_ctx, &asn_DEF_MasterInformationBlock, + (void**) &req, buffer, msg_nof_bits/8,0,msg_nof_bits%8); if (n.consumed == -1) { printf("Decoding failed.\n"); return LIBLTE_ERROR; - } else { - printf("Decoding ok\n"); - } + } asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); switch(req->dl_Bandwidth) { From d65f7a5782aa0b46c78b0e55bac90b73b3a80cd0 Mon Sep 17 00:00:00 2001 From: ismagom Date: Sun, 19 Oct 2014 12:54:45 +0200 Subject: [PATCH 07/55] Moved examples out of phy directory --- lte/{phy => }/examples/CMakeLists.txt | 0 lte/{phy => }/examples/cell_measurement.c | 0 lte/{phy => }/examples/cell_search.c | 0 lte/{phy => }/examples/cell_search_utils.c | 0 lte/{phy => }/examples/cell_search_utils.h | 0 lte/{phy => }/examples/hl_example.c | 0 lte/{phy => }/examples/iodev.c | 0 lte/{phy => }/examples/iodev.h | 0 lte/{phy => }/examples/ll_example.c | 0 lte/{phy => }/examples/pdsch_enodeb.c | 0 lte/{phy => }/examples/pdsch_ue.c | 0 lte/{phy => }/examples/synch_file.c | 0 12 files changed, 0 insertions(+), 0 deletions(-) rename lte/{phy => }/examples/CMakeLists.txt (100%) rename lte/{phy => }/examples/cell_measurement.c (100%) rename lte/{phy => }/examples/cell_search.c (100%) rename lte/{phy => }/examples/cell_search_utils.c (100%) rename lte/{phy => }/examples/cell_search_utils.h (100%) rename lte/{phy => }/examples/hl_example.c (100%) rename lte/{phy => }/examples/iodev.c (100%) rename lte/{phy => }/examples/iodev.h (100%) rename lte/{phy => }/examples/ll_example.c (100%) rename lte/{phy => }/examples/pdsch_enodeb.c (100%) rename lte/{phy => }/examples/pdsch_ue.c (100%) rename lte/{phy => }/examples/synch_file.c (100%) diff --git a/lte/phy/examples/CMakeLists.txt b/lte/examples/CMakeLists.txt similarity index 100% rename from lte/phy/examples/CMakeLists.txt rename to lte/examples/CMakeLists.txt diff --git a/lte/phy/examples/cell_measurement.c b/lte/examples/cell_measurement.c similarity index 100% rename from lte/phy/examples/cell_measurement.c rename to lte/examples/cell_measurement.c diff --git a/lte/phy/examples/cell_search.c b/lte/examples/cell_search.c similarity index 100% rename from lte/phy/examples/cell_search.c rename to lte/examples/cell_search.c diff --git a/lte/phy/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c similarity index 100% rename from lte/phy/examples/cell_search_utils.c rename to lte/examples/cell_search_utils.c diff --git a/lte/phy/examples/cell_search_utils.h b/lte/examples/cell_search_utils.h similarity index 100% rename from lte/phy/examples/cell_search_utils.h rename to lte/examples/cell_search_utils.h diff --git a/lte/phy/examples/hl_example.c b/lte/examples/hl_example.c similarity index 100% rename from lte/phy/examples/hl_example.c rename to lte/examples/hl_example.c diff --git a/lte/phy/examples/iodev.c b/lte/examples/iodev.c similarity index 100% rename from lte/phy/examples/iodev.c rename to lte/examples/iodev.c diff --git a/lte/phy/examples/iodev.h b/lte/examples/iodev.h similarity index 100% rename from lte/phy/examples/iodev.h rename to lte/examples/iodev.h diff --git a/lte/phy/examples/ll_example.c b/lte/examples/ll_example.c similarity index 100% rename from lte/phy/examples/ll_example.c rename to lte/examples/ll_example.c diff --git a/lte/phy/examples/pdsch_enodeb.c b/lte/examples/pdsch_enodeb.c similarity index 100% rename from lte/phy/examples/pdsch_enodeb.c rename to lte/examples/pdsch_enodeb.c diff --git a/lte/phy/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c similarity index 100% rename from lte/phy/examples/pdsch_ue.c rename to lte/examples/pdsch_ue.c diff --git a/lte/phy/examples/synch_file.c b/lte/examples/synch_file.c similarity index 100% rename from lte/phy/examples/synch_file.c rename to lte/examples/synch_file.c From e3ae38c30e6c725331ba832e97d75ddb1f147c2e Mon Sep 17 00:00:00 2001 From: ismagom Date: Sun, 19 Oct 2014 12:56:36 +0200 Subject: [PATCH 08/55] Fixed Cmake --- lte/CMakeLists.txt | 1 + lte/phy/CMakeLists.txt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/lte/CMakeLists.txt b/lte/CMakeLists.txt index 83bc98dce..454ca6d77 100644 --- a/lte/CMakeLists.txt +++ b/lte/CMakeLists.txt @@ -27,3 +27,4 @@ ADD_SUBDIRECTORY(mac) ADD_SUBDIRECTORY(rlc) ADD_SUBDIRECTORY(rrc) ADD_SUBDIRECTORY(pdcp) +ADD_SUBDIRECTORY(examples) diff --git a/lte/phy/CMakeLists.txt b/lte/phy/CMakeLists.txt index 886b9d311..d470c4ec0 100644 --- a/lte/phy/CMakeLists.txt +++ b/lte/phy/CMakeLists.txt @@ -45,4 +45,3 @@ ADD_CUSTOM_TARGET (add_lte_headers SOURCES ${HEADERS_ALL}) # Add subdirectories ######################################################################## ADD_SUBDIRECTORY(lib) -ADD_SUBDIRECTORY(examples) From 2de8610ccffe6f08f9b84eeaf2eef60aa6350ae1 Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 20 Oct 2014 11:19:08 +0200 Subject: [PATCH 09/55] Addes SIB1 packing/unpacking to RRC --- lte/examples/cell_measurement.c | 62 ++++++++++++++++------- lte/phy/lib/ch_estimation/src/chest.c | 2 +- lte/rrc/asn/asn_internal.h | 2 + lte/rrc/asn/per_decoder.h | 2 +- lte/rrc/asn/rrc_asn.h | 1 + lte/rrc/asn/xer_encoder.h | 2 +- lte/rrc/include/liblte/rrc/rrc_msg/bcch.h | 5 ++ lte/rrc/lib/rrc_msg/src/bcch.c | 41 +++++++++++++++ lte/rrc/lib/rrc_msg/test/CMakeLists.txt | 7 ++- lte/rrc/lib/rrc_msg/test/bcch_bch_test.c | 3 +- 10 files changed, 103 insertions(+), 24 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index ba1a1961f..c959f31d4 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -36,6 +36,7 @@ #include #include +#include "liblte/rrc/rrc.h" #include "liblte/phy/phy.h" #include "liblte/cuhd/cuhd.h" #include "cell_search_utils.h" @@ -105,7 +106,7 @@ void parse_args(prog_args_t *args, int argc, char **argv) { /**********************************************************************/ /* TODO: Do something with the output data */ -uint8_t data[10000]; +uint8_t data[10000], data_unpacked[1000]; int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { DEBUG(" ---- Receive %d samples ---- \n", nsamples); @@ -121,7 +122,8 @@ int main(int argc, char **argv) { int64_t sf_cnt; ue_sync_t ue_sync; void *uhd; - + ue_dl_t ue_dl; + parse_args(&prog_args, argc, argv); printf("Opening UHD device...\n"); @@ -148,7 +150,12 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating ue_sync\n"); exit(-1); } - + if (ue_dl_init(&ue_dl, cell, 1234)) { + fprintf(stderr, "Error initiating UE downlink processing module\n"); + exit(-1); + } + pdsch_set_rnti(&ue_dl.pdsch, SIRNTI); + /* Initialize subframe counter */ sf_cnt = 0; @@ -168,6 +175,9 @@ int main(int argc, char **argv) { cf_t *sf_symbols = vec_malloc(sf_re * sizeof(cf_t)); uint32_t nframes=0; + bool sib1_decoded = false; + int n; + /* Main loop */ while (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1) { @@ -181,24 +191,38 @@ int main(int argc, char **argv) { /* iodev_receive returns 1 if successfully read 1 aligned subframe */ if (ret == 1) { + if (!sib1_decoded) { + n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), SIRNTI); + if (n < 0) { + fprintf(stderr, "\nError running receiver\n");fflush(stdout); + exit(-1); + } else if (n > 0) { + printf("\n\nDecoded SIB1 Message Len %d: ",n); + vec_fprint_hex(stdout, data, n); + bit_unpack_vector(data, data_unpacked, n); + bcch_dlsch_sib1_unpack(data_unpacked, n); + printf("\n");fflush(stdout); + sib1_decoded = true; + } + } else { /* Run FFT for all subframe data */ - lte_fft_run_sf(&fft, sf_buffer, sf_symbols); - - chest_measure_sf(&chest, sf_symbols, ue_sync_get_sfidx(&ue_sync)); - rssi = VEC_CMA(chest_rssi_sf(&chest, sf_symbols),rssi,nframes); - rsrq = VEC_CMA(chest_rsrq_sf(&chest, sf_symbols, ue_sync_get_sfidx(&ue_sync)),rsrq,nframes); - rsrp = VEC_CMA(chest_rsrp_sf(&chest, ue_sync_get_sfidx(&ue_sync)),rsrp,nframes); - nframes++; - - // Plot and Printf - if ((nframes%10) == 0) { - printf("CFO: %+6.4f KHz, SFO: %+6.4f Khz, RSSI: %+5.2f dBm, RSRP: %+4.2f dBm, RSRQ: %4.2f dB\r", - ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, - 10*log10(rssi*1000/4/cell.nof_prb/12/2)-prog_args.uhd_gain, - 10*log10(rsrp*1000)-prog_args.uhd_gain, - 10*log10(rsrq)); - } + lte_fft_run_sf(&fft, sf_buffer, sf_symbols); + chest_measure_sf(&chest, sf_symbols, ue_sync_get_sfidx(&ue_sync)); + rssi = VEC_CMA(chest_rssi_sf(&chest, sf_symbols),rssi,nframes); + rsrq = VEC_CMA(chest_rsrq_sf(&chest, sf_symbols, ue_sync_get_sfidx(&ue_sync)),rsrq,nframes); + rsrp = VEC_CMA(chest_rsrp_sf(&chest, ue_sync_get_sfidx(&ue_sync)),rsrp,nframes); + nframes++; + + // Plot and Printf + if ((nframes%10) == 0) { + printf("CFO: %+6.4f KHz, SFO: %+6.4f Khz, RSSI: %+5.2f dBm, RSRP: %+4.2f dBm, RSRQ: %4.2f dB\r", + ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, + 10*log10(rssi*1000/4/cell.nof_prb/12/2)-prog_args.uhd_gain, + 10*log10(rsrp*1000)-prog_args.uhd_gain, + 10*log10(rsrq)); + } + } } else if (ret == 0) { printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", sync_get_peak_value(&ue_sync.sfind), diff --git a/lte/phy/lib/ch_estimation/src/chest.c b/lte/phy/lib/ch_estimation/src/chest.c index b34471122..417695899 100644 --- a/lte/phy/lib/ch_estimation/src/chest.c +++ b/lte/phy/lib/ch_estimation/src/chest.c @@ -38,7 +38,7 @@ #define SLOT_SZ(q) (q->nof_symbols * q->symbol_sz) #define SF_SZ(q) (2 * SLOT_SZ(q)) -//#define VOLK_INTERP +#define VOLK_INTERP void chest_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { chest_ref_fprint(q, stream, nslot, port_id); diff --git a/lte/rrc/asn/asn_internal.h b/lte/rrc/asn/asn_internal.h index 7e0f71be0..e29e4d5f7 100644 --- a/lte/rrc/asn/asn_internal.h +++ b/lte/rrc/asn/asn_internal.h @@ -31,6 +31,8 @@ int get_asn1c_environment_version(void); /* Run-time version */ #define asn_debug_indent 0 #define ASN_DEBUG_INDENT_ADD(i) do{}while(0) +#define EMIT_ASN_DEBUG 1 + /* * A macro for debugging the ASN.1 internals. * You may enable or override it. diff --git a/lte/rrc/asn/per_decoder.h b/lte/rrc/asn/per_decoder.h index 3b99c07ee..253745426 100644 --- a/lte/rrc/asn/per_decoder.h +++ b/lte/rrc/asn/per_decoder.h @@ -20,7 +20,7 @@ struct asn_TYPE_descriptor_s; /* Forward declaration */ * Unaligned PER decoder of a "complete encoding" as per X.691#10.1. * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. */ - asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, + LIBLTE_API asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ diff --git a/lte/rrc/asn/rrc_asn.h b/lte/rrc/asn/rrc_asn.h index 2feb85e25..766d8da61 100644 --- a/lte/rrc/asn/rrc_asn.h +++ b/lte/rrc/asn/rrc_asn.h @@ -28,5 +28,6 @@ #define EMIT_ASN_DEBUG 1 #include "MasterInformationBlock.h" +#include "SystemInformationBlockType1.h" #include "per_encoder.h" #include "xer_encoder.h" diff --git a/lte/rrc/asn/xer_encoder.h b/lte/rrc/asn/xer_encoder.h index 055e73c0c..3068aa65d 100644 --- a/lte/rrc/asn/xer_encoder.h +++ b/lte/rrc/asn/xer_encoder.h @@ -38,7 +38,7 @@ asn_enc_rval_t xer_encode(struct asn_TYPE_descriptor_s *type_descriptor, * -1: Problem printing the structure. * WARNING: No sensible errno value is returned. */ -int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr); +LIBLTE_API int xer_fprint(FILE *stream, struct asn_TYPE_descriptor_s *td, void *sptr); /* * Type of the generic XER encoder. diff --git a/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h b/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h index 193c5e4f6..339333074 100644 --- a/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h +++ b/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h @@ -45,4 +45,9 @@ LIBLTE_API int bcch_bch_mib_unpack(uint8_t *buffer, lte_cell_t *cell, uint32_t *sfn); +LIBLTE_API int bcch_dlsch_sib1_pack(uint8_t *buffer, + uint32_t buffer_size_bytes); + +LIBLTE_API int bcch_dlsch_sib1_unpack(uint8_t *buffer, + uint32_t msg_nof_bits); #endif // AGC_ diff --git a/lte/rrc/lib/rrc_msg/src/bcch.c b/lte/rrc/lib/rrc_msg/src/bcch.c index afb571591..aefa3665a 100644 --- a/lte/rrc/lib/rrc_msg/src/bcch.c +++ b/lte/rrc/lib/rrc_msg/src/bcch.c @@ -31,6 +31,7 @@ #include "liblte/rrc/rrc_msg/bcch.h" #include "liblte/phy/utils/bit.h" #include "rrc_asn.h" +#include "sib.h" int bcch_bch_mib_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buffer_size_bytes) { @@ -155,3 +156,43 @@ int bcch_bch_mib_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell } return LIBLTE_SUCCESS; } + + +int bcch_dlsch_sib1_pack(uint8_t *buffer, uint32_t buffer_size_bytes) { + SystemInformationBlockType1_t req; + + MCC_MNC_Digit_t mcc[3] = {1,0,1}; + MCC_MNC_Digit_t mnc[2] = {2,3}; + uint8_t tac_val[2] = {0x10,0x20}; + uint8_t cid_val[4] = {0x3,0x4,0x5,0x6}; + printf("calling create\n"); + sib1_create_default(&req, mcc, mnc, tac_val, cid_val, 6); + printf("calling encode\n"); + asn_enc_rval_t n = uper_encode_to_buffer(&asn_DEF_SystemInformationBlockType1, (void*) &req, buffer, 200); + if (n.encoded == -1) { + printf("Encoding failed.\n"); + printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); + return LIBLTE_ERROR; + } + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); + return LIBLTE_SUCCESS; +} + +int bcch_dlsch_sib1_unpack(uint8_t *buffer, uint32_t msg_nof_bits) { + SystemInformationBlockType1_t *req = calloc(1, sizeof(SystemInformationBlockType1_t)); + if (!req) { + perror("calloc"); + return LIBLTE_ERROR; + } + asn_dec_rval_t n = uper_decode(NULL, &asn_DEF_SystemInformationBlockType1, + (void**) &req, buffer, msg_nof_bits/8,0,msg_nof_bits%8); + if (n.consumed == -1) { + printf("Decoding failed.\n"); + return LIBLTE_ERROR; + } else { + printf("Decoding OK consumed: %d bits\n", n.consumed); + } + asn_fprint(stdout, &asn_DEF_SystemInformationBlockType1, req); + + return LIBLTE_SUCCESS; +} diff --git a/lte/rrc/lib/rrc_msg/test/CMakeLists.txt b/lte/rrc/lib/rrc_msg/test/CMakeLists.txt index 4d89fa392..6f0c6a3ed 100644 --- a/lte/rrc/lib/rrc_msg/test/CMakeLists.txt +++ b/lte/rrc/lib/rrc_msg/test/CMakeLists.txt @@ -24,6 +24,11 @@ ######################################################################## ADD_EXECUTABLE(bcch_bch_test bcch_bch_test.c) -TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc) +TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc rrc_asn ) ADD_TEST(bcch_bch_test_1 bcch_bch_test) + +ADD_EXECUTABLE(bcch_dlsch_test bcch_dlsch_test.c) +TARGET_LINK_LIBRARIES(bcch_dlsch_test lte_rrc rrc_asn ) + +ADD_TEST(bcch_dlsch_test_1 bcch_dlsch_test) diff --git a/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c b/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c index 6b403920b..be5d6e6af 100644 --- a/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c +++ b/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c @@ -47,4 +47,5 @@ int main(int argc, char **argv) { cell.phich_length = PHICH_NORM; cell.phich_resources = 1; bcch_bch_mib_pack(&cell, 123, buffer, 1024); -} \ No newline at end of file +} + From d033204137b4573519df0722ce7199d4f3ae021c Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 20 Oct 2014 11:19:26 +0200 Subject: [PATCH 10/55] Addes SIB1 packing/unpacking to RRC --- lte/rrc/asn/BOOLEAN.c | 282 ++++++ lte/rrc/asn/BOOLEAN.h | 36 + lte/rrc/asn/CSG-Identity.c | 152 +++ lte/rrc/asn/CSG-Identity.h | 40 + lte/rrc/asn/CellIdentity.c | 152 +++ lte/rrc/asn/CellIdentity.h | 40 + lte/rrc/asn/CellSelectionInfo-v920.c | 101 ++ lte/rrc/asn/CellSelectionInfo-v920.h | 39 + lte/rrc/asn/MCC-MNC-Digit.c | 146 +++ lte/rrc/asn/MCC-MNC-Digit.h | 40 + lte/rrc/asn/MCC.c | 57 ++ lte/rrc/asn/MCC.h | 38 + lte/rrc/asn/MNC.c | 57 ++ lte/rrc/asn/MNC.h | 38 + lte/rrc/asn/P-Max.c | 146 +++ lte/rrc/asn/P-Max.h | 40 + lte/rrc/asn/PLMN-Identity.c | 71 ++ lte/rrc/asn/PLMN-Identity.h | 44 + lte/rrc/asn/PLMN-IdentityInfo.c | 209 ++++ lte/rrc/asn/PLMN-IdentityInfo.h | 46 + lte/rrc/asn/PLMN-IdentityList.c | 57 ++ lte/rrc/asn/PLMN-IdentityList.h | 43 + lte/rrc/asn/Q-QualMin-r9.c | 146 +++ lte/rrc/asn/Q-QualMin-r9.h | 40 + lte/rrc/asn/Q-RxLevMin.c | 146 +++ lte/rrc/asn/Q-RxLevMin.h | 40 + lte/rrc/asn/SIB-MappingInfo.c | 57 ++ lte/rrc/asn/SIB-MappingInfo.h | 38 + lte/rrc/asn/SIB-Type.c | 176 ++++ lte/rrc/asn/SIB-Type.h | 63 ++ lte/rrc/asn/SchedulingInfo.c | 219 ++++ lte/rrc/asn/SchedulingInfo.h | 51 + lte/rrc/asn/SchedulingInfoList.c | 57 ++ lte/rrc/asn/SchedulingInfoList.h | 43 + .../SystemInformationBlockType1-v890-IEs.c | 71 ++ .../SystemInformationBlockType1-v890-IEs.h | 44 + .../SystemInformationBlockType1-v920-IEs.c | 257 +++++ .../SystemInformationBlockType1-v920-IEs.h | 55 + lte/rrc/asn/SystemInformationBlockType1.c | 841 ++++++++++++++++ lte/rrc/asn/SystemInformationBlockType1.h | 101 ++ lte/rrc/asn/TDD-Config.c | 373 +++++++ lte/rrc/asn/TDD-Config.h | 62 ++ lte/rrc/asn/TrackingAreaCode.c | 152 +++ lte/rrc/asn/TrackingAreaCode.h | 40 + lte/rrc/asn/asn_SEQUENCE_OF.c | 41 + lte/rrc/asn/asn_SEQUENCE_OF.h | 52 + lte/rrc/asn/asn_SET_OF.c | 88 ++ lte/rrc/asn/asn_SET_OF.h | 62 ++ lte/rrc/asn/constr_SEQUENCE_OF.c | 208 ++++ lte/rrc/asn/constr_SEQUENCE_OF.h | 33 + lte/rrc/asn/constr_SET_OF.c | 953 ++++++++++++++++++ lte/rrc/asn/constr_SET_OF.h | 42 + lte/rrc/lib/rrc_msg/src/sib.c | 102 ++ lte/rrc/lib/rrc_msg/src/sib.h | 41 + lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c | 49 + 55 files changed, 6617 insertions(+) create mode 100644 lte/rrc/asn/BOOLEAN.c create mode 100644 lte/rrc/asn/BOOLEAN.h create mode 100644 lte/rrc/asn/CSG-Identity.c create mode 100644 lte/rrc/asn/CSG-Identity.h create mode 100644 lte/rrc/asn/CellIdentity.c create mode 100644 lte/rrc/asn/CellIdentity.h create mode 100644 lte/rrc/asn/CellSelectionInfo-v920.c create mode 100644 lte/rrc/asn/CellSelectionInfo-v920.h create mode 100644 lte/rrc/asn/MCC-MNC-Digit.c create mode 100644 lte/rrc/asn/MCC-MNC-Digit.h create mode 100644 lte/rrc/asn/MCC.c create mode 100644 lte/rrc/asn/MCC.h create mode 100644 lte/rrc/asn/MNC.c create mode 100644 lte/rrc/asn/MNC.h create mode 100644 lte/rrc/asn/P-Max.c create mode 100644 lte/rrc/asn/P-Max.h create mode 100644 lte/rrc/asn/PLMN-Identity.c create mode 100644 lte/rrc/asn/PLMN-Identity.h create mode 100644 lte/rrc/asn/PLMN-IdentityInfo.c create mode 100644 lte/rrc/asn/PLMN-IdentityInfo.h create mode 100644 lte/rrc/asn/PLMN-IdentityList.c create mode 100644 lte/rrc/asn/PLMN-IdentityList.h create mode 100644 lte/rrc/asn/Q-QualMin-r9.c create mode 100644 lte/rrc/asn/Q-QualMin-r9.h create mode 100644 lte/rrc/asn/Q-RxLevMin.c create mode 100644 lte/rrc/asn/Q-RxLevMin.h create mode 100644 lte/rrc/asn/SIB-MappingInfo.c create mode 100644 lte/rrc/asn/SIB-MappingInfo.h create mode 100644 lte/rrc/asn/SIB-Type.c create mode 100644 lte/rrc/asn/SIB-Type.h create mode 100644 lte/rrc/asn/SchedulingInfo.c create mode 100644 lte/rrc/asn/SchedulingInfo.h create mode 100644 lte/rrc/asn/SchedulingInfoList.c create mode 100644 lte/rrc/asn/SchedulingInfoList.h create mode 100644 lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c create mode 100644 lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h create mode 100644 lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c create mode 100644 lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h create mode 100644 lte/rrc/asn/SystemInformationBlockType1.c create mode 100644 lte/rrc/asn/SystemInformationBlockType1.h create mode 100644 lte/rrc/asn/TDD-Config.c create mode 100644 lte/rrc/asn/TDD-Config.h create mode 100644 lte/rrc/asn/TrackingAreaCode.c create mode 100644 lte/rrc/asn/TrackingAreaCode.h create mode 100644 lte/rrc/asn/asn_SEQUENCE_OF.c create mode 100644 lte/rrc/asn/asn_SEQUENCE_OF.h create mode 100644 lte/rrc/asn/asn_SET_OF.c create mode 100644 lte/rrc/asn/asn_SET_OF.h create mode 100644 lte/rrc/asn/constr_SEQUENCE_OF.c create mode 100644 lte/rrc/asn/constr_SEQUENCE_OF.h create mode 100644 lte/rrc/asn/constr_SET_OF.c create mode 100644 lte/rrc/asn/constr_SET_OF.h create mode 100644 lte/rrc/lib/rrc_msg/src/sib.c create mode 100644 lte/rrc/lib/rrc_msg/src/sib.h create mode 100644 lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c diff --git a/lte/rrc/asn/BOOLEAN.c b/lte/rrc/asn/BOOLEAN.c new file mode 100644 index 000000000..2ba07840f --- /dev/null +++ b/lte/rrc/asn/BOOLEAN.c @@ -0,0 +1,282 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * BOOLEAN basic type description. + */ +static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { + "BOOLEAN", + "BOOLEAN", + BOOLEAN_free, + BOOLEAN_print, + asn_generic_no_constraint, + BOOLEAN_decode_ber, + BOOLEAN_encode_der, + BOOLEAN_decode_xer, + BOOLEAN_encode_xer, + BOOLEAN_decode_uper, /* Unaligned PER decoder */ + BOOLEAN_encode_uper, /* Unaligned PER encoder */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BOOLEAN_tags, + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + asn_DEF_BOOLEAN_tags, /* Same as above */ + sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +/* + * Decode BOOLEAN type. + */ +asn_dec_rval_t +BOOLEAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, + void **bool_value, const void *buf_ptr, size_t size, + int tag_mode) { + BOOLEAN_t *st = (BOOLEAN_t *)*bool_value; + asn_dec_rval_t rval; + ber_tlv_len_t length; + ber_tlv_len_t lidx; + + if(st == NULL) { + st = (BOOLEAN_t *)(*bool_value = CALLOC(1, sizeof(*st))); + if(st == NULL) { + rval.code = RC_FAIL; + rval.consumed = 0; + return rval; + } + } + + ASN_DEBUG("Decoding %s as BOOLEAN (tm=%d)", + td->name, tag_mode); + + /* + * Check tags. + */ + rval = ber_check_tags(opt_codec_ctx, td, 0, buf_ptr, size, + tag_mode, 0, &length, 0); + if(rval.code != RC_OK) + return rval; + + ASN_DEBUG("Boolean length is %d bytes", (int)length); + + buf_ptr = ((const char *)buf_ptr) + rval.consumed; + size -= rval.consumed; + if(length > (ber_tlv_len_t)size) { + rval.code = RC_WMORE; + rval.consumed = 0; + return rval; + } + + /* + * Compute boolean value. + */ + for(*st = 0, lidx = 0; + (lidx < length) && *st == 0; lidx++) { + /* + * Very simple approach: read bytes until the end or + * value is already TRUE. + * BOOLEAN is not supposed to contain meaningful data anyway. + */ + *st |= ((const uint8_t *)buf_ptr)[lidx]; + } + + rval.code = RC_OK; + rval.consumed += length; + + ASN_DEBUG("Took %ld/%ld bytes to encode %s, value=%d", + (long)rval.consumed, (long)length, + td->name, *st); + + return rval; +} + +asn_enc_rval_t +BOOLEAN_encode_der(asn_TYPE_descriptor_t *td, void *sptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval; + BOOLEAN_t *st = (BOOLEAN_t *)sptr; + + erval.encoded = der_write_tags(td, 1, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + + if(cb) { + uint8_t bool_value; + + bool_value = *st ? 0xff : 0; /* 0xff mandated by DER */ + + if(cb(&bool_value, 1, app_key) < 0) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = sptr; + return erval; + } + } + + erval.encoded += 1; + + _ASN_ENCODED_OK(erval); +} + + +/* + * Decode the chunk of XML text encoding INTEGER. + */ +static enum xer_pbd_rval +BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { + BOOLEAN_t *st = (BOOLEAN_t *)sptr; + const char *p = (const char *)chunk_buf; + + (void)td; + + if(chunk_size && p[0] == 0x3c /* '<' */) { + switch(xer_check_tag(chunk_buf, chunk_size, "false")) { + case XCT_BOTH: + /* "" */ + *st = 0; + break; + case XCT_UNKNOWN_BO: + if(xer_check_tag(chunk_buf, chunk_size, "true") + != XCT_BOTH) + return XPBD_BROKEN_ENCODING; + /* "" */ + *st = 1; /* Or 0xff as in DER?.. */ + break; + default: + return XPBD_BROKEN_ENCODING; + } + return XPBD_BODY_CONSUMED; + } else { + return XPBD_BROKEN_ENCODING; + } +} + + +asn_dec_rval_t +BOOLEAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(BOOLEAN_t), opt_mname, buf_ptr, size, + BOOLEAN__xer_body_decode); +} + +asn_enc_rval_t +BOOLEAN_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er; + + (void)ilevel; + (void)flags; + + if(!st) _ASN_ENCODE_FAILED; + + if(*st) { + _ASN_CALLBACK("", 7); + er.encoded = 7; + } else { + _ASN_CALLBACK("", 8); + er.encoded = 8; + } + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +int +BOOLEAN_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + const char *buf; + size_t buflen; + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(st) { + if(*st) { + buf = "TRUE"; + buflen = 4; + } else { + buf = "FALSE"; + buflen = 5; + } + } else { + buf = ""; + buflen = 8; + } + + return (cb(buf, buflen, app_key) < 0) ? -1 : 0; +} + +void +BOOLEAN_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { + if(td && ptr && !contents_only) { + FREEMEM(ptr); + } +} + +asn_dec_rval_t +BOOLEAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + BOOLEAN_t *st = (BOOLEAN_t *)*sptr; + + (void)opt_codec_ctx; + (void)constraints; + + if(!st) { + st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); + if(!st) _ASN_DECODE_FAILED; + } + + /* + * Extract a single bit + */ + switch(per_get_few_bits(pd, 1)) { + case 1: *st = 1; break; + case 0: *st = 0; break; + case -1: default: _ASN_DECODE_STARVED; + } + + ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); + + rv.code = RC_OK; + rv.consumed = 1; + return rv; +} + + +asn_enc_rval_t +BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; + asn_enc_rval_t er = { 0, 0, 0 }; + + (void)constraints; + + if(!st) _ASN_ENCODE_FAILED; + + if(per_put_few_bits(po, *st ? 1 : 0, 1)) + _ASN_ENCODE_FAILED; + + _ASN_ENCODED_OK(er); +} diff --git a/lte/rrc/asn/BOOLEAN.h b/lte/rrc/asn/BOOLEAN.h new file mode 100644 index 000000000..217d0f163 --- /dev/null +++ b/lte/rrc/asn/BOOLEAN.h @@ -0,0 +1,36 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _BOOLEAN_H_ +#define _BOOLEAN_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The underlying integer may contain various values, but everything + * non-zero is capped to 0xff by the DER encoder. The BER decoder may + * yield non-zero values different from 1, beware. + */ +typedef int BOOLEAN_t; + +extern asn_TYPE_descriptor_t asn_DEF_BOOLEAN; + +asn_struct_free_f BOOLEAN_free; +asn_struct_print_f BOOLEAN_print; +ber_type_decoder_f BOOLEAN_decode_ber; +der_type_encoder_f BOOLEAN_encode_der; +xer_type_decoder_f BOOLEAN_decode_xer; +xer_type_encoder_f BOOLEAN_encode_xer; +per_type_decoder_f BOOLEAN_decode_uper; +per_type_encoder_f BOOLEAN_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BOOLEAN_H_ */ diff --git a/lte/rrc/asn/CSG-Identity.c b/lte/rrc/asn/CSG-Identity.c new file mode 100644 index 000000000..e08ae7deb --- /dev/null +++ b/lte/rrc/asn/CSG-Identity.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "CSG-Identity.h" + +int +CSG_Identity_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 27)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +CSG_Identity_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->check_constraints = asn_DEF_BIT_STRING.check_constraints; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +CSG_Identity_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CSG_Identity_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CSG_Identity_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CSG_Identity_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CSG_Identity_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CSG_Identity_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CSG_Identity_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CSG_Identity_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CSG_Identity_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CSG_Identity_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 27, 27 } /* (SIZE(27..27)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_CSG_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CSG_Identity = { + "CSG-Identity", + "CSG-Identity", + CSG_Identity_free, + CSG_Identity_print, + CSG_Identity_constraint, + CSG_Identity_decode_ber, + CSG_Identity_encode_der, + CSG_Identity_decode_xer, + CSG_Identity_encode_xer, + CSG_Identity_decode_uper, + CSG_Identity_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSG_Identity_tags_1, + sizeof(asn_DEF_CSG_Identity_tags_1) + /sizeof(asn_DEF_CSG_Identity_tags_1[0]), /* 1 */ + asn_DEF_CSG_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_CSG_Identity_tags_1) + /sizeof(asn_DEF_CSG_Identity_tags_1[0]), /* 1 */ + &asn_PER_type_CSG_Identity_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/CSG-Identity.h b/lte/rrc/asn/CSG-Identity.h new file mode 100644 index 000000000..d5c74fcaa --- /dev/null +++ b/lte/rrc/asn/CSG-Identity.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _CSG_Identity_H_ +#define _CSG_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CSG-Identity */ +typedef BIT_STRING_t CSG_Identity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSG_Identity; +asn_struct_free_f CSG_Identity_free; +asn_struct_print_f CSG_Identity_print; +asn_constr_check_f CSG_Identity_constraint; +ber_type_decoder_f CSG_Identity_decode_ber; +der_type_encoder_f CSG_Identity_encode_der; +xer_type_decoder_f CSG_Identity_decode_xer; +xer_type_encoder_f CSG_Identity_encode_xer; +per_type_decoder_f CSG_Identity_decode_uper; +per_type_encoder_f CSG_Identity_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSG_Identity_H_ */ +#include diff --git a/lte/rrc/asn/CellIdentity.c b/lte/rrc/asn/CellIdentity.c new file mode 100644 index 000000000..e97c8c57a --- /dev/null +++ b/lte/rrc/asn/CellIdentity.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "CellIdentity.h" + +int +CellIdentity_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +CellIdentity_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->check_constraints = asn_DEF_BIT_STRING.check_constraints; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +CellIdentity_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CellIdentity_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CellIdentity_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CellIdentity_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CellIdentity_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CellIdentity_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CellIdentity_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CellIdentity_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CellIdentity_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CellIdentity_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CellIdentity_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_CellIdentity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CellIdentity = { + "CellIdentity", + "CellIdentity", + CellIdentity_free, + CellIdentity_print, + CellIdentity_constraint, + CellIdentity_decode_ber, + CellIdentity_encode_der, + CellIdentity_decode_xer, + CellIdentity_encode_xer, + CellIdentity_decode_uper, + CellIdentity_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellIdentity_tags_1, + sizeof(asn_DEF_CellIdentity_tags_1) + /sizeof(asn_DEF_CellIdentity_tags_1[0]), /* 1 */ + asn_DEF_CellIdentity_tags_1, /* Same as above */ + sizeof(asn_DEF_CellIdentity_tags_1) + /sizeof(asn_DEF_CellIdentity_tags_1[0]), /* 1 */ + &asn_PER_type_CellIdentity_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/CellIdentity.h b/lte/rrc/asn/CellIdentity.h new file mode 100644 index 000000000..d997bb83f --- /dev/null +++ b/lte/rrc/asn/CellIdentity.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _CellIdentity_H_ +#define _CellIdentity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellIdentity */ +typedef BIT_STRING_t CellIdentity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellIdentity; +asn_struct_free_f CellIdentity_free; +asn_struct_print_f CellIdentity_print; +asn_constr_check_f CellIdentity_constraint; +ber_type_decoder_f CellIdentity_decode_ber; +der_type_encoder_f CellIdentity_encode_der; +xer_type_decoder_f CellIdentity_decode_xer; +xer_type_encoder_f CellIdentity_encode_xer; +per_type_decoder_f CellIdentity_decode_uper; +per_type_encoder_f CellIdentity_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellIdentity_H_ */ +#include diff --git a/lte/rrc/asn/CellSelectionInfo-v920.c b/lte/rrc/asn/CellSelectionInfo-v920.c new file mode 100644 index 000000000..113beae9f --- /dev/null +++ b/lte/rrc/asn/CellSelectionInfo-v920.c @@ -0,0 +1,101 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "CellSelectionInfo-v920.h" + +static int +memb_q_QualMinOffset_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_q_QualMinOffset_r9_constr_3 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellSelectionInfo_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellSelectionInfo_v920, q_QualMin_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_QualMin_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-QualMin-r9" + }, + { ATF_POINTER, 1, offsetof(struct CellSelectionInfo_v920, q_QualMinOffset_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_q_QualMinOffset_r9_constraint_1, + &asn_PER_memb_q_QualMinOffset_r9_constr_3, + 0, + "q-QualMinOffset-r9" + }, +}; +static const int asn_MAP_CellSelectionInfo_v920_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_CellSelectionInfo_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_CellSelectionInfo_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-QualMin-r9 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-QualMinOffset-r9 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellSelectionInfo_v920_specs_1 = { + sizeof(struct CellSelectionInfo_v920), + offsetof(struct CellSelectionInfo_v920, _asn_ctx), + asn_MAP_CellSelectionInfo_v920_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CellSelectionInfo_v920_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellSelectionInfo_v920 = { + "CellSelectionInfo-v920", + "CellSelectionInfo-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellSelectionInfo_v920_tags_1, + sizeof(asn_DEF_CellSelectionInfo_v920_tags_1) + /sizeof(asn_DEF_CellSelectionInfo_v920_tags_1[0]), /* 1 */ + asn_DEF_CellSelectionInfo_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_CellSelectionInfo_v920_tags_1) + /sizeof(asn_DEF_CellSelectionInfo_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellSelectionInfo_v920_1, + 2, /* Elements count */ + &asn_SPC_CellSelectionInfo_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellSelectionInfo-v920.h b/lte/rrc/asn/CellSelectionInfo-v920.h new file mode 100644 index 000000000..8eb740718 --- /dev/null +++ b/lte/rrc/asn/CellSelectionInfo-v920.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _CellSelectionInfo_v920_H_ +#define _CellSelectionInfo_v920_H_ + + +#include + +/* Including external dependencies */ +#include "Q-QualMin-r9.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellSelectionInfo-v920 */ +typedef struct CellSelectionInfo_v920 { + Q_QualMin_r9_t q_QualMin_r9; + long *q_QualMinOffset_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellSelectionInfo_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellSelectionInfo_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellSelectionInfo_v920_H_ */ +#include diff --git a/lte/rrc/asn/MCC-MNC-Digit.c b/lte/rrc/asn/MCC-MNC-Digit.c new file mode 100644 index 000000000..56469586b --- /dev/null +++ b/lte/rrc/asn/MCC-MNC-Digit.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "MCC-MNC-Digit.h" + +int +MCC_MNC_Digit_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 9)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +MCC_MNC_Digit_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->check_constraints = asn_DEF_NativeInteger.check_constraints; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +MCC_MNC_Digit_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MCC_MNC_Digit_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MCC_MNC_Digit_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MCC_MNC_Digit_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MCC_MNC_Digit_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MCC_MNC_Digit_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MCC_MNC_Digit_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MCC_MNC_Digit_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MCC_MNC_Digit_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MCC_MNC_Digit_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 4, 4, 0, 9 } /* (0..9) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_MCC_MNC_Digit_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MCC_MNC_Digit = { + "MCC-MNC-Digit", + "MCC-MNC-Digit", + MCC_MNC_Digit_free, + MCC_MNC_Digit_print, + MCC_MNC_Digit_constraint, + MCC_MNC_Digit_decode_ber, + MCC_MNC_Digit_encode_der, + MCC_MNC_Digit_decode_xer, + MCC_MNC_Digit_encode_xer, + MCC_MNC_Digit_decode_uper, + MCC_MNC_Digit_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MCC_MNC_Digit_tags_1, + sizeof(asn_DEF_MCC_MNC_Digit_tags_1) + /sizeof(asn_DEF_MCC_MNC_Digit_tags_1[0]), /* 1 */ + asn_DEF_MCC_MNC_Digit_tags_1, /* Same as above */ + sizeof(asn_DEF_MCC_MNC_Digit_tags_1) + /sizeof(asn_DEF_MCC_MNC_Digit_tags_1[0]), /* 1 */ + &asn_PER_type_MCC_MNC_Digit_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/MCC-MNC-Digit.h b/lte/rrc/asn/MCC-MNC-Digit.h new file mode 100644 index 000000000..8a4e3099d --- /dev/null +++ b/lte/rrc/asn/MCC-MNC-Digit.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _MCC_MNC_Digit_H_ +#define _MCC_MNC_Digit_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MCC-MNC-Digit */ +typedef long MCC_MNC_Digit_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MCC_MNC_Digit; +asn_struct_free_f MCC_MNC_Digit_free; +asn_struct_print_f MCC_MNC_Digit_print; +asn_constr_check_f MCC_MNC_Digit_constraint; +ber_type_decoder_f MCC_MNC_Digit_decode_ber; +der_type_encoder_f MCC_MNC_Digit_encode_der; +xer_type_decoder_f MCC_MNC_Digit_decode_xer; +xer_type_encoder_f MCC_MNC_Digit_encode_xer; +per_type_decoder_f MCC_MNC_Digit_decode_uper; +per_type_encoder_f MCC_MNC_Digit_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MCC_MNC_Digit_H_ */ +#include diff --git a/lte/rrc/asn/MCC.c b/lte/rrc/asn/MCC.c new file mode 100644 index 000000000..bf918ab19 --- /dev/null +++ b/lte/rrc/asn/MCC.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "MCC.h" + +static asn_per_constraints_t asn_PER_type_MCC_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MCC_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_MCC_MNC_Digit, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MCC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MCC_specs_1 = { + sizeof(struct MCC), + offsetof(struct MCC, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MCC = { + "MCC", + "MCC", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MCC_tags_1, + sizeof(asn_DEF_MCC_tags_1) + /sizeof(asn_DEF_MCC_tags_1[0]), /* 1 */ + asn_DEF_MCC_tags_1, /* Same as above */ + sizeof(asn_DEF_MCC_tags_1) + /sizeof(asn_DEF_MCC_tags_1[0]), /* 1 */ + &asn_PER_type_MCC_constr_1, + asn_MBR_MCC_1, + 1, /* Single element */ + &asn_SPC_MCC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MCC.h b/lte/rrc/asn/MCC.h new file mode 100644 index 000000000..27e348d6a --- /dev/null +++ b/lte/rrc/asn/MCC.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _MCC_H_ +#define _MCC_H_ + + +#include + +/* Including external dependencies */ +#include "MCC-MNC-Digit.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MCC */ +typedef struct MCC { + A_SEQUENCE_OF(MCC_MNC_Digit_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MCC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MCC; + +#ifdef __cplusplus +} +#endif + +#endif /* _MCC_H_ */ +#include diff --git a/lte/rrc/asn/MNC.c b/lte/rrc/asn/MNC.c new file mode 100644 index 000000000..69b98c647 --- /dev/null +++ b/lte/rrc/asn/MNC.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "MNC.h" + +static asn_per_constraints_t asn_PER_type_MNC_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 2, 3 } /* (SIZE(2..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MNC_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_MCC_MNC_Digit, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_MNC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MNC_specs_1 = { + sizeof(struct MNC), + offsetof(struct MNC, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MNC = { + "MNC", + "MNC", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MNC_tags_1, + sizeof(asn_DEF_MNC_tags_1) + /sizeof(asn_DEF_MNC_tags_1[0]), /* 1 */ + asn_DEF_MNC_tags_1, /* Same as above */ + sizeof(asn_DEF_MNC_tags_1) + /sizeof(asn_DEF_MNC_tags_1[0]), /* 1 */ + &asn_PER_type_MNC_constr_1, + asn_MBR_MNC_1, + 1, /* Single element */ + &asn_SPC_MNC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MNC.h b/lte/rrc/asn/MNC.h new file mode 100644 index 000000000..7eff84466 --- /dev/null +++ b/lte/rrc/asn/MNC.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _MNC_H_ +#define _MNC_H_ + + +#include + +/* Including external dependencies */ +#include "MCC-MNC-Digit.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MNC */ +typedef struct MNC { + A_SEQUENCE_OF(MCC_MNC_Digit_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MNC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MNC; + +#ifdef __cplusplus +} +#endif + +#endif /* _MNC_H_ */ +#include diff --git a/lte/rrc/asn/P-Max.c b/lte/rrc/asn/P-Max.c new file mode 100644 index 000000000..ab19b8667 --- /dev/null +++ b/lte/rrc/asn/P-Max.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "P-Max.h" + +int +P_Max_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -30 && value <= 33)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +P_Max_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->check_constraints = asn_DEF_NativeInteger.check_constraints; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +P_Max_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + P_Max_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +P_Max_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +P_Max_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +P_Max_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +P_Max_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +P_Max_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +P_Max_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +P_Max_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + P_Max_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_P_Max_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, -30, 33 } /* (-30..33) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_P_Max_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_P_Max = { + "P-Max", + "P-Max", + P_Max_free, + P_Max_print, + P_Max_constraint, + P_Max_decode_ber, + P_Max_encode_der, + P_Max_decode_xer, + P_Max_encode_xer, + P_Max_decode_uper, + P_Max_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_P_Max_tags_1, + sizeof(asn_DEF_P_Max_tags_1) + /sizeof(asn_DEF_P_Max_tags_1[0]), /* 1 */ + asn_DEF_P_Max_tags_1, /* Same as above */ + sizeof(asn_DEF_P_Max_tags_1) + /sizeof(asn_DEF_P_Max_tags_1[0]), /* 1 */ + &asn_PER_type_P_Max_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/P-Max.h b/lte/rrc/asn/P-Max.h new file mode 100644 index 000000000..025d22b23 --- /dev/null +++ b/lte/rrc/asn/P-Max.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _P_Max_H_ +#define _P_Max_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* P-Max */ +typedef long P_Max_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_P_Max; +asn_struct_free_f P_Max_free; +asn_struct_print_f P_Max_print; +asn_constr_check_f P_Max_constraint; +ber_type_decoder_f P_Max_decode_ber; +der_type_encoder_f P_Max_encode_der; +xer_type_decoder_f P_Max_decode_xer; +xer_type_encoder_f P_Max_encode_xer; +per_type_decoder_f P_Max_decode_uper; +per_type_encoder_f P_Max_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _P_Max_H_ */ +#include diff --git a/lte/rrc/asn/PLMN-Identity.c b/lte/rrc/asn/PLMN-Identity.c new file mode 100644 index 000000000..8e2f195fe --- /dev/null +++ b/lte/rrc/asn/PLMN-Identity.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "PLMN-Identity.h" + +static asn_TYPE_member_t asn_MBR_PLMN_Identity_1[] = { + { ATF_POINTER, 1, offsetof(struct PLMN_Identity, mcc), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MCC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mcc" + }, + { ATF_NOFLAGS, 0, offsetof(struct PLMN_Identity, mnc), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MNC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mnc" + }, +}; +static const int asn_MAP_PLMN_Identity_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PLMN_Identity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mcc */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* mnc */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PLMN_Identity_specs_1 = { + sizeof(struct PLMN_Identity), + offsetof(struct PLMN_Identity, _asn_ctx), + asn_MAP_PLMN_Identity_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PLMN_Identity_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_Identity = { + "PLMN-Identity", + "PLMN-Identity", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PLMN_Identity_tags_1, + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + asn_DEF_PLMN_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_Identity_tags_1) + /sizeof(asn_DEF_PLMN_Identity_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PLMN_Identity_1, + 2, /* Elements count */ + &asn_SPC_PLMN_Identity_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PLMN-Identity.h b/lte/rrc/asn/PLMN-Identity.h new file mode 100644 index 000000000..719aa0829 --- /dev/null +++ b/lte/rrc/asn/PLMN-Identity.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _PLMN_Identity_H_ +#define _PLMN_Identity_H_ + + +#include + +/* Including external dependencies */ +#include "MNC.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MCC; + +/* PLMN-Identity */ +typedef struct PLMN_Identity { + struct MCC *mcc /* OPTIONAL */; + MNC_t mnc; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMN_Identity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PLMN_Identity; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MCC.h" + +#endif /* _PLMN_Identity_H_ */ +#include diff --git a/lte/rrc/asn/PLMN-IdentityInfo.c b/lte/rrc/asn/PLMN-IdentityInfo.c new file mode 100644 index 000000000..f99b92a0b --- /dev/null +++ b/lte/rrc/asn/PLMN-IdentityInfo.c @@ -0,0 +1,209 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "PLMN-IdentityInfo.h" + +static int +cellReservedForOperatorUse_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cellReservedForOperatorUse_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cellReservedForOperatorUse_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cellReservedForOperatorUse_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cellReservedForOperatorUse_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cellReservedForOperatorUse_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cellReservedForOperatorUse_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cellReservedForOperatorUse_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cellReservedForOperatorUse_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cellReservedForOperatorUse_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cellReservedForOperatorUse_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_cellReservedForOperatorUse_constr_3 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_cellReservedForOperatorUse_value2enum_3[] = { + { 0, 8, "reserved" }, + { 1, 11, "notReserved" } +}; +static const unsigned int asn_MAP_cellReservedForOperatorUse_enum2value_3[] = { + 1, /* notReserved(1) */ + 0 /* reserved(0) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_cellReservedForOperatorUse_specs_3 = { + asn_MAP_cellReservedForOperatorUse_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_cellReservedForOperatorUse_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_cellReservedForOperatorUse_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellReservedForOperatorUse_3 = { + "cellReservedForOperatorUse", + "cellReservedForOperatorUse", + cellReservedForOperatorUse_3_free, + cellReservedForOperatorUse_3_print, + cellReservedForOperatorUse_3_constraint, + cellReservedForOperatorUse_3_decode_ber, + cellReservedForOperatorUse_3_encode_der, + cellReservedForOperatorUse_3_decode_xer, + cellReservedForOperatorUse_3_encode_xer, + cellReservedForOperatorUse_3_decode_uper, + cellReservedForOperatorUse_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellReservedForOperatorUse_tags_3, + sizeof(asn_DEF_cellReservedForOperatorUse_tags_3) + /sizeof(asn_DEF_cellReservedForOperatorUse_tags_3[0]) - 1, /* 1 */ + asn_DEF_cellReservedForOperatorUse_tags_3, /* Same as above */ + sizeof(asn_DEF_cellReservedForOperatorUse_tags_3) + /sizeof(asn_DEF_cellReservedForOperatorUse_tags_3[0]), /* 2 */ + &asn_PER_type_cellReservedForOperatorUse_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cellReservedForOperatorUse_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PLMN_IdentityInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PLMN_IdentityInfo, plmn_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct PLMN_IdentityInfo, cellReservedForOperatorUse), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cellReservedForOperatorUse_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReservedForOperatorUse" + }, +}; +static const ber_tlv_tag_t asn_DEF_PLMN_IdentityInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_PLMN_IdentityInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReservedForOperatorUse */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PLMN_IdentityInfo_specs_1 = { + sizeof(struct PLMN_IdentityInfo), + offsetof(struct PLMN_IdentityInfo, _asn_ctx), + asn_MAP_PLMN_IdentityInfo_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_IdentityInfo = { + "PLMN-IdentityInfo", + "PLMN-IdentityInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PLMN_IdentityInfo_tags_1, + sizeof(asn_DEF_PLMN_IdentityInfo_tags_1) + /sizeof(asn_DEF_PLMN_IdentityInfo_tags_1[0]), /* 1 */ + asn_DEF_PLMN_IdentityInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_IdentityInfo_tags_1) + /sizeof(asn_DEF_PLMN_IdentityInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PLMN_IdentityInfo_1, + 2, /* Elements count */ + &asn_SPC_PLMN_IdentityInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PLMN-IdentityInfo.h b/lte/rrc/asn/PLMN-IdentityInfo.h new file mode 100644 index 000000000..76d175613 --- /dev/null +++ b/lte/rrc/asn/PLMN-IdentityInfo.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _PLMN_IdentityInfo_H_ +#define _PLMN_IdentityInfo_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum cellReservedForOperatorUse { + cellReservedForOperatorUse_reserved = 0, + cellReservedForOperatorUse_notReserved = 1 +} e_cellReservedForOperatorUse; + +/* PLMN-IdentityInfo */ +typedef struct PLMN_IdentityInfo { + PLMN_Identity_t plmn_Identity; + long cellReservedForOperatorUse; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMN_IdentityInfo_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cellReservedForOperatorUse_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PLMN_IdentityInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _PLMN_IdentityInfo_H_ */ +#include diff --git a/lte/rrc/asn/PLMN-IdentityList.c b/lte/rrc/asn/PLMN-IdentityList.c new file mode 100644 index 000000000..81a448d9e --- /dev/null +++ b/lte/rrc/asn/PLMN-IdentityList.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "PLMN-IdentityList.h" + +static asn_per_constraints_t asn_PER_type_PLMN_IdentityList_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 6 } /* (SIZE(1..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PLMN_IdentityList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PLMN_IdentityInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_PLMN_IdentityList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PLMN_IdentityList_specs_1 = { + sizeof(struct PLMN_IdentityList), + offsetof(struct PLMN_IdentityList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_IdentityList = { + "PLMN-IdentityList", + "PLMN-IdentityList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PLMN_IdentityList_tags_1, + sizeof(asn_DEF_PLMN_IdentityList_tags_1) + /sizeof(asn_DEF_PLMN_IdentityList_tags_1[0]), /* 1 */ + asn_DEF_PLMN_IdentityList_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_IdentityList_tags_1) + /sizeof(asn_DEF_PLMN_IdentityList_tags_1[0]), /* 1 */ + &asn_PER_type_PLMN_IdentityList_constr_1, + asn_MBR_PLMN_IdentityList_1, + 1, /* Single element */ + &asn_SPC_PLMN_IdentityList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PLMN-IdentityList.h b/lte/rrc/asn/PLMN-IdentityList.h new file mode 100644 index 000000000..7dcb4bc7d --- /dev/null +++ b/lte/rrc/asn/PLMN-IdentityList.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _PLMN_IdentityList_H_ +#define _PLMN_IdentityList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PLMN_IdentityInfo; + +/* PLMN-IdentityList */ +typedef struct PLMN_IdentityList { + A_SEQUENCE_OF(struct PLMN_IdentityInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMN_IdentityList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PLMN_IdentityList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PLMN-IdentityInfo.h" + +#endif /* _PLMN_IdentityList_H_ */ +#include diff --git a/lte/rrc/asn/Q-QualMin-r9.c b/lte/rrc/asn/Q-QualMin-r9.c new file mode 100644 index 000000000..d78750fdd --- /dev/null +++ b/lte/rrc/asn/Q-QualMin-r9.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "Q-QualMin-r9.h" + +int +Q_QualMin_r9_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -34 && value <= -3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +Q_QualMin_r9_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->check_constraints = asn_DEF_NativeInteger.check_constraints; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +Q_QualMin_r9_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +Q_QualMin_r9_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +Q_QualMin_r9_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +Q_QualMin_r9_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +Q_QualMin_r9_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +Q_QualMin_r9_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +Q_QualMin_r9_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +Q_QualMin_r9_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + Q_QualMin_r9_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_Q_QualMin_r9_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 5, 5, -34, -3 } /* (-34..-3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Q_QualMin_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Q_QualMin_r9 = { + "Q-QualMin-r9", + "Q-QualMin-r9", + Q_QualMin_r9_free, + Q_QualMin_r9_print, + Q_QualMin_r9_constraint, + Q_QualMin_r9_decode_ber, + Q_QualMin_r9_encode_der, + Q_QualMin_r9_decode_xer, + Q_QualMin_r9_encode_xer, + Q_QualMin_r9_decode_uper, + Q_QualMin_r9_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Q_QualMin_r9_tags_1, + sizeof(asn_DEF_Q_QualMin_r9_tags_1) + /sizeof(asn_DEF_Q_QualMin_r9_tags_1[0]), /* 1 */ + asn_DEF_Q_QualMin_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_Q_QualMin_r9_tags_1) + /sizeof(asn_DEF_Q_QualMin_r9_tags_1[0]), /* 1 */ + &asn_PER_type_Q_QualMin_r9_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/Q-QualMin-r9.h b/lte/rrc/asn/Q-QualMin-r9.h new file mode 100644 index 000000000..c6178bf83 --- /dev/null +++ b/lte/rrc/asn/Q-QualMin-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _Q_QualMin_r9_H_ +#define _Q_QualMin_r9_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Q-QualMin-r9 */ +typedef long Q_QualMin_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Q_QualMin_r9; +asn_struct_free_f Q_QualMin_r9_free; +asn_struct_print_f Q_QualMin_r9_print; +asn_constr_check_f Q_QualMin_r9_constraint; +ber_type_decoder_f Q_QualMin_r9_decode_ber; +der_type_encoder_f Q_QualMin_r9_encode_der; +xer_type_decoder_f Q_QualMin_r9_decode_xer; +xer_type_encoder_f Q_QualMin_r9_encode_xer; +per_type_decoder_f Q_QualMin_r9_decode_uper; +per_type_encoder_f Q_QualMin_r9_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Q_QualMin_r9_H_ */ +#include diff --git a/lte/rrc/asn/Q-RxLevMin.c b/lte/rrc/asn/Q-RxLevMin.c new file mode 100644 index 000000000..25eb90031 --- /dev/null +++ b/lte/rrc/asn/Q-RxLevMin.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "Q-RxLevMin.h" + +int +Q_RxLevMin_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -70 && value <= -22)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +Q_RxLevMin_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->check_constraints = asn_DEF_NativeInteger.check_constraints; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +Q_RxLevMin_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +Q_RxLevMin_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +Q_RxLevMin_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +Q_RxLevMin_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +Q_RxLevMin_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +Q_RxLevMin_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +Q_RxLevMin_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +Q_RxLevMin_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + Q_RxLevMin_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_Q_RxLevMin_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, -70, -22 } /* (-70..-22) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Q_RxLevMin_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Q_RxLevMin = { + "Q-RxLevMin", + "Q-RxLevMin", + Q_RxLevMin_free, + Q_RxLevMin_print, + Q_RxLevMin_constraint, + Q_RxLevMin_decode_ber, + Q_RxLevMin_encode_der, + Q_RxLevMin_decode_xer, + Q_RxLevMin_encode_xer, + Q_RxLevMin_decode_uper, + Q_RxLevMin_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Q_RxLevMin_tags_1, + sizeof(asn_DEF_Q_RxLevMin_tags_1) + /sizeof(asn_DEF_Q_RxLevMin_tags_1[0]), /* 1 */ + asn_DEF_Q_RxLevMin_tags_1, /* Same as above */ + sizeof(asn_DEF_Q_RxLevMin_tags_1) + /sizeof(asn_DEF_Q_RxLevMin_tags_1[0]), /* 1 */ + &asn_PER_type_Q_RxLevMin_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/Q-RxLevMin.h b/lte/rrc/asn/Q-RxLevMin.h new file mode 100644 index 000000000..1d6a4d979 --- /dev/null +++ b/lte/rrc/asn/Q-RxLevMin.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _Q_RxLevMin_H_ +#define _Q_RxLevMin_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Q-RxLevMin */ +typedef long Q_RxLevMin_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Q_RxLevMin; +asn_struct_free_f Q_RxLevMin_free; +asn_struct_print_f Q_RxLevMin_print; +asn_constr_check_f Q_RxLevMin_constraint; +ber_type_decoder_f Q_RxLevMin_decode_ber; +der_type_encoder_f Q_RxLevMin_encode_der; +xer_type_decoder_f Q_RxLevMin_decode_xer; +xer_type_encoder_f Q_RxLevMin_encode_xer; +per_type_decoder_f Q_RxLevMin_decode_uper; +per_type_encoder_f Q_RxLevMin_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Q_RxLevMin_H_ */ +#include diff --git a/lte/rrc/asn/SIB-MappingInfo.c b/lte/rrc/asn/SIB-MappingInfo.c new file mode 100644 index 000000000..f81fc8af9 --- /dev/null +++ b/lte/rrc/asn/SIB-MappingInfo.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SIB-MappingInfo.h" + +static asn_per_constraints_t asn_PER_type_SIB_MappingInfo_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (SIZE(0..31)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SIB_MappingInfo_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SIB_Type, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_SIB_MappingInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SIB_MappingInfo_specs_1 = { + sizeof(struct SIB_MappingInfo), + offsetof(struct SIB_MappingInfo, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SIB_MappingInfo = { + "SIB-MappingInfo", + "SIB-MappingInfo", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SIB_MappingInfo_tags_1, + sizeof(asn_DEF_SIB_MappingInfo_tags_1) + /sizeof(asn_DEF_SIB_MappingInfo_tags_1[0]), /* 1 */ + asn_DEF_SIB_MappingInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_SIB_MappingInfo_tags_1) + /sizeof(asn_DEF_SIB_MappingInfo_tags_1[0]), /* 1 */ + &asn_PER_type_SIB_MappingInfo_constr_1, + asn_MBR_SIB_MappingInfo_1, + 1, /* Single element */ + &asn_SPC_SIB_MappingInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SIB-MappingInfo.h b/lte/rrc/asn/SIB-MappingInfo.h new file mode 100644 index 000000000..15e228309 --- /dev/null +++ b/lte/rrc/asn/SIB-MappingInfo.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SIB_MappingInfo_H_ +#define _SIB_MappingInfo_H_ + + +#include + +/* Including external dependencies */ +#include "SIB-Type.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SIB-MappingInfo */ +typedef struct SIB_MappingInfo { + A_SEQUENCE_OF(SIB_Type_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SIB_MappingInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SIB_MappingInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _SIB_MappingInfo_H_ */ +#include diff --git a/lte/rrc/asn/SIB-Type.c b/lte/rrc/asn/SIB-Type.c new file mode 100644 index 000000000..48b37e159 --- /dev/null +++ b/lte/rrc/asn/SIB-Type.c @@ -0,0 +1,176 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SIB-Type.h" + +int +SIB_Type_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SIB_Type_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SIB_Type_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SIB_Type_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SIB_Type_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SIB_Type_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SIB_Type_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SIB_Type_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SIB_Type_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SIB_Type_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SIB_Type_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SIB_Type_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SIB_Type_constr_1 GCC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_SIB_Type_value2enum_1[] = { + { 0, 8, "sibType3" }, + { 1, 8, "sibType4" }, + { 2, 8, "sibType5" }, + { 3, 8, "sibType6" }, + { 4, 8, "sibType7" }, + { 5, 8, "sibType8" }, + { 6, 8, "sibType9" }, + { 7, 9, "sibType10" }, + { 8, 9, "sibType11" }, + { 9, 14, "sibType12-v920" }, + { 10, 14, "sibType13-v920" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_SIB_Type_enum2value_1[] = { + 7, /* sibType10(7) */ + 8, /* sibType11(8) */ + 9, /* sibType12-v920(9) */ + 10, /* sibType13-v920(10) */ + 0, /* sibType3(0) */ + 1, /* sibType4(1) */ + 2, /* sibType5(2) */ + 3, /* sibType6(3) */ + 4, /* sibType7(4) */ + 5, /* sibType8(5) */ + 6, /* sibType9(6) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11 /* spare5(11) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_SIB_Type_specs_1 = { + asn_MAP_SIB_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SIB_Type_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_SIB_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SIB_Type = { + "SIB-Type", + "SIB-Type", + SIB_Type_free, + SIB_Type_print, + SIB_Type_constraint, + SIB_Type_decode_ber, + SIB_Type_encode_der, + SIB_Type_decode_xer, + SIB_Type_encode_xer, + SIB_Type_decode_uper, + SIB_Type_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SIB_Type_tags_1, + sizeof(asn_DEF_SIB_Type_tags_1) + /sizeof(asn_DEF_SIB_Type_tags_1[0]), /* 1 */ + asn_DEF_SIB_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_SIB_Type_tags_1) + /sizeof(asn_DEF_SIB_Type_tags_1[0]), /* 1 */ + &asn_PER_type_SIB_Type_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SIB_Type_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SIB-Type.h b/lte/rrc/asn/SIB-Type.h new file mode 100644 index 000000000..408fb78ff --- /dev/null +++ b/lte/rrc/asn/SIB-Type.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SIB_Type_H_ +#define _SIB_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SIB_Type { + SIB_Type_sibType3 = 0, + SIB_Type_sibType4 = 1, + SIB_Type_sibType5 = 2, + SIB_Type_sibType6 = 3, + SIB_Type_sibType7 = 4, + SIB_Type_sibType8 = 5, + SIB_Type_sibType9 = 6, + SIB_Type_sibType10 = 7, + SIB_Type_sibType11 = 8, + SIB_Type_sibType12_v920 = 9, + SIB_Type_sibType13_v920 = 10, + SIB_Type_spare5 = 11, + SIB_Type_spare4 = 12, + SIB_Type_spare3 = 13, + SIB_Type_spare2 = 14, + SIB_Type_spare1 = 15 + /* + * Enumeration is extensible + */ +} e_SIB_Type; + +/* SIB-Type */ +typedef long SIB_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SIB_Type; +asn_struct_free_f SIB_Type_free; +asn_struct_print_f SIB_Type_print; +asn_constr_check_f SIB_Type_constraint; +ber_type_decoder_f SIB_Type_decode_ber; +der_type_encoder_f SIB_Type_encode_der; +xer_type_decoder_f SIB_Type_decode_xer; +xer_type_encoder_f SIB_Type_encode_xer; +per_type_decoder_f SIB_Type_decode_uper; +per_type_encoder_f SIB_Type_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SIB_Type_H_ */ +#include diff --git a/lte/rrc/asn/SchedulingInfo.c b/lte/rrc/asn/SchedulingInfo.c new file mode 100644 index 000000000..fcf8343f2 --- /dev/null +++ b/lte/rrc/asn/SchedulingInfo.c @@ -0,0 +1,219 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SchedulingInfo.h" + +static int +si_Periodicity_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +si_Periodicity_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +si_Periodicity_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +si_Periodicity_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +si_Periodicity_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +si_Periodicity_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +si_Periodicity_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +si_Periodicity_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +si_Periodicity_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +si_Periodicity_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + si_Periodicity_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_si_Periodicity_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_si_Periodicity_value2enum_2[] = { + { 0, 3, "rf8" }, + { 1, 4, "rf16" }, + { 2, 4, "rf32" }, + { 3, 4, "rf64" }, + { 4, 5, "rf128" }, + { 5, 5, "rf256" }, + { 6, 5, "rf512" } +}; +static const unsigned int asn_MAP_si_Periodicity_enum2value_2[] = { + 4, /* rf128(4) */ + 1, /* rf16(1) */ + 5, /* rf256(5) */ + 2, /* rf32(2) */ + 6, /* rf512(6) */ + 3, /* rf64(3) */ + 0 /* rf8(0) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_si_Periodicity_specs_2 = { + asn_MAP_si_Periodicity_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_si_Periodicity_enum2value_2, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_si_Periodicity_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_si_Periodicity_2 = { + "si-Periodicity", + "si-Periodicity", + si_Periodicity_2_free, + si_Periodicity_2_print, + si_Periodicity_2_constraint, + si_Periodicity_2_decode_ber, + si_Periodicity_2_encode_der, + si_Periodicity_2_decode_xer, + si_Periodicity_2_encode_xer, + si_Periodicity_2_decode_uper, + si_Periodicity_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_si_Periodicity_tags_2, + sizeof(asn_DEF_si_Periodicity_tags_2) + /sizeof(asn_DEF_si_Periodicity_tags_2[0]) - 1, /* 1 */ + asn_DEF_si_Periodicity_tags_2, /* Same as above */ + sizeof(asn_DEF_si_Periodicity_tags_2) + /sizeof(asn_DEF_si_Periodicity_tags_2[0]), /* 2 */ + &asn_PER_type_si_Periodicity_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_si_Periodicity_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SchedulingInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SchedulingInfo, si_Periodicity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_si_Periodicity_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "si-Periodicity" + }, + { ATF_NOFLAGS, 0, offsetof(struct SchedulingInfo, sib_MappingInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SIB_MappingInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib-MappingInfo" + }, +}; +static const ber_tlv_tag_t asn_DEF_SchedulingInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SchedulingInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* si-Periodicity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sib-MappingInfo */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SchedulingInfo_specs_1 = { + sizeof(struct SchedulingInfo), + offsetof(struct SchedulingInfo, _asn_ctx), + asn_MAP_SchedulingInfo_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SchedulingInfo = { + "SchedulingInfo", + "SchedulingInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SchedulingInfo_tags_1, + sizeof(asn_DEF_SchedulingInfo_tags_1) + /sizeof(asn_DEF_SchedulingInfo_tags_1[0]), /* 1 */ + asn_DEF_SchedulingInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_SchedulingInfo_tags_1) + /sizeof(asn_DEF_SchedulingInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SchedulingInfo_1, + 2, /* Elements count */ + &asn_SPC_SchedulingInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SchedulingInfo.h b/lte/rrc/asn/SchedulingInfo.h new file mode 100644 index 000000000..16e015192 --- /dev/null +++ b/lte/rrc/asn/SchedulingInfo.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SchedulingInfo_H_ +#define _SchedulingInfo_H_ + + +#include + +/* Including external dependencies */ +#include +#include "SIB-MappingInfo.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum si_Periodicity { + si_Periodicity_rf8 = 0, + si_Periodicity_rf16 = 1, + si_Periodicity_rf32 = 2, + si_Periodicity_rf64 = 3, + si_Periodicity_rf128 = 4, + si_Periodicity_rf256 = 5, + si_Periodicity_rf512 = 6 +} e_si_Periodicity; + +/* SchedulingInfo */ +typedef struct SchedulingInfo { + long si_Periodicity; + SIB_MappingInfo_t sib_MappingInfo; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SchedulingInfo_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_si_Periodicity_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SchedulingInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _SchedulingInfo_H_ */ +#include diff --git a/lte/rrc/asn/SchedulingInfoList.c b/lte/rrc/asn/SchedulingInfoList.c new file mode 100644 index 000000000..86b17ebac --- /dev/null +++ b/lte/rrc/asn/SchedulingInfoList.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SchedulingInfoList.h" + +static asn_per_constraints_t asn_PER_type_SchedulingInfoList_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SchedulingInfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SchedulingInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_SchedulingInfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SchedulingInfoList_specs_1 = { + sizeof(struct SchedulingInfoList), + offsetof(struct SchedulingInfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SchedulingInfoList = { + "SchedulingInfoList", + "SchedulingInfoList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SchedulingInfoList_tags_1, + sizeof(asn_DEF_SchedulingInfoList_tags_1) + /sizeof(asn_DEF_SchedulingInfoList_tags_1[0]), /* 1 */ + asn_DEF_SchedulingInfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_SchedulingInfoList_tags_1) + /sizeof(asn_DEF_SchedulingInfoList_tags_1[0]), /* 1 */ + &asn_PER_type_SchedulingInfoList_constr_1, + asn_MBR_SchedulingInfoList_1, + 1, /* Single element */ + &asn_SPC_SchedulingInfoList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SchedulingInfoList.h b/lte/rrc/asn/SchedulingInfoList.h new file mode 100644 index 000000000..6ca8e6c5c --- /dev/null +++ b/lte/rrc/asn/SchedulingInfoList.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SchedulingInfoList_H_ +#define _SchedulingInfoList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SchedulingInfo; + +/* SchedulingInfoList */ +typedef struct SchedulingInfoList { + A_SEQUENCE_OF(struct SchedulingInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SchedulingInfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SchedulingInfoList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SchedulingInfo.h" + +#endif /* _SchedulingInfoList_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c new file mode 100644 index 000000000..5342576e6 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SystemInformationBlockType1-v890-IEs.h" + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType1_v890_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType1_v890_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1_v890_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType1_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_SystemInformationBlockType1_v890_IEs_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_v890_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType1_v890_IEs_specs_1 = { + sizeof(struct SystemInformationBlockType1_v890_IEs), + offsetof(struct SystemInformationBlockType1_v890_IEs, _asn_ctx), + asn_MAP_SystemInformationBlockType1_v890_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType1_v890_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType1_v890_IEs = { + "SystemInformationBlockType1-v890-IEs", + "SystemInformationBlockType1-v890-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1, + sizeof(asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType1_v890_IEs_1, + 2, /* Elements count */ + &asn_SPC_SystemInformationBlockType1_v890_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h new file mode 100644 index 000000000..5a5823144 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SystemInformationBlockType1_v890_IEs_H_ +#define _SystemInformationBlockType1_v890_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SystemInformationBlockType1_v920_IEs; + +/* SystemInformationBlockType1-v890-IEs */ +typedef struct SystemInformationBlockType1_v890_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct SystemInformationBlockType1_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType1_v890_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType1_v890_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SystemInformationBlockType1-v920-IEs.h" + +#endif /* _SystemInformationBlockType1_v890_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c new file mode 100644 index 000000000..f5bc3fc57 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c @@ -0,0 +1,257 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SystemInformationBlockType1-v920-IEs.h" + +static int +ims_EmergencySupport_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ims_EmergencySupport_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ims_EmergencySupport_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ims_EmergencySupport_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ims_EmergencySupport_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ims_EmergencySupport_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ims_EmergencySupport_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ims_EmergencySupport_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ims_EmergencySupport_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ims_EmergencySupport_r9_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ims_EmergencySupport_r9_value2enum_2[] = { + { 0, 4, "true" } +}; +static const unsigned int asn_MAP_ims_EmergencySupport_r9_enum2value_2[] = { + 0 /* true(0) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_ims_EmergencySupport_r9_specs_2 = { + asn_MAP_ims_EmergencySupport_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_ims_EmergencySupport_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ims_EmergencySupport_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ims_EmergencySupport_r9_2 = { + "ims-EmergencySupport-r9", + "ims-EmergencySupport-r9", + ims_EmergencySupport_r9_2_free, + ims_EmergencySupport_r9_2_print, + ims_EmergencySupport_r9_2_constraint, + ims_EmergencySupport_r9_2_decode_ber, + ims_EmergencySupport_r9_2_encode_der, + ims_EmergencySupport_r9_2_decode_xer, + ims_EmergencySupport_r9_2_encode_xer, + ims_EmergencySupport_r9_2_decode_uper, + ims_EmergencySupport_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ims_EmergencySupport_r9_tags_2, + sizeof(asn_DEF_ims_EmergencySupport_r9_tags_2) + /sizeof(asn_DEF_ims_EmergencySupport_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_ims_EmergencySupport_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_ims_EmergencySupport_r9_tags_2) + /sizeof(asn_DEF_ims_EmergencySupport_r9_tags_2[0]), /* 2 */ + &asn_PER_type_ims_EmergencySupport_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ims_EmergencySupport_r9_specs_2 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_5 = { + sizeof(struct nonCriticalExtension), + offsetof(struct nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_5 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_5, + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_5, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType1_v920_IEs_1[] = { + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType1_v920_IEs, ims_EmergencySupport_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ims_EmergencySupport_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ims-EmergencySupport-r9" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType1_v920_IEs, cellSelectionInfo_v920), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellSelectionInfo_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellSelectionInfo-v920" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_nonCriticalExtension_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_SystemInformationBlockType1_v920_IEs_oms_1[] = { 0, 1, 2 }; +static const ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ims-EmergencySupport-r9 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellSelectionInfo-v920 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType1_v920_IEs_specs_1 = { + sizeof(struct SystemInformationBlockType1_v920_IEs), + offsetof(struct SystemInformationBlockType1_v920_IEs, _asn_ctx), + asn_MAP_SystemInformationBlockType1_v920_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType1_v920_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType1_v920_IEs = { + "SystemInformationBlockType1-v920-IEs", + "SystemInformationBlockType1-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1, + sizeof(asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType1_v920_IEs_1, + 3, /* Elements count */ + &asn_SPC_SystemInformationBlockType1_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h new file mode 100644 index 000000000..663f48585 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SystemInformationBlockType1_v920_IEs_H_ +#define _SystemInformationBlockType1_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ims_EmergencySupport_r9 { + ims_EmergencySupport_r9_true = 0 +} e_ims_EmergencySupport_r9; + +/* Forward declarations */ +struct CellSelectionInfo_v920; + +/* SystemInformationBlockType1-v920-IEs */ +typedef struct SystemInformationBlockType1_v920_IEs { + long *ims_EmergencySupport_r9 /* OPTIONAL */; + struct CellSelectionInfo_v920 *cellSelectionInfo_v920 /* OPTIONAL */; + struct nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType1_v920_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_ims_EmergencySupport_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType1_v920_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellSelectionInfo-v920.h" + +#endif /* _SystemInformationBlockType1_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType1.c b/lte/rrc/asn/SystemInformationBlockType1.c new file mode 100644 index 000000000..3637e305a --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType1.c @@ -0,0 +1,841 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "SystemInformationBlockType1.h" + +static int +cellBarred_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cellBarred_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cellBarred_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cellBarred_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cellBarred_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cellBarred_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cellBarred_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cellBarred_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cellBarred_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cellBarred_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cellBarred_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cellBarred_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +intraFreqReselection_9_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +intraFreqReselection_9_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +intraFreqReselection_9_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +intraFreqReselection_9_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +intraFreqReselection_9_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +intraFreqReselection_9_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +intraFreqReselection_9_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +intraFreqReselection_9_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +intraFreqReselection_9_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +intraFreqReselection_9_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + intraFreqReselection_9_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_q_RxLevMinOffset_constraint_14(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +si_WindowLength_21_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +si_WindowLength_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +si_WindowLength_21_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +si_WindowLength_21_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +si_WindowLength_21_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +si_WindowLength_21_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +si_WindowLength_21_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +si_WindowLength_21_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +si_WindowLength_21_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +si_WindowLength_21_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + si_WindowLength_21_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_freqBandIndicator_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 64)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_systemInfoValueTag_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_cellBarred_constr_6 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_intraFreqReselection_constr_9 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_q_RxLevMinOffset_constr_16 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_si_WindowLength_constr_21 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_freqBandIndicator_constr_18 GCC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (1..64) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_systemInfoValueTag_constr_29 GCC_NOTUSED = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_cellBarred_value2enum_6[] = { + { 0, 6, "barred" }, + { 1, 9, "notBarred" } +}; +static const unsigned int asn_MAP_cellBarred_enum2value_6[] = { + 0, /* barred(0) */ + 1 /* notBarred(1) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_cellBarred_specs_6 = { + asn_MAP_cellBarred_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_cellBarred_enum2value_6, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_cellBarred_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellBarred_6 = { + "cellBarred", + "cellBarred", + cellBarred_6_free, + cellBarred_6_print, + cellBarred_6_constraint, + cellBarred_6_decode_ber, + cellBarred_6_encode_der, + cellBarred_6_decode_xer, + cellBarred_6_encode_xer, + cellBarred_6_decode_uper, + cellBarred_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellBarred_tags_6, + sizeof(asn_DEF_cellBarred_tags_6) + /sizeof(asn_DEF_cellBarred_tags_6[0]) - 1, /* 1 */ + asn_DEF_cellBarred_tags_6, /* Same as above */ + sizeof(asn_DEF_cellBarred_tags_6) + /sizeof(asn_DEF_cellBarred_tags_6[0]), /* 2 */ + &asn_PER_type_cellBarred_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cellBarred_specs_6 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_intraFreqReselection_value2enum_9[] = { + { 0, 7, "allowed" }, + { 1, 10, "notAllowed" } +}; +static const unsigned int asn_MAP_intraFreqReselection_enum2value_9[] = { + 0, /* allowed(0) */ + 1 /* notAllowed(1) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_intraFreqReselection_specs_9 = { + asn_MAP_intraFreqReselection_value2enum_9, /* "tag" => N; sorted by tag */ + asn_MAP_intraFreqReselection_enum2value_9, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_intraFreqReselection_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_intraFreqReselection_9 = { + "intraFreqReselection", + "intraFreqReselection", + intraFreqReselection_9_free, + intraFreqReselection_9_print, + intraFreqReselection_9_constraint, + intraFreqReselection_9_decode_ber, + intraFreqReselection_9_encode_der, + intraFreqReselection_9_decode_xer, + intraFreqReselection_9_encode_xer, + intraFreqReselection_9_decode_uper, + intraFreqReselection_9_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_intraFreqReselection_tags_9, + sizeof(asn_DEF_intraFreqReselection_tags_9) + /sizeof(asn_DEF_intraFreqReselection_tags_9[0]) - 1, /* 1 */ + asn_DEF_intraFreqReselection_tags_9, /* Same as above */ + sizeof(asn_DEF_intraFreqReselection_tags_9) + /sizeof(asn_DEF_intraFreqReselection_tags_9[0]), /* 2 */ + &asn_PER_type_intraFreqReselection_constr_9, + 0, 0, /* Defined elsewhere */ + &asn_SPC_intraFreqReselection_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, plmn_IdentityList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_IdentityList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-IdentityList" + }, + { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, trackingAreaCode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TrackingAreaCode, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "trackingAreaCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, cellIdentity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIdentity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, cellBarred), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cellBarred_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellBarred" + }, + { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, intraFreqReselection), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_intraFreqReselection_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraFreqReselection" + }, + { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, csg_Indication), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-Indication" + }, + { ATF_POINTER, 1, offsetof(struct cellAccessRelatedInfo, csg_Identity), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSG_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-Identity" + }, +}; +static const int asn_MAP_cellAccessRelatedInfo_oms_2[] = { 6 }; +static const ber_tlv_tag_t asn_DEF_cellAccessRelatedInfo_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cellAccessRelatedInfo_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-IdentityList */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* trackingAreaCode */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* cellBarred */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* intraFreqReselection */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* csg-Indication */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* csg-Identity */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cellAccessRelatedInfo_specs_2 = { + sizeof(struct cellAccessRelatedInfo), + offsetof(struct cellAccessRelatedInfo, _asn_ctx), + asn_MAP_cellAccessRelatedInfo_tag2el_2, + 7, /* Count of tags in the map */ + asn_MAP_cellAccessRelatedInfo_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellAccessRelatedInfo_2 = { + "cellAccessRelatedInfo", + "cellAccessRelatedInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellAccessRelatedInfo_tags_2, + sizeof(asn_DEF_cellAccessRelatedInfo_tags_2) + /sizeof(asn_DEF_cellAccessRelatedInfo_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellAccessRelatedInfo_tags_2, /* Same as above */ + sizeof(asn_DEF_cellAccessRelatedInfo_tags_2) + /sizeof(asn_DEF_cellAccessRelatedInfo_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cellAccessRelatedInfo_2, + 7, /* Elements count */ + &asn_SPC_cellAccessRelatedInfo_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cellSelectionInfo_14[] = { + { ATF_NOFLAGS, 0, offsetof(struct cellSelectionInfo, q_RxLevMin), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_RxLevMin, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-RxLevMin" + }, + { ATF_POINTER, 1, offsetof(struct cellSelectionInfo, q_RxLevMinOffset), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_q_RxLevMinOffset_constraint_14, + &asn_PER_memb_q_RxLevMinOffset_constr_16, + 0, + "q-RxLevMinOffset" + }, +}; +static const int asn_MAP_cellSelectionInfo_oms_14[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_cellSelectionInfo_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_cellSelectionInfo_tag2el_14[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-RxLevMin */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-RxLevMinOffset */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cellSelectionInfo_specs_14 = { + sizeof(struct cellSelectionInfo), + offsetof(struct cellSelectionInfo, _asn_ctx), + asn_MAP_cellSelectionInfo_tag2el_14, + 2, /* Count of tags in the map */ + asn_MAP_cellSelectionInfo_oms_14, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellSelectionInfo_14 = { + "cellSelectionInfo", + "cellSelectionInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellSelectionInfo_tags_14, + sizeof(asn_DEF_cellSelectionInfo_tags_14) + /sizeof(asn_DEF_cellSelectionInfo_tags_14[0]) - 1, /* 1 */ + asn_DEF_cellSelectionInfo_tags_14, /* Same as above */ + sizeof(asn_DEF_cellSelectionInfo_tags_14) + /sizeof(asn_DEF_cellSelectionInfo_tags_14[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cellSelectionInfo_14, + 2, /* Elements count */ + &asn_SPC_cellSelectionInfo_specs_14 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_si_WindowLength_value2enum_21[] = { + { 0, 3, "ms1" }, + { 1, 3, "ms2" }, + { 2, 3, "ms5" }, + { 3, 4, "ms10" }, + { 4, 4, "ms15" }, + { 5, 4, "ms20" }, + { 6, 4, "ms40" } +}; +static const unsigned int asn_MAP_si_WindowLength_enum2value_21[] = { + 0, /* ms1(0) */ + 3, /* ms10(3) */ + 4, /* ms15(4) */ + 1, /* ms2(1) */ + 5, /* ms20(5) */ + 6, /* ms40(6) */ + 2 /* ms5(2) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_si_WindowLength_specs_21 = { + asn_MAP_si_WindowLength_value2enum_21, /* "tag" => N; sorted by tag */ + asn_MAP_si_WindowLength_enum2value_21, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_si_WindowLength_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_si_WindowLength_21 = { + "si-WindowLength", + "si-WindowLength", + si_WindowLength_21_free, + si_WindowLength_21_print, + si_WindowLength_21_constraint, + si_WindowLength_21_decode_ber, + si_WindowLength_21_encode_der, + si_WindowLength_21_decode_xer, + si_WindowLength_21_encode_xer, + si_WindowLength_21_decode_uper, + si_WindowLength_21_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_si_WindowLength_tags_21, + sizeof(asn_DEF_si_WindowLength_tags_21) + /sizeof(asn_DEF_si_WindowLength_tags_21[0]) - 1, /* 1 */ + asn_DEF_si_WindowLength_tags_21, /* Same as above */ + sizeof(asn_DEF_si_WindowLength_tags_21) + /sizeof(asn_DEF_si_WindowLength_tags_21[0]), /* 2 */ + &asn_PER_type_si_WindowLength_constr_21, + 0, 0, /* Defined elsewhere */ + &asn_SPC_si_WindowLength_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType1_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1, cellAccessRelatedInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellAccessRelatedInfo_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellAccessRelatedInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1, cellSelectionInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cellSelectionInfo_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellSelectionInfo" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1, p_Max), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_P_Max, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p-Max" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1, freqBandIndicator), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_freqBandIndicator_constraint_1, + &asn_PER_memb_freqBandIndicator_constr_18, + 0, + "freqBandIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1, schedulingInfoList), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SchedulingInfoList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "schedulingInfoList" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1, tdd_Config), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TDD_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tdd-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1, si_WindowLength), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_si_WindowLength_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "si-WindowLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1, systemInfoValueTag), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_systemInfoValueTag_constraint_1, + &asn_PER_memb_systemInfoValueTag_constr_29, + 0, + "systemInfoValueTag" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType1_v890_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_SystemInformationBlockType1_oms_1[] = { 2, 5, 8 }; +static const ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellAccessRelatedInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellSelectionInfo */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* p-Max */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* freqBandIndicator */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* schedulingInfoList */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* tdd-Config */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* si-WindowLength */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* systemInfoValueTag */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType1_specs_1 = { + sizeof(struct SystemInformationBlockType1), + offsetof(struct SystemInformationBlockType1, _asn_ctx), + asn_MAP_SystemInformationBlockType1_tag2el_1, + 9, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType1_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType1 = { + "SystemInformationBlockType1", + "SystemInformationBlockType1", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType1_tags_1, + sizeof(asn_DEF_SystemInformationBlockType1_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType1_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType1_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType1_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType1_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType1_1, + 9, /* Elements count */ + &asn_SPC_SystemInformationBlockType1_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType1.h b/lte/rrc/asn/SystemInformationBlockType1.h new file mode 100644 index 000000000..2050012bf --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType1.h @@ -0,0 +1,101 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _SystemInformationBlockType1_H_ +#define _SystemInformationBlockType1_H_ + + +#include + +/* Including external dependencies */ +#include "P-Max.h" +#include +#include "SchedulingInfoList.h" +#include +#include "PLMN-IdentityList.h" +#include "TrackingAreaCode.h" +#include "CellIdentity.h" +#include +#include "CSG-Identity.h" +#include +#include "Q-RxLevMin.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum cellBarred { + cellBarred_barred = 0, + cellBarred_notBarred = 1 +} e_cellBarred; +typedef enum intraFreqReselection { + intraFreqReselection_allowed = 0, + intraFreqReselection_notAllowed = 1 +} e_intraFreqReselection; +typedef enum si_WindowLength { + si_WindowLength_ms1 = 0, + si_WindowLength_ms2 = 1, + si_WindowLength_ms5 = 2, + si_WindowLength_ms10 = 3, + si_WindowLength_ms15 = 4, + si_WindowLength_ms20 = 5, + si_WindowLength_ms40 = 6 +} e_si_WindowLength; + +/* Forward declarations */ +struct TDD_Config; +struct SystemInformationBlockType1_v890_IEs; + +/* SystemInformationBlockType1 */ +typedef struct SystemInformationBlockType1 { + struct cellAccessRelatedInfo { + PLMN_IdentityList_t plmn_IdentityList; + TrackingAreaCode_t trackingAreaCode; + CellIdentity_t cellIdentity; + long cellBarred; + long intraFreqReselection; + BOOLEAN_t csg_Indication; + CSG_Identity_t *csg_Identity /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellAccessRelatedInfo; + struct cellSelectionInfo { + Q_RxLevMin_t q_RxLevMin; + long *q_RxLevMinOffset /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellSelectionInfo; + P_Max_t *p_Max /* OPTIONAL */; + long freqBandIndicator; + SchedulingInfoList_t schedulingInfoList; + struct TDD_Config *tdd_Config /* OPTIONAL */; + long si_WindowLength; + long systemInfoValueTag; + struct SystemInformationBlockType1_v890_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType1_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cellBarred_6; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_intraFreqReselection_9; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_si_WindowLength_21; // (Use -fall-defs-global to expose) */ +LIBLTE_API extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType1; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "TDD-Config.h" +#include "SystemInformationBlockType1-v890-IEs.h" + +#endif /* _SystemInformationBlockType1_H_ */ +#include diff --git a/lte/rrc/asn/TDD-Config.c b/lte/rrc/asn/TDD-Config.c new file mode 100644 index 000000000..5af093c36 --- /dev/null +++ b/lte/rrc/asn/TDD-Config.c @@ -0,0 +1,373 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "TDD-Config.h" + +static int +subframeAssignment_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +subframeAssignment_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +subframeAssignment_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +subframeAssignment_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +subframeAssignment_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +subframeAssignment_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +subframeAssignment_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +subframeAssignment_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +subframeAssignment_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +subframeAssignment_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + subframeAssignment_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +specialSubframePatterns_10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +specialSubframePatterns_10_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +specialSubframePatterns_10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +specialSubframePatterns_10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +specialSubframePatterns_10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +specialSubframePatterns_10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +specialSubframePatterns_10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +specialSubframePatterns_10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +specialSubframePatterns_10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +specialSubframePatterns_10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + specialSubframePatterns_10_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_subframeAssignment_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_specialSubframePatterns_constr_10 GCC_NOTUSED = { + { APC_CONSTRAINED, 4, 4, 0, 8 } /* (0..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_subframeAssignment_value2enum_2[] = { + { 0, 3, "sa0" }, + { 1, 3, "sa1" }, + { 2, 3, "sa2" }, + { 3, 3, "sa3" }, + { 4, 3, "sa4" }, + { 5, 3, "sa5" }, + { 6, 3, "sa6" } +}; +static const unsigned int asn_MAP_subframeAssignment_enum2value_2[] = { + 0, /* sa0(0) */ + 1, /* sa1(1) */ + 2, /* sa2(2) */ + 3, /* sa3(3) */ + 4, /* sa4(4) */ + 5, /* sa5(5) */ + 6 /* sa6(6) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_subframeAssignment_specs_2 = { + asn_MAP_subframeAssignment_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_subframeAssignment_enum2value_2, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_subframeAssignment_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_subframeAssignment_2 = { + "subframeAssignment", + "subframeAssignment", + subframeAssignment_2_free, + subframeAssignment_2_print, + subframeAssignment_2_constraint, + subframeAssignment_2_decode_ber, + subframeAssignment_2_encode_der, + subframeAssignment_2_decode_xer, + subframeAssignment_2_encode_xer, + subframeAssignment_2_decode_uper, + subframeAssignment_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_subframeAssignment_tags_2, + sizeof(asn_DEF_subframeAssignment_tags_2) + /sizeof(asn_DEF_subframeAssignment_tags_2[0]) - 1, /* 1 */ + asn_DEF_subframeAssignment_tags_2, /* Same as above */ + sizeof(asn_DEF_subframeAssignment_tags_2) + /sizeof(asn_DEF_subframeAssignment_tags_2[0]), /* 2 */ + &asn_PER_type_subframeAssignment_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_subframeAssignment_specs_2 /* Additional specs */ +}; + +static const asn_INTEGER_enum_map_t asn_MAP_specialSubframePatterns_value2enum_10[] = { + { 0, 4, "ssp0" }, + { 1, 4, "ssp1" }, + { 2, 4, "ssp2" }, + { 3, 4, "ssp3" }, + { 4, 4, "ssp4" }, + { 5, 4, "ssp5" }, + { 6, 4, "ssp6" }, + { 7, 4, "ssp7" }, + { 8, 4, "ssp8" } +}; +static const unsigned int asn_MAP_specialSubframePatterns_enum2value_10[] = { + 0, /* ssp0(0) */ + 1, /* ssp1(1) */ + 2, /* ssp2(2) */ + 3, /* ssp3(3) */ + 4, /* ssp4(4) */ + 5, /* ssp5(5) */ + 6, /* ssp6(6) */ + 7, /* ssp7(7) */ + 8 /* ssp8(8) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_specialSubframePatterns_specs_10 = { + asn_MAP_specialSubframePatterns_value2enum_10, /* "tag" => N; sorted by tag */ + asn_MAP_specialSubframePatterns_enum2value_10, /* N => "tag"; sorted by N */ + 9, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_specialSubframePatterns_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_specialSubframePatterns_10 = { + "specialSubframePatterns", + "specialSubframePatterns", + specialSubframePatterns_10_free, + specialSubframePatterns_10_print, + specialSubframePatterns_10_constraint, + specialSubframePatterns_10_decode_ber, + specialSubframePatterns_10_encode_der, + specialSubframePatterns_10_decode_xer, + specialSubframePatterns_10_encode_xer, + specialSubframePatterns_10_decode_uper, + specialSubframePatterns_10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_specialSubframePatterns_tags_10, + sizeof(asn_DEF_specialSubframePatterns_tags_10) + /sizeof(asn_DEF_specialSubframePatterns_tags_10[0]) - 1, /* 1 */ + asn_DEF_specialSubframePatterns_tags_10, /* Same as above */ + sizeof(asn_DEF_specialSubframePatterns_tags_10) + /sizeof(asn_DEF_specialSubframePatterns_tags_10[0]), /* 2 */ + &asn_PER_type_specialSubframePatterns_constr_10, + 0, 0, /* Defined elsewhere */ + &asn_SPC_specialSubframePatterns_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_TDD_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TDD_Config, subframeAssignment), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_subframeAssignment_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "subframeAssignment" + }, + { ATF_NOFLAGS, 0, offsetof(struct TDD_Config, specialSubframePatterns), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_specialSubframePatterns_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "specialSubframePatterns" + }, +}; +static const ber_tlv_tag_t asn_DEF_TDD_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_TDD_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeAssignment */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* specialSubframePatterns */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_TDD_Config_specs_1 = { + sizeof(struct TDD_Config), + offsetof(struct TDD_Config, _asn_ctx), + asn_MAP_TDD_Config_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_TDD_Config = { + "TDD-Config", + "TDD-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TDD_Config_tags_1, + sizeof(asn_DEF_TDD_Config_tags_1) + /sizeof(asn_DEF_TDD_Config_tags_1[0]), /* 1 */ + asn_DEF_TDD_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_TDD_Config_tags_1) + /sizeof(asn_DEF_TDD_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_TDD_Config_1, + 2, /* Elements count */ + &asn_SPC_TDD_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TDD-Config.h b/lte/rrc/asn/TDD-Config.h new file mode 100644 index 000000000..9c66808a3 --- /dev/null +++ b/lte/rrc/asn/TDD-Config.h @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _TDD_Config_H_ +#define _TDD_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum subframeAssignment { + subframeAssignment_sa0 = 0, + subframeAssignment_sa1 = 1, + subframeAssignment_sa2 = 2, + subframeAssignment_sa3 = 3, + subframeAssignment_sa4 = 4, + subframeAssignment_sa5 = 5, + subframeAssignment_sa6 = 6 +} e_subframeAssignment; +typedef enum specialSubframePatterns { + specialSubframePatterns_ssp0 = 0, + specialSubframePatterns_ssp1 = 1, + specialSubframePatterns_ssp2 = 2, + specialSubframePatterns_ssp3 = 3, + specialSubframePatterns_ssp4 = 4, + specialSubframePatterns_ssp5 = 5, + specialSubframePatterns_ssp6 = 6, + specialSubframePatterns_ssp7 = 7, + specialSubframePatterns_ssp8 = 8 +} e_specialSubframePatterns; + +/* TDD-Config */ +typedef struct TDD_Config { + long subframeAssignment; + long specialSubframePatterns; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TDD_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_subframeAssignment_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_specialSubframePatterns_10; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_TDD_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _TDD_Config_H_ */ +#include diff --git a/lte/rrc/asn/TrackingAreaCode.c b/lte/rrc/asn/TrackingAreaCode.c new file mode 100644 index 000000000..5589e9e23 --- /dev/null +++ b/lte/rrc/asn/TrackingAreaCode.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "TrackingAreaCode.h" + +int +TrackingAreaCode_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +TrackingAreaCode_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->check_constraints = asn_DEF_BIT_STRING.check_constraints; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +TrackingAreaCode_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +TrackingAreaCode_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +TrackingAreaCode_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +TrackingAreaCode_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +TrackingAreaCode_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +TrackingAreaCode_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +TrackingAreaCode_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +TrackingAreaCode_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + TrackingAreaCode_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_TrackingAreaCode_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_TrackingAreaCode_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TrackingAreaCode = { + "TrackingAreaCode", + "TrackingAreaCode", + TrackingAreaCode_free, + TrackingAreaCode_print, + TrackingAreaCode_constraint, + TrackingAreaCode_decode_ber, + TrackingAreaCode_encode_der, + TrackingAreaCode_decode_xer, + TrackingAreaCode_encode_xer, + TrackingAreaCode_decode_uper, + TrackingAreaCode_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TrackingAreaCode_tags_1, + sizeof(asn_DEF_TrackingAreaCode_tags_1) + /sizeof(asn_DEF_TrackingAreaCode_tags_1[0]), /* 1 */ + asn_DEF_TrackingAreaCode_tags_1, /* Same as above */ + sizeof(asn_DEF_TrackingAreaCode_tags_1) + /sizeof(asn_DEF_TrackingAreaCode_tags_1[0]), /* 1 */ + &asn_PER_type_TrackingAreaCode_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/TrackingAreaCode.h b/lte/rrc/asn/TrackingAreaCode.h new file mode 100644 index 000000000..aa055f5e4 --- /dev/null +++ b/lte/rrc/asn/TrackingAreaCode.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _TrackingAreaCode_H_ +#define _TrackingAreaCode_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* TrackingAreaCode */ +typedef BIT_STRING_t TrackingAreaCode_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TrackingAreaCode; +asn_struct_free_f TrackingAreaCode_free; +asn_struct_print_f TrackingAreaCode_print; +asn_constr_check_f TrackingAreaCode_constraint; +ber_type_decoder_f TrackingAreaCode_decode_ber; +der_type_encoder_f TrackingAreaCode_encode_der; +xer_type_decoder_f TrackingAreaCode_decode_xer; +xer_type_encoder_f TrackingAreaCode_encode_xer; +per_type_decoder_f TrackingAreaCode_decode_uper; +per_type_encoder_f TrackingAreaCode_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TrackingAreaCode_H_ */ +#include diff --git a/lte/rrc/asn/asn_SEQUENCE_OF.c b/lte/rrc/asn/asn_SEQUENCE_OF.c new file mode 100644 index 000000000..ec952fc99 --- /dev/null +++ b/lte/rrc/asn/asn_SEQUENCE_OF.c @@ -0,0 +1,41 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include + +typedef A_SEQUENCE_OF(void) asn_sequence; + +void +asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free) { + asn_sequence *as = (asn_sequence *)asn_sequence_of_x; + + if(as) { + void *ptr; + int n; + + if(number < 0 || number >= as->count) + return; /* Nothing to delete */ + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + /* + * Shift all elements to the left to hide the gap. + */ + --as->count; + for(n = number; n < as->count; n++) + as->array[n] = as->array[n+1]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + diff --git a/lte/rrc/asn/asn_SEQUENCE_OF.h b/lte/rrc/asn/asn_SEQUENCE_OF.h new file mode 100644 index 000000000..e678f0347 --- /dev/null +++ b/lte/rrc/asn/asn_SEQUENCE_OF.h @@ -0,0 +1,52 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SEQUENCE_OF_H +#define ASN_SEQUENCE_OF_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * SEQUENCE OF is the same as SET OF with a tiny difference: + * the delete operation preserves the initial order of elements + * and thus MAY operate in non-constant time. + */ +#define A_SEQUENCE_OF(type) A_SET_OF(type) + +#define ASN_SEQUENCE_ADD(headptr, ptr) \ + asn_sequence_add((headptr), (ptr)) + +/*********************************************** + * Implementation of the SEQUENCE OF structure. + */ + +#define asn_sequence_add asn_set_add +#define asn_sequence_empty asn_set_empty + +/* + * Delete the element from the set by its number (base 0). + * This is NOT a constant-time operation. + * The order of elements is preserved. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_sequence_del(void *asn_sequence_of_x, int number, int _do_free); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SEQUENCE_OF(void) asn_anonymous_sequence_; +#define _A_SEQUENCE_FROM_VOID(ptr) ((asn_anonymous_sequence_ *)(ptr)) +#define _A_CSEQUENCE_FROM_VOID(ptr) ((const asn_anonymous_sequence_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SEQUENCE_OF_H */ diff --git a/lte/rrc/asn/asn_SET_OF.c b/lte/rrc/asn/asn_SET_OF.c new file mode 100644 index 000000000..944f2cb8a --- /dev/null +++ b/lte/rrc/asn/asn_SET_OF.c @@ -0,0 +1,88 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Add another element into the set. + */ +int +asn_set_add(void *asn_set_of_x, void *ptr) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as == 0 || ptr == 0) { + errno = EINVAL; /* Invalid arguments */ + return -1; + } + + /* + * Make sure there's enough space to insert an element. + */ + if(as->count == as->size) { + int _newsize = as->size ? (as->size << 1) : 4; + void *_new_arr; + _new_arr = REALLOC(as->array, _newsize * sizeof(as->array[0])); + if(_new_arr) { + as->array = (void **)_new_arr; + as->size = _newsize; + } else { + /* ENOMEM */ + return -1; + } + } + + as->array[as->count++] = ptr; + + return 0; +} + +void +asn_set_del(void *asn_set_of_x, int number, int _do_free) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + void *ptr; + if(number < 0 || number >= as->count) + return; + + if(_do_free && as->free) { + ptr = as->array[number]; + } else { + ptr = 0; + } + + as->array[number] = as->array[--as->count]; + + /* + * Invoke the third-party function only when the state + * of the parent structure is consistent. + */ + if(ptr) as->free(ptr); + } +} + +/* + * Free the contents of the set, do not free the set itself. + */ +void +asn_set_empty(void *asn_set_of_x) { + asn_anonymous_set_ *as = _A_SET_FROM_VOID(asn_set_of_x); + + if(as) { + if(as->array) { + if(as->free) { + while(as->count--) + as->free(as->array[as->count]); + } + FREEMEM(as->array); + as->array = 0; + } + as->count = 0; + as->size = 0; + } + +} + diff --git a/lte/rrc/asn/asn_SET_OF.h b/lte/rrc/asn/asn_SET_OF.h new file mode 100644 index 000000000..19501a054 --- /dev/null +++ b/lte/rrc/asn/asn_SET_OF.h @@ -0,0 +1,62 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_SET_OF_H +#define ASN_SET_OF_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define A_SET_OF(type) \ + struct { \ + type **array; \ + int count; /* Meaningful size */ \ + int size; /* Allocated size */ \ + void (*free)(type *); \ + } + +#define ASN_SET_ADD(headptr, ptr) \ + asn_set_add((headptr), (ptr)) + +/******************************************* + * Implementation of the SET OF structure. + */ + +/* + * Add another structure into the set by its pointer. + * RETURN VALUES: + * 0 for success and -1/errno for failure. + */ +LIBLTE_API int asn_set_add(void *asn_set_of_x, void *ptr); + +/* + * Delete the element from the set by its number (base 0). + * This is a constant-time operation. The order of elements before the + * deleted ones is guaranteed, the order of elements after the deleted + * one is NOT guaranteed. + * If _do_free is given AND the (*free) is initialized, the element + * will be freed using the custom (*free) function as well. + */ +void asn_set_del(void *asn_set_of_x, int number, int _do_free); + +/* + * Empty the contents of the set. Will free the elements, if (*free) is given. + * Will NOT free the set itself. + */ +LIBLTE_API void asn_set_empty(void *asn_set_of_x); + +/* + * Cope with different conversions requirements to/from void in C and C++. + * This is mostly useful for support library. + */ +typedef A_SET_OF(void) asn_anonymous_set_; +#define _A_SET_FROM_VOID(ptr) ((asn_anonymous_set_ *)(ptr)) +#define _A_CSET_FROM_VOID(ptr) ((const asn_anonymous_set_ *)(ptr)) + +#ifdef __cplusplus +} +#endif + +#endif /* ASN_SET_OF_H */ diff --git a/lte/rrc/asn/constr_SEQUENCE_OF.c b/lte/rrc/asn/constr_SEQUENCE_OF.c new file mode 100644 index 000000000..aa101176d --- /dev/null +++ b/lte/rrc/asn/constr_SEQUENCE_OF.c @@ -0,0 +1,208 @@ +/*- + * Copyright (c) 2003, 2004, 2006 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * The DER encoder of the SEQUENCE OF type. + */ +asn_enc_rval_t +SEQUENCE_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + asn_enc_rval_t erval; + int edx; + + ASN_DEBUG("Estimating size of SEQUENCE OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + computed_size += encoding_size; + if(!cb) { + erval.encoded = computed_size; + _ASN_ENCODED_OK(erval); + } + + ASN_DEBUG("Encoding members of SEQUENCE OF %s", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = elm->type->der_encoder(elm->type, memb_ptr, + 0, elm->tag, + cb, app_key); + if(erval.encoded == -1) + return erval; + encoding_size += erval.encoded; + } + + if(computed_size != (size_t)encoding_size) { + /* + * Encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + erval.structure_ptr = 0; + erval.failed_type = 0; + } + + return erval; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er; + asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_sequence_ *list = _A_SEQUENCE_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + unsigned int mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + int i; + + if(!sptr) _ASN_ENCODE_FAILED; + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper; + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(mname) { + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); + _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + tmper = elm->type->xer_encoder(elm->type, memb_ptr, + ilevel + 1, flags, cb, app_key); + if(tmper.encoded == -1) return tmper; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel + 1); + _ASN_CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + _ASN_CALLBACK3("", 1); + er.encoded += 5; + } + + er.encoded += (2 * mlen) + tmper.encoded; + } + + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); + + _ASN_ENCODED_OK(er); +cb_failed: + _ASN_ENCODE_FAILED; +} + +asn_enc_rval_t +SEQUENCE_OF_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { + asn_anonymous_sequence_ *list; + asn_per_constraint_t *ct; + asn_enc_rval_t er; + asn_TYPE_member_t *elm = td->elements; + int seq; + + if(!sptr) _ASN_ENCODE_FAILED; + list = _A_SEQUENCE_FROM_VOID(sptr); + + er.encoded = 0; + + ASN_DEBUG("Encoding %s as SEQUENCE OF (%d)", td->name, list->count); + + if(constraints) ct = &constraints->size; + else if(td->per_constraints) ct = &td->per_constraints->size; + else ct = 0; + + /* If extensible constraint, check if size is in root */ + if(ct) { + int not_in_root = (list->count < ct->lower_bound + || list->count > ct->upper_bound); + ASN_DEBUG("lb %ld ub %ld %s", + ct->lower_bound, ct->upper_bound, + ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); + if(ct->flags & APC_EXTENSIBLE) { + /* Declare whether size is in extension root */ + if(per_put_few_bits(po, not_in_root, 1)) + _ASN_ENCODE_FAILED; + if(not_in_root) ct = 0; + } else if(not_in_root && ct->effective_bits >= 0) + _ASN_ENCODE_FAILED; + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + if(per_put_few_bits(po, list->count - ct->lower_bound, + ct->effective_bits)) + _ASN_ENCODE_FAILED; + } + + for(seq = -1; seq < list->count;) { + ssize_t mayEncode; + if(seq < 0) seq = 0; + if(ct && ct->effective_bits >= 0) { + mayEncode = list->count; + } else { + mayEncode = uper_put_length(po, list->count - seq); + if(mayEncode < 0) _ASN_ENCODE_FAILED; + } + + while(mayEncode--) { + void *memb_ptr = list->array[seq++]; + if(!memb_ptr) _ASN_ENCODE_FAILED; + er = elm->type->uper_encoder(elm->type, + elm->per_constraints, memb_ptr, po); + if(er.encoded == -1) + _ASN_ENCODE_FAILED; + } + } + + _ASN_ENCODED_OK(er); +} + diff --git a/lte/rrc/asn/constr_SEQUENCE_OF.h b/lte/rrc/asn/constr_SEQUENCE_OF.h new file mode 100644 index 000000000..e2272f326 --- /dev/null +++ b/lte/rrc/asn/constr_SEQUENCE_OF.h @@ -0,0 +1,33 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SEQUENCE_OF_H_ +#define _CONSTR_SEQUENCE_OF_H_ + +#include +#include /* Implemented using SET OF */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * A set specialized functions dealing with the SEQUENCE OF type. + * Generally implemented using SET OF. + */ +#define SEQUENCE_OF_free SET_OF_free +#define SEQUENCE_OF_print SET_OF_print +#define SEQUENCE_OF_constraint SET_OF_constraint +#define SEQUENCE_OF_decode_ber SET_OF_decode_ber +#define SEQUENCE_OF_decode_xer SET_OF_decode_xer +#define SEQUENCE_OF_decode_uper SET_OF_decode_uper +der_type_encoder_f SEQUENCE_OF_encode_der; +xer_type_encoder_f SEQUENCE_OF_encode_xer; +per_type_encoder_f SEQUENCE_OF_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/lte/rrc/asn/constr_SET_OF.c b/lte/rrc/asn/constr_SET_OF.c new file mode 100644 index 000000000..b68d7ca1b --- /dev/null +++ b/lte/rrc/asn/constr_SET_OF.c @@ -0,0 +1,953 @@ +/*- + * Copyright (c) 2003, 2004, 2005 Lev Walkin . + * All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include + +/* + * Number of bytes left for this structure. + * (ctx->left) indicates the number of bytes _transferred_ for the structure. + * (size) contains the number of bytes in the buffer passed. + */ +#define LEFT ((size<(size_t)ctx->left)?size:(size_t)ctx->left) + +/* + * If the subprocessor function returns with an indication that it wants + * more data, it may well be a fatal decoding problem, because the + * size is constrained by the 's L, even if the buffer size allows + * reading more data. + * For example, consider the buffer containing the following TLVs: + * ... + * The TLV length clearly indicates that one byte is expected in V, but + * if the V processor returns with "want more data" even if the buffer + * contains way more data than the V processor have seen. + */ +#define SIZE_VIOLATION (ctx->left >= 0 && (size_t)ctx->left <= size) + +/* + * This macro "eats" the part of the buffer which is definitely "consumed", + * i.e. was correctly converted into local representation or rightfully skipped. + */ +#undef ADVANCE +#define ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + ptr = ((const char *)ptr) + num;\ + size -= num; \ + if(ctx->left >= 0) \ + ctx->left -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Switch to the next phase of parsing. + */ +#undef NEXT_PHASE +#undef PHASE_OUT +#define NEXT_PHASE(ctx) do { \ + ctx->phase++; \ + ctx->step = 0; \ + } while(0) +#define PHASE_OUT(ctx) do { ctx->phase = 10; } while(0) + +/* + * Return a standardized complex structure. + */ +#undef RETURN +#define RETURN(_code) do { \ + rval.code = _code; \ + rval.consumed = consumed_myself;\ + return rval; \ + } while(0) + +/* + * The decoder of the SET OF type. + */ +asn_dec_rval_t +SET_OF_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const void *ptr, size_t size, int tag_mode) { + /* + * Bring closer parts of structure description. + */ + asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; + asn_TYPE_member_t *elm = td->elements; /* Single one */ + + /* + * Parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + ber_tlv_tag_t tlv_tag; /* T from TLV */ + asn_dec_rval_t rval; /* Return code from subparsers */ + + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + ASN_DEBUG("Decoding %s as SET OF", td->name); + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) { + RETURN(RC_FAIL); + } + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Start to parse where left previously + */ + switch(ctx->phase) { + case 0: + /* + * PHASE 0. + * Check that the set of tags associated with given structure + * perfectly fits our expectations. + */ + + rval = ber_check_tags(opt_codec_ctx, td, ctx, ptr, size, + tag_mode, 1, &ctx->left, 0); + if(rval.code != RC_OK) { + ASN_DEBUG("%s tagging check failed: %d", + td->name, rval.code); + return rval; + } + + if(ctx->left >= 0) + ctx->left += rval.consumed; /* ?Substracted below! */ + ADVANCE(rval.consumed); + + ASN_DEBUG("Structure consumes %ld bytes, " + "buffer %ld", (long)ctx->left, (long)size); + + NEXT_PHASE(ctx); + /* Fall through */ + case 1: + /* + * PHASE 1. + * From the place where we've left it previously, + * try to decode the next item. + */ + for(;; ctx->step = 0) { + ssize_t tag_len; /* Length of TLV's T */ + + if(ctx->step & 1) + goto microphase2; + + /* + * MICROPHASE 1: Synchronize decoding. + */ + + if(ctx->left == 0) { + ASN_DEBUG("End of SET OF %s", td->name); + /* + * No more things to decode. + * Exit out of here. + */ + PHASE_OUT(ctx); + RETURN(RC_OK); + } + + /* + * Fetch the T from TLV. + */ + tag_len = ber_fetch_tag(ptr, LEFT, &tlv_tag); + switch(tag_len) { + case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); + /* Fall through */ + case -1: RETURN(RC_FAIL); + } + + if(ctx->left < 0 && ((const uint8_t *)ptr)[0] == 0) { + if(LEFT < 2) { + if(SIZE_VIOLATION) + RETURN(RC_FAIL); + else + RETURN(RC_WMORE); + } else if(((const uint8_t *)ptr)[1] == 0) { + /* + * Found the terminator of the + * indefinite length structure. + */ + break; + } + } + + /* Outmost tag may be unknown and cannot be fetched/compared */ + if(elm->tag != (ber_tlv_tag_t)-1) { + if(BER_TAGS_EQUAL(tlv_tag, elm->tag)) { + /* + * The new list member of expected type has arrived. + */ + } else { + ASN_DEBUG("Unexpected tag %s fixed SET OF %s", + ber_tlv_tag_string(tlv_tag), td->name); + ASN_DEBUG("%s SET OF has tag %s", + td->name, ber_tlv_tag_string(elm->tag)); + RETURN(RC_FAIL); + } + } + + /* + * MICROPHASE 2: Invoke the member-specific decoder. + */ + ctx->step |= 1; /* Confirm entering next microphase */ + microphase2: + + /* + * Invoke the member fetch routine according to member's type + */ + rval = elm->type->ber_decoder(opt_codec_ctx, + elm->type, &ctx->ptr, ptr, LEFT, 0); + ASN_DEBUG("In %s SET OF %s code %d consumed %d", + td->name, elm->type->name, + rval.code, (int)rval.consumed); + switch(rval.code) { + case RC_OK: + { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + else + ctx->ptr = 0; + } + break; + case RC_WMORE: /* More data expected */ + if(!SIZE_VIOLATION) { + ADVANCE(rval.consumed); + RETURN(RC_WMORE); + } + /* Fall through */ + case RC_FAIL: /* Fatal error */ + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + RETURN(RC_FAIL); + } /* switch(rval) */ + + ADVANCE(rval.consumed); + } /* for(all list members) */ + + NEXT_PHASE(ctx); + case 2: + /* + * Read in all "end of content" TLVs. + */ + while(ctx->left < 0) { + if(LEFT < 2) { + if(LEFT > 0 && ((const char *)ptr)[0] != 0) { + /* Unexpected tag */ + RETURN(RC_FAIL); + } else { + RETURN(RC_WMORE); + } + } + if(((const char *)ptr)[0] == 0 + && ((const char *)ptr)[1] == 0) { + ADVANCE(2); + ctx->left++; + } else { + RETURN(RC_FAIL); + } + } + + PHASE_OUT(ctx); + } + + RETURN(RC_OK); +} + +/* + * Internally visible buffer holding a single encoded element. + */ +struct _el_buffer { + uint8_t *buf; + size_t length; + size_t size; +}; +/* Append bytes to the above structure */ +static int _el_addbytes(const void *buffer, size_t size, void *el_buf_ptr) { + struct _el_buffer *el_buf = (struct _el_buffer *)el_buf_ptr; + + if(el_buf->length + size > el_buf->size) + return -1; + + memcpy(el_buf->buf + el_buf->length, buffer, size); + + el_buf->length += size; + return 0; +} +static int _el_buf_cmp(const void *ap, const void *bp) { + const struct _el_buffer *a = (const struct _el_buffer *)ap; + const struct _el_buffer *b = (const struct _el_buffer *)bp; + int ret; + size_t common_len; + + if(a->length < b->length) + common_len = a->length; + else + common_len = b->length; + + ret = memcmp(a->buf, b->buf, common_len); + if(ret == 0) { + if(a->length < b->length) + ret = -1; + else if(a->length > b->length) + ret = 1; + } + + return ret; +} + +/* + * The DER encoder of the SET OF type. + */ +asn_enc_rval_t +SET_OF_encode_der(asn_TYPE_descriptor_t *td, void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + asn_TYPE_descriptor_t *elm_type = elm->type; + der_type_encoder_f *der_encoder = elm_type->der_encoder; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + size_t computed_size = 0; + ssize_t encoding_size = 0; + struct _el_buffer *encoded_els; + ssize_t eels_count = 0; + size_t max_encoded_len = 1; + asn_enc_rval_t erval; + int ret; + int edx; + + ASN_DEBUG("Estimating size for SET OF %s", td->name); + + /* + * Gather the length of the underlying members sequence. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + if(!memb_ptr) continue; + erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, 0, 0); + if(erval.encoded == -1) + return erval; + computed_size += erval.encoded; + + /* Compute maximum encoding's size */ + if(max_encoded_len < (size_t)erval.encoded) + max_encoded_len = erval.encoded; + } + + /* + * Encode the TLV for the sequence itself. + */ + encoding_size = der_write_tags(td, computed_size, tag_mode, 1, tag, + cb, app_key); + if(encoding_size == -1) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + computed_size += encoding_size; + + if(!cb || list->count == 0) { + erval.encoded = computed_size; + _ASN_ENCODED_OK(erval); + } + + /* + * DER mandates dynamic sorting of the SET OF elements + * according to their encodings. Build an array of the + * encoded elements. + */ + encoded_els = (struct _el_buffer *)MALLOC( + list->count * sizeof(encoded_els[0])); + if(encoded_els == NULL) { + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + ASN_DEBUG("Encoding members of %s SET OF", td->name); + + /* + * Encode all members. + */ + for(edx = 0; edx < list->count; edx++) { + void *memb_ptr = list->array[edx]; + struct _el_buffer *encoded_el = &encoded_els[eels_count]; + + if(!memb_ptr) continue; + + /* + * Prepare space for encoding. + */ + encoded_el->buf = (uint8_t *)MALLOC(max_encoded_len); + if(encoded_el->buf) { + encoded_el->length = 0; + encoded_el->size = max_encoded_len; + } else { + for(edx--; edx >= 0; edx--) + FREEMEM(encoded_els[edx].buf); + FREEMEM(encoded_els); + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + return erval; + } + + /* + * Encode the member into the prepared space. + */ + erval = der_encoder(elm_type, memb_ptr, 0, elm->tag, + _el_addbytes, encoded_el); + if(erval.encoded == -1) { + for(; edx >= 0; edx--) + FREEMEM(encoded_els[edx].buf); + FREEMEM(encoded_els); + return erval; + } + encoding_size += erval.encoded; + eels_count++; + } + + /* + * Sort the encoded elements according to their encoding. + */ + qsort(encoded_els, eels_count, sizeof(encoded_els[0]), _el_buf_cmp); + + /* + * Report encoded elements to the application. + * Dispose of temporary sorted members table. + */ + ret = 0; + for(edx = 0; edx < eels_count; edx++) { + struct _el_buffer *encoded_el = &encoded_els[edx]; + /* Report encoded chunks to the application */ + if(ret == 0 + && cb(encoded_el->buf, encoded_el->length, app_key) < 0) + ret = -1; + FREEMEM(encoded_el->buf); + } + FREEMEM(encoded_els); + + if(ret || computed_size != (size_t)encoding_size) { + /* + * Standard callback failed, or + * encoded size is not equal to the computed size. + */ + erval.encoded = -1; + erval.failed_type = td; + erval.structure_ptr = ptr; + } else { + erval.encoded = computed_size; + } + + _ASN_ENCODED_OK(erval); +} + +#undef XER_ADVANCE +#define XER_ADVANCE(num_bytes) do { \ + size_t num = num_bytes; \ + buf_ptr = ((const char *)buf_ptr) + num;\ + size -= num; \ + consumed_myself += num; \ + } while(0) + +/* + * Decode the XER (XML) data. + */ +asn_dec_rval_t +SET_OF_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **struct_ptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + /* + * Bring closer parts of structure description. + */ + asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; + asn_TYPE_member_t *element = td->elements; + const char *elm_tag; + const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; + + /* + * ... and parts of the structure being constructed. + */ + void *st = *struct_ptr; /* Target structure. */ + asn_struct_ctx_t *ctx; /* Decoder context */ + + asn_dec_rval_t rval; /* Return value from a decoder */ + ssize_t consumed_myself = 0; /* Consumed bytes from ptr */ + + /* + * Create the target structure if it is not present already. + */ + if(st == 0) { + st = *struct_ptr = CALLOC(1, specs->struct_size); + if(st == 0) RETURN(RC_FAIL); + } + + /* Which tag is expected for the downstream */ + if(specs->as_XMLValueList) { + elm_tag = (specs->as_XMLValueList == 1) ? 0 : ""; + } else { + elm_tag = (*element->name) + ? element->name : element->type->xml_tag; + } + + /* + * Restore parsing context. + */ + ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); + + /* + * Phases of XER/XML processing: + * Phase 0: Check that the opening tag matches our expectations. + * Phase 1: Processing body and reacting on closing tag. + * Phase 2: Processing inner type. + */ + for(; ctx->phase <= 2;) { + pxer_chunk_type_e ch_type; /* XER chunk type */ + ssize_t ch_size; /* Chunk size */ + xer_check_tag_e tcv; /* Tag check value */ + + /* + * Go inside the inner member of a set. + */ + if(ctx->phase == 2) { + asn_dec_rval_t tmprval; + + /* Invoke the inner type decoder, m.b. multiple times */ + ASN_DEBUG("XER/SET OF element [%s]", elm_tag); + tmprval = element->type->xer_decoder(opt_codec_ctx, + element->type, &ctx->ptr, elm_tag, + buf_ptr, size); + if(tmprval.code == RC_OK) { + asn_anonymous_set_ *list = _A_SET_FROM_VOID(st); + if(ASN_SET_ADD(list, ctx->ptr) != 0) + RETURN(RC_FAIL); + ctx->ptr = 0; + XER_ADVANCE(tmprval.consumed); + } else { + XER_ADVANCE(tmprval.consumed); + RETURN(tmprval.code); + } + ctx->phase = 1; /* Back to body processing */ + ASN_DEBUG("XER/SET OF phase => %d", ctx->phase); + /* Fall through */ + } + + /* + * Get the next part of the XML stream. + */ + ch_size = xer_next_token(&ctx->context, + buf_ptr, size, &ch_type); + switch(ch_size) { + case -1: RETURN(RC_FAIL); + case 0: RETURN(RC_WMORE); + default: + switch(ch_type) { + case PXER_COMMENT: /* Got XML comment */ + case PXER_TEXT: /* Ignore free-standing text */ + XER_ADVANCE(ch_size); /* Skip silently */ + continue; + case PXER_TAG: + break; /* Check the rest down there */ + } + } + + tcv = xer_check_tag(buf_ptr, ch_size, xml_tag); + ASN_DEBUG("XER/SET OF: tcv = %d, ph=%d t=%s", + tcv, ctx->phase, xml_tag); + switch(tcv) { + case XCT_CLOSING: + if(ctx->phase == 0) break; + ctx->phase = 0; + /* Fall through */ + case XCT_BOTH: + if(ctx->phase == 0) { + /* No more things to decode */ + XER_ADVANCE(ch_size); + ctx->phase = 3; /* Phase out */ + RETURN(RC_OK); + } + /* Fall through */ + case XCT_OPENING: + if(ctx->phase == 0) { + XER_ADVANCE(ch_size); + ctx->phase = 1; /* Processing body phase */ + continue; + } + /* Fall through */ + case XCT_UNKNOWN_OP: + case XCT_UNKNOWN_BO: + + ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); + if(ctx->phase == 1) { + /* + * Process a single possible member. + */ + ctx->phase = 2; + continue; + } + /* Fall through */ + default: + break; + } + + ASN_DEBUG("Unexpected XML tag in SET OF"); + break; + } + + ctx->phase = 3; /* "Phase out" on hard failure */ + RETURN(RC_FAIL); +} + + + +typedef struct xer_tmp_enc_s { + void *buffer; + size_t offset; + size_t size; +} xer_tmp_enc_t; +static int +SET_OF_encode_xer_callback(const void *buffer, size_t size, void *key) { + xer_tmp_enc_t *t = (xer_tmp_enc_t *)key; + if(t->offset + size >= t->size) { + size_t newsize = (t->size << 2) + size; + void *p = REALLOC(t->buffer, newsize); + if(!p) return -1; + t->buffer = p; + t->size = newsize; + } + memcpy((char *)t->buffer + t->offset, buffer, size); + t->offset += size; + return 0; +} +static int +SET_OF_xer_order(const void *aptr, const void *bptr) { + const xer_tmp_enc_t *a = (const xer_tmp_enc_t *)aptr; + const xer_tmp_enc_t *b = (const xer_tmp_enc_t *)bptr; + size_t minlen = a->offset; + int ret; + if(b->offset < minlen) minlen = b->offset; + /* Well-formed UTF-8 has this nice lexicographical property... */ + ret = memcmp(a->buffer, b->buffer, minlen); + if(ret != 0) return ret; + if(a->offset == b->offset) + return 0; + if(a->offset == minlen) + return -1; + return 1; +} + + +asn_enc_rval_t +SET_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er; + asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(sptr); + const char *mname = specs->as_XMLValueList + ? 0 : ((*elm->name) ? elm->name : elm->type->xml_tag); + size_t mlen = mname ? strlen(mname) : 0; + int xcan = (flags & XER_F_CANONICAL); + xer_tmp_enc_t *encs = 0; + size_t encs_count = 0; + void *original_app_key = app_key; + asn_app_consume_bytes_f *original_cb = cb; + int i; + + if(!sptr) _ASN_ENCODE_FAILED; + + if(xcan) { + encs = (xer_tmp_enc_t *)MALLOC(list->count * sizeof(encs[0])); + if(!encs) _ASN_ENCODE_FAILED; + cb = SET_OF_encode_xer_callback; + } + + er.encoded = 0; + + for(i = 0; i < list->count; i++) { + asn_enc_rval_t tmper; + + void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + if(encs) { + memset(&encs[encs_count], 0, sizeof(encs[0])); + app_key = &encs[encs_count]; + encs_count++; + } + + if(mname) { + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); + _ASN_CALLBACK3("<", 1, mname, mlen, ">", 1); + } + + if(!xcan && specs->as_XMLValueList == 1) + _i_ASN_TEXT_INDENT(1, ilevel + 1); + tmper = elm->type->xer_encoder(elm->type, memb_ptr, + ilevel + (specs->as_XMLValueList != 2), + flags, cb, app_key); + if(tmper.encoded == -1) { + td = tmper.failed_type; + sptr = tmper.structure_ptr; + goto cb_failed; + } + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = elm->type->xml_tag; + size_t len = strlen(name); + _ASN_CALLBACK3("<", 1, name, len, "/>", 2); + } + + if(mname) { + _ASN_CALLBACK3("", 1); + er.encoded += 5; + } + + er.encoded += (2 * mlen) + tmper.encoded; + } + + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel - 1); + + if(encs) { + xer_tmp_enc_t *enc = encs; + xer_tmp_enc_t *end = encs + encs_count; + ssize_t control_size = 0; + + cb = original_cb; + app_key = original_app_key; + qsort(encs, encs_count, sizeof(encs[0]), SET_OF_xer_order); + + for(; enc < end; enc++) { + _ASN_CALLBACK(enc->buffer, enc->offset); + FREEMEM(enc->buffer); + enc->buffer = 0; + control_size += enc->offset; + } + assert(control_size == er.encoded); + } + + goto cleanup; +cb_failed: + er.encoded = -1; + er.failed_type = td; + er.structure_ptr = sptr; +cleanup: + if(encs) { + while(encs_count-- > 0) { + if(encs[encs_count].buffer) + FREEMEM(encs[encs_count].buffer); + } + FREEMEM(encs); + } + _ASN_ENCODED_OK(er); +} + +int +SET_OF_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int ret; + int i; + + if(!sptr) return (cb("", 8, app_key) < 0) ? -1 : 0; + + /* Dump preamble */ + if(cb(td->name, strlen(td->name), app_key) < 0 + || cb(" ::= {", 6, app_key) < 0) + return -1; + + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + if(!memb_ptr) continue; + + _i_INDENT(1); + + ret = elm->type->print_struct(elm->type, memb_ptr, + ilevel + 1, cb, app_key); + if(ret) return ret; + } + + ilevel--; + _i_INDENT(1); + + return (cb("}", 1, app_key) < 0) ? -1 : 0; +} + +void +SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { + if(td && ptr) { + asn_SET_OF_specifics_t *specs; + asn_TYPE_member_t *elm = td->elements; + asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); + asn_struct_ctx_t *ctx; /* Decoder context */ + int i; + + /* + * Could not use set_of_empty() because of (*free) + * incompatibility. + */ + for(i = 0; i < list->count; i++) { + void *memb_ptr = list->array[i]; + if(memb_ptr) + ASN_STRUCT_FREE(*elm->type, memb_ptr); + } + list->count = 0; /* No meaningful elements left */ + + asn_set_empty(list); /* Remove (list->array) */ + + specs = (asn_SET_OF_specifics_t *)td->specifics; + ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); + if(ctx->ptr) { + ASN_STRUCT_FREE(*elm->type, ctx->ptr); + ctx->ptr = 0; + } + + if(!contents_only) { + FREEMEM(ptr); + } + } +} + +int +SET_OF_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + asn_TYPE_member_t *elm = td->elements; + asn_constr_check_f *constr; + const asn_anonymous_set_ *list = _A_CSET_FROM_VOID(sptr); + int i; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + constr = elm->memb_constraints; + if(!constr) constr = elm->type->check_constraints; + + /* + * Iterate over the members of an array. + * Validate each in turn, until one fails. + */ + for(i = 0; i < list->count; i++) { + const void *memb_ptr = list->array[i]; + int ret; + + if(!memb_ptr) continue; + + ret = constr(elm->type, memb_ptr, ctfailcb, app_key); + if(ret) return ret; + } + + /* + * Cannot inherit it eralier: + * need to make sure we get the updated version. + */ + if(!elm->memb_constraints) + elm->memb_constraints = elm->type->check_constraints; + + return 0; +} + +asn_dec_rval_t +SET_OF_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; + asn_TYPE_member_t *elm = td->elements; /* Single one */ + void *st = *sptr; + asn_anonymous_set_ *list; + asn_per_constraint_t *ct; + int repeat = 0; + ssize_t nelems; + + if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) + _ASN_DECODE_FAILED; + + /* + * Create the target structure if it is not present already. + */ + if(!st) { + st = *sptr = CALLOC(1, specs->struct_size); + if(!st) _ASN_DECODE_FAILED; + } + list = _A_SET_FROM_VOID(st); + + /* Figure out which constraints to use */ + if(constraints) ct = &constraints->size; + else if(td->per_constraints) ct = &td->per_constraints->size; + else ct = 0; + + if(ct && ct->flags & APC_EXTENSIBLE) { + int value = per_get_few_bits(pd, 1); + if(value < 0) _ASN_DECODE_STARVED; + if(value) ct = 0; /* Not restricted! */ + } + + if(ct && ct->effective_bits >= 0) { + /* X.691, #19.5: No length determinant */ + nelems = per_get_few_bits(pd, ct->effective_bits); + ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", + (long)nelems, ct->lower_bound, td->name); + if(nelems < 0) _ASN_DECODE_STARVED; + nelems += ct->lower_bound; + } else { + nelems = -1; + } + + do { + int i; + if(nelems < 0) { + nelems = uper_get_length(pd, + ct ? ct->effective_bits : -1, &repeat); + ASN_DEBUG("Got to decode %d elements (eff %d)", + (int)nelems, (int)(ct ? ct->effective_bits : -1)); + if(nelems < 0) _ASN_DECODE_STARVED; + } + + for(i = 0; i < nelems; i++) { + void *ptr = 0; + ASN_DEBUG("SET OF %s decoding", elm->type->name); + rv = elm->type->uper_decoder(opt_codec_ctx, elm->type, + elm->per_constraints, &ptr, pd); + ASN_DEBUG("%s SET OF %s decoded %d, %p", + td->name, elm->type->name, rv.code, ptr); + if(rv.code == RC_OK) { + if(ASN_SET_ADD(list, ptr) == 0) + continue; + ASN_DEBUG("Failed to add element into %s", + td->name); + /* Fall through */ + rv.code = RC_FAIL; + } else { + ASN_DEBUG("Failed decoding %s of %s (SET OF)", + elm->type->name, td->name); + } + if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); + return rv; + } + + nelems = -1; /* Allow uper_get_length() */ + } while(repeat); + + ASN_DEBUG("Decoded %s as SET OF", td->name); + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + diff --git a/lte/rrc/asn/constr_SET_OF.h b/lte/rrc/asn/constr_SET_OF.h new file mode 100644 index 000000000..75e18cfa0 --- /dev/null +++ b/lte/rrc/asn/constr_SET_OF.h @@ -0,0 +1,42 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_SET_OF_H_ +#define _CONSTR_SET_OF_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef const struct asn_SET_OF_specifics_s { + /* + * Target structure description. + */ + int struct_size; /* Size of the target structure. */ + int ctx_offset; /* Offset of the asn_struct_ctx_t member */ + + /* XER-specific stuff */ + int as_XMLValueList; /* The member type must be encoded like this */ +} asn_SET_OF_specifics_t; + +/* + * A set specialized functions dealing with the SET OF type. + */ +asn_struct_free_f SET_OF_free; +asn_struct_print_f SET_OF_print; +asn_constr_check_f SET_OF_constraint; +ber_type_decoder_f SET_OF_decode_ber; +der_type_encoder_f SET_OF_encode_der; +xer_type_decoder_f SET_OF_decode_xer; +xer_type_encoder_f SET_OF_encode_xer; +per_type_decoder_f SET_OF_decode_uper; +per_type_encoder_f SET_OF_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CONSTR_SET_OF_H_ */ diff --git a/lte/rrc/lib/rrc_msg/src/sib.c b/lte/rrc/lib/rrc_msg/src/sib.c new file mode 100644 index 000000000..f42b64491 --- /dev/null +++ b/lte/rrc/lib/rrc_msg/src/sib.c @@ -0,0 +1,102 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include + +#include "liblte/rrc/rrc_msg/bcch.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + + +void sib1_create_default(SystemInformationBlockType1_t *sib1, + MCC_MNC_Digit_t mcc_val[3], + MCC_MNC_Digit_t mnc_val[2], + uint8_t tac_val[2], + uint8_t cid_val[4], + int freq_band) +{ + + + PLMN_IdentityInfo_t PLMN_identity_info; + asn_enc_rval_t enc_rval; + SchedulingInfo_t schedulingInfo; + SIB_Type_t sib_type; + struct MCC mcc; + + bzero(sib1, sizeof(SystemInformationBlockType1_t)); + bzero(&PLMN_identity_info, sizeof(PLMN_IdentityInfo_t)); + bzero(&schedulingInfo, sizeof(SchedulingInfo_t)); + bzero(&sib_type, sizeof(SIB_Type_t)); + bzero(&mcc, sizeof(struct MCC)); + + PLMN_identity_info.plmn_Identity.mcc = &mcc; + asn_set_empty(&mcc); + for (int i=0;i<3;i++) { + ASN_SEQUENCE_ADD(&mcc.list,&mcc_val[i]); + } + printf("MCC set len: %d\n", mcc.list.count); + for (int i=0;i<2;i++) { + ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&mnc_val[i]); + } + PLMN_identity_info.cellReservedForOperatorUse=cellReservedForOperatorUse_reserved; + + ASN_SEQUENCE_ADD(&sib1->cellAccessRelatedInfo.plmn_IdentityList.list,&PLMN_identity_info); + + sib1->cellAccessRelatedInfo.trackingAreaCode.buf=tac_val; + sib1->cellAccessRelatedInfo.trackingAreaCode.size=2; + sib1->cellAccessRelatedInfo.trackingAreaCode.bits_unused=0; + + sib1->cellAccessRelatedInfo.cellIdentity.buf=cid_val; + sib1->cellAccessRelatedInfo.cellIdentity.size=4; + sib1->cellAccessRelatedInfo.cellIdentity.bits_unused=4; + + sib1->cellAccessRelatedInfo.cellBarred=cellBarred_notBarred; + + sib1->cellAccessRelatedInfo.intraFreqReselection=intraFreqReselection_allowed; + sib1->cellAccessRelatedInfo.csg_Indication=0; + + sib1->cellSelectionInfo.q_RxLevMin=-70; + sib1->cellSelectionInfo.q_RxLevMinOffset=NULL; + + sib1->freqBandIndicator = (long int) freq_band; + + schedulingInfo.si_Periodicity=si_Periodicity_rf8; + + // assign_enum(&sib_type,SIB_Type_sibType3); + sib_type=SIB_Type_sibType3; + + ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type); + ASN_SEQUENCE_ADD(&sib1->schedulingInfoList.list,&schedulingInfo); + + sib1->tdd_Config = NULL; + + sib1->si_WindowLength=si_WindowLength_ms10; + sib1->systemInfoValueTag=0; + + asn_fprint(stdout, &asn_DEF_SystemInformationBlockType1, (void*)sib1); +} \ No newline at end of file diff --git a/lte/rrc/lib/rrc_msg/src/sib.h b/lte/rrc/lib/rrc_msg/src/sib.h new file mode 100644 index 000000000..2c13d983a --- /dev/null +++ b/lte/rrc/lib/rrc_msg/src/sib.h @@ -0,0 +1,41 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include + +#include "liblte/rrc/rrc_msg/bcch.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + + +void sib1_create_default(SystemInformationBlockType1_t *sib1, + MCC_MNC_Digit_t mcc_val[3], + MCC_MNC_Digit_t mnc_val[2], + uint8_t tac_val[2], + uint8_t cid_val[4], + int freq_band); diff --git a/lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c b/lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c new file mode 100644 index 000000000..50447a973 --- /dev/null +++ b/lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c @@ -0,0 +1,49 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liblte/rrc/rrc.h" +#include "rrc_asn.h" + +int main(int argc, char **argv) { + //uint8_t buffer[18] = {0x40, 0x48, 0x50, 0x3, 0x2, 0xb, 0x14, 0x4a, 0x30, 0x18, 0x28, 0x20, 0x90, 0x81, 0x84, 0x79, 0x0, 0x0}; + +// bzero(buffer, 18); + uint8_t buffer[200]; + bcch_dlsch_sib1_pack(buffer, 144); + + //bcch_dlsch_sib1_unpack(buffer, 144); +} + From 9382c7dd3b2553210137ae8424a5c9466d27cdb8 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 21 Oct 2014 18:55:52 +0200 Subject: [PATCH 11/55] Changed ASN sources. Added SIB1 packing/unpacking to RRC --- lte/examples/cell_measurement.c | 12 +- lte/examples/cell_search_utils.c | 2 +- lte/examples/pdsch_enodeb.c | 2 +- lte/phy/include/liblte/phy/utils/vector.h | 1 + lte/phy/lib/utils/src/vector.c | 16 +- lte/rrc/asn/AC-BarringConfig.c | 434 ++++ lte/rrc/asn/AC-BarringConfig.h | 73 + lte/rrc/asn/AC-BarringConfig1XRTT-r9.c | 450 ++++ lte/rrc/asn/AC-BarringConfig1XRTT-r9.h | 47 + lte/rrc/asn/ARFCN-ValueCDMA2000.c | 146 ++ lte/rrc/asn/ARFCN-ValueCDMA2000.h | 41 + lte/rrc/asn/ARFCN-ValueEUTRA.c | 146 ++ lte/rrc/asn/ARFCN-ValueEUTRA.h | 41 + lte/rrc/asn/ARFCN-ValueGERAN.c | 146 ++ lte/rrc/asn/ARFCN-ValueGERAN.h | 41 + lte/rrc/asn/ARFCN-ValueUTRA.c | 146 ++ lte/rrc/asn/ARFCN-ValueUTRA.h | 41 + lte/rrc/asn/AS-Config.c | 210 ++ lte/rrc/asn/AS-Config.h | 64 + lte/rrc/asn/AS-Context.c | 61 + lte/rrc/asn/AS-Context.h | 42 + lte/rrc/asn/AbsoluteTimeInfo-r10.c | 152 ++ lte/rrc/asn/AbsoluteTimeInfo-r10.h | 41 + lte/rrc/asn/AccessStratumRelease.c | 160 ++ lte/rrc/asn/AccessStratumRelease.h | 56 + lte/rrc/asn/AdditionalReestabInfo.c | 79 + lte/rrc/asn/AdditionalReestabInfo.h | 41 + lte/rrc/asn/AdditionalReestabInfoList.c | 57 + lte/rrc/asn/AdditionalReestabInfoList.h | 43 + lte/rrc/asn/AdditionalSI-Info-r9.c | 209 ++ lte/rrc/asn/AdditionalSI-Info-r9.h | 46 + lte/rrc/asn/AdditionalSpectrumEmission.c | 146 ++ lte/rrc/asn/AdditionalSpectrumEmission.h | 41 + lte/rrc/asn/AllowedMeasBandwidth.c | 154 ++ lte/rrc/asn/AllowedMeasBandwidth.h | 51 + lte/rrc/asn/AntennaInfoCommon.c | 203 ++ lte/rrc/asn/AntennaInfoCommon.h | 47 + lte/rrc/asn/AntennaInfoDedicated-r10.c | 451 ++++ lte/rrc/asn/AntennaInfoDedicated-r10.h | 83 + lte/rrc/asn/AntennaInfoDedicated-v920.c | 197 ++ lte/rrc/asn/AntennaInfoDedicated-v920.h | 55 + lte/rrc/asn/AntennaInfoDedicated.c | 846 +++++++ lte/rrc/asn/AntennaInfoDedicated.h | 101 + lte/rrc/asn/AntennaInfoUL-r10.c | 360 +++ lte/rrc/asn/AntennaInfoUL-r10.h | 56 + lte/rrc/asn/AreaConfiguration-r10.c | 71 + lte/rrc/asn/AreaConfiguration-r10.h | 50 + lte/rrc/asn/BCCH-BCH-Message.c | 60 + lte/rrc/asn/BCCH-BCH-Message.h | 38 + lte/rrc/asn/BCCH-BCH-MessageType.c | 124 + lte/rrc/asn/BCCH-BCH-MessageType.h | 41 + lte/rrc/asn/BCCH-Config.c | 203 ++ lte/rrc/asn/BCCH-Config.h | 47 + lte/rrc/asn/BCCH-DL-SCH-Message.c | 60 + lte/rrc/asn/BCCH-DL-SCH-Message.h | 38 + lte/rrc/asn/BCCH-DL-SCH-MessageType.c | 172 ++ lte/rrc/asn/BCCH-DL-SCH-MessageType.h | 69 + lte/rrc/asn/BIT_STRING.c | 4 +- lte/rrc/asn/BOOLEAN.c | 12 +- lte/rrc/asn/BandClassInfoCDMA2000.c | 152 ++ lte/rrc/asn/BandClassInfoCDMA2000.h | 47 + lte/rrc/asn/BandClassListCDMA2000.c | 58 + lte/rrc/asn/BandClassListCDMA2000.h | 44 + lte/rrc/asn/BandClassPriority1XRTT.c | 70 + lte/rrc/asn/BandClassPriority1XRTT.h | 40 + lte/rrc/asn/BandClassPriorityHRPD.c | 70 + lte/rrc/asn/BandClassPriorityHRPD.h | 40 + lte/rrc/asn/BandClassPriorityList1XRTT.c | 58 + lte/rrc/asn/BandClassPriorityList1XRTT.h | 44 + lte/rrc/asn/BandClassPriorityListHRPD.c | 58 + lte/rrc/asn/BandClassPriorityListHRPD.h | 44 + lte/rrc/asn/BandCombinationListEUTRA-r10.c | 58 + lte/rrc/asn/BandCombinationListEUTRA-r10.h | 44 + lte/rrc/asn/BandCombinationParameters-r10.c | 58 + lte/rrc/asn/BandCombinationParameters-r10.h | 44 + lte/rrc/asn/BandIndicatorGERAN.c | 146 ++ lte/rrc/asn/BandIndicatorGERAN.h | 47 + lte/rrc/asn/BandInfoEUTRA.c | 72 + lte/rrc/asn/BandInfoEUTRA.h | 45 + lte/rrc/asn/BandListEUTRA.c | 58 + lte/rrc/asn/BandListEUTRA.h | 44 + lte/rrc/asn/BandParameters-r10.c | 112 + lte/rrc/asn/BandParameters-r10.h | 48 + lte/rrc/asn/BandParametersDL-r10.c | 58 + lte/rrc/asn/BandParametersDL-r10.h | 44 + lte/rrc/asn/BandParametersUL-r10.c | 58 + lte/rrc/asn/BandParametersUL-r10.h | 44 + lte/rrc/asn/BandclassCDMA2000.c | 208 ++ lte/rrc/asn/BandclassCDMA2000.h | 80 + lte/rrc/asn/BetaOffset-CA-Index.c | 124 + lte/rrc/asn/BetaOffset-CA-Index.h | 41 + lte/rrc/asn/BlackCellsToAddMod.c | 100 + lte/rrc/asn/BlackCellsToAddMod.h | 40 + lte/rrc/asn/BlackCellsToAddModList.c | 58 + lte/rrc/asn/BlackCellsToAddModList.h | 44 + lte/rrc/asn/C-RNTI.c | 152 ++ lte/rrc/asn/C-RNTI.h | 41 + lte/rrc/asn/CA-BandwidthClass-r10.c | 156 ++ lte/rrc/asn/CA-BandwidthClass-r10.h | 54 + lte/rrc/asn/CA-MIMO-ParametersDL-r10.c | 72 + lte/rrc/asn/CA-MIMO-ParametersDL-r10.h | 40 + lte/rrc/asn/CA-MIMO-ParametersUL-r10.c | 72 + lte/rrc/asn/CA-MIMO-ParametersUL-r10.h | 40 + lte/rrc/asn/CA-RNTI.c | 152 ++ lte/rrc/asn/CA-RNTI.h | 41 + lte/rrc/asn/CA-semiPersistSchedIntervalUL.c | 174 ++ lte/rrc/asn/CA-semiPersistSchedIntervalUL.h | 61 + lte/rrc/asn/CDMA2000-Type.c | 146 ++ lte/rrc/asn/CDMA2000-Type.h | 47 + lte/rrc/asn/CQI-ReportAperiodic-r10.c | 422 ++++ lte/rrc/asn/CQI-ReportAperiodic-r10.h | 75 + lte/rrc/asn/CQI-ReportConfig-r10.c | 395 ++++ lte/rrc/asn/CQI-ReportConfig-r10.h | 80 + lte/rrc/asn/CQI-ReportConfig-v920.c | 346 +++ lte/rrc/asn/CQI-ReportConfig-v920.h | 49 + lte/rrc/asn/CQI-ReportConfig.c | 112 + lte/rrc/asn/CQI-ReportConfig.h | 47 + lte/rrc/asn/CQI-ReportConfigSCell-r10.c | 259 +++ lte/rrc/asn/CQI-ReportConfigSCell-r10.h | 55 + lte/rrc/asn/CQI-ReportModeAperiodic.c | 158 ++ lte/rrc/asn/CQI-ReportModeAperiodic.h | 53 + lte/rrc/asn/CQI-ReportPeriodic-r10.c | 1130 ++++++++++ lte/rrc/asn/CQI-ReportPeriodic-r10.h | 124 + lte/rrc/asn/CQI-ReportPeriodic.c | 402 ++++ lte/rrc/asn/CQI-ReportPeriodic.h | 80 + .../asn/CSFB-RegistrationParam1XRTT-v920.c | 197 ++ .../asn/CSFB-RegistrationParam1XRTT-v920.h | 44 + lte/rrc/asn/CSFB-RegistrationParam1XRTT.c | 396 ++++ lte/rrc/asn/CSFB-RegistrationParam1XRTT.h | 51 + .../CSFBParametersRequestCDMA2000-r8-IEs.c | 62 + .../CSFBParametersRequestCDMA2000-r8-IEs.h | 43 + .../CSFBParametersRequestCDMA2000-v8a0-IEs.c | 110 + .../CSFBParametersRequestCDMA2000-v8a0-IEs.h | 43 + lte/rrc/asn/CSFBParametersRequestCDMA2000.c | 161 ++ lte/rrc/asn/CSFBParametersRequestCDMA2000.h | 59 + .../CSFBParametersResponseCDMA2000-r8-IEs.c | 82 + .../CSFBParametersResponseCDMA2000-r8-IEs.h | 47 + .../CSFBParametersResponseCDMA2000-v8a0-IEs.c | 110 + .../CSFBParametersResponseCDMA2000-v8a0-IEs.h | 43 + lte/rrc/asn/CSFBParametersResponseCDMA2000.c | 171 ++ lte/rrc/asn/CSFBParametersResponseCDMA2000.h | 61 + lte/rrc/asn/CSG-AllowedReportingCells-r9.c | 62 + lte/rrc/asn/CSG-AllowedReportingCells-r9.h | 43 + lte/rrc/asn/CSG-Identity.c | 10 +- lte/rrc/asn/CSG-Identity.h | 5 +- .../CSG-ProximityIndicationParameters-r9.c | 493 ++++ .../CSG-ProximityIndicationParameters-r9.h | 54 + lte/rrc/asn/CSI-RS-Config-r10.c | 643 ++++++ lte/rrc/asn/CSI-RS-Config-r10.h | 94 + lte/rrc/asn/CShift.c | 124 + lte/rrc/asn/CShift.h | 41 + lte/rrc/asn/CarrierBandwidthEUTRA.c | 406 ++++ lte/rrc/asn/CarrierBandwidthEUTRA.h | 79 + lte/rrc/asn/CarrierFreqCDMA2000.c | 70 + lte/rrc/asn/CarrierFreqCDMA2000.h | 40 + lte/rrc/asn/CarrierFreqEUTRA.c | 72 + lte/rrc/asn/CarrierFreqEUTRA.h | 39 + lte/rrc/asn/CarrierFreqGERAN.c | 70 + lte/rrc/asn/CarrierFreqGERAN.h | 40 + lte/rrc/asn/CarrierFreqListUTRA-FDD.c | 58 + lte/rrc/asn/CarrierFreqListUTRA-FDD.h | 44 + lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c | 58 + lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h | 39 + lte/rrc/asn/CarrierFreqListUTRA-TDD.c | 58 + lte/rrc/asn/CarrierFreqListUTRA-TDD.h | 44 + lte/rrc/asn/CarrierFreqUTRA-FDD.c | 285 +++ lte/rrc/asn/CarrierFreqUTRA-FDD.h | 55 + lte/rrc/asn/CarrierFreqUTRA-TDD.c | 172 ++ lte/rrc/asn/CarrierFreqUTRA-TDD.h | 50 + lte/rrc/asn/CarrierFreqsGERAN.c | 307 +++ lte/rrc/asn/CarrierFreqsGERAN.h | 69 + lte/rrc/asn/CarrierFreqsInfoGERAN.c | 271 +++ lte/rrc/asn/CarrierFreqsInfoGERAN.h | 57 + lte/rrc/asn/CarrierFreqsInfoListGERAN.c | 58 + lte/rrc/asn/CarrierFreqsInfoListGERAN.h | 44 + lte/rrc/asn/CellChangeOrder.c | 395 ++++ lte/rrc/asn/CellChangeOrder.h | 88 + lte/rrc/asn/CellGlobalIdCDMA2000.c | 143 ++ lte/rrc/asn/CellGlobalIdCDMA2000.h | 49 + lte/rrc/asn/CellGlobalIdEUTRA.c | 70 + lte/rrc/asn/CellGlobalIdEUTRA.h | 40 + lte/rrc/asn/CellGlobalIdGERAN.c | 152 ++ lte/rrc/asn/CellGlobalIdGERAN.h | 41 + lte/rrc/asn/CellGlobalIdList-r10.c | 58 + lte/rrc/asn/CellGlobalIdList-r10.h | 44 + lte/rrc/asn/CellGlobalIdUTRA.c | 106 + lte/rrc/asn/CellGlobalIdUTRA.h | 40 + lte/rrc/asn/CellIdentity.c | 10 +- lte/rrc/asn/CellIdentity.h | 5 +- lte/rrc/asn/CellIndex.c | 146 ++ lte/rrc/asn/CellIndex.h | 41 + lte/rrc/asn/CellIndexList.c | 58 + lte/rrc/asn/CellIndexList.h | 39 + lte/rrc/asn/CellInfoGERAN-r9.c | 80 + lte/rrc/asn/CellInfoGERAN-r9.h | 42 + lte/rrc/asn/CellInfoListGERAN-r9.c | 58 + lte/rrc/asn/CellInfoListGERAN-r9.h | 44 + lte/rrc/asn/CellInfoListUTRA-FDD-r9.c | 58 + lte/rrc/asn/CellInfoListUTRA-FDD-r9.h | 44 + lte/rrc/asn/CellInfoListUTRA-TDD-r10.c | 58 + lte/rrc/asn/CellInfoListUTRA-TDD-r10.h | 44 + lte/rrc/asn/CellInfoListUTRA-TDD-r9.c | 58 + lte/rrc/asn/CellInfoListUTRA-TDD-r9.h | 44 + lte/rrc/asn/CellInfoUTRA-FDD-r9.c | 70 + lte/rrc/asn/CellInfoUTRA-FDD-r9.h | 40 + lte/rrc/asn/CellInfoUTRA-TDD-r10.c | 80 + lte/rrc/asn/CellInfoUTRA-TDD-r10.h | 42 + lte/rrc/asn/CellInfoUTRA-TDD-r9.c | 70 + lte/rrc/asn/CellInfoUTRA-TDD-r9.h | 40 + .../CellReselectionParametersCDMA2000-v920.c | 60 + .../CellReselectionParametersCDMA2000-v920.h | 38 + .../asn/CellReselectionParametersCDMA2000.c | 92 + .../asn/CellReselectionParametersCDMA2000.h | 49 + lte/rrc/asn/CellReselectionPriority.c | 146 ++ lte/rrc/asn/CellReselectionPriority.h | 41 + lte/rrc/asn/CellSelectionInfo-v920.c | 17 +- lte/rrc/asn/CellSelectionInfo-v920.h | 5 +- lte/rrc/asn/CellsToAddMod.c | 110 + lte/rrc/asn/CellsToAddMod.h | 42 + lte/rrc/asn/CellsToAddModCDMA2000.c | 100 + lte/rrc/asn/CellsToAddModCDMA2000.h | 40 + lte/rrc/asn/CellsToAddModList.c | 58 + lte/rrc/asn/CellsToAddModList.h | 44 + lte/rrc/asn/CellsToAddModListCDMA2000.c | 58 + lte/rrc/asn/CellsToAddModListCDMA2000.h | 44 + lte/rrc/asn/CellsToAddModListUTRA-FDD.c | 58 + lte/rrc/asn/CellsToAddModListUTRA-FDD.h | 44 + lte/rrc/asn/CellsToAddModListUTRA-TDD.c | 58 + lte/rrc/asn/CellsToAddModListUTRA-TDD.h | 44 + lte/rrc/asn/CellsToAddModUTRA-FDD.c | 100 + lte/rrc/asn/CellsToAddModUTRA-FDD.h | 40 + lte/rrc/asn/CellsToAddModUTRA-TDD.c | 100 + lte/rrc/asn/CellsToAddModUTRA-TDD.h | 40 + lte/rrc/asn/CellsTriggeredList.c | 266 +++ lte/rrc/asn/CellsTriggeredList.h | 85 + lte/rrc/asn/CommonSF-AllocPatternList-r9.c | 58 + lte/rrc/asn/CommonSF-AllocPatternList-r9.h | 44 + lte/rrc/asn/CounterCheck-r8-IEs.c | 72 + lte/rrc/asn/CounterCheck-r8-IEs.h | 45 + lte/rrc/asn/CounterCheck-v8a0-IEs.c | 110 + lte/rrc/asn/CounterCheck-v8a0-IEs.h | 43 + lte/rrc/asn/CounterCheck.c | 254 +++ lte/rrc/asn/CounterCheck.h | 80 + lte/rrc/asn/CounterCheckResponse-r8-IEs.c | 72 + lte/rrc/asn/CounterCheckResponse-r8-IEs.h | 45 + lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c | 110 + lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h | 43 + lte/rrc/asn/CounterCheckResponse.c | 171 ++ lte/rrc/asn/CounterCheckResponse.h | 61 + lte/rrc/asn/CountingRequestInfo-r10.c | 60 + lte/rrc/asn/CountingRequestInfo-r10.h | 42 + lte/rrc/asn/CountingRequestList-r10.c | 58 + lte/rrc/asn/CountingRequestList-r10.h | 44 + lte/rrc/asn/CountingResponseInfo-r10.c | 90 + lte/rrc/asn/CountingResponseInfo-r10.h | 42 + lte/rrc/asn/CountingResponseList-r10.c | 58 + lte/rrc/asn/CountingResponseList-r10.h | 44 + .../asn/CrossCarrierSchedulingConfig-r10.c | 269 +++ .../asn/CrossCarrierSchedulingConfig-r10.h | 68 + lte/rrc/asn/DL-AM-RLC.c | 70 + lte/rrc/asn/DL-AM-RLC.h | 40 + lte/rrc/asn/DL-CCCH-Message.c | 60 + lte/rrc/asn/DL-CCCH-Message.h | 38 + lte/rrc/asn/DL-CCCH-MessageType.c | 192 ++ lte/rrc/asn/DL-CCCH-MessageType.h | 75 + lte/rrc/asn/DL-DCCH-Message.c | 60 + lte/rrc/asn/DL-DCCH-Message.h | 38 + lte/rrc/asn/DL-DCCH-MessageType.c | 312 +++ lte/rrc/asn/DL-DCCH-MessageType.h | 108 + lte/rrc/asn/DL-UM-RLC.c | 70 + lte/rrc/asn/DL-UM-RLC.h | 40 + lte/rrc/asn/DLInformationTransfer-r8-IEs.c | 145 ++ lte/rrc/asn/DLInformationTransfer-r8-IEs.h | 65 + lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c | 110 + lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h | 43 + lte/rrc/asn/DLInformationTransfer.c | 254 +++ lte/rrc/asn/DLInformationTransfer.h | 80 + lte/rrc/asn/DRB-CountInfo.c | 400 ++++ lte/rrc/asn/DRB-CountInfo.h | 43 + lte/rrc/asn/DRB-CountInfoList.c | 58 + lte/rrc/asn/DRB-CountInfoList.h | 44 + lte/rrc/asn/DRB-CountMSB-Info.c | 140 ++ lte/rrc/asn/DRB-CountMSB-Info.h | 41 + lte/rrc/asn/DRB-CountMSB-InfoList.c | 58 + lte/rrc/asn/DRB-CountMSB-InfoList.h | 44 + lte/rrc/asn/DRB-Identity.c | 146 ++ lte/rrc/asn/DRB-Identity.h | 41 + lte/rrc/asn/DRB-ToAddMod.c | 172 ++ lte/rrc/asn/DRB-ToAddMod.h | 58 + lte/rrc/asn/DRB-ToAddModList.c | 58 + lte/rrc/asn/DRB-ToAddModList.h | 44 + lte/rrc/asn/DRB-ToReleaseList.c | 58 + lte/rrc/asn/DRB-ToReleaseList.h | 39 + lte/rrc/asn/DRX-Config.c | 1626 ++++++++++++++ lte/rrc/asn/DRX-Config.h | 193 ++ lte/rrc/asn/DedicatedInfoCDMA2000.c | 124 + lte/rrc/asn/DedicatedInfoCDMA2000.h | 41 + lte/rrc/asn/DedicatedInfoNAS.c | 124 + lte/rrc/asn/DedicatedInfoNAS.h | 41 + lte/rrc/asn/DeltaFList-PUCCH.c | 807 +++++++ lte/rrc/asn/DeltaFList-PUCCH.h | 75 + lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c | 646 ++++++ lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h | 67 + lte/rrc/asn/E-CSFB-r9.c | 231 ++ lte/rrc/asn/E-CSFB-r9.h | 55 + lte/rrc/asn/EstablishmentCause.c | 22 +- lte/rrc/asn/EstablishmentCause.h | 7 +- lte/rrc/asn/ExplicitListOfARFCNs.c | 58 + lte/rrc/asn/ExplicitListOfARFCNs.h | 39 + lte/rrc/asn/FilterCoefficient.c | 176 ++ lte/rrc/asn/FilterCoefficient.h | 64 + lte/rrc/asn/FreqPriorityEUTRA.c | 70 + lte/rrc/asn/FreqPriorityEUTRA.h | 40 + lte/rrc/asn/FreqPriorityListEUTRA.c | 58 + lte/rrc/asn/FreqPriorityListEUTRA.h | 44 + lte/rrc/asn/FreqPriorityListUTRA-FDD.c | 58 + lte/rrc/asn/FreqPriorityListUTRA-FDD.h | 44 + lte/rrc/asn/FreqPriorityListUTRA-TDD.c | 58 + lte/rrc/asn/FreqPriorityListUTRA-TDD.h | 44 + lte/rrc/asn/FreqPriorityUTRA-FDD.c | 70 + lte/rrc/asn/FreqPriorityUTRA-FDD.h | 40 + lte/rrc/asn/FreqPriorityUTRA-TDD.c | 70 + lte/rrc/asn/FreqPriorityUTRA-TDD.h | 40 + lte/rrc/asn/FreqsPriorityGERAN.c | 70 + lte/rrc/asn/FreqsPriorityGERAN.h | 40 + lte/rrc/asn/FreqsPriorityListGERAN.c | 58 + lte/rrc/asn/FreqsPriorityListGERAN.h | 44 + lte/rrc/asn/Handover.c | 276 +++ lte/rrc/asn/Handover.h | 64 + lte/rrc/asn/HandoverCommand-r8-IEs.c | 134 ++ lte/rrc/asn/HandoverCommand-r8-IEs.h | 42 + lte/rrc/asn/HandoverCommand.c | 283 +++ lte/rrc/asn/HandoverCommand.h | 85 + ...ndoverFromEUTRAPreparationRequest-r8-IEs.c | 92 + ...ndoverFromEUTRAPreparationRequest-r8-IEs.h | 49 + ...verFromEUTRAPreparationRequest-v1020-IEs.c | 257 +++ ...verFromEUTRAPreparationRequest-v1020-IEs.h | 56 + ...overFromEUTRAPreparationRequest-v890-IEs.c | 72 + ...overFromEUTRAPreparationRequest-v890-IEs.h | 45 + ...overFromEUTRAPreparationRequest-v920-IEs.c | 72 + ...overFromEUTRAPreparationRequest-v920-IEs.h | 45 + .../asn/HandoverFromEUTRAPreparationRequest.c | 254 +++ .../asn/HandoverFromEUTRAPreparationRequest.h | 80 + .../HandoverPreparationInformation-r8-IEs.c | 101 + .../HandoverPreparationInformation-r8-IEs.h | 53 + .../HandoverPreparationInformation-v920-IEs.c | 263 +++ .../HandoverPreparationInformation-v920-IEs.h | 58 + lte/rrc/asn/HandoverPreparationInformation.c | 283 +++ lte/rrc/asn/HandoverPreparationInformation.h | 85 + lte/rrc/asn/Hysteresis.c | 146 ++ lte/rrc/asn/Hysteresis.h | 41 + lte/rrc/asn/IMSI-Digit.c | 146 ++ lte/rrc/asn/IMSI-Digit.h | 41 + lte/rrc/asn/IMSI.c | 58 + lte/rrc/asn/IMSI.h | 39 + lte/rrc/asn/INTEGER.c | 386 ++-- lte/rrc/asn/INTEGER.h | 19 +- .../asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c | 197 ++ .../asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h | 44 + .../asn/IRAT-ParametersCDMA2000-1XRTT-v920.c | 346 +++ .../asn/IRAT-ParametersCDMA2000-1XRTT-v920.h | 49 + lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c | 358 +++ lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h | 53 + lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c | 358 +++ lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h | 53 + lte/rrc/asn/IRAT-ParametersGERAN-v920.c | 346 +++ lte/rrc/asn/IRAT-ParametersGERAN-v920.h | 49 + lte/rrc/asn/IRAT-ParametersGERAN.c | 70 + lte/rrc/asn/IRAT-ParametersGERAN.h | 40 + lte/rrc/asn/IRAT-ParametersUTRA-FDD.c | 60 + lte/rrc/asn/IRAT-ParametersUTRA-FDD.h | 38 + lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c | 197 ++ lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h | 44 + lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c | 60 + lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h | 38 + lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c | 60 + lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h | 38 + lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c | 60 + lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h | 38 + lte/rrc/asn/IRAT-ParametersUTRA-v920.c | 197 ++ lte/rrc/asn/IRAT-ParametersUTRA-v920.h | 44 + lte/rrc/asn/IdleModeMobilityControlInfo.c | 273 +++ lte/rrc/asn/IdleModeMobilityControlInfo.h | 77 + lte/rrc/asn/InitialUE-Identity.c | 15 +- lte/rrc/asn/InitialUE-Identity.h | 5 +- lte/rrc/asn/InterFreqBandInfo.c | 60 + lte/rrc/asn/InterFreqBandInfo.h | 38 + lte/rrc/asn/InterFreqBandList.c | 58 + lte/rrc/asn/InterFreqBandList.h | 44 + lte/rrc/asn/InterFreqBlackCellList.c | 58 + lte/rrc/asn/InterFreqBlackCellList.h | 44 + lte/rrc/asn/InterFreqCarrierFreqInfo.c | 293 +++ lte/rrc/asn/InterFreqCarrierFreqInfo.h | 80 + lte/rrc/asn/InterFreqCarrierFreqList.c | 58 + lte/rrc/asn/InterFreqCarrierFreqList.h | 44 + lte/rrc/asn/InterFreqNeighCellInfo.c | 70 + lte/rrc/asn/InterFreqNeighCellInfo.h | 40 + lte/rrc/asn/InterFreqNeighCellList.c | 58 + lte/rrc/asn/InterFreqNeighCellList.h | 44 + ...terFreqRSTDMeasurementIndication-r10-IEs.c | 236 ++ ...terFreqRSTDMeasurementIndication-r10-IEs.h | 68 + .../InterFreqRSTDMeasurementIndication-r10.c | 244 ++ .../InterFreqRSTDMeasurementIndication-r10.h | 78 + lte/rrc/asn/InterRAT-BandInfo.c | 60 + lte/rrc/asn/InterRAT-BandInfo.h | 38 + lte/rrc/asn/InterRAT-BandList.c | 58 + lte/rrc/asn/InterRAT-BandList.h | 44 + lte/rrc/asn/IntraFreqBlackCellList.c | 58 + lte/rrc/asn/IntraFreqBlackCellList.h | 44 + lte/rrc/asn/IntraFreqNeighCellInfo.c | 70 + lte/rrc/asn/IntraFreqNeighCellInfo.h | 44 + lte/rrc/asn/IntraFreqNeighCellList.c | 58 + lte/rrc/asn/IntraFreqNeighCellList.h | 44 + lte/rrc/asn/Key-eNodeB-Star.c | 152 ++ lte/rrc/asn/Key-eNodeB-Star.h | 40 + lte/rrc/asn/LocationInfo-r10.c | 145 ++ lte/rrc/asn/LocationInfo-r10.h | 67 + lte/rrc/asn/LogMeasInfo-r10.c | 280 +++ lte/rrc/asn/LogMeasInfo-r10.h | 77 + lte/rrc/asn/LogMeasInfoList-r10.c | 58 + lte/rrc/asn/LogMeasInfoList-r10.h | 44 + lte/rrc/asn/LogMeasReport-r10.c | 311 +++ lte/rrc/asn/LogMeasReport-r10.h | 57 + .../LoggedMeasurementConfiguration-r10-IEs.c | 232 ++ .../LoggedMeasurementConfiguration-r10-IEs.h | 59 + .../asn/LoggedMeasurementConfiguration-r10.c | 244 ++ .../asn/LoggedMeasurementConfiguration-r10.h | 78 + lte/rrc/asn/LoggingDuration-r10.c | 158 ++ lte/rrc/asn/LoggingDuration-r10.h | 53 + lte/rrc/asn/LoggingInterval-r10.c | 158 ++ lte/rrc/asn/LoggingInterval-r10.h | 53 + lte/rrc/asn/LogicalChannelConfig.c | 672 ++++++ lte/rrc/asn/LogicalChannelConfig.h | 84 + lte/rrc/asn/MAC-MainConfig.c | 1793 +++++++++++++++ lte/rrc/asn/MAC-MainConfig.h | 189 ++ lte/rrc/asn/MBMS-NotificationConfig-r9.c | 279 +++ lte/rrc/asn/MBMS-NotificationConfig-r9.h | 48 + lte/rrc/asn/MBMS-SessionInfo-r9.c | 143 ++ lte/rrc/asn/MBMS-SessionInfo-r9.h | 46 + lte/rrc/asn/MBMS-SessionInfoList-r9.c | 58 + lte/rrc/asn/MBMS-SessionInfoList-r9.h | 44 + lte/rrc/asn/MBMSCountingRequest-r10.c | 120 + lte/rrc/asn/MBMSCountingRequest-r10.h | 45 + lte/rrc/asn/MBMSCountingResponse-r10-IEs.c | 160 ++ lte/rrc/asn/MBMSCountingResponse-r10-IEs.h | 52 + lte/rrc/asn/MBMSCountingResponse-r10.c | 244 ++ lte/rrc/asn/MBMSCountingResponse-r10.h | 78 + lte/rrc/asn/MBSFN-AreaInfo-r9.c | 873 +++++++ lte/rrc/asn/MBSFN-AreaInfo-r9.h | 82 + lte/rrc/asn/MBSFN-AreaInfoList-r9.c | 58 + lte/rrc/asn/MBSFN-AreaInfoList-r9.h | 44 + lte/rrc/asn/MBSFN-SubframeConfig.c | 392 ++++ lte/rrc/asn/MBSFN-SubframeConfig.h | 68 + lte/rrc/asn/MBSFN-SubframeConfigList.c | 58 + lte/rrc/asn/MBSFN-SubframeConfigList.h | 44 + lte/rrc/asn/MBSFNAreaConfiguration-r9.c | 241 ++ lte/rrc/asn/MBSFNAreaConfiguration-r9.h | 61 + lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c | 110 + lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h | 43 + lte/rrc/asn/MCC-MNC-Digit.c | 10 +- lte/rrc/asn/MCC-MNC-Digit.h | 5 +- lte/rrc/asn/MCC.c | 9 +- lte/rrc/asn/MCC.h | 5 +- lte/rrc/asn/MCCH-Message.c | 60 + lte/rrc/asn/MCCH-Message.h | 38 + lte/rrc/asn/MCCH-MessageType.c | 278 +++ lte/rrc/asn/MCCH-MessageType.h | 93 + lte/rrc/asn/MIMO-CapabilityDL-r10.c | 148 ++ lte/rrc/asn/MIMO-CapabilityDL-r10.h | 48 + lte/rrc/asn/MIMO-CapabilityUL-r10.c | 146 ++ lte/rrc/asn/MIMO-CapabilityUL-r10.h | 47 + lte/rrc/asn/MMEC.c | 10 +- lte/rrc/asn/MMEC.h | 5 +- lte/rrc/asn/MNC.c | 9 +- lte/rrc/asn/MNC.h | 5 +- lte/rrc/asn/MasterInformationBlock.c | 32 +- lte/rrc/asn/MasterInformationBlock.h | 22 +- lte/rrc/asn/MeasConfig.c | 288 +++ lte/rrc/asn/MeasConfig.h | 100 + lte/rrc/asn/MeasCycleSCell-r10.c | 158 ++ lte/rrc/asn/MeasCycleSCell-r10.h | 53 + lte/rrc/asn/MeasGapConfig.c | 247 ++ lte/rrc/asn/MeasGapConfig.h | 76 + lte/rrc/asn/MeasId.c | 146 ++ lte/rrc/asn/MeasId.h | 41 + lte/rrc/asn/MeasIdToAddMod.c | 80 + lte/rrc/asn/MeasIdToAddMod.h | 42 + lte/rrc/asn/MeasIdToAddModList.c | 58 + lte/rrc/asn/MeasIdToAddModList.h | 44 + lte/rrc/asn/MeasIdToRemoveList.c | 58 + lte/rrc/asn/MeasIdToRemoveList.h | 39 + lte/rrc/asn/MeasObjectCDMA2000.c | 170 ++ lte/rrc/asn/MeasObjectCDMA2000.h | 60 + lte/rrc/asn/MeasObjectEUTRA.c | 190 ++ lte/rrc/asn/MeasObjectEUTRA.h | 67 + lte/rrc/asn/MeasObjectGERAN.c | 146 ++ lte/rrc/asn/MeasObjectGERAN.h | 53 + lte/rrc/asn/MeasObjectId.c | 146 ++ lte/rrc/asn/MeasObjectId.h | 41 + lte/rrc/asn/MeasObjectToAddMod.c | 153 ++ lte/rrc/asn/MeasObjectToAddMod.h | 70 + lte/rrc/asn/MeasObjectToAddModList.c | 58 + lte/rrc/asn/MeasObjectToAddModList.h | 44 + lte/rrc/asn/MeasObjectToRemoveList.c | 58 + lte/rrc/asn/MeasObjectToRemoveList.h | 39 + lte/rrc/asn/MeasObjectUTRA.c | 256 +++ lte/rrc/asn/MeasObjectUTRA.h | 87 + lte/rrc/asn/MeasParameters-v1020.c | 60 + lte/rrc/asn/MeasParameters-v1020.h | 38 + lte/rrc/asn/MeasParameters.c | 60 + lte/rrc/asn/MeasParameters.h | 38 + lte/rrc/asn/MeasResult2CDMA2000-r9.c | 70 + lte/rrc/asn/MeasResult2CDMA2000-r9.h | 40 + lte/rrc/asn/MeasResult2EUTRA-r9.c | 70 + lte/rrc/asn/MeasResult2EUTRA-r9.h | 40 + lte/rrc/asn/MeasResult2UTRA-r9.c | 70 + lte/rrc/asn/MeasResult2UTRA-r9.h | 40 + lte/rrc/asn/MeasResultCDMA2000.c | 207 ++ lte/rrc/asn/MeasResultCDMA2000.h | 57 + lte/rrc/asn/MeasResultEUTRA.c | 232 ++ lte/rrc/asn/MeasResultEUTRA.h | 66 + lte/rrc/asn/MeasResultForECID-r9.c | 136 ++ lte/rrc/asn/MeasResultForECID-r9.h | 40 + lte/rrc/asn/MeasResultGERAN.c | 276 +++ lte/rrc/asn/MeasResultGERAN.h | 60 + lte/rrc/asn/MeasResultList2CDMA2000-r9.c | 58 + lte/rrc/asn/MeasResultList2CDMA2000-r9.h | 44 + lte/rrc/asn/MeasResultList2EUTRA-r9.c | 58 + lte/rrc/asn/MeasResultList2EUTRA-r9.h | 44 + lte/rrc/asn/MeasResultList2GERAN-r10.c | 58 + lte/rrc/asn/MeasResultList2GERAN-r10.h | 44 + lte/rrc/asn/MeasResultList2UTRA-r9.c | 58 + lte/rrc/asn/MeasResultList2UTRA-r9.h | 44 + lte/rrc/asn/MeasResultListCDMA2000.c | 58 + lte/rrc/asn/MeasResultListCDMA2000.h | 44 + lte/rrc/asn/MeasResultListEUTRA.c | 58 + lte/rrc/asn/MeasResultListEUTRA.h | 44 + lte/rrc/asn/MeasResultListGERAN.c | 58 + lte/rrc/asn/MeasResultListGERAN.h | 44 + lte/rrc/asn/MeasResultListUTRA.c | 58 + lte/rrc/asn/MeasResultListUTRA.h | 44 + lte/rrc/asn/MeasResultServFreq-r10.c | 218 ++ lte/rrc/asn/MeasResultServFreq-r10.h | 60 + lte/rrc/asn/MeasResultServFreqList-r10.c | 58 + lte/rrc/asn/MeasResultServFreqList-r10.h | 44 + lte/rrc/asn/MeasResultUTRA.c | 437 ++++ lte/rrc/asn/MeasResultUTRA.h | 84 + lte/rrc/asn/MeasResults.c | 258 +++ lte/rrc/asn/MeasResults.h | 92 + lte/rrc/asn/MeasResultsCDMA2000.c | 70 + lte/rrc/asn/MeasResultsCDMA2000.h | 40 + lte/rrc/asn/MeasSubframeCellList-r10.c | 58 + lte/rrc/asn/MeasSubframeCellList-r10.h | 44 + lte/rrc/asn/MeasSubframePattern-r10.c | 288 +++ lte/rrc/asn/MeasSubframePattern-r10.h | 77 + .../asn/MeasSubframePatternConfigNeigh-r10.c | 136 ++ .../asn/MeasSubframePatternConfigNeigh-r10.h | 63 + lte/rrc/asn/MeasSubframePatternPCell-r10.c | 71 + lte/rrc/asn/MeasSubframePatternPCell-r10.h | 50 + lte/rrc/asn/MeasurementReport-r8-IEs.c | 72 + lte/rrc/asn/MeasurementReport-r8-IEs.h | 45 + lte/rrc/asn/MeasurementReport-v8a0-IEs.c | 110 + lte/rrc/asn/MeasurementReport-v8a0-IEs.h | 43 + lte/rrc/asn/MeasurementReport.c | 284 +++ lte/rrc/asn/MeasurementReport.h | 86 + lte/rrc/asn/MobilityControlInfo.c | 283 +++ lte/rrc/asn/MobilityControlInfo.h | 76 + lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c | 145 ++ lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h | 65 + lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c | 155 ++ lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h | 74 + .../asn/MobilityFromEUTRACommand-v8a0-IEs.c | 72 + .../asn/MobilityFromEUTRACommand-v8a0-IEs.h | 45 + .../asn/MobilityFromEUTRACommand-v8d0-IEs.c | 110 + .../asn/MobilityFromEUTRACommand-v8d0-IEs.h | 43 + .../asn/MobilityFromEUTRACommand-v930-IEs.c | 72 + .../asn/MobilityFromEUTRACommand-v930-IEs.h | 45 + .../asn/MobilityFromEUTRACommand-v960-IEs.c | 110 + .../asn/MobilityFromEUTRACommand-v960-IEs.h | 43 + lte/rrc/asn/MobilityFromEUTRACommand.c | 254 +++ lte/rrc/asn/MobilityFromEUTRACommand.h | 81 + lte/rrc/asn/MobilityParametersCDMA2000.c | 124 + lte/rrc/asn/MobilityParametersCDMA2000.h | 41 + lte/rrc/asn/MobilityStateParameters.c | 452 ++++ lte/rrc/asn/MobilityStateParameters.h | 66 + lte/rrc/asn/N1-PUCCH-AN-PersistentList.c | 87 + lte/rrc/asn/N1-PUCCH-AN-PersistentList.h | 38 + lte/rrc/asn/N1PUCCH-AN-CS-r10.c | 88 + lte/rrc/asn/N1PUCCH-AN-CS-r10.h | 39 + lte/rrc/asn/N1PUCCH-AN-PersistentList.c | 88 + lte/rrc/asn/N1PUCCH-AN-PersistentList.h | 39 + lte/rrc/asn/NULL.c | 147 ++ lte/rrc/asn/NULL.h | 33 + lte/rrc/asn/NativeEnumerated.c | 7 +- lte/rrc/asn/NativeInteger.c | 8 +- lte/rrc/asn/NeighCellCDMA2000-v920.c | 60 + lte/rrc/asn/NeighCellCDMA2000-v920.h | 38 + lte/rrc/asn/NeighCellCDMA2000.c | 70 + lte/rrc/asn/NeighCellCDMA2000.h | 40 + lte/rrc/asn/NeighCellConfig.c | 152 ++ lte/rrc/asn/NeighCellConfig.h | 41 + lte/rrc/asn/NeighCellListCDMA2000-v920.c | 58 + lte/rrc/asn/NeighCellListCDMA2000-v920.h | 44 + lte/rrc/asn/NeighCellListCDMA2000.c | 58 + lte/rrc/asn/NeighCellListCDMA2000.h | 44 + .../NeighCellSI-AcquisitionParameters-r9.c | 493 ++++ .../NeighCellSI-AcquisitionParameters-r9.h | 54 + .../asn/NeighCellsPerBandclassCDMA2000-v920.c | 60 + .../asn/NeighCellsPerBandclassCDMA2000-v920.h | 38 + lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c | 70 + lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h | 40 + .../NeighCellsPerBandclassListCDMA2000-v920.c | 58 + .../NeighCellsPerBandclassListCDMA2000-v920.h | 44 + .../asn/NeighCellsPerBandclassListCDMA2000.c | 58 + .../asn/NeighCellsPerBandclassListCDMA2000.h | 44 + lte/rrc/asn/NextHopChainingCount.c | 146 ++ lte/rrc/asn/NextHopChainingCount.h | 41 + .../NonContiguousUL-RA-WithinCC-List-r10.c | 58 + .../NonContiguousUL-RA-WithinCC-List-r10.h | 44 + lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c | 199 ++ lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h | 44 + lte/rrc/asn/OCTET_STRING.c | 19 +- lte/rrc/asn/OCTET_STRING.h | 2 +- lte/rrc/asn/OtherConfig-r9.c | 62 + lte/rrc/asn/OtherConfig-r9.h | 47 + lte/rrc/asn/P-Max.c | 10 +- lte/rrc/asn/P-Max.h | 5 +- lte/rrc/asn/PCCH-Config.c | 364 +++ lte/rrc/asn/PCCH-Config.h | 59 + lte/rrc/asn/PCCH-Message.c | 60 + lte/rrc/asn/PCCH-Message.h | 38 + lte/rrc/asn/PCCH-MessageType.c | 162 ++ lte/rrc/asn/PCCH-MessageType.h | 66 + lte/rrc/asn/PDCP-Config.c | 944 ++++++++ lte/rrc/asn/PDCP-Config.h | 115 + lte/rrc/asn/PDCP-Parameters.c | 390 ++++ lte/rrc/asn/PDCP-Parameters.h | 78 + lte/rrc/asn/PDSCH-ConfigCommon.c | 130 ++ lte/rrc/asn/PDSCH-ConfigCommon.h | 39 + lte/rrc/asn/PDSCH-ConfigDedicated.c | 211 ++ lte/rrc/asn/PDSCH-ConfigDedicated.h | 51 + lte/rrc/asn/PHICH-Config.c | 35 +- lte/rrc/asn/PHICH-Config.h | 25 +- lte/rrc/asn/PLMN-Identity.c | 15 +- lte/rrc/asn/PLMN-Identity.h | 5 +- lte/rrc/asn/PLMN-IdentityInfo.c | 24 +- lte/rrc/asn/PLMN-IdentityInfo.h | 13 +- lte/rrc/asn/PLMN-IdentityList.c | 9 +- lte/rrc/asn/PLMN-IdentityList.h | 5 +- lte/rrc/asn/PLMN-IdentityList2.c | 58 + lte/rrc/asn/PLMN-IdentityList2.h | 44 + lte/rrc/asn/PMCH-Config-r9.c | 291 +++ lte/rrc/asn/PMCH-Config-r9.h | 58 + lte/rrc/asn/PMCH-Info-r9.c | 70 + lte/rrc/asn/PMCH-Info-r9.h | 44 + lte/rrc/asn/PMCH-InfoList-r9.c | 58 + lte/rrc/asn/PMCH-InfoList-r9.h | 44 + lte/rrc/asn/PRACH-Config.c | 102 + lte/rrc/asn/PRACH-Config.h | 45 + lte/rrc/asn/PRACH-ConfigInfo.c | 180 ++ lte/rrc/asn/PRACH-ConfigInfo.h | 42 + lte/rrc/asn/PRACH-ConfigSCell-r10.c | 90 + lte/rrc/asn/PRACH-ConfigSCell-r10.h | 38 + lte/rrc/asn/PRACH-ConfigSIB.c | 100 + lte/rrc/asn/PRACH-ConfigSIB.h | 40 + lte/rrc/asn/PUCCH-ConfigCommon.c | 321 +++ lte/rrc/asn/PUCCH-ConfigCommon.h | 50 + lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c | 1117 +++++++++ lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h | 140 ++ lte/rrc/asn/PUCCH-ConfigDedicated.c | 510 +++++ lte/rrc/asn/PUCCH-ConfigDedicated.h | 76 + lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c | 72 + lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h | 40 + lte/rrc/asn/PUSCH-ConfigCommon.c | 352 +++ lte/rrc/asn/PUSCH-ConfigCommon.h | 57 + lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c | 519 +++++ lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h | 58 + lte/rrc/asn/PUSCH-ConfigDedicated.c | 170 ++ lte/rrc/asn/PUSCH-ConfigDedicated.h | 40 + lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c | 346 +++ lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h | 49 + lte/rrc/asn/Paging-v890-IEs.c | 72 + lte/rrc/asn/Paging-v890-IEs.h | 45 + lte/rrc/asn/Paging-v920-IEs.c | 247 ++ lte/rrc/asn/Paging-v920-IEs.h | 49 + lte/rrc/asn/Paging.c | 366 +++ lte/rrc/asn/Paging.h | 59 + lte/rrc/asn/PagingRecord.c | 209 ++ lte/rrc/asn/PagingRecord.h | 51 + lte/rrc/asn/PagingRecordList.c | 58 + lte/rrc/asn/PagingRecordList.h | 44 + lte/rrc/asn/PagingUE-Identity.c | 71 + lte/rrc/asn/PagingUE-Identity.h | 56 + lte/rrc/asn/PhyLayerParameters-v1020.c | 944 ++++++++ lte/rrc/asn/PhyLayerParameters-v1020.h | 76 + lte/rrc/asn/PhyLayerParameters-v920.c | 346 +++ lte/rrc/asn/PhyLayerParameters-v920.h | 49 + lte/rrc/asn/PhyLayerParameters.c | 70 + lte/rrc/asn/PhyLayerParameters.h | 39 + lte/rrc/asn/PhysCellId.c | 146 ++ lte/rrc/asn/PhysCellId.h | 41 + lte/rrc/asn/PhysCellIdCDMA2000.c | 146 ++ lte/rrc/asn/PhysCellIdCDMA2000.h | 41 + lte/rrc/asn/PhysCellIdGERAN.c | 142 ++ lte/rrc/asn/PhysCellIdGERAN.h | 39 + lte/rrc/asn/PhysCellIdListCDMA2000-v920.c | 58 + lte/rrc/asn/PhysCellIdListCDMA2000-v920.h | 39 + lte/rrc/asn/PhysCellIdListCDMA2000.c | 58 + lte/rrc/asn/PhysCellIdListCDMA2000.h | 39 + lte/rrc/asn/PhysCellIdRange.c | 239 ++ lte/rrc/asn/PhysCellIdRange.h | 61 + lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c | 102 + lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h | 40 + lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c | 58 + lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h | 44 + lte/rrc/asn/PhysCellIdUTRA-FDD.c | 146 ++ lte/rrc/asn/PhysCellIdUTRA-FDD.h | 41 + lte/rrc/asn/PhysCellIdUTRA-TDD.c | 146 ++ lte/rrc/asn/PhysCellIdUTRA-TDD.h | 41 + lte/rrc/asn/PhysicalConfigDedicated.c | 418 ++++ lte/rrc/asn/PhysicalConfigDedicated.h | 139 ++ .../asn/PhysicalConfigDedicatedSCell-r10.c | 272 +++ .../asn/PhysicalConfigDedicatedSCell-r10.h | 87 + lte/rrc/asn/PollByte.c | 174 ++ lte/rrc/asn/PollByte.h | 61 + lte/rrc/asn/PollPDU.c | 158 ++ lte/rrc/asn/PollPDU.h | 53 + lte/rrc/asn/PreRegistrationInfoHRPD.c | 82 + lte/rrc/asn/PreRegistrationInfoHRPD.h | 47 + lte/rrc/asn/PreRegistrationZoneIdHRPD.c | 146 ++ lte/rrc/asn/PreRegistrationZoneIdHRPD.h | 41 + lte/rrc/asn/PresenceAntennaPort1.c | 124 + lte/rrc/asn/PresenceAntennaPort1.h | 41 + lte/rrc/asn/ProximityIndication-r9-IEs.c | 284 +++ lte/rrc/asn/ProximityIndication-r9-IEs.h | 76 + lte/rrc/asn/ProximityIndication-r9.c | 244 ++ lte/rrc/asn/ProximityIndication-r9.h | 78 + lte/rrc/asn/ProximityIndication-v930-IEs.c | 110 + lte/rrc/asn/ProximityIndication-v930-IEs.h | 43 + lte/rrc/asn/Q-OffsetRange.c | 204 ++ lte/rrc/asn/Q-OffsetRange.h | 76 + lte/rrc/asn/Q-OffsetRangeInterRAT.c | 146 ++ lte/rrc/asn/Q-OffsetRangeInterRAT.h | 41 + lte/rrc/asn/Q-QualMin-r9.c | 10 +- lte/rrc/asn/Q-QualMin-r9.h | 5 +- lte/rrc/asn/Q-RxLevMin.c | 10 +- lte/rrc/asn/Q-RxLevMin.h | 5 +- lte/rrc/asn/QuantityConfig.c | 102 + lte/rrc/asn/QuantityConfig.h | 55 + lte/rrc/asn/QuantityConfigCDMA2000.c | 199 ++ lte/rrc/asn/QuantityConfigCDMA2000.h | 45 + lte/rrc/asn/QuantityConfigEUTRA.c | 108 + lte/rrc/asn/QuantityConfigEUTRA.h | 39 + lte/rrc/asn/QuantityConfigGERAN.c | 227 ++ lte/rrc/asn/QuantityConfigGERAN.h | 46 + lte/rrc/asn/QuantityConfigUTRA-v1020.c | 80 + lte/rrc/asn/QuantityConfigUTRA-v1020.h | 38 + lte/rrc/asn/QuantityConfigUTRA.c | 376 ++++ lte/rrc/asn/QuantityConfigUTRA.h | 52 + lte/rrc/asn/RACH-ConfigCommon.c | 1789 +++++++++++++++ lte/rrc/asn/RACH-ConfigCommon.h | 195 ++ lte/rrc/asn/RACH-ConfigDedicated.c | 130 ++ lte/rrc/asn/RACH-ConfigDedicated.h | 39 + lte/rrc/asn/RAND-CDMA2000.c | 152 ++ lte/rrc/asn/RAND-CDMA2000.h | 41 + lte/rrc/asn/RAT-Type.c | 160 ++ lte/rrc/asn/RAT-Type.h | 56 + lte/rrc/asn/RF-Parameters-v1020.c | 60 + lte/rrc/asn/RF-Parameters-v1020.h | 38 + lte/rrc/asn/RF-Parameters.c | 60 + lte/rrc/asn/RF-Parameters.h | 38 + lte/rrc/asn/RLC-Config.c | 323 +++ lte/rrc/asn/RLC-Config.h | 85 + lte/rrc/asn/RLF-Report-r9.c | 577 +++++ lte/rrc/asn/RLF-Report-r9.h | 109 + lte/rrc/asn/RLF-TimersAndConstants-r9.c | 915 ++++++++ lte/rrc/asn/RLF-TimersAndConstants-r9.h | 117 + lte/rrc/asn/RN-SubframeConfig-r10.c | 1638 ++++++++++++++ lte/rrc/asn/RN-SubframeConfig-r10.h | 179 ++ lte/rrc/asn/RN-SystemInfo-r10.c | 97 + lte/rrc/asn/RN-SystemInfo-r10.h | 49 + lte/rrc/asn/RNReconfiguration-r10-IEs.c | 130 ++ lte/rrc/asn/RNReconfiguration-r10-IEs.h | 53 + lte/rrc/asn/RNReconfiguration-r10.c | 254 +++ lte/rrc/asn/RNReconfiguration-r10.h | 80 + .../asn/RNReconfigurationComplete-r10-IEs.c | 110 + .../asn/RNReconfigurationComplete-r10-IEs.h | 43 + lte/rrc/asn/RNReconfigurationComplete-r10.c | 254 +++ lte/rrc/asn/RNReconfigurationComplete-r10.h | 80 + lte/rrc/asn/RRC-TransactionIdentifier.c | 146 ++ lte/rrc/asn/RRC-TransactionIdentifier.h | 41 + .../asn/RRCConnectionReconfiguration-r8-IEs.c | 194 ++ .../asn/RRCConnectionReconfiguration-r8-IEs.h | 64 + .../RRCConnectionReconfiguration-v1020-IEs.c | 120 + .../RRCConnectionReconfiguration-v1020-IEs.h | 51 + .../RRCConnectionReconfiguration-v890-IEs.c | 72 + .../RRCConnectionReconfiguration-v890-IEs.h | 45 + .../RRCConnectionReconfiguration-v920-IEs.c | 219 ++ .../RRCConnectionReconfiguration-v920-IEs.h | 54 + lte/rrc/asn/RRCConnectionReconfiguration.c | 294 +++ lte/rrc/asn/RRCConnectionReconfiguration.h | 88 + ...ConnectionReconfigurationComplete-r8-IEs.c | 62 + ...ConnectionReconfigurationComplete-r8-IEs.h | 43 + ...nectionReconfigurationComplete-v1020-IEs.c | 394 ++++ ...nectionReconfigurationComplete-v1020-IEs.h | 54 + ...nnectionReconfigurationComplete-v8a0-IEs.c | 72 + ...nnectionReconfigurationComplete-v8a0-IEs.h | 45 + .../RRCConnectionReconfigurationComplete.c | 171 ++ .../RRCConnectionReconfigurationComplete.h | 61 + .../asn/RRCConnectionReestablishment-r8-IEs.c | 82 + .../asn/RRCConnectionReestablishment-r8-IEs.h | 47 + .../RRCConnectionReestablishment-v8a0-IEs.c | 110 + .../RRCConnectionReestablishment-v8a0-IEs.h | 43 + lte/rrc/asn/RRCConnectionReestablishment.c | 294 +++ lte/rrc/asn/RRCConnectionReestablishment.h | 88 + ...ConnectionReestablishmentComplete-r8-IEs.c | 62 + ...ConnectionReestablishmentComplete-r8-IEs.h | 43 + ...nectionReestablishmentComplete-v1020-IEs.c | 247 ++ ...nectionReestablishmentComplete-v1020-IEs.h | 49 + ...nnectionReestablishmentComplete-v8a0-IEs.c | 72 + ...nnectionReestablishmentComplete-v8a0-IEs.h | 45 + ...nnectionReestablishmentComplete-v920-IEs.c | 209 ++ ...nnectionReestablishmentComplete-v920-IEs.h | 51 + .../RRCConnectionReestablishmentComplete.c | 171 ++ .../RRCConnectionReestablishmentComplete.h | 61 + ...RCConnectionReestablishmentReject-r8-IEs.c | 62 + ...RCConnectionReestablishmentReject-r8-IEs.h | 43 + ...ConnectionReestablishmentReject-v8a0-IEs.c | 110 + ...ConnectionReestablishmentReject-v8a0-IEs.h | 43 + .../asn/RRCConnectionReestablishmentReject.c | 161 ++ .../asn/RRCConnectionReestablishmentReject.h | 59 + ...CConnectionReestablishmentRequest-r8-IEs.c | 116 + ...CConnectionReestablishmentRequest-r8-IEs.h | 42 + .../asn/RRCConnectionReestablishmentRequest.c | 161 ++ .../asn/RRCConnectionReestablishmentRequest.h | 59 + lte/rrc/asn/RRCConnectionReject-r8-IEs.c | 102 + lte/rrc/asn/RRCConnectionReject-r8-IEs.h | 45 + lte/rrc/asn/RRCConnectionReject-v1020-IEs.c | 140 ++ lte/rrc/asn/RRCConnectionReject-v1020-IEs.h | 43 + lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c | 72 + lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h | 45 + lte/rrc/asn/RRCConnectionReject.c | 244 ++ lte/rrc/asn/RRCConnectionReject.h | 78 + lte/rrc/asn/RRCConnectionRelease-r8-IEs.c | 92 + lte/rrc/asn/RRCConnectionRelease-r8-IEs.h | 51 + lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c | 140 ++ lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h | 43 + lte/rrc/asn/RRCConnectionRelease-v890-IEs.c | 72 + lte/rrc/asn/RRCConnectionRelease-v890-IEs.h | 45 + lte/rrc/asn/RRCConnectionRelease-v920-IEs.c | 155 ++ lte/rrc/asn/RRCConnectionRelease-v920-IEs.h | 74 + lte/rrc/asn/RRCConnectionRelease.c | 254 +++ lte/rrc/asn/RRCConnectionRelease.h | 80 + lte/rrc/asn/RRCConnectionRequest-r8-IEs.c | 17 +- lte/rrc/asn/RRCConnectionRequest-r8-IEs.h | 5 +- lte/rrc/asn/RRCConnectionRequest.c | 37 +- lte/rrc/asn/RRCConnectionRequest.h | 21 +- lte/rrc/asn/RRCConnectionSetup-r8-IEs.c | 72 + lte/rrc/asn/RRCConnectionSetup-r8-IEs.h | 45 + lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c | 110 + lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h | 43 + lte/rrc/asn/RRCConnectionSetup.c | 294 +++ lte/rrc/asn/RRCConnectionSetup.h | 88 + .../asn/RRCConnectionSetupComplete-r8-IEs.c | 122 + .../asn/RRCConnectionSetupComplete-r8-IEs.h | 50 + .../RRCConnectionSetupComplete-v1020-IEs.c | 692 ++++++ .../RRCConnectionSetupComplete-v1020-IEs.h | 66 + .../asn/RRCConnectionSetupComplete-v8a0-IEs.c | 72 + .../asn/RRCConnectionSetupComplete-v8a0-IEs.h | 45 + lte/rrc/asn/RRCConnectionSetupComplete.c | 254 +++ lte/rrc/asn/RRCConnectionSetupComplete.h | 80 + lte/rrc/asn/RRM-Config.c | 325 +++ lte/rrc/asn/RRM-Config.h | 110 + lte/rrc/asn/RSRP-Range.c | 146 ++ lte/rrc/asn/RSRP-Range.h | 41 + lte/rrc/asn/RSRQ-Range.c | 146 ++ lte/rrc/asn/RSRQ-Range.h | 41 + lte/rrc/asn/RSTD-InterFreqInfo-r10.c | 100 + lte/rrc/asn/RSTD-InterFreqInfo-r10.h | 44 + lte/rrc/asn/RSTD-InterFreqInfoList-r10.c | 58 + lte/rrc/asn/RSTD-InterFreqInfoList-r10.h | 44 + lte/rrc/asn/RadioResourceConfigCommon.c | 182 ++ lte/rrc/asn/RadioResourceConfigCommon.h | 75 + .../asn/RadioResourceConfigCommonSCell-r10.c | 661 ++++++ .../asn/RadioResourceConfigCommonSCell-r10.h | 111 + lte/rrc/asn/RadioResourceConfigCommonSIB.c | 162 ++ lte/rrc/asn/RadioResourceConfigCommonSIB.h | 63 + lte/rrc/asn/RadioResourceConfigDedicated.c | 205 ++ lte/rrc/asn/RadioResourceConfigDedicated.h | 84 + .../RadioResourceConfigDedicatedSCell-r10.c | 62 + .../RadioResourceConfigDedicatedSCell-r10.h | 47 + lte/rrc/asn/RedirectedCarrierInfo.c | 121 + lte/rrc/asn/RedirectedCarrierInfo.h | 68 + lte/rrc/asn/ReestabUE-Identity.c | 80 + lte/rrc/asn/ReestabUE-Identity.h | 42 + lte/rrc/asn/ReestablishmentCause.c | 150 ++ lte/rrc/asn/ReestablishmentCause.h | 49 + lte/rrc/asn/ReestablishmentInfo.c | 81 + lte/rrc/asn/ReestablishmentInfo.h | 50 + lte/rrc/asn/RegisteredMME.c | 118 + lte/rrc/asn/RegisteredMME.h | 47 + lte/rrc/asn/ReleaseCause.c | 150 ++ lte/rrc/asn/ReleaseCause.h | 49 + lte/rrc/asn/ReportConfigEUTRA.c | 1998 +++++++++++++++++ lte/rrc/asn/ReportConfigEUTRA.h | 184 ++ lte/rrc/asn/ReportConfigId.c | 146 ++ lte/rrc/asn/ReportConfigId.h | 41 + lte/rrc/asn/ReportConfigInterRAT.c | 1222 ++++++++++ lte/rrc/asn/ReportConfigInterRAT.h | 168 ++ lte/rrc/asn/ReportConfigToAddMod.c | 133 ++ lte/rrc/asn/ReportConfigToAddMod.h | 58 + lte/rrc/asn/ReportConfigToAddModList.c | 58 + lte/rrc/asn/ReportConfigToAddModList.h | 44 + lte/rrc/asn/ReportConfigToRemoveList.c | 58 + lte/rrc/asn/ReportConfigToRemoveList.h | 39 + lte/rrc/asn/ReportInterval.c | 174 ++ lte/rrc/asn/ReportInterval.h | 61 + lte/rrc/asn/ReportProximityConfig-r9.c | 346 +++ lte/rrc/asn/ReportProximityConfig-r9.h | 49 + lte/rrc/asn/ReselectionThreshold.c | 146 ++ lte/rrc/asn/ReselectionThreshold.h | 41 + lte/rrc/asn/ReselectionThresholdQ-r9.c | 146 ++ lte/rrc/asn/ReselectionThresholdQ-r9.h | 41 + lte/rrc/asn/S-TMSI.c | 15 +- lte/rrc/asn/S-TMSI.h | 5 +- lte/rrc/asn/SCellIndex-r10.c | 146 ++ lte/rrc/asn/SCellIndex-r10.h | 41 + lte/rrc/asn/SCellToAddMod-r10.c | 155 ++ lte/rrc/asn/SCellToAddMod-r10.h | 61 + lte/rrc/asn/SCellToAddModList-r10.c | 58 + lte/rrc/asn/SCellToAddModList-r10.h | 44 + lte/rrc/asn/SCellToReleaseList-r10.c | 58 + lte/rrc/asn/SCellToReleaseList-r10.h | 39 + lte/rrc/asn/SI-OrPSI-GERAN.c | 71 + lte/rrc/asn/SI-OrPSI-GERAN.h | 49 + lte/rrc/asn/SIB-MappingInfo.c | 9 +- lte/rrc/asn/SIB-MappingInfo.h | 5 +- lte/rrc/asn/SIB-Type.c | 16 +- lte/rrc/asn/SIB-Type.h | 5 +- lte/rrc/asn/SN-FieldLength.c | 146 ++ lte/rrc/asn/SN-FieldLength.h | 47 + lte/rrc/asn/SON-Parameters-r9.c | 199 ++ lte/rrc/asn/SON-Parameters-r9.h | 44 + lte/rrc/asn/SPS-Config.c | 82 + lte/rrc/asn/SPS-Config.h | 48 + lte/rrc/asn/SPS-ConfigDL.c | 469 ++++ lte/rrc/asn/SPS-ConfigDL.h | 99 + lte/rrc/asn/SPS-ConfigUL.c | 726 ++++++ lte/rrc/asn/SPS-ConfigUL.h | 100 + lte/rrc/asn/SPS-RA-ConfigList-rlola.c | 72 + lte/rrc/asn/SPS-RA-ConfigList-rlola.h | 40 + lte/rrc/asn/SRB-ToAddMod.c | 238 ++ lte/rrc/asn/SRB-ToAddMod.h | 78 + lte/rrc/asn/SRB-ToAddModList.c | 58 + lte/rrc/asn/SRB-ToAddModList.h | 44 + lte/rrc/asn/SRS-ConfigAp-r10.c | 597 +++++ lte/rrc/asn/SRS-ConfigAp-r10.h | 70 + lte/rrc/asn/SchedulingInfo.c | 24 +- lte/rrc/asn/SchedulingInfo.h | 23 +- lte/rrc/asn/SchedulingInfoList.c | 9 +- lte/rrc/asn/SchedulingInfoList.h | 5 +- lte/rrc/asn/SchedulingRequestConfig-v1020.c | 92 + lte/rrc/asn/SchedulingRequestConfig-v1020.h | 38 + lte/rrc/asn/SchedulingRequestConfig.c | 355 +++ lte/rrc/asn/SchedulingRequestConfig.h | 70 + .../SecondaryPreRegistrationZoneIdListHRPD.c | 58 + .../SecondaryPreRegistrationZoneIdListHRPD.h | 39 + lte/rrc/asn/SecurityAlgorithmConfig.c | 376 ++++ lte/rrc/asn/SecurityAlgorithmConfig.h | 69 + lte/rrc/asn/SecurityConfigHO.c | 292 +++ lte/rrc/asn/SecurityConfigHO.h | 81 + lte/rrc/asn/SecurityConfigSMC.c | 60 + lte/rrc/asn/SecurityConfigSMC.h | 42 + lte/rrc/asn/SecurityModeCommand-r8-IEs.c | 72 + lte/rrc/asn/SecurityModeCommand-r8-IEs.h | 45 + lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c | 110 + lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h | 43 + lte/rrc/asn/SecurityModeCommand.c | 254 +++ lte/rrc/asn/SecurityModeCommand.h | 80 + lte/rrc/asn/SecurityModeComplete-r8-IEs.c | 62 + lte/rrc/asn/SecurityModeComplete-r8-IEs.h | 43 + lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c | 110 + lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h | 43 + lte/rrc/asn/SecurityModeComplete.c | 171 ++ lte/rrc/asn/SecurityModeComplete.h | 61 + lte/rrc/asn/SecurityModeFailure-r8-IEs.c | 62 + lte/rrc/asn/SecurityModeFailure-r8-IEs.h | 43 + lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c | 110 + lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h | 43 + lte/rrc/asn/SecurityModeFailure.c | 171 ++ lte/rrc/asn/SecurityModeFailure.h | 61 + lte/rrc/asn/ServCellIndex-r10.c | 146 ++ lte/rrc/asn/ServCellIndex-r10.h | 41 + lte/rrc/asn/ShortMAC-I.c | 152 ++ lte/rrc/asn/ShortMAC-I.h | 41 + lte/rrc/asn/SoundingRS-UL-ConfigCommon.c | 611 +++++ lte/rrc/asn/SoundingRS-UL-ConfigCommon.h | 94 + .../asn/SoundingRS-UL-ConfigDedicated-v1020.c | 203 ++ .../asn/SoundingRS-UL-ConfigDedicated-v1020.h | 47 + lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c | 711 ++++++ lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h | 89 + ...undingRS-UL-ConfigDedicatedAperiodic-r10.c | 384 ++++ ...undingRS-UL-ConfigDedicatedAperiodic-r10.h | 96 + lte/rrc/asn/SpeedStateScaleFactors.c | 356 +++ lte/rrc/asn/SpeedStateScaleFactors.h | 55 + lte/rrc/asn/SupportedBandCombination-r10.c | 58 + lte/rrc/asn/SupportedBandCombination-r10.h | 44 + lte/rrc/asn/SupportedBandEUTRA.c | 100 + lte/rrc/asn/SupportedBandEUTRA.h | 40 + lte/rrc/asn/SupportedBandGERAN.c | 176 ++ lte/rrc/asn/SupportedBandGERAN.h | 64 + lte/rrc/asn/SupportedBandList1XRTT.c | 58 + lte/rrc/asn/SupportedBandList1XRTT.h | 39 + lte/rrc/asn/SupportedBandListEUTRA.c | 58 + lte/rrc/asn/SupportedBandListEUTRA.h | 44 + lte/rrc/asn/SupportedBandListGERAN.c | 58 + lte/rrc/asn/SupportedBandListGERAN.h | 39 + lte/rrc/asn/SupportedBandListHRPD.c | 58 + lte/rrc/asn/SupportedBandListHRPD.h | 39 + lte/rrc/asn/SupportedBandListUTRA-FDD.c | 58 + lte/rrc/asn/SupportedBandListUTRA-FDD.h | 39 + lte/rrc/asn/SupportedBandListUTRA-TDD128.c | 58 + lte/rrc/asn/SupportedBandListUTRA-TDD128.h | 39 + lte/rrc/asn/SupportedBandListUTRA-TDD384.c | 58 + lte/rrc/asn/SupportedBandListUTRA-TDD384.h | 39 + lte/rrc/asn/SupportedBandListUTRA-TDD768.c | 58 + lte/rrc/asn/SupportedBandListUTRA-TDD768.h | 39 + lte/rrc/asn/SupportedBandUTRA-FDD.c | 208 ++ lte/rrc/asn/SupportedBandUTRA-FDD.h | 80 + lte/rrc/asn/SupportedBandUTRA-TDD128.c | 176 ++ lte/rrc/asn/SupportedBandUTRA-TDD128.h | 64 + lte/rrc/asn/SupportedBandUTRA-TDD384.c | 176 ++ lte/rrc/asn/SupportedBandUTRA-TDD384.h | 64 + lte/rrc/asn/SupportedBandUTRA-TDD768.c | 176 ++ lte/rrc/asn/SupportedBandUTRA-TDD768.h | 64 + lte/rrc/asn/SystemInfoListGERAN.c | 89 + lte/rrc/asn/SystemInfoListGERAN.h | 39 + lte/rrc/asn/SystemInformation-r8-IEs.c | 317 +++ lte/rrc/asn/SystemInformation-r8-IEs.h | 105 + lte/rrc/asn/SystemInformation-v8a0-IEs.c | 110 + lte/rrc/asn/SystemInformation-v8a0-IEs.h | 43 + lte/rrc/asn/SystemInformation.c | 161 ++ lte/rrc/asn/SystemInformation.h | 59 + .../SystemInformationBlockType1-v890-IEs.c | 15 +- .../SystemInformationBlockType1-v890-IEs.h | 5 +- .../SystemInformationBlockType1-v920-IEs.c | 34 +- .../SystemInformationBlockType1-v920-IEs.h | 13 +- lte/rrc/asn/SystemInformationBlockType1.c | 124 +- lte/rrc/asn/SystemInformationBlockType1.h | 43 +- lte/rrc/asn/SystemInformationBlockType10.c | 236 ++ lte/rrc/asn/SystemInformationBlockType10.h | 47 + lte/rrc/asn/SystemInformationBlockType11.c | 394 ++++ lte/rrc/asn/SystemInformationBlockType11.h | 58 + lte/rrc/asn/SystemInformationBlockType12-r9.c | 394 ++++ lte/rrc/asn/SystemInformationBlockType12-r9.h | 58 + lte/rrc/asn/SystemInformationBlockType13-r9.c | 82 + lte/rrc/asn/SystemInformationBlockType13-r9.h | 46 + lte/rrc/asn/SystemInformationBlockType2.c | 449 ++++ lte/rrc/asn/SystemInformationBlockType2.h | 87 + lte/rrc/asn/SystemInformationBlockType3.c | 1102 +++++++++ lte/rrc/asn/SystemInformationBlockType3.h | 147 ++ lte/rrc/asn/SystemInformationBlockType4.c | 92 + lte/rrc/asn/SystemInformationBlockType4.h | 55 + lte/rrc/asn/SystemInformationBlockType5.c | 72 + lte/rrc/asn/SystemInformationBlockType5.h | 44 + lte/rrc/asn/SystemInformationBlockType6.c | 102 + lte/rrc/asn/SystemInformationBlockType6.h | 57 + lte/rrc/asn/SystemInformationBlockType7.c | 92 + lte/rrc/asn/SystemInformationBlockType7.h | 54 + lte/rrc/asn/SystemInformationBlockType8.c | 505 +++++ lte/rrc/asn/SystemInformationBlockType8.h | 88 + lte/rrc/asn/SystemInformationBlockType9.c | 103 + lte/rrc/asn/SystemInformationBlockType9.h | 43 + lte/rrc/asn/SystemTimeInfoCDMA2000.c | 205 ++ lte/rrc/asn/SystemTimeInfoCDMA2000.h | 57 + lte/rrc/asn/T-PollRetransmit.c | 270 +++ lte/rrc/asn/T-PollRetransmit.h | 109 + lte/rrc/asn/T-Reordering.c | 206 ++ lte/rrc/asn/T-Reordering.h | 77 + lte/rrc/asn/T-Reselection.c | 146 ++ lte/rrc/asn/T-Reselection.h | 41 + lte/rrc/asn/T-StatusProhibit.c | 270 +++ lte/rrc/asn/T-StatusProhibit.h | 109 + lte/rrc/asn/TDD-Config.c | 35 +- lte/rrc/asn/TDD-Config.h | 45 +- lte/rrc/asn/TMGI-r9.c | 194 ++ lte/rrc/asn/TMGI-r9.h | 58 + lte/rrc/asn/TPC-Index.c | 131 ++ lte/rrc/asn/TPC-Index.h | 49 + lte/rrc/asn/TPC-PDCCH-Config.c | 170 ++ lte/rrc/asn/TPC-PDCCH-Config.h | 58 + lte/rrc/asn/ThresholdCDMA2000.c | 146 ++ lte/rrc/asn/ThresholdCDMA2000.h | 41 + lte/rrc/asn/ThresholdEUTRA.c | 71 + lte/rrc/asn/ThresholdEUTRA.h | 50 + lte/rrc/asn/ThresholdGERAN.c | 146 ++ lte/rrc/asn/ThresholdGERAN.h | 41 + lte/rrc/asn/ThresholdUTRA.c | 131 ++ lte/rrc/asn/ThresholdUTRA.h | 49 + lte/rrc/asn/TimeAlignmentTimer.c | 158 ++ lte/rrc/asn/TimeAlignmentTimer.h | 53 + lte/rrc/asn/TimeToTrigger.c | 174 ++ lte/rrc/asn/TimeToTrigger.h | 61 + lte/rrc/asn/TraceReference-r10.c | 101 + lte/rrc/asn/TraceReference-r10.h | 40 + lte/rrc/asn/TrackingAreaCode.c | 10 +- lte/rrc/asn/TrackingAreaCode.h | 5 +- lte/rrc/asn/TrackingAreaCodeList-r10.c | 58 + lte/rrc/asn/TrackingAreaCodeList-r10.h | 39 + .../asn/UE-BasedNetwPerfMeasParameters-r10.c | 346 +++ .../asn/UE-BasedNetwPerfMeasParameters-r10.h | 49 + lte/rrc/asn/UE-CapabilityRAT-Container.c | 70 + lte/rrc/asn/UE-CapabilityRAT-Container.h | 40 + lte/rrc/asn/UE-CapabilityRAT-ContainerList.c | 58 + lte/rrc/asn/UE-CapabilityRAT-ContainerList.h | 44 + lte/rrc/asn/UE-CapabilityRequest.c | 58 + lte/rrc/asn/UE-CapabilityRequest.h | 39 + lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c | 246 ++ lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h | 67 + lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c | 279 +++ lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h | 67 + lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c | 72 + lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h | 45 + lte/rrc/asn/UE-EUTRA-Capability.c | 323 +++ lte/rrc/asn/UE-EUTRA-Capability.h | 83 + lte/rrc/asn/UE-TimersAndConstants.c | 1012 +++++++++ lte/rrc/asn/UE-TimersAndConstants.h | 113 + lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c | 72 + lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h | 45 + lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c | 110 + lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h | 43 + lte/rrc/asn/UECapabilityEnquiry.c | 254 +++ lte/rrc/asn/UECapabilityEnquiry.h | 80 + lte/rrc/asn/UECapabilityInformation-r8-IEs.c | 72 + lte/rrc/asn/UECapabilityInformation-r8-IEs.h | 45 + .../asn/UECapabilityInformation-v8a0-IEs.c | 110 + .../asn/UECapabilityInformation-v8a0-IEs.h | 43 + lte/rrc/asn/UECapabilityInformation.c | 294 +++ lte/rrc/asn/UECapabilityInformation.h | 88 + lte/rrc/asn/UEInformationRequest-r9-IEs.c | 82 + lte/rrc/asn/UEInformationRequest-r9-IEs.h | 46 + lte/rrc/asn/UEInformationRequest-r9.c | 254 +++ lte/rrc/asn/UEInformationRequest-r9.h | 80 + lte/rrc/asn/UEInformationRequest-v1020-IEs.c | 247 ++ lte/rrc/asn/UEInformationRequest-v1020-IEs.h | 49 + lte/rrc/asn/UEInformationRequest-v930-IEs.c | 72 + lte/rrc/asn/UEInformationRequest-v930-IEs.h | 45 + lte/rrc/asn/UEInformationResponse-r9-IEs.c | 175 ++ lte/rrc/asn/UEInformationResponse-r9-IEs.h | 55 + lte/rrc/asn/UEInformationResponse-r9.c | 254 +++ lte/rrc/asn/UEInformationResponse-r9.h | 80 + lte/rrc/asn/UEInformationResponse-v1020-IEs.c | 110 + lte/rrc/asn/UEInformationResponse-v1020-IEs.h | 48 + lte/rrc/asn/UEInformationResponse-v930-IEs.c | 72 + lte/rrc/asn/UEInformationResponse-v930-IEs.h | 45 + ...ERadioAccessCapabilityInformation-r8-IEs.c | 134 ++ ...ERadioAccessCapabilityInformation-r8-IEs.h | 42 + .../asn/UERadioAccessCapabilityInformation.c | 283 +++ .../asn/UERadioAccessCapabilityInformation.h | 85 + lte/rrc/asn/UL-AM-RLC.c | 241 ++ lte/rrc/asn/UL-AM-RLC.h | 57 + lte/rrc/asn/UL-CCCH-Message.c | 60 + lte/rrc/asn/UL-CCCH-Message.h | 38 + lte/rrc/asn/UL-CCCH-MessageType.c | 172 ++ lte/rrc/asn/UL-CCCH-MessageType.h | 69 + lte/rrc/asn/UL-CyclicPrefixLength.c | 146 ++ lte/rrc/asn/UL-CyclicPrefixLength.h | 47 + lte/rrc/asn/UL-DCCH-Message.c | 60 + lte/rrc/asn/UL-DCCH-Message.h | 38 + lte/rrc/asn/UL-DCCH-MessageType.c | 312 +++ lte/rrc/asn/UL-DCCH-MessageType.h | 111 + lte/rrc/asn/UL-ReferenceSignalsPUSCH.c | 150 ++ lte/rrc/asn/UL-ReferenceSignalsPUSCH.h | 42 + lte/rrc/asn/UL-UM-RLC.c | 60 + lte/rrc/asn/UL-UM-RLC.h | 38 + .../ULHandoverPreparationTransfer-r8-IEs.c | 128 ++ .../ULHandoverPreparationTransfer-r8-IEs.h | 49 + .../ULHandoverPreparationTransfer-v8a0-IEs.c | 110 + .../ULHandoverPreparationTransfer-v8a0-IEs.h | 43 + lte/rrc/asn/ULHandoverPreparationTransfer.c | 244 ++ lte/rrc/asn/ULHandoverPreparationTransfer.h | 78 + lte/rrc/asn/ULInformationTransfer-r8-IEs.c | 145 ++ lte/rrc/asn/ULInformationTransfer-r8-IEs.h | 65 + lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c | 110 + lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h | 43 + lte/rrc/asn/ULInformationTransfer.c | 244 ++ lte/rrc/asn/ULInformationTransfer.h | 78 + lte/rrc/asn/UplinkPowerControlCommon-v1020.c | 364 +++ lte/rrc/asn/UplinkPowerControlCommon-v1020.h | 59 + lte/rrc/asn/UplinkPowerControlCommon.c | 341 +++ lte/rrc/asn/UplinkPowerControlCommon.h | 57 + .../asn/UplinkPowerControlCommonSCell-r10.c | 251 +++ .../asn/UplinkPowerControlCommonSCell-r10.h | 53 + .../asn/UplinkPowerControlDedicated-v1020.c | 102 + .../asn/UplinkPowerControlDedicated-v1020.h | 45 + lte/rrc/asn/UplinkPowerControlDedicated.c | 359 +++ lte/rrc/asn/UplinkPowerControlDedicated.h | 53 + .../UplinkPowerControlDedicatedSCell-r10.c | 508 +++++ .../UplinkPowerControlDedicatedSCell-r10.h | 59 + lte/rrc/asn/VarMeasConfig.c | 237 ++ lte/rrc/asn/VarMeasConfig.h | 80 + lte/rrc/asn/VarMeasReport.c | 81 + lte/rrc/asn/VarMeasReport.h | 46 + lte/rrc/asn/VarMeasReportList.c | 57 + lte/rrc/asn/VarMeasReportList.h | 43 + lte/rrc/asn/VarShortMAC-Input.c | 79 + lte/rrc/asn/VarShortMAC-Input.h | 41 + lte/rrc/asn/asn_SET_OF.c | 3 +- lte/rrc/asn/asn_SET_OF.h | 2 +- lte/rrc/asn/asn_codecs.h | 4 +- lte/rrc/asn/asn_codecs_prim.c | 44 +- lte/rrc/asn/asn_internal.h | 16 +- lte/rrc/asn/asn_system.h | 48 +- lte/rrc/asn/ber_decoder.c | 2 +- lte/rrc/asn/ber_tlv_tag.c | 2 - lte/rrc/asn/constr_CHOICE.c | 27 +- lte/rrc/asn/constr_CHOICE.h | 4 +- lte/rrc/asn/constr_SEQUENCE.c | 19 +- lte/rrc/asn/constr_SEQUENCE.h | 6 +- lte/rrc/asn/constr_SET_OF.c | 2 +- lte/rrc/asn/constr_SET_OF.h | 2 +- lte/rrc/asn/constr_TYPE.c | 4 +- lte/rrc/asn/constr_TYPE.h | 20 +- lte/rrc/asn/constraints.c | 2 +- lte/rrc/asn/converter-sample.c | 834 +++++++ lte/rrc/asn/der_encoder.c | 47 +- lte/rrc/asn/per_decoder.c | 6 +- lte/rrc/asn/per_decoder.h | 4 +- lte/rrc/asn/per_encoder.c | 2 +- lte/rrc/asn/per_encoder.h | 4 +- lte/rrc/asn/per_opentype.c | 75 +- lte/rrc/asn/per_support.c | 110 +- lte/rrc/asn/per_support.h | 17 +- lte/rrc/asn/rrc_asn.h | 4 +- lte/rrc/asn/xer_decoder.c | 16 +- lte/rrc/asn/xer_decoder.h | 7 +- lte/rrc/asn/xer_encoder.c | 4 +- lte/rrc/asn/xer_support.c | 16 +- .../liblte/rrc/common/rrc_common.h} | 29 +- .../liblte/rrc/{rrc_msg => messages}/bcch.h | 40 +- lte/rrc/include/liblte/rrc/messages/sib1.h | 57 + lte/rrc/include/liblte/rrc/rrc.h | 6 +- lte/rrc/lib/messages/src/bcch.c | 233 ++ lte/rrc/lib/messages/src/sib1.c | 198 ++ .../{rrc_msg => messages}/test/CMakeLists.txt | 4 +- .../test/bcch_bch_test.c | 2 +- .../test/bcch_dlsch_test.c | 25 +- lte/rrc/lib/rrc_msg/src/bcch.c | 198 -- lte/rrc/lib/rrc_msg/src/sib.c | 102 - 1249 files changed, 143880 insertions(+), 1359 deletions(-) create mode 100644 lte/rrc/asn/AC-BarringConfig.c create mode 100644 lte/rrc/asn/AC-BarringConfig.h create mode 100644 lte/rrc/asn/AC-BarringConfig1XRTT-r9.c create mode 100644 lte/rrc/asn/AC-BarringConfig1XRTT-r9.h create mode 100644 lte/rrc/asn/ARFCN-ValueCDMA2000.c create mode 100644 lte/rrc/asn/ARFCN-ValueCDMA2000.h create mode 100644 lte/rrc/asn/ARFCN-ValueEUTRA.c create mode 100644 lte/rrc/asn/ARFCN-ValueEUTRA.h create mode 100644 lte/rrc/asn/ARFCN-ValueGERAN.c create mode 100644 lte/rrc/asn/ARFCN-ValueGERAN.h create mode 100644 lte/rrc/asn/ARFCN-ValueUTRA.c create mode 100644 lte/rrc/asn/ARFCN-ValueUTRA.h create mode 100644 lte/rrc/asn/AS-Config.c create mode 100644 lte/rrc/asn/AS-Config.h create mode 100644 lte/rrc/asn/AS-Context.c create mode 100644 lte/rrc/asn/AS-Context.h create mode 100644 lte/rrc/asn/AbsoluteTimeInfo-r10.c create mode 100644 lte/rrc/asn/AbsoluteTimeInfo-r10.h create mode 100644 lte/rrc/asn/AccessStratumRelease.c create mode 100644 lte/rrc/asn/AccessStratumRelease.h create mode 100644 lte/rrc/asn/AdditionalReestabInfo.c create mode 100644 lte/rrc/asn/AdditionalReestabInfo.h create mode 100644 lte/rrc/asn/AdditionalReestabInfoList.c create mode 100644 lte/rrc/asn/AdditionalReestabInfoList.h create mode 100644 lte/rrc/asn/AdditionalSI-Info-r9.c create mode 100644 lte/rrc/asn/AdditionalSI-Info-r9.h create mode 100644 lte/rrc/asn/AdditionalSpectrumEmission.c create mode 100644 lte/rrc/asn/AdditionalSpectrumEmission.h create mode 100644 lte/rrc/asn/AllowedMeasBandwidth.c create mode 100644 lte/rrc/asn/AllowedMeasBandwidth.h create mode 100644 lte/rrc/asn/AntennaInfoCommon.c create mode 100644 lte/rrc/asn/AntennaInfoCommon.h create mode 100644 lte/rrc/asn/AntennaInfoDedicated-r10.c create mode 100644 lte/rrc/asn/AntennaInfoDedicated-r10.h create mode 100644 lte/rrc/asn/AntennaInfoDedicated-v920.c create mode 100644 lte/rrc/asn/AntennaInfoDedicated-v920.h create mode 100644 lte/rrc/asn/AntennaInfoDedicated.c create mode 100644 lte/rrc/asn/AntennaInfoDedicated.h create mode 100644 lte/rrc/asn/AntennaInfoUL-r10.c create mode 100644 lte/rrc/asn/AntennaInfoUL-r10.h create mode 100644 lte/rrc/asn/AreaConfiguration-r10.c create mode 100644 lte/rrc/asn/AreaConfiguration-r10.h create mode 100644 lte/rrc/asn/BCCH-BCH-Message.c create mode 100644 lte/rrc/asn/BCCH-BCH-Message.h create mode 100644 lte/rrc/asn/BCCH-BCH-MessageType.c create mode 100644 lte/rrc/asn/BCCH-BCH-MessageType.h create mode 100644 lte/rrc/asn/BCCH-Config.c create mode 100644 lte/rrc/asn/BCCH-Config.h create mode 100644 lte/rrc/asn/BCCH-DL-SCH-Message.c create mode 100644 lte/rrc/asn/BCCH-DL-SCH-Message.h create mode 100644 lte/rrc/asn/BCCH-DL-SCH-MessageType.c create mode 100644 lte/rrc/asn/BCCH-DL-SCH-MessageType.h create mode 100644 lte/rrc/asn/BandClassInfoCDMA2000.c create mode 100644 lte/rrc/asn/BandClassInfoCDMA2000.h create mode 100644 lte/rrc/asn/BandClassListCDMA2000.c create mode 100644 lte/rrc/asn/BandClassListCDMA2000.h create mode 100644 lte/rrc/asn/BandClassPriority1XRTT.c create mode 100644 lte/rrc/asn/BandClassPriority1XRTT.h create mode 100644 lte/rrc/asn/BandClassPriorityHRPD.c create mode 100644 lte/rrc/asn/BandClassPriorityHRPD.h create mode 100644 lte/rrc/asn/BandClassPriorityList1XRTT.c create mode 100644 lte/rrc/asn/BandClassPriorityList1XRTT.h create mode 100644 lte/rrc/asn/BandClassPriorityListHRPD.c create mode 100644 lte/rrc/asn/BandClassPriorityListHRPD.h create mode 100644 lte/rrc/asn/BandCombinationListEUTRA-r10.c create mode 100644 lte/rrc/asn/BandCombinationListEUTRA-r10.h create mode 100644 lte/rrc/asn/BandCombinationParameters-r10.c create mode 100644 lte/rrc/asn/BandCombinationParameters-r10.h create mode 100644 lte/rrc/asn/BandIndicatorGERAN.c create mode 100644 lte/rrc/asn/BandIndicatorGERAN.h create mode 100644 lte/rrc/asn/BandInfoEUTRA.c create mode 100644 lte/rrc/asn/BandInfoEUTRA.h create mode 100644 lte/rrc/asn/BandListEUTRA.c create mode 100644 lte/rrc/asn/BandListEUTRA.h create mode 100644 lte/rrc/asn/BandParameters-r10.c create mode 100644 lte/rrc/asn/BandParameters-r10.h create mode 100644 lte/rrc/asn/BandParametersDL-r10.c create mode 100644 lte/rrc/asn/BandParametersDL-r10.h create mode 100644 lte/rrc/asn/BandParametersUL-r10.c create mode 100644 lte/rrc/asn/BandParametersUL-r10.h create mode 100644 lte/rrc/asn/BandclassCDMA2000.c create mode 100644 lte/rrc/asn/BandclassCDMA2000.h create mode 100644 lte/rrc/asn/BetaOffset-CA-Index.c create mode 100644 lte/rrc/asn/BetaOffset-CA-Index.h create mode 100644 lte/rrc/asn/BlackCellsToAddMod.c create mode 100644 lte/rrc/asn/BlackCellsToAddMod.h create mode 100644 lte/rrc/asn/BlackCellsToAddModList.c create mode 100644 lte/rrc/asn/BlackCellsToAddModList.h create mode 100644 lte/rrc/asn/C-RNTI.c create mode 100644 lte/rrc/asn/C-RNTI.h create mode 100644 lte/rrc/asn/CA-BandwidthClass-r10.c create mode 100644 lte/rrc/asn/CA-BandwidthClass-r10.h create mode 100644 lte/rrc/asn/CA-MIMO-ParametersDL-r10.c create mode 100644 lte/rrc/asn/CA-MIMO-ParametersDL-r10.h create mode 100644 lte/rrc/asn/CA-MIMO-ParametersUL-r10.c create mode 100644 lte/rrc/asn/CA-MIMO-ParametersUL-r10.h create mode 100644 lte/rrc/asn/CA-RNTI.c create mode 100644 lte/rrc/asn/CA-RNTI.h create mode 100644 lte/rrc/asn/CA-semiPersistSchedIntervalUL.c create mode 100644 lte/rrc/asn/CA-semiPersistSchedIntervalUL.h create mode 100644 lte/rrc/asn/CDMA2000-Type.c create mode 100644 lte/rrc/asn/CDMA2000-Type.h create mode 100644 lte/rrc/asn/CQI-ReportAperiodic-r10.c create mode 100644 lte/rrc/asn/CQI-ReportAperiodic-r10.h create mode 100644 lte/rrc/asn/CQI-ReportConfig-r10.c create mode 100644 lte/rrc/asn/CQI-ReportConfig-r10.h create mode 100644 lte/rrc/asn/CQI-ReportConfig-v920.c create mode 100644 lte/rrc/asn/CQI-ReportConfig-v920.h create mode 100644 lte/rrc/asn/CQI-ReportConfig.c create mode 100644 lte/rrc/asn/CQI-ReportConfig.h create mode 100644 lte/rrc/asn/CQI-ReportConfigSCell-r10.c create mode 100644 lte/rrc/asn/CQI-ReportConfigSCell-r10.h create mode 100644 lte/rrc/asn/CQI-ReportModeAperiodic.c create mode 100644 lte/rrc/asn/CQI-ReportModeAperiodic.h create mode 100644 lte/rrc/asn/CQI-ReportPeriodic-r10.c create mode 100644 lte/rrc/asn/CQI-ReportPeriodic-r10.h create mode 100644 lte/rrc/asn/CQI-ReportPeriodic.c create mode 100644 lte/rrc/asn/CQI-ReportPeriodic.h create mode 100644 lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.c create mode 100644 lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h create mode 100644 lte/rrc/asn/CSFB-RegistrationParam1XRTT.c create mode 100644 lte/rrc/asn/CSFB-RegistrationParam1XRTT.h create mode 100644 lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.c create mode 100644 lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h create mode 100644 lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.c create mode 100644 lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h create mode 100644 lte/rrc/asn/CSFBParametersRequestCDMA2000.c create mode 100644 lte/rrc/asn/CSFBParametersRequestCDMA2000.h create mode 100644 lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.c create mode 100644 lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h create mode 100644 lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.c create mode 100644 lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h create mode 100644 lte/rrc/asn/CSFBParametersResponseCDMA2000.c create mode 100644 lte/rrc/asn/CSFBParametersResponseCDMA2000.h create mode 100644 lte/rrc/asn/CSG-AllowedReportingCells-r9.c create mode 100644 lte/rrc/asn/CSG-AllowedReportingCells-r9.h create mode 100644 lte/rrc/asn/CSG-ProximityIndicationParameters-r9.c create mode 100644 lte/rrc/asn/CSG-ProximityIndicationParameters-r9.h create mode 100644 lte/rrc/asn/CSI-RS-Config-r10.c create mode 100644 lte/rrc/asn/CSI-RS-Config-r10.h create mode 100644 lte/rrc/asn/CShift.c create mode 100644 lte/rrc/asn/CShift.h create mode 100644 lte/rrc/asn/CarrierBandwidthEUTRA.c create mode 100644 lte/rrc/asn/CarrierBandwidthEUTRA.h create mode 100644 lte/rrc/asn/CarrierFreqCDMA2000.c create mode 100644 lte/rrc/asn/CarrierFreqCDMA2000.h create mode 100644 lte/rrc/asn/CarrierFreqEUTRA.c create mode 100644 lte/rrc/asn/CarrierFreqEUTRA.h create mode 100644 lte/rrc/asn/CarrierFreqGERAN.c create mode 100644 lte/rrc/asn/CarrierFreqGERAN.h create mode 100644 lte/rrc/asn/CarrierFreqListUTRA-FDD.c create mode 100644 lte/rrc/asn/CarrierFreqListUTRA-FDD.h create mode 100644 lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c create mode 100644 lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h create mode 100644 lte/rrc/asn/CarrierFreqListUTRA-TDD.c create mode 100644 lte/rrc/asn/CarrierFreqListUTRA-TDD.h create mode 100644 lte/rrc/asn/CarrierFreqUTRA-FDD.c create mode 100644 lte/rrc/asn/CarrierFreqUTRA-FDD.h create mode 100644 lte/rrc/asn/CarrierFreqUTRA-TDD.c create mode 100644 lte/rrc/asn/CarrierFreqUTRA-TDD.h create mode 100644 lte/rrc/asn/CarrierFreqsGERAN.c create mode 100644 lte/rrc/asn/CarrierFreqsGERAN.h create mode 100644 lte/rrc/asn/CarrierFreqsInfoGERAN.c create mode 100644 lte/rrc/asn/CarrierFreqsInfoGERAN.h create mode 100644 lte/rrc/asn/CarrierFreqsInfoListGERAN.c create mode 100644 lte/rrc/asn/CarrierFreqsInfoListGERAN.h create mode 100644 lte/rrc/asn/CellChangeOrder.c create mode 100644 lte/rrc/asn/CellChangeOrder.h create mode 100644 lte/rrc/asn/CellGlobalIdCDMA2000.c create mode 100644 lte/rrc/asn/CellGlobalIdCDMA2000.h create mode 100644 lte/rrc/asn/CellGlobalIdEUTRA.c create mode 100644 lte/rrc/asn/CellGlobalIdEUTRA.h create mode 100644 lte/rrc/asn/CellGlobalIdGERAN.c create mode 100644 lte/rrc/asn/CellGlobalIdGERAN.h create mode 100644 lte/rrc/asn/CellGlobalIdList-r10.c create mode 100644 lte/rrc/asn/CellGlobalIdList-r10.h create mode 100644 lte/rrc/asn/CellGlobalIdUTRA.c create mode 100644 lte/rrc/asn/CellGlobalIdUTRA.h create mode 100644 lte/rrc/asn/CellIndex.c create mode 100644 lte/rrc/asn/CellIndex.h create mode 100644 lte/rrc/asn/CellIndexList.c create mode 100644 lte/rrc/asn/CellIndexList.h create mode 100644 lte/rrc/asn/CellInfoGERAN-r9.c create mode 100644 lte/rrc/asn/CellInfoGERAN-r9.h create mode 100644 lte/rrc/asn/CellInfoListGERAN-r9.c create mode 100644 lte/rrc/asn/CellInfoListGERAN-r9.h create mode 100644 lte/rrc/asn/CellInfoListUTRA-FDD-r9.c create mode 100644 lte/rrc/asn/CellInfoListUTRA-FDD-r9.h create mode 100644 lte/rrc/asn/CellInfoListUTRA-TDD-r10.c create mode 100644 lte/rrc/asn/CellInfoListUTRA-TDD-r10.h create mode 100644 lte/rrc/asn/CellInfoListUTRA-TDD-r9.c create mode 100644 lte/rrc/asn/CellInfoListUTRA-TDD-r9.h create mode 100644 lte/rrc/asn/CellInfoUTRA-FDD-r9.c create mode 100644 lte/rrc/asn/CellInfoUTRA-FDD-r9.h create mode 100644 lte/rrc/asn/CellInfoUTRA-TDD-r10.c create mode 100644 lte/rrc/asn/CellInfoUTRA-TDD-r10.h create mode 100644 lte/rrc/asn/CellInfoUTRA-TDD-r9.c create mode 100644 lte/rrc/asn/CellInfoUTRA-TDD-r9.h create mode 100644 lte/rrc/asn/CellReselectionParametersCDMA2000-v920.c create mode 100644 lte/rrc/asn/CellReselectionParametersCDMA2000-v920.h create mode 100644 lte/rrc/asn/CellReselectionParametersCDMA2000.c create mode 100644 lte/rrc/asn/CellReselectionParametersCDMA2000.h create mode 100644 lte/rrc/asn/CellReselectionPriority.c create mode 100644 lte/rrc/asn/CellReselectionPriority.h create mode 100644 lte/rrc/asn/CellsToAddMod.c create mode 100644 lte/rrc/asn/CellsToAddMod.h create mode 100644 lte/rrc/asn/CellsToAddModCDMA2000.c create mode 100644 lte/rrc/asn/CellsToAddModCDMA2000.h create mode 100644 lte/rrc/asn/CellsToAddModList.c create mode 100644 lte/rrc/asn/CellsToAddModList.h create mode 100644 lte/rrc/asn/CellsToAddModListCDMA2000.c create mode 100644 lte/rrc/asn/CellsToAddModListCDMA2000.h create mode 100644 lte/rrc/asn/CellsToAddModListUTRA-FDD.c create mode 100644 lte/rrc/asn/CellsToAddModListUTRA-FDD.h create mode 100644 lte/rrc/asn/CellsToAddModListUTRA-TDD.c create mode 100644 lte/rrc/asn/CellsToAddModListUTRA-TDD.h create mode 100644 lte/rrc/asn/CellsToAddModUTRA-FDD.c create mode 100644 lte/rrc/asn/CellsToAddModUTRA-FDD.h create mode 100644 lte/rrc/asn/CellsToAddModUTRA-TDD.c create mode 100644 lte/rrc/asn/CellsToAddModUTRA-TDD.h create mode 100644 lte/rrc/asn/CellsTriggeredList.c create mode 100644 lte/rrc/asn/CellsTriggeredList.h create mode 100644 lte/rrc/asn/CommonSF-AllocPatternList-r9.c create mode 100644 lte/rrc/asn/CommonSF-AllocPatternList-r9.h create mode 100644 lte/rrc/asn/CounterCheck-r8-IEs.c create mode 100644 lte/rrc/asn/CounterCheck-r8-IEs.h create mode 100644 lte/rrc/asn/CounterCheck-v8a0-IEs.c create mode 100644 lte/rrc/asn/CounterCheck-v8a0-IEs.h create mode 100644 lte/rrc/asn/CounterCheck.c create mode 100644 lte/rrc/asn/CounterCheck.h create mode 100644 lte/rrc/asn/CounterCheckResponse-r8-IEs.c create mode 100644 lte/rrc/asn/CounterCheckResponse-r8-IEs.h create mode 100644 lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c create mode 100644 lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h create mode 100644 lte/rrc/asn/CounterCheckResponse.c create mode 100644 lte/rrc/asn/CounterCheckResponse.h create mode 100644 lte/rrc/asn/CountingRequestInfo-r10.c create mode 100644 lte/rrc/asn/CountingRequestInfo-r10.h create mode 100644 lte/rrc/asn/CountingRequestList-r10.c create mode 100644 lte/rrc/asn/CountingRequestList-r10.h create mode 100644 lte/rrc/asn/CountingResponseInfo-r10.c create mode 100644 lte/rrc/asn/CountingResponseInfo-r10.h create mode 100644 lte/rrc/asn/CountingResponseList-r10.c create mode 100644 lte/rrc/asn/CountingResponseList-r10.h create mode 100644 lte/rrc/asn/CrossCarrierSchedulingConfig-r10.c create mode 100644 lte/rrc/asn/CrossCarrierSchedulingConfig-r10.h create mode 100644 lte/rrc/asn/DL-AM-RLC.c create mode 100644 lte/rrc/asn/DL-AM-RLC.h create mode 100644 lte/rrc/asn/DL-CCCH-Message.c create mode 100644 lte/rrc/asn/DL-CCCH-Message.h create mode 100644 lte/rrc/asn/DL-CCCH-MessageType.c create mode 100644 lte/rrc/asn/DL-CCCH-MessageType.h create mode 100644 lte/rrc/asn/DL-DCCH-Message.c create mode 100644 lte/rrc/asn/DL-DCCH-Message.h create mode 100644 lte/rrc/asn/DL-DCCH-MessageType.c create mode 100644 lte/rrc/asn/DL-DCCH-MessageType.h create mode 100644 lte/rrc/asn/DL-UM-RLC.c create mode 100644 lte/rrc/asn/DL-UM-RLC.h create mode 100644 lte/rrc/asn/DLInformationTransfer-r8-IEs.c create mode 100644 lte/rrc/asn/DLInformationTransfer-r8-IEs.h create mode 100644 lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c create mode 100644 lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h create mode 100644 lte/rrc/asn/DLInformationTransfer.c create mode 100644 lte/rrc/asn/DLInformationTransfer.h create mode 100644 lte/rrc/asn/DRB-CountInfo.c create mode 100644 lte/rrc/asn/DRB-CountInfo.h create mode 100644 lte/rrc/asn/DRB-CountInfoList.c create mode 100644 lte/rrc/asn/DRB-CountInfoList.h create mode 100644 lte/rrc/asn/DRB-CountMSB-Info.c create mode 100644 lte/rrc/asn/DRB-CountMSB-Info.h create mode 100644 lte/rrc/asn/DRB-CountMSB-InfoList.c create mode 100644 lte/rrc/asn/DRB-CountMSB-InfoList.h create mode 100644 lte/rrc/asn/DRB-Identity.c create mode 100644 lte/rrc/asn/DRB-Identity.h create mode 100644 lte/rrc/asn/DRB-ToAddMod.c create mode 100644 lte/rrc/asn/DRB-ToAddMod.h create mode 100644 lte/rrc/asn/DRB-ToAddModList.c create mode 100644 lte/rrc/asn/DRB-ToAddModList.h create mode 100644 lte/rrc/asn/DRB-ToReleaseList.c create mode 100644 lte/rrc/asn/DRB-ToReleaseList.h create mode 100644 lte/rrc/asn/DRX-Config.c create mode 100644 lte/rrc/asn/DRX-Config.h create mode 100644 lte/rrc/asn/DedicatedInfoCDMA2000.c create mode 100644 lte/rrc/asn/DedicatedInfoCDMA2000.h create mode 100644 lte/rrc/asn/DedicatedInfoNAS.c create mode 100644 lte/rrc/asn/DedicatedInfoNAS.h create mode 100644 lte/rrc/asn/DeltaFList-PUCCH.c create mode 100644 lte/rrc/asn/DeltaFList-PUCCH.h create mode 100644 lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c create mode 100644 lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h create mode 100644 lte/rrc/asn/E-CSFB-r9.c create mode 100644 lte/rrc/asn/E-CSFB-r9.h create mode 100644 lte/rrc/asn/ExplicitListOfARFCNs.c create mode 100644 lte/rrc/asn/ExplicitListOfARFCNs.h create mode 100644 lte/rrc/asn/FilterCoefficient.c create mode 100644 lte/rrc/asn/FilterCoefficient.h create mode 100644 lte/rrc/asn/FreqPriorityEUTRA.c create mode 100644 lte/rrc/asn/FreqPriorityEUTRA.h create mode 100644 lte/rrc/asn/FreqPriorityListEUTRA.c create mode 100644 lte/rrc/asn/FreqPriorityListEUTRA.h create mode 100644 lte/rrc/asn/FreqPriorityListUTRA-FDD.c create mode 100644 lte/rrc/asn/FreqPriorityListUTRA-FDD.h create mode 100644 lte/rrc/asn/FreqPriorityListUTRA-TDD.c create mode 100644 lte/rrc/asn/FreqPriorityListUTRA-TDD.h create mode 100644 lte/rrc/asn/FreqPriorityUTRA-FDD.c create mode 100644 lte/rrc/asn/FreqPriorityUTRA-FDD.h create mode 100644 lte/rrc/asn/FreqPriorityUTRA-TDD.c create mode 100644 lte/rrc/asn/FreqPriorityUTRA-TDD.h create mode 100644 lte/rrc/asn/FreqsPriorityGERAN.c create mode 100644 lte/rrc/asn/FreqsPriorityGERAN.h create mode 100644 lte/rrc/asn/FreqsPriorityListGERAN.c create mode 100644 lte/rrc/asn/FreqsPriorityListGERAN.h create mode 100644 lte/rrc/asn/Handover.c create mode 100644 lte/rrc/asn/Handover.h create mode 100644 lte/rrc/asn/HandoverCommand-r8-IEs.c create mode 100644 lte/rrc/asn/HandoverCommand-r8-IEs.h create mode 100644 lte/rrc/asn/HandoverCommand.c create mode 100644 lte/rrc/asn/HandoverCommand.h create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.c create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.c create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.c create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.c create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest.c create mode 100644 lte/rrc/asn/HandoverFromEUTRAPreparationRequest.h create mode 100644 lte/rrc/asn/HandoverPreparationInformation-r8-IEs.c create mode 100644 lte/rrc/asn/HandoverPreparationInformation-r8-IEs.h create mode 100644 lte/rrc/asn/HandoverPreparationInformation-v920-IEs.c create mode 100644 lte/rrc/asn/HandoverPreparationInformation-v920-IEs.h create mode 100644 lte/rrc/asn/HandoverPreparationInformation.c create mode 100644 lte/rrc/asn/HandoverPreparationInformation.h create mode 100644 lte/rrc/asn/Hysteresis.c create mode 100644 lte/rrc/asn/Hysteresis.h create mode 100644 lte/rrc/asn/IMSI-Digit.c create mode 100644 lte/rrc/asn/IMSI-Digit.h create mode 100644 lte/rrc/asn/IMSI.c create mode 100644 lte/rrc/asn/IMSI.h create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.c create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c create mode 100644 lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h create mode 100644 lte/rrc/asn/IRAT-ParametersGERAN-v920.c create mode 100644 lte/rrc/asn/IRAT-ParametersGERAN-v920.h create mode 100644 lte/rrc/asn/IRAT-ParametersGERAN.c create mode 100644 lte/rrc/asn/IRAT-ParametersGERAN.h create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-FDD.c create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-FDD.h create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-v920.c create mode 100644 lte/rrc/asn/IRAT-ParametersUTRA-v920.h create mode 100644 lte/rrc/asn/IdleModeMobilityControlInfo.c create mode 100644 lte/rrc/asn/IdleModeMobilityControlInfo.h create mode 100644 lte/rrc/asn/InterFreqBandInfo.c create mode 100644 lte/rrc/asn/InterFreqBandInfo.h create mode 100644 lte/rrc/asn/InterFreqBandList.c create mode 100644 lte/rrc/asn/InterFreqBandList.h create mode 100644 lte/rrc/asn/InterFreqBlackCellList.c create mode 100644 lte/rrc/asn/InterFreqBlackCellList.h create mode 100644 lte/rrc/asn/InterFreqCarrierFreqInfo.c create mode 100644 lte/rrc/asn/InterFreqCarrierFreqInfo.h create mode 100644 lte/rrc/asn/InterFreqCarrierFreqList.c create mode 100644 lte/rrc/asn/InterFreqCarrierFreqList.h create mode 100644 lte/rrc/asn/InterFreqNeighCellInfo.c create mode 100644 lte/rrc/asn/InterFreqNeighCellInfo.h create mode 100644 lte/rrc/asn/InterFreqNeighCellList.c create mode 100644 lte/rrc/asn/InterFreqNeighCellList.h create mode 100644 lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.c create mode 100644 lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h create mode 100644 lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.c create mode 100644 lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h create mode 100644 lte/rrc/asn/InterRAT-BandInfo.c create mode 100644 lte/rrc/asn/InterRAT-BandInfo.h create mode 100644 lte/rrc/asn/InterRAT-BandList.c create mode 100644 lte/rrc/asn/InterRAT-BandList.h create mode 100644 lte/rrc/asn/IntraFreqBlackCellList.c create mode 100644 lte/rrc/asn/IntraFreqBlackCellList.h create mode 100644 lte/rrc/asn/IntraFreqNeighCellInfo.c create mode 100644 lte/rrc/asn/IntraFreqNeighCellInfo.h create mode 100644 lte/rrc/asn/IntraFreqNeighCellList.c create mode 100644 lte/rrc/asn/IntraFreqNeighCellList.h create mode 100644 lte/rrc/asn/Key-eNodeB-Star.c create mode 100644 lte/rrc/asn/Key-eNodeB-Star.h create mode 100644 lte/rrc/asn/LocationInfo-r10.c create mode 100644 lte/rrc/asn/LocationInfo-r10.h create mode 100644 lte/rrc/asn/LogMeasInfo-r10.c create mode 100644 lte/rrc/asn/LogMeasInfo-r10.h create mode 100644 lte/rrc/asn/LogMeasInfoList-r10.c create mode 100644 lte/rrc/asn/LogMeasInfoList-r10.h create mode 100644 lte/rrc/asn/LogMeasReport-r10.c create mode 100644 lte/rrc/asn/LogMeasReport-r10.h create mode 100644 lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.c create mode 100644 lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h create mode 100644 lte/rrc/asn/LoggedMeasurementConfiguration-r10.c create mode 100644 lte/rrc/asn/LoggedMeasurementConfiguration-r10.h create mode 100644 lte/rrc/asn/LoggingDuration-r10.c create mode 100644 lte/rrc/asn/LoggingDuration-r10.h create mode 100644 lte/rrc/asn/LoggingInterval-r10.c create mode 100644 lte/rrc/asn/LoggingInterval-r10.h create mode 100644 lte/rrc/asn/LogicalChannelConfig.c create mode 100644 lte/rrc/asn/LogicalChannelConfig.h create mode 100644 lte/rrc/asn/MAC-MainConfig.c create mode 100644 lte/rrc/asn/MAC-MainConfig.h create mode 100644 lte/rrc/asn/MBMS-NotificationConfig-r9.c create mode 100644 lte/rrc/asn/MBMS-NotificationConfig-r9.h create mode 100644 lte/rrc/asn/MBMS-SessionInfo-r9.c create mode 100644 lte/rrc/asn/MBMS-SessionInfo-r9.h create mode 100644 lte/rrc/asn/MBMS-SessionInfoList-r9.c create mode 100644 lte/rrc/asn/MBMS-SessionInfoList-r9.h create mode 100644 lte/rrc/asn/MBMSCountingRequest-r10.c create mode 100644 lte/rrc/asn/MBMSCountingRequest-r10.h create mode 100644 lte/rrc/asn/MBMSCountingResponse-r10-IEs.c create mode 100644 lte/rrc/asn/MBMSCountingResponse-r10-IEs.h create mode 100644 lte/rrc/asn/MBMSCountingResponse-r10.c create mode 100644 lte/rrc/asn/MBMSCountingResponse-r10.h create mode 100644 lte/rrc/asn/MBSFN-AreaInfo-r9.c create mode 100644 lte/rrc/asn/MBSFN-AreaInfo-r9.h create mode 100644 lte/rrc/asn/MBSFN-AreaInfoList-r9.c create mode 100644 lte/rrc/asn/MBSFN-AreaInfoList-r9.h create mode 100644 lte/rrc/asn/MBSFN-SubframeConfig.c create mode 100644 lte/rrc/asn/MBSFN-SubframeConfig.h create mode 100644 lte/rrc/asn/MBSFN-SubframeConfigList.c create mode 100644 lte/rrc/asn/MBSFN-SubframeConfigList.h create mode 100644 lte/rrc/asn/MBSFNAreaConfiguration-r9.c create mode 100644 lte/rrc/asn/MBSFNAreaConfiguration-r9.h create mode 100644 lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c create mode 100644 lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h create mode 100644 lte/rrc/asn/MCCH-Message.c create mode 100644 lte/rrc/asn/MCCH-Message.h create mode 100644 lte/rrc/asn/MCCH-MessageType.c create mode 100644 lte/rrc/asn/MCCH-MessageType.h create mode 100644 lte/rrc/asn/MIMO-CapabilityDL-r10.c create mode 100644 lte/rrc/asn/MIMO-CapabilityDL-r10.h create mode 100644 lte/rrc/asn/MIMO-CapabilityUL-r10.c create mode 100644 lte/rrc/asn/MIMO-CapabilityUL-r10.h create mode 100644 lte/rrc/asn/MeasConfig.c create mode 100644 lte/rrc/asn/MeasConfig.h create mode 100644 lte/rrc/asn/MeasCycleSCell-r10.c create mode 100644 lte/rrc/asn/MeasCycleSCell-r10.h create mode 100644 lte/rrc/asn/MeasGapConfig.c create mode 100644 lte/rrc/asn/MeasGapConfig.h create mode 100644 lte/rrc/asn/MeasId.c create mode 100644 lte/rrc/asn/MeasId.h create mode 100644 lte/rrc/asn/MeasIdToAddMod.c create mode 100644 lte/rrc/asn/MeasIdToAddMod.h create mode 100644 lte/rrc/asn/MeasIdToAddModList.c create mode 100644 lte/rrc/asn/MeasIdToAddModList.h create mode 100644 lte/rrc/asn/MeasIdToRemoveList.c create mode 100644 lte/rrc/asn/MeasIdToRemoveList.h create mode 100644 lte/rrc/asn/MeasObjectCDMA2000.c create mode 100644 lte/rrc/asn/MeasObjectCDMA2000.h create mode 100644 lte/rrc/asn/MeasObjectEUTRA.c create mode 100644 lte/rrc/asn/MeasObjectEUTRA.h create mode 100644 lte/rrc/asn/MeasObjectGERAN.c create mode 100644 lte/rrc/asn/MeasObjectGERAN.h create mode 100644 lte/rrc/asn/MeasObjectId.c create mode 100644 lte/rrc/asn/MeasObjectId.h create mode 100644 lte/rrc/asn/MeasObjectToAddMod.c create mode 100644 lte/rrc/asn/MeasObjectToAddMod.h create mode 100644 lte/rrc/asn/MeasObjectToAddModList.c create mode 100644 lte/rrc/asn/MeasObjectToAddModList.h create mode 100644 lte/rrc/asn/MeasObjectToRemoveList.c create mode 100644 lte/rrc/asn/MeasObjectToRemoveList.h create mode 100644 lte/rrc/asn/MeasObjectUTRA.c create mode 100644 lte/rrc/asn/MeasObjectUTRA.h create mode 100644 lte/rrc/asn/MeasParameters-v1020.c create mode 100644 lte/rrc/asn/MeasParameters-v1020.h create mode 100644 lte/rrc/asn/MeasParameters.c create mode 100644 lte/rrc/asn/MeasParameters.h create mode 100644 lte/rrc/asn/MeasResult2CDMA2000-r9.c create mode 100644 lte/rrc/asn/MeasResult2CDMA2000-r9.h create mode 100644 lte/rrc/asn/MeasResult2EUTRA-r9.c create mode 100644 lte/rrc/asn/MeasResult2EUTRA-r9.h create mode 100644 lte/rrc/asn/MeasResult2UTRA-r9.c create mode 100644 lte/rrc/asn/MeasResult2UTRA-r9.h create mode 100644 lte/rrc/asn/MeasResultCDMA2000.c create mode 100644 lte/rrc/asn/MeasResultCDMA2000.h create mode 100644 lte/rrc/asn/MeasResultEUTRA.c create mode 100644 lte/rrc/asn/MeasResultEUTRA.h create mode 100644 lte/rrc/asn/MeasResultForECID-r9.c create mode 100644 lte/rrc/asn/MeasResultForECID-r9.h create mode 100644 lte/rrc/asn/MeasResultGERAN.c create mode 100644 lte/rrc/asn/MeasResultGERAN.h create mode 100644 lte/rrc/asn/MeasResultList2CDMA2000-r9.c create mode 100644 lte/rrc/asn/MeasResultList2CDMA2000-r9.h create mode 100644 lte/rrc/asn/MeasResultList2EUTRA-r9.c create mode 100644 lte/rrc/asn/MeasResultList2EUTRA-r9.h create mode 100644 lte/rrc/asn/MeasResultList2GERAN-r10.c create mode 100644 lte/rrc/asn/MeasResultList2GERAN-r10.h create mode 100644 lte/rrc/asn/MeasResultList2UTRA-r9.c create mode 100644 lte/rrc/asn/MeasResultList2UTRA-r9.h create mode 100644 lte/rrc/asn/MeasResultListCDMA2000.c create mode 100644 lte/rrc/asn/MeasResultListCDMA2000.h create mode 100644 lte/rrc/asn/MeasResultListEUTRA.c create mode 100644 lte/rrc/asn/MeasResultListEUTRA.h create mode 100644 lte/rrc/asn/MeasResultListGERAN.c create mode 100644 lte/rrc/asn/MeasResultListGERAN.h create mode 100644 lte/rrc/asn/MeasResultListUTRA.c create mode 100644 lte/rrc/asn/MeasResultListUTRA.h create mode 100644 lte/rrc/asn/MeasResultServFreq-r10.c create mode 100644 lte/rrc/asn/MeasResultServFreq-r10.h create mode 100644 lte/rrc/asn/MeasResultServFreqList-r10.c create mode 100644 lte/rrc/asn/MeasResultServFreqList-r10.h create mode 100644 lte/rrc/asn/MeasResultUTRA.c create mode 100644 lte/rrc/asn/MeasResultUTRA.h create mode 100644 lte/rrc/asn/MeasResults.c create mode 100644 lte/rrc/asn/MeasResults.h create mode 100644 lte/rrc/asn/MeasResultsCDMA2000.c create mode 100644 lte/rrc/asn/MeasResultsCDMA2000.h create mode 100644 lte/rrc/asn/MeasSubframeCellList-r10.c create mode 100644 lte/rrc/asn/MeasSubframeCellList-r10.h create mode 100644 lte/rrc/asn/MeasSubframePattern-r10.c create mode 100644 lte/rrc/asn/MeasSubframePattern-r10.h create mode 100644 lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.c create mode 100644 lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h create mode 100644 lte/rrc/asn/MeasSubframePatternPCell-r10.c create mode 100644 lte/rrc/asn/MeasSubframePatternPCell-r10.h create mode 100644 lte/rrc/asn/MeasurementReport-r8-IEs.c create mode 100644 lte/rrc/asn/MeasurementReport-r8-IEs.h create mode 100644 lte/rrc/asn/MeasurementReport-v8a0-IEs.c create mode 100644 lte/rrc/asn/MeasurementReport-v8a0-IEs.h create mode 100644 lte/rrc/asn/MeasurementReport.c create mode 100644 lte/rrc/asn/MeasurementReport.h create mode 100644 lte/rrc/asn/MobilityControlInfo.c create mode 100644 lte/rrc/asn/MobilityControlInfo.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand.c create mode 100644 lte/rrc/asn/MobilityFromEUTRACommand.h create mode 100644 lte/rrc/asn/MobilityParametersCDMA2000.c create mode 100644 lte/rrc/asn/MobilityParametersCDMA2000.h create mode 100644 lte/rrc/asn/MobilityStateParameters.c create mode 100644 lte/rrc/asn/MobilityStateParameters.h create mode 100644 lte/rrc/asn/N1-PUCCH-AN-PersistentList.c create mode 100644 lte/rrc/asn/N1-PUCCH-AN-PersistentList.h create mode 100644 lte/rrc/asn/N1PUCCH-AN-CS-r10.c create mode 100644 lte/rrc/asn/N1PUCCH-AN-CS-r10.h create mode 100644 lte/rrc/asn/N1PUCCH-AN-PersistentList.c create mode 100644 lte/rrc/asn/N1PUCCH-AN-PersistentList.h create mode 100644 lte/rrc/asn/NULL.c create mode 100644 lte/rrc/asn/NULL.h create mode 100644 lte/rrc/asn/NeighCellCDMA2000-v920.c create mode 100644 lte/rrc/asn/NeighCellCDMA2000-v920.h create mode 100644 lte/rrc/asn/NeighCellCDMA2000.c create mode 100644 lte/rrc/asn/NeighCellCDMA2000.h create mode 100644 lte/rrc/asn/NeighCellConfig.c create mode 100644 lte/rrc/asn/NeighCellConfig.h create mode 100644 lte/rrc/asn/NeighCellListCDMA2000-v920.c create mode 100644 lte/rrc/asn/NeighCellListCDMA2000-v920.h create mode 100644 lte/rrc/asn/NeighCellListCDMA2000.c create mode 100644 lte/rrc/asn/NeighCellListCDMA2000.h create mode 100644 lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.c create mode 100644 lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h create mode 100644 lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.c create mode 100644 lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h create mode 100644 lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c create mode 100644 lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h create mode 100644 lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.c create mode 100644 lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h create mode 100644 lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.c create mode 100644 lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h create mode 100644 lte/rrc/asn/NextHopChainingCount.c create mode 100644 lte/rrc/asn/NextHopChainingCount.h create mode 100644 lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.c create mode 100644 lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h create mode 100644 lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c create mode 100644 lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h create mode 100644 lte/rrc/asn/OtherConfig-r9.c create mode 100644 lte/rrc/asn/OtherConfig-r9.h create mode 100644 lte/rrc/asn/PCCH-Config.c create mode 100644 lte/rrc/asn/PCCH-Config.h create mode 100644 lte/rrc/asn/PCCH-Message.c create mode 100644 lte/rrc/asn/PCCH-Message.h create mode 100644 lte/rrc/asn/PCCH-MessageType.c create mode 100644 lte/rrc/asn/PCCH-MessageType.h create mode 100644 lte/rrc/asn/PDCP-Config.c create mode 100644 lte/rrc/asn/PDCP-Config.h create mode 100644 lte/rrc/asn/PDCP-Parameters.c create mode 100644 lte/rrc/asn/PDCP-Parameters.h create mode 100644 lte/rrc/asn/PDSCH-ConfigCommon.c create mode 100644 lte/rrc/asn/PDSCH-ConfigCommon.h create mode 100644 lte/rrc/asn/PDSCH-ConfigDedicated.c create mode 100644 lte/rrc/asn/PDSCH-ConfigDedicated.h create mode 100644 lte/rrc/asn/PLMN-IdentityList2.c create mode 100644 lte/rrc/asn/PLMN-IdentityList2.h create mode 100644 lte/rrc/asn/PMCH-Config-r9.c create mode 100644 lte/rrc/asn/PMCH-Config-r9.h create mode 100644 lte/rrc/asn/PMCH-Info-r9.c create mode 100644 lte/rrc/asn/PMCH-Info-r9.h create mode 100644 lte/rrc/asn/PMCH-InfoList-r9.c create mode 100644 lte/rrc/asn/PMCH-InfoList-r9.h create mode 100644 lte/rrc/asn/PRACH-Config.c create mode 100644 lte/rrc/asn/PRACH-Config.h create mode 100644 lte/rrc/asn/PRACH-ConfigInfo.c create mode 100644 lte/rrc/asn/PRACH-ConfigInfo.h create mode 100644 lte/rrc/asn/PRACH-ConfigSCell-r10.c create mode 100644 lte/rrc/asn/PRACH-ConfigSCell-r10.h create mode 100644 lte/rrc/asn/PRACH-ConfigSIB.c create mode 100644 lte/rrc/asn/PRACH-ConfigSIB.h create mode 100644 lte/rrc/asn/PUCCH-ConfigCommon.c create mode 100644 lte/rrc/asn/PUCCH-ConfigCommon.h create mode 100644 lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c create mode 100644 lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h create mode 100644 lte/rrc/asn/PUCCH-ConfigDedicated.c create mode 100644 lte/rrc/asn/PUCCH-ConfigDedicated.h create mode 100644 lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c create mode 100644 lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h create mode 100644 lte/rrc/asn/PUSCH-ConfigCommon.c create mode 100644 lte/rrc/asn/PUSCH-ConfigCommon.h create mode 100644 lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c create mode 100644 lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h create mode 100644 lte/rrc/asn/PUSCH-ConfigDedicated.c create mode 100644 lte/rrc/asn/PUSCH-ConfigDedicated.h create mode 100644 lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c create mode 100644 lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h create mode 100644 lte/rrc/asn/Paging-v890-IEs.c create mode 100644 lte/rrc/asn/Paging-v890-IEs.h create mode 100644 lte/rrc/asn/Paging-v920-IEs.c create mode 100644 lte/rrc/asn/Paging-v920-IEs.h create mode 100644 lte/rrc/asn/Paging.c create mode 100644 lte/rrc/asn/Paging.h create mode 100644 lte/rrc/asn/PagingRecord.c create mode 100644 lte/rrc/asn/PagingRecord.h create mode 100644 lte/rrc/asn/PagingRecordList.c create mode 100644 lte/rrc/asn/PagingRecordList.h create mode 100644 lte/rrc/asn/PagingUE-Identity.c create mode 100644 lte/rrc/asn/PagingUE-Identity.h create mode 100644 lte/rrc/asn/PhyLayerParameters-v1020.c create mode 100644 lte/rrc/asn/PhyLayerParameters-v1020.h create mode 100644 lte/rrc/asn/PhyLayerParameters-v920.c create mode 100644 lte/rrc/asn/PhyLayerParameters-v920.h create mode 100644 lte/rrc/asn/PhyLayerParameters.c create mode 100644 lte/rrc/asn/PhyLayerParameters.h create mode 100644 lte/rrc/asn/PhysCellId.c create mode 100644 lte/rrc/asn/PhysCellId.h create mode 100644 lte/rrc/asn/PhysCellIdCDMA2000.c create mode 100644 lte/rrc/asn/PhysCellIdCDMA2000.h create mode 100644 lte/rrc/asn/PhysCellIdGERAN.c create mode 100644 lte/rrc/asn/PhysCellIdGERAN.h create mode 100644 lte/rrc/asn/PhysCellIdListCDMA2000-v920.c create mode 100644 lte/rrc/asn/PhysCellIdListCDMA2000-v920.h create mode 100644 lte/rrc/asn/PhysCellIdListCDMA2000.c create mode 100644 lte/rrc/asn/PhysCellIdListCDMA2000.h create mode 100644 lte/rrc/asn/PhysCellIdRange.c create mode 100644 lte/rrc/asn/PhysCellIdRange.h create mode 100644 lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c create mode 100644 lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h create mode 100644 lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c create mode 100644 lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h create mode 100644 lte/rrc/asn/PhysCellIdUTRA-FDD.c create mode 100644 lte/rrc/asn/PhysCellIdUTRA-FDD.h create mode 100644 lte/rrc/asn/PhysCellIdUTRA-TDD.c create mode 100644 lte/rrc/asn/PhysCellIdUTRA-TDD.h create mode 100644 lte/rrc/asn/PhysicalConfigDedicated.c create mode 100644 lte/rrc/asn/PhysicalConfigDedicated.h create mode 100644 lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.c create mode 100644 lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h create mode 100644 lte/rrc/asn/PollByte.c create mode 100644 lte/rrc/asn/PollByte.h create mode 100644 lte/rrc/asn/PollPDU.c create mode 100644 lte/rrc/asn/PollPDU.h create mode 100644 lte/rrc/asn/PreRegistrationInfoHRPD.c create mode 100644 lte/rrc/asn/PreRegistrationInfoHRPD.h create mode 100644 lte/rrc/asn/PreRegistrationZoneIdHRPD.c create mode 100644 lte/rrc/asn/PreRegistrationZoneIdHRPD.h create mode 100644 lte/rrc/asn/PresenceAntennaPort1.c create mode 100644 lte/rrc/asn/PresenceAntennaPort1.h create mode 100644 lte/rrc/asn/ProximityIndication-r9-IEs.c create mode 100644 lte/rrc/asn/ProximityIndication-r9-IEs.h create mode 100644 lte/rrc/asn/ProximityIndication-r9.c create mode 100644 lte/rrc/asn/ProximityIndication-r9.h create mode 100644 lte/rrc/asn/ProximityIndication-v930-IEs.c create mode 100644 lte/rrc/asn/ProximityIndication-v930-IEs.h create mode 100644 lte/rrc/asn/Q-OffsetRange.c create mode 100644 lte/rrc/asn/Q-OffsetRange.h create mode 100644 lte/rrc/asn/Q-OffsetRangeInterRAT.c create mode 100644 lte/rrc/asn/Q-OffsetRangeInterRAT.h create mode 100644 lte/rrc/asn/QuantityConfig.c create mode 100644 lte/rrc/asn/QuantityConfig.h create mode 100644 lte/rrc/asn/QuantityConfigCDMA2000.c create mode 100644 lte/rrc/asn/QuantityConfigCDMA2000.h create mode 100644 lte/rrc/asn/QuantityConfigEUTRA.c create mode 100644 lte/rrc/asn/QuantityConfigEUTRA.h create mode 100644 lte/rrc/asn/QuantityConfigGERAN.c create mode 100644 lte/rrc/asn/QuantityConfigGERAN.h create mode 100644 lte/rrc/asn/QuantityConfigUTRA-v1020.c create mode 100644 lte/rrc/asn/QuantityConfigUTRA-v1020.h create mode 100644 lte/rrc/asn/QuantityConfigUTRA.c create mode 100644 lte/rrc/asn/QuantityConfigUTRA.h create mode 100644 lte/rrc/asn/RACH-ConfigCommon.c create mode 100644 lte/rrc/asn/RACH-ConfigCommon.h create mode 100644 lte/rrc/asn/RACH-ConfigDedicated.c create mode 100644 lte/rrc/asn/RACH-ConfigDedicated.h create mode 100644 lte/rrc/asn/RAND-CDMA2000.c create mode 100644 lte/rrc/asn/RAND-CDMA2000.h create mode 100644 lte/rrc/asn/RAT-Type.c create mode 100644 lte/rrc/asn/RAT-Type.h create mode 100644 lte/rrc/asn/RF-Parameters-v1020.c create mode 100644 lte/rrc/asn/RF-Parameters-v1020.h create mode 100644 lte/rrc/asn/RF-Parameters.c create mode 100644 lte/rrc/asn/RF-Parameters.h create mode 100644 lte/rrc/asn/RLC-Config.c create mode 100644 lte/rrc/asn/RLC-Config.h create mode 100644 lte/rrc/asn/RLF-Report-r9.c create mode 100644 lte/rrc/asn/RLF-Report-r9.h create mode 100644 lte/rrc/asn/RLF-TimersAndConstants-r9.c create mode 100644 lte/rrc/asn/RLF-TimersAndConstants-r9.h create mode 100644 lte/rrc/asn/RN-SubframeConfig-r10.c create mode 100644 lte/rrc/asn/RN-SubframeConfig-r10.h create mode 100644 lte/rrc/asn/RN-SystemInfo-r10.c create mode 100644 lte/rrc/asn/RN-SystemInfo-r10.h create mode 100644 lte/rrc/asn/RNReconfiguration-r10-IEs.c create mode 100644 lte/rrc/asn/RNReconfiguration-r10-IEs.h create mode 100644 lte/rrc/asn/RNReconfiguration-r10.c create mode 100644 lte/rrc/asn/RNReconfiguration-r10.h create mode 100644 lte/rrc/asn/RNReconfigurationComplete-r10-IEs.c create mode 100644 lte/rrc/asn/RNReconfigurationComplete-r10-IEs.h create mode 100644 lte/rrc/asn/RNReconfigurationComplete-r10.c create mode 100644 lte/rrc/asn/RNReconfigurationComplete-r10.h create mode 100644 lte/rrc/asn/RRC-TransactionIdentifier.c create mode 100644 lte/rrc/asn/RRC-TransactionIdentifier.h create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration.c create mode 100644 lte/rrc/asn/RRCConnectionReconfiguration.h create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete.c create mode 100644 lte/rrc/asn/RRCConnectionReconfigurationComplete.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishment.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishment.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentComplete.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentReject.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentReject.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentRequest.c create mode 100644 lte/rrc/asn/RRCConnectionReestablishmentRequest.h create mode 100644 lte/rrc/asn/RRCConnectionReject-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReject-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReject-v1020-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReject-v1020-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionReject.c create mode 100644 lte/rrc/asn/RRCConnectionReject.h create mode 100644 lte/rrc/asn/RRCConnectionRelease-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionRelease-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionRelease-v890-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionRelease-v890-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionRelease-v920-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionRelease-v920-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionRelease.c create mode 100644 lte/rrc/asn/RRCConnectionRelease.h create mode 100644 lte/rrc/asn/RRCConnectionSetup-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionSetup-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionSetup.c create mode 100644 lte/rrc/asn/RRCConnectionSetup.h create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.c create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete.c create mode 100644 lte/rrc/asn/RRCConnectionSetupComplete.h create mode 100644 lte/rrc/asn/RRM-Config.c create mode 100644 lte/rrc/asn/RRM-Config.h create mode 100644 lte/rrc/asn/RSRP-Range.c create mode 100644 lte/rrc/asn/RSRP-Range.h create mode 100644 lte/rrc/asn/RSRQ-Range.c create mode 100644 lte/rrc/asn/RSRQ-Range.h create mode 100644 lte/rrc/asn/RSTD-InterFreqInfo-r10.c create mode 100644 lte/rrc/asn/RSTD-InterFreqInfo-r10.h create mode 100644 lte/rrc/asn/RSTD-InterFreqInfoList-r10.c create mode 100644 lte/rrc/asn/RSTD-InterFreqInfoList-r10.h create mode 100644 lte/rrc/asn/RadioResourceConfigCommon.c create mode 100644 lte/rrc/asn/RadioResourceConfigCommon.h create mode 100644 lte/rrc/asn/RadioResourceConfigCommonSCell-r10.c create mode 100644 lte/rrc/asn/RadioResourceConfigCommonSCell-r10.h create mode 100644 lte/rrc/asn/RadioResourceConfigCommonSIB.c create mode 100644 lte/rrc/asn/RadioResourceConfigCommonSIB.h create mode 100644 lte/rrc/asn/RadioResourceConfigDedicated.c create mode 100644 lte/rrc/asn/RadioResourceConfigDedicated.h create mode 100644 lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.c create mode 100644 lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h create mode 100644 lte/rrc/asn/RedirectedCarrierInfo.c create mode 100644 lte/rrc/asn/RedirectedCarrierInfo.h create mode 100644 lte/rrc/asn/ReestabUE-Identity.c create mode 100644 lte/rrc/asn/ReestabUE-Identity.h create mode 100644 lte/rrc/asn/ReestablishmentCause.c create mode 100644 lte/rrc/asn/ReestablishmentCause.h create mode 100644 lte/rrc/asn/ReestablishmentInfo.c create mode 100644 lte/rrc/asn/ReestablishmentInfo.h create mode 100644 lte/rrc/asn/RegisteredMME.c create mode 100644 lte/rrc/asn/RegisteredMME.h create mode 100644 lte/rrc/asn/ReleaseCause.c create mode 100644 lte/rrc/asn/ReleaseCause.h create mode 100644 lte/rrc/asn/ReportConfigEUTRA.c create mode 100644 lte/rrc/asn/ReportConfigEUTRA.h create mode 100644 lte/rrc/asn/ReportConfigId.c create mode 100644 lte/rrc/asn/ReportConfigId.h create mode 100644 lte/rrc/asn/ReportConfigInterRAT.c create mode 100644 lte/rrc/asn/ReportConfigInterRAT.h create mode 100644 lte/rrc/asn/ReportConfigToAddMod.c create mode 100644 lte/rrc/asn/ReportConfigToAddMod.h create mode 100644 lte/rrc/asn/ReportConfigToAddModList.c create mode 100644 lte/rrc/asn/ReportConfigToAddModList.h create mode 100644 lte/rrc/asn/ReportConfigToRemoveList.c create mode 100644 lte/rrc/asn/ReportConfigToRemoveList.h create mode 100644 lte/rrc/asn/ReportInterval.c create mode 100644 lte/rrc/asn/ReportInterval.h create mode 100644 lte/rrc/asn/ReportProximityConfig-r9.c create mode 100644 lte/rrc/asn/ReportProximityConfig-r9.h create mode 100644 lte/rrc/asn/ReselectionThreshold.c create mode 100644 lte/rrc/asn/ReselectionThreshold.h create mode 100644 lte/rrc/asn/ReselectionThresholdQ-r9.c create mode 100644 lte/rrc/asn/ReselectionThresholdQ-r9.h create mode 100644 lte/rrc/asn/SCellIndex-r10.c create mode 100644 lte/rrc/asn/SCellIndex-r10.h create mode 100644 lte/rrc/asn/SCellToAddMod-r10.c create mode 100644 lte/rrc/asn/SCellToAddMod-r10.h create mode 100644 lte/rrc/asn/SCellToAddModList-r10.c create mode 100644 lte/rrc/asn/SCellToAddModList-r10.h create mode 100644 lte/rrc/asn/SCellToReleaseList-r10.c create mode 100644 lte/rrc/asn/SCellToReleaseList-r10.h create mode 100644 lte/rrc/asn/SI-OrPSI-GERAN.c create mode 100644 lte/rrc/asn/SI-OrPSI-GERAN.h create mode 100644 lte/rrc/asn/SN-FieldLength.c create mode 100644 lte/rrc/asn/SN-FieldLength.h create mode 100644 lte/rrc/asn/SON-Parameters-r9.c create mode 100644 lte/rrc/asn/SON-Parameters-r9.h create mode 100644 lte/rrc/asn/SPS-Config.c create mode 100644 lte/rrc/asn/SPS-Config.h create mode 100644 lte/rrc/asn/SPS-ConfigDL.c create mode 100644 lte/rrc/asn/SPS-ConfigDL.h create mode 100644 lte/rrc/asn/SPS-ConfigUL.c create mode 100644 lte/rrc/asn/SPS-ConfigUL.h create mode 100644 lte/rrc/asn/SPS-RA-ConfigList-rlola.c create mode 100644 lte/rrc/asn/SPS-RA-ConfigList-rlola.h create mode 100644 lte/rrc/asn/SRB-ToAddMod.c create mode 100644 lte/rrc/asn/SRB-ToAddMod.h create mode 100644 lte/rrc/asn/SRB-ToAddModList.c create mode 100644 lte/rrc/asn/SRB-ToAddModList.h create mode 100644 lte/rrc/asn/SRS-ConfigAp-r10.c create mode 100644 lte/rrc/asn/SRS-ConfigAp-r10.h create mode 100644 lte/rrc/asn/SchedulingRequestConfig-v1020.c create mode 100644 lte/rrc/asn/SchedulingRequestConfig-v1020.h create mode 100644 lte/rrc/asn/SchedulingRequestConfig.c create mode 100644 lte/rrc/asn/SchedulingRequestConfig.h create mode 100644 lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.c create mode 100644 lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h create mode 100644 lte/rrc/asn/SecurityAlgorithmConfig.c create mode 100644 lte/rrc/asn/SecurityAlgorithmConfig.h create mode 100644 lte/rrc/asn/SecurityConfigHO.c create mode 100644 lte/rrc/asn/SecurityConfigHO.h create mode 100644 lte/rrc/asn/SecurityConfigSMC.c create mode 100644 lte/rrc/asn/SecurityConfigSMC.h create mode 100644 lte/rrc/asn/SecurityModeCommand-r8-IEs.c create mode 100644 lte/rrc/asn/SecurityModeCommand-r8-IEs.h create mode 100644 lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c create mode 100644 lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h create mode 100644 lte/rrc/asn/SecurityModeCommand.c create mode 100644 lte/rrc/asn/SecurityModeCommand.h create mode 100644 lte/rrc/asn/SecurityModeComplete-r8-IEs.c create mode 100644 lte/rrc/asn/SecurityModeComplete-r8-IEs.h create mode 100644 lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c create mode 100644 lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h create mode 100644 lte/rrc/asn/SecurityModeComplete.c create mode 100644 lte/rrc/asn/SecurityModeComplete.h create mode 100644 lte/rrc/asn/SecurityModeFailure-r8-IEs.c create mode 100644 lte/rrc/asn/SecurityModeFailure-r8-IEs.h create mode 100644 lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c create mode 100644 lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h create mode 100644 lte/rrc/asn/SecurityModeFailure.c create mode 100644 lte/rrc/asn/SecurityModeFailure.h create mode 100644 lte/rrc/asn/ServCellIndex-r10.c create mode 100644 lte/rrc/asn/ServCellIndex-r10.h create mode 100644 lte/rrc/asn/ShortMAC-I.c create mode 100644 lte/rrc/asn/ShortMAC-I.h create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigCommon.c create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigCommon.h create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.c create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c create mode 100644 lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h create mode 100644 lte/rrc/asn/SpeedStateScaleFactors.c create mode 100644 lte/rrc/asn/SpeedStateScaleFactors.h create mode 100644 lte/rrc/asn/SupportedBandCombination-r10.c create mode 100644 lte/rrc/asn/SupportedBandCombination-r10.h create mode 100644 lte/rrc/asn/SupportedBandEUTRA.c create mode 100644 lte/rrc/asn/SupportedBandEUTRA.h create mode 100644 lte/rrc/asn/SupportedBandGERAN.c create mode 100644 lte/rrc/asn/SupportedBandGERAN.h create mode 100644 lte/rrc/asn/SupportedBandList1XRTT.c create mode 100644 lte/rrc/asn/SupportedBandList1XRTT.h create mode 100644 lte/rrc/asn/SupportedBandListEUTRA.c create mode 100644 lte/rrc/asn/SupportedBandListEUTRA.h create mode 100644 lte/rrc/asn/SupportedBandListGERAN.c create mode 100644 lte/rrc/asn/SupportedBandListGERAN.h create mode 100644 lte/rrc/asn/SupportedBandListHRPD.c create mode 100644 lte/rrc/asn/SupportedBandListHRPD.h create mode 100644 lte/rrc/asn/SupportedBandListUTRA-FDD.c create mode 100644 lte/rrc/asn/SupportedBandListUTRA-FDD.h create mode 100644 lte/rrc/asn/SupportedBandListUTRA-TDD128.c create mode 100644 lte/rrc/asn/SupportedBandListUTRA-TDD128.h create mode 100644 lte/rrc/asn/SupportedBandListUTRA-TDD384.c create mode 100644 lte/rrc/asn/SupportedBandListUTRA-TDD384.h create mode 100644 lte/rrc/asn/SupportedBandListUTRA-TDD768.c create mode 100644 lte/rrc/asn/SupportedBandListUTRA-TDD768.h create mode 100644 lte/rrc/asn/SupportedBandUTRA-FDD.c create mode 100644 lte/rrc/asn/SupportedBandUTRA-FDD.h create mode 100644 lte/rrc/asn/SupportedBandUTRA-TDD128.c create mode 100644 lte/rrc/asn/SupportedBandUTRA-TDD128.h create mode 100644 lte/rrc/asn/SupportedBandUTRA-TDD384.c create mode 100644 lte/rrc/asn/SupportedBandUTRA-TDD384.h create mode 100644 lte/rrc/asn/SupportedBandUTRA-TDD768.c create mode 100644 lte/rrc/asn/SupportedBandUTRA-TDD768.h create mode 100644 lte/rrc/asn/SystemInfoListGERAN.c create mode 100644 lte/rrc/asn/SystemInfoListGERAN.h create mode 100644 lte/rrc/asn/SystemInformation-r8-IEs.c create mode 100644 lte/rrc/asn/SystemInformation-r8-IEs.h create mode 100644 lte/rrc/asn/SystemInformation-v8a0-IEs.c create mode 100644 lte/rrc/asn/SystemInformation-v8a0-IEs.h create mode 100644 lte/rrc/asn/SystemInformation.c create mode 100644 lte/rrc/asn/SystemInformation.h create mode 100644 lte/rrc/asn/SystemInformationBlockType10.c create mode 100644 lte/rrc/asn/SystemInformationBlockType10.h create mode 100644 lte/rrc/asn/SystemInformationBlockType11.c create mode 100644 lte/rrc/asn/SystemInformationBlockType11.h create mode 100644 lte/rrc/asn/SystemInformationBlockType12-r9.c create mode 100644 lte/rrc/asn/SystemInformationBlockType12-r9.h create mode 100644 lte/rrc/asn/SystemInformationBlockType13-r9.c create mode 100644 lte/rrc/asn/SystemInformationBlockType13-r9.h create mode 100644 lte/rrc/asn/SystemInformationBlockType2.c create mode 100644 lte/rrc/asn/SystemInformationBlockType2.h create mode 100644 lte/rrc/asn/SystemInformationBlockType3.c create mode 100644 lte/rrc/asn/SystemInformationBlockType3.h create mode 100644 lte/rrc/asn/SystemInformationBlockType4.c create mode 100644 lte/rrc/asn/SystemInformationBlockType4.h create mode 100644 lte/rrc/asn/SystemInformationBlockType5.c create mode 100644 lte/rrc/asn/SystemInformationBlockType5.h create mode 100644 lte/rrc/asn/SystemInformationBlockType6.c create mode 100644 lte/rrc/asn/SystemInformationBlockType6.h create mode 100644 lte/rrc/asn/SystemInformationBlockType7.c create mode 100644 lte/rrc/asn/SystemInformationBlockType7.h create mode 100644 lte/rrc/asn/SystemInformationBlockType8.c create mode 100644 lte/rrc/asn/SystemInformationBlockType8.h create mode 100644 lte/rrc/asn/SystemInformationBlockType9.c create mode 100644 lte/rrc/asn/SystemInformationBlockType9.h create mode 100644 lte/rrc/asn/SystemTimeInfoCDMA2000.c create mode 100644 lte/rrc/asn/SystemTimeInfoCDMA2000.h create mode 100644 lte/rrc/asn/T-PollRetransmit.c create mode 100644 lte/rrc/asn/T-PollRetransmit.h create mode 100644 lte/rrc/asn/T-Reordering.c create mode 100644 lte/rrc/asn/T-Reordering.h create mode 100644 lte/rrc/asn/T-Reselection.c create mode 100644 lte/rrc/asn/T-Reselection.h create mode 100644 lte/rrc/asn/T-StatusProhibit.c create mode 100644 lte/rrc/asn/T-StatusProhibit.h create mode 100644 lte/rrc/asn/TMGI-r9.c create mode 100644 lte/rrc/asn/TMGI-r9.h create mode 100644 lte/rrc/asn/TPC-Index.c create mode 100644 lte/rrc/asn/TPC-Index.h create mode 100644 lte/rrc/asn/TPC-PDCCH-Config.c create mode 100644 lte/rrc/asn/TPC-PDCCH-Config.h create mode 100644 lte/rrc/asn/ThresholdCDMA2000.c create mode 100644 lte/rrc/asn/ThresholdCDMA2000.h create mode 100644 lte/rrc/asn/ThresholdEUTRA.c create mode 100644 lte/rrc/asn/ThresholdEUTRA.h create mode 100644 lte/rrc/asn/ThresholdGERAN.c create mode 100644 lte/rrc/asn/ThresholdGERAN.h create mode 100644 lte/rrc/asn/ThresholdUTRA.c create mode 100644 lte/rrc/asn/ThresholdUTRA.h create mode 100644 lte/rrc/asn/TimeAlignmentTimer.c create mode 100644 lte/rrc/asn/TimeAlignmentTimer.h create mode 100644 lte/rrc/asn/TimeToTrigger.c create mode 100644 lte/rrc/asn/TimeToTrigger.h create mode 100644 lte/rrc/asn/TraceReference-r10.c create mode 100644 lte/rrc/asn/TraceReference-r10.h create mode 100644 lte/rrc/asn/TrackingAreaCodeList-r10.c create mode 100644 lte/rrc/asn/TrackingAreaCodeList-r10.h create mode 100644 lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.c create mode 100644 lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h create mode 100644 lte/rrc/asn/UE-CapabilityRAT-Container.c create mode 100644 lte/rrc/asn/UE-CapabilityRAT-Container.h create mode 100644 lte/rrc/asn/UE-CapabilityRAT-ContainerList.c create mode 100644 lte/rrc/asn/UE-CapabilityRAT-ContainerList.h create mode 100644 lte/rrc/asn/UE-CapabilityRequest.c create mode 100644 lte/rrc/asn/UE-CapabilityRequest.h create mode 100644 lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c create mode 100644 lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h create mode 100644 lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c create mode 100644 lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h create mode 100644 lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c create mode 100644 lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h create mode 100644 lte/rrc/asn/UE-EUTRA-Capability.c create mode 100644 lte/rrc/asn/UE-EUTRA-Capability.h create mode 100644 lte/rrc/asn/UE-TimersAndConstants.c create mode 100644 lte/rrc/asn/UE-TimersAndConstants.h create mode 100644 lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c create mode 100644 lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h create mode 100644 lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c create mode 100644 lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h create mode 100644 lte/rrc/asn/UECapabilityEnquiry.c create mode 100644 lte/rrc/asn/UECapabilityEnquiry.h create mode 100644 lte/rrc/asn/UECapabilityInformation-r8-IEs.c create mode 100644 lte/rrc/asn/UECapabilityInformation-r8-IEs.h create mode 100644 lte/rrc/asn/UECapabilityInformation-v8a0-IEs.c create mode 100644 lte/rrc/asn/UECapabilityInformation-v8a0-IEs.h create mode 100644 lte/rrc/asn/UECapabilityInformation.c create mode 100644 lte/rrc/asn/UECapabilityInformation.h create mode 100644 lte/rrc/asn/UEInformationRequest-r9-IEs.c create mode 100644 lte/rrc/asn/UEInformationRequest-r9-IEs.h create mode 100644 lte/rrc/asn/UEInformationRequest-r9.c create mode 100644 lte/rrc/asn/UEInformationRequest-r9.h create mode 100644 lte/rrc/asn/UEInformationRequest-v1020-IEs.c create mode 100644 lte/rrc/asn/UEInformationRequest-v1020-IEs.h create mode 100644 lte/rrc/asn/UEInformationRequest-v930-IEs.c create mode 100644 lte/rrc/asn/UEInformationRequest-v930-IEs.h create mode 100644 lte/rrc/asn/UEInformationResponse-r9-IEs.c create mode 100644 lte/rrc/asn/UEInformationResponse-r9-IEs.h create mode 100644 lte/rrc/asn/UEInformationResponse-r9.c create mode 100644 lte/rrc/asn/UEInformationResponse-r9.h create mode 100644 lte/rrc/asn/UEInformationResponse-v1020-IEs.c create mode 100644 lte/rrc/asn/UEInformationResponse-v1020-IEs.h create mode 100644 lte/rrc/asn/UEInformationResponse-v930-IEs.c create mode 100644 lte/rrc/asn/UEInformationResponse-v930-IEs.h create mode 100644 lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.c create mode 100644 lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h create mode 100644 lte/rrc/asn/UERadioAccessCapabilityInformation.c create mode 100644 lte/rrc/asn/UERadioAccessCapabilityInformation.h create mode 100644 lte/rrc/asn/UL-AM-RLC.c create mode 100644 lte/rrc/asn/UL-AM-RLC.h create mode 100644 lte/rrc/asn/UL-CCCH-Message.c create mode 100644 lte/rrc/asn/UL-CCCH-Message.h create mode 100644 lte/rrc/asn/UL-CCCH-MessageType.c create mode 100644 lte/rrc/asn/UL-CCCH-MessageType.h create mode 100644 lte/rrc/asn/UL-CyclicPrefixLength.c create mode 100644 lte/rrc/asn/UL-CyclicPrefixLength.h create mode 100644 lte/rrc/asn/UL-DCCH-Message.c create mode 100644 lte/rrc/asn/UL-DCCH-Message.h create mode 100644 lte/rrc/asn/UL-DCCH-MessageType.c create mode 100644 lte/rrc/asn/UL-DCCH-MessageType.h create mode 100644 lte/rrc/asn/UL-ReferenceSignalsPUSCH.c create mode 100644 lte/rrc/asn/UL-ReferenceSignalsPUSCH.h create mode 100644 lte/rrc/asn/UL-UM-RLC.c create mode 100644 lte/rrc/asn/UL-UM-RLC.h create mode 100644 lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.c create mode 100644 lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h create mode 100644 lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.c create mode 100644 lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h create mode 100644 lte/rrc/asn/ULHandoverPreparationTransfer.c create mode 100644 lte/rrc/asn/ULHandoverPreparationTransfer.h create mode 100644 lte/rrc/asn/ULInformationTransfer-r8-IEs.c create mode 100644 lte/rrc/asn/ULInformationTransfer-r8-IEs.h create mode 100644 lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c create mode 100644 lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h create mode 100644 lte/rrc/asn/ULInformationTransfer.c create mode 100644 lte/rrc/asn/ULInformationTransfer.h create mode 100644 lte/rrc/asn/UplinkPowerControlCommon-v1020.c create mode 100644 lte/rrc/asn/UplinkPowerControlCommon-v1020.h create mode 100644 lte/rrc/asn/UplinkPowerControlCommon.c create mode 100644 lte/rrc/asn/UplinkPowerControlCommon.h create mode 100644 lte/rrc/asn/UplinkPowerControlCommonSCell-r10.c create mode 100644 lte/rrc/asn/UplinkPowerControlCommonSCell-r10.h create mode 100644 lte/rrc/asn/UplinkPowerControlDedicated-v1020.c create mode 100644 lte/rrc/asn/UplinkPowerControlDedicated-v1020.h create mode 100644 lte/rrc/asn/UplinkPowerControlDedicated.c create mode 100644 lte/rrc/asn/UplinkPowerControlDedicated.h create mode 100644 lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.c create mode 100644 lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h create mode 100644 lte/rrc/asn/VarMeasConfig.c create mode 100644 lte/rrc/asn/VarMeasConfig.h create mode 100644 lte/rrc/asn/VarMeasReport.c create mode 100644 lte/rrc/asn/VarMeasReport.h create mode 100644 lte/rrc/asn/VarMeasReportList.c create mode 100644 lte/rrc/asn/VarMeasReportList.h create mode 100644 lte/rrc/asn/VarShortMAC-Input.c create mode 100644 lte/rrc/asn/VarShortMAC-Input.h create mode 100644 lte/rrc/asn/converter-sample.c rename lte/rrc/{lib/rrc_msg/src/sib.h => include/liblte/rrc/common/rrc_common.h} (67%) rename lte/rrc/include/liblte/rrc/{rrc_msg => messages}/bcch.h (56%) create mode 100644 lte/rrc/include/liblte/rrc/messages/sib1.h create mode 100644 lte/rrc/lib/messages/src/bcch.c create mode 100644 lte/rrc/lib/messages/src/sib1.c rename lte/rrc/lib/{rrc_msg => messages}/test/CMakeLists.txt (91%) rename lte/rrc/lib/{rrc_msg => messages}/test/bcch_bch_test.c (96%) rename lte/rrc/lib/{rrc_msg => messages}/test/bcch_dlsch_test.c (64%) delete mode 100644 lte/rrc/lib/rrc_msg/src/bcch.c delete mode 100644 lte/rrc/lib/rrc_msg/src/sib.c diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index c959f31d4..ab40f11d8 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -198,11 +198,15 @@ int main(int argc, char **argv) { exit(-1); } else if (n > 0) { printf("\n\nDecoded SIB1 Message Len %d: ",n); - vec_fprint_hex(stdout, data, n); bit_unpack_vector(data, data_unpacked, n); - bcch_dlsch_sib1_unpack(data_unpacked, n); - printf("\n");fflush(stdout); - sib1_decoded = true; + void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); + if (dlsch_msg) { + printf("\n");fflush(stdout); + sib1_decoded = true; + cell_access_info_t cell_info; + bcch_dlsch_sib1_get_cell_access_info(dlsch_msg, &cell_info); + printf("Cell ID: 0x%x\n", cell_info.cell_id); + } } } else { /* Run FFT for all subframe data */ diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 0ba0d8393..083e33117 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -258,7 +258,7 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) cell->nof_ports = nof_tx_ports; bit_unpack_vector(bch_payload, bch_payload_unpacked, BCH_PAYLOAD_LEN); - bcch_bch_mib_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); + bcch_bch_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); /* set sampling frequency */ int srate = lte_sampling_freq_hz(cell->nof_prb); diff --git a/lte/examples/pdsch_enodeb.c b/lte/examples/pdsch_enodeb.c index 6f78098cf..1af223bd6 100644 --- a/lte/examples/pdsch_enodeb.c +++ b/lte/examples/pdsch_enodeb.c @@ -340,7 +340,7 @@ int main(int argc, char **argv) { CPNORM); } - bcch_bch_mib_pack(&cell, sfn, bch_payload_packed, BCH_PAYLOAD_LEN/8); + bcch_bch_pack(&cell, sfn, bch_payload_packed, BCH_PAYLOAD_LEN/8); bit_pack_vector(bch_payload_packed, bch_payload, BCH_PAYLOAD_LEN); if (sf_idx == 0) { pbch_encode(&pbch, bch_payload, sf_symbols); diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index 1bb679a53..ee59bfad8 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -54,6 +54,7 @@ LIBLTE_API void *vec_realloc(void *ptr, uint32_t old_size, uint32_t new_size); LIBLTE_API void vec_fprint_c(FILE *stream, cf_t *x, uint32_t len); LIBLTE_API void vec_fprint_f(FILE *stream, float *x, uint32_t len); LIBLTE_API void vec_fprint_b(FILE *stream, uint8_t *x, uint32_t len); +LIBLTE_API void vec_fprint_byte(FILE *stream, uint8_t *x, uint32_t len); LIBLTE_API void vec_fprint_i(FILE *stream, int *x, uint32_t len); LIBLTE_API void vec_fprint_hex(FILE *stream, uint8_t *x, uint32_t len); diff --git a/lte/phy/lib/utils/src/vector.c b/lte/phy/lib/utils/src/vector.c index e1ce45abd..11b2c41ea 100644 --- a/lte/phy/lib/utils/src/vector.c +++ b/lte/phy/lib/utils/src/vector.c @@ -236,6 +236,15 @@ void vec_fprint_b(FILE *stream, uint8_t *x, uint32_t len) { fprintf(stream, "];\n"); } +void vec_fprint_byte(FILE *stream, uint8_t *x, uint32_t len) { + int i; + fprintf(stream, "["); + for (i=0;icheck_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ac_BarringFactor_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ac_BarringFactor_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ac_BarringFactor_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ac_BarringFactor_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ac_BarringFactor_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ac_BarringFactor_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ac_BarringFactor_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ac_BarringFactor_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ac_BarringFactor_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ac_BarringFactor_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +ac_BarringTime_19_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ac_BarringTime_19_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ac_BarringTime_19_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ac_BarringTime_19_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ac_BarringTime_19_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ac_BarringTime_19_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ac_BarringTime_19_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ac_BarringTime_19_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ac_BarringTime_19_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ac_BarringTime_19_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ac_BarringTime_19_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_ac_BarringForSpecialAC_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 5)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_ac_BarringFactor_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ac_BarringTime_constr_19 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_BarringForSpecialAC_constr_28 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 5, 5 } /* (SIZE(5..5)) */, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_ac_BarringFactor_value2enum_2[] = { + { 0, 3, "p00" }, + { 1, 3, "p05" }, + { 2, 3, "p10" }, + { 3, 3, "p15" }, + { 4, 3, "p20" }, + { 5, 3, "p25" }, + { 6, 3, "p30" }, + { 7, 3, "p40" }, + { 8, 3, "p50" }, + { 9, 3, "p60" }, + { 10, 3, "p70" }, + { 11, 3, "p75" }, + { 12, 3, "p80" }, + { 13, 3, "p85" }, + { 14, 3, "p90" }, + { 15, 3, "p95" } +}; +static unsigned int asn_MAP_ac_BarringFactor_enum2value_2[] = { + 0, /* p00(0) */ + 1, /* p05(1) */ + 2, /* p10(2) */ + 3, /* p15(3) */ + 4, /* p20(4) */ + 5, /* p25(5) */ + 6, /* p30(6) */ + 7, /* p40(7) */ + 8, /* p50(8) */ + 9, /* p60(9) */ + 10, /* p70(10) */ + 11, /* p75(11) */ + 12, /* p80(12) */ + 13, /* p85(13) */ + 14, /* p90(14) */ + 15 /* p95(15) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ac_BarringFactor_specs_2 = { + asn_MAP_ac_BarringFactor_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_ac_BarringFactor_enum2value_2, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ac_BarringFactor_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ac_BarringFactor_2 = { + "ac-BarringFactor", + "ac-BarringFactor", + ac_BarringFactor_2_free, + ac_BarringFactor_2_print, + ac_BarringFactor_2_constraint, + ac_BarringFactor_2_decode_ber, + ac_BarringFactor_2_encode_der, + ac_BarringFactor_2_decode_xer, + ac_BarringFactor_2_encode_xer, + ac_BarringFactor_2_decode_uper, + ac_BarringFactor_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ac_BarringFactor_tags_2, + sizeof(asn_DEF_ac_BarringFactor_tags_2) + /sizeof(asn_DEF_ac_BarringFactor_tags_2[0]) - 1, /* 1 */ + asn_DEF_ac_BarringFactor_tags_2, /* Same as above */ + sizeof(asn_DEF_ac_BarringFactor_tags_2) + /sizeof(asn_DEF_ac_BarringFactor_tags_2[0]), /* 2 */ + &asn_PER_type_ac_BarringFactor_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ac_BarringFactor_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_ac_BarringTime_value2enum_19[] = { + { 0, 2, "s4" }, + { 1, 2, "s8" }, + { 2, 3, "s16" }, + { 3, 3, "s32" }, + { 4, 3, "s64" }, + { 5, 4, "s128" }, + { 6, 4, "s256" }, + { 7, 4, "s512" } +}; +static unsigned int asn_MAP_ac_BarringTime_enum2value_19[] = { + 5, /* s128(5) */ + 2, /* s16(2) */ + 6, /* s256(6) */ + 3, /* s32(3) */ + 0, /* s4(0) */ + 7, /* s512(7) */ + 4, /* s64(4) */ + 1 /* s8(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ac_BarringTime_specs_19 = { + asn_MAP_ac_BarringTime_value2enum_19, /* "tag" => N; sorted by tag */ + asn_MAP_ac_BarringTime_enum2value_19, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ac_BarringTime_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ac_BarringTime_19 = { + "ac-BarringTime", + "ac-BarringTime", + ac_BarringTime_19_free, + ac_BarringTime_19_print, + ac_BarringTime_19_constraint, + ac_BarringTime_19_decode_ber, + ac_BarringTime_19_encode_der, + ac_BarringTime_19_decode_xer, + ac_BarringTime_19_encode_xer, + ac_BarringTime_19_decode_uper, + ac_BarringTime_19_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ac_BarringTime_tags_19, + sizeof(asn_DEF_ac_BarringTime_tags_19) + /sizeof(asn_DEF_ac_BarringTime_tags_19[0]) - 1, /* 1 */ + asn_DEF_ac_BarringTime_tags_19, /* Same as above */ + sizeof(asn_DEF_ac_BarringTime_tags_19) + /sizeof(asn_DEF_ac_BarringTime_tags_19[0]), /* 2 */ + &asn_PER_type_ac_BarringTime_constr_19, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ac_BarringTime_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AC_BarringConfig_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig, ac_BarringFactor), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ac_BarringFactor_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringFactor" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig, ac_BarringTime), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ac_BarringTime_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringTime" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig, ac_BarringForSpecialAC), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_ac_BarringForSpecialAC_constraint_1, + &asn_PER_memb_ac_BarringForSpecialAC_constr_28, + 0, + "ac-BarringForSpecialAC" + }, +}; +static ber_tlv_tag_t asn_DEF_AC_BarringConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AC_BarringConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ac-BarringFactor at 1489 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ac-BarringTime at 1491 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ac-BarringForSpecialAC at 1492 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AC_BarringConfig_specs_1 = { + sizeof(struct AC_BarringConfig), + offsetof(struct AC_BarringConfig, _asn_ctx), + asn_MAP_AC_BarringConfig_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AC_BarringConfig = { + "AC-BarringConfig", + "AC-BarringConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AC_BarringConfig_tags_1, + sizeof(asn_DEF_AC_BarringConfig_tags_1) + /sizeof(asn_DEF_AC_BarringConfig_tags_1[0]), /* 1 */ + asn_DEF_AC_BarringConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_AC_BarringConfig_tags_1) + /sizeof(asn_DEF_AC_BarringConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AC_BarringConfig_1, + 3, /* Elements count */ + &asn_SPC_AC_BarringConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AC-BarringConfig.h b/lte/rrc/asn/AC-BarringConfig.h new file mode 100644 index 000000000..df8444311 --- /dev/null +++ b/lte/rrc/asn/AC-BarringConfig.h @@ -0,0 +1,73 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AC_BarringConfig_H_ +#define _AC_BarringConfig_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AC_BarringConfig__ac_BarringFactor { + AC_BarringConfig__ac_BarringFactor_p00 = 0, + AC_BarringConfig__ac_BarringFactor_p05 = 1, + AC_BarringConfig__ac_BarringFactor_p10 = 2, + AC_BarringConfig__ac_BarringFactor_p15 = 3, + AC_BarringConfig__ac_BarringFactor_p20 = 4, + AC_BarringConfig__ac_BarringFactor_p25 = 5, + AC_BarringConfig__ac_BarringFactor_p30 = 6, + AC_BarringConfig__ac_BarringFactor_p40 = 7, + AC_BarringConfig__ac_BarringFactor_p50 = 8, + AC_BarringConfig__ac_BarringFactor_p60 = 9, + AC_BarringConfig__ac_BarringFactor_p70 = 10, + AC_BarringConfig__ac_BarringFactor_p75 = 11, + AC_BarringConfig__ac_BarringFactor_p80 = 12, + AC_BarringConfig__ac_BarringFactor_p85 = 13, + AC_BarringConfig__ac_BarringFactor_p90 = 14, + AC_BarringConfig__ac_BarringFactor_p95 = 15 +} e_AC_BarringConfig__ac_BarringFactor; +typedef enum AC_BarringConfig__ac_BarringTime { + AC_BarringConfig__ac_BarringTime_s4 = 0, + AC_BarringConfig__ac_BarringTime_s8 = 1, + AC_BarringConfig__ac_BarringTime_s16 = 2, + AC_BarringConfig__ac_BarringTime_s32 = 3, + AC_BarringConfig__ac_BarringTime_s64 = 4, + AC_BarringConfig__ac_BarringTime_s128 = 5, + AC_BarringConfig__ac_BarringTime_s256 = 6, + AC_BarringConfig__ac_BarringTime_s512 = 7 +} e_AC_BarringConfig__ac_BarringTime; + +/* AC-BarringConfig */ +typedef struct AC_BarringConfig { + long ac_BarringFactor; + long ac_BarringTime; + BIT_STRING_t ac_BarringForSpecialAC; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AC_BarringConfig_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_ac_BarringFactor_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_ac_BarringTime_19; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_AC_BarringConfig; + +#ifdef __cplusplus +} +#endif + +#endif /* _AC_BarringConfig_H_ */ +#include diff --git a/lte/rrc/asn/AC-BarringConfig1XRTT-r9.c b/lte/rrc/asn/AC-BarringConfig1XRTT-r9.c new file mode 100644 index 000000000..3fbfc4158 --- /dev/null +++ b/lte/rrc/asn/AC-BarringConfig1XRTT-r9.c @@ -0,0 +1,450 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AC-BarringConfig1XRTT-r9.h" + +static int +memb_ac_Barring0to9_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_Barring10_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_Barring11_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_Barring12_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_Barring13_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_Barring14_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_Barring15_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_BarringMsg_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_BarringReg_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ac_BarringEmg_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ac_Barring0to9_r9_constr_2 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_Barring10_r9_constr_3 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_Barring11_r9_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_Barring12_r9_constr_5 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_Barring13_r9_constr_6 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_Barring14_r9_constr_7 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_Barring15_r9_constr_8 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_BarringMsg_r9_constr_9 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_BarringReg_r9_constr_10 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ac_BarringEmg_r9_constr_11 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_AC_BarringConfig1XRTT_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring0to9_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring0to9_r9_constraint_1, + &asn_PER_memb_ac_Barring0to9_r9_constr_2, + 0, + "ac-Barring0to9-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring10_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring10_r9_constraint_1, + &asn_PER_memb_ac_Barring10_r9_constr_3, + 0, + "ac-Barring10-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring11_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring11_r9_constraint_1, + &asn_PER_memb_ac_Barring11_r9_constr_4, + 0, + "ac-Barring11-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring12_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring12_r9_constraint_1, + &asn_PER_memb_ac_Barring12_r9_constr_5, + 0, + "ac-Barring12-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring13_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring13_r9_constraint_1, + &asn_PER_memb_ac_Barring13_r9_constr_6, + 0, + "ac-Barring13-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring14_r9), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring14_r9_constraint_1, + &asn_PER_memb_ac_Barring14_r9_constr_7, + 0, + "ac-Barring14-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_Barring15_r9), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_Barring15_r9_constraint_1, + &asn_PER_memb_ac_Barring15_r9_constr_8, + 0, + "ac-Barring15-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_BarringMsg_r9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_BarringMsg_r9_constraint_1, + &asn_PER_memb_ac_BarringMsg_r9_constr_9, + 0, + "ac-BarringMsg-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_BarringReg_r9), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_BarringReg_r9_constraint_1, + &asn_PER_memb_ac_BarringReg_r9_constr_10, + 0, + "ac-BarringReg-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AC_BarringConfig1XRTT_r9, ac_BarringEmg_r9), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ac_BarringEmg_r9_constraint_1, + &asn_PER_memb_ac_BarringEmg_r9_constr_11, + 0, + "ac-BarringEmg-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_AC_BarringConfig1XRTT_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AC_BarringConfig1XRTT_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ac-Barring0to9-r9 at 1736 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ac-Barring10-r9 at 1737 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ac-Barring11-r9 at 1738 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ac-Barring12-r9 at 1739 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ac-Barring13-r9 at 1740 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* ac-Barring14-r9 at 1741 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ac-Barring15-r9 at 1742 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ac-BarringMsg-r9 at 1743 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* ac-BarringReg-r9 at 1744 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* ac-BarringEmg-r9 at 1745 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AC_BarringConfig1XRTT_r9_specs_1 = { + sizeof(struct AC_BarringConfig1XRTT_r9), + offsetof(struct AC_BarringConfig1XRTT_r9, _asn_ctx), + asn_MAP_AC_BarringConfig1XRTT_r9_tag2el_1, + 10, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AC_BarringConfig1XRTT_r9 = { + "AC-BarringConfig1XRTT-r9", + "AC-BarringConfig1XRTT-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AC_BarringConfig1XRTT_r9_tags_1, + sizeof(asn_DEF_AC_BarringConfig1XRTT_r9_tags_1) + /sizeof(asn_DEF_AC_BarringConfig1XRTT_r9_tags_1[0]), /* 1 */ + asn_DEF_AC_BarringConfig1XRTT_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_AC_BarringConfig1XRTT_r9_tags_1) + /sizeof(asn_DEF_AC_BarringConfig1XRTT_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AC_BarringConfig1XRTT_r9_1, + 10, /* Elements count */ + &asn_SPC_AC_BarringConfig1XRTT_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AC-BarringConfig1XRTT-r9.h b/lte/rrc/asn/AC-BarringConfig1XRTT-r9.h new file mode 100644 index 000000000..1f1c26b3a --- /dev/null +++ b/lte/rrc/asn/AC-BarringConfig1XRTT-r9.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AC_BarringConfig1XRTT_r9_H_ +#define _AC_BarringConfig1XRTT_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* AC-BarringConfig1XRTT-r9 */ +typedef struct AC_BarringConfig1XRTT_r9 { + long ac_Barring0to9_r9; + long ac_Barring10_r9; + long ac_Barring11_r9; + long ac_Barring12_r9; + long ac_Barring13_r9; + long ac_Barring14_r9; + long ac_Barring15_r9; + long ac_BarringMsg_r9; + long ac_BarringReg_r9; + long ac_BarringEmg_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AC_BarringConfig1XRTT_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AC_BarringConfig1XRTT_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _AC_BarringConfig1XRTT_r9_H_ */ +#include diff --git a/lte/rrc/asn/ARFCN-ValueCDMA2000.c b/lte/rrc/asn/ARFCN-ValueCDMA2000.c new file mode 100644 index 000000000..f66c2e9a7 --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueCDMA2000.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ARFCN-ValueCDMA2000.h" + +int +ARFCN_ValueCDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ARFCN_ValueCDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ARFCN_ValueCDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueCDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ARFCN_ValueCDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueCDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ARFCN_ValueCDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueCDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ARFCN_ValueCDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ARFCN_ValueCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ARFCN_ValueCDMA2000_constr_1 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ARFCN_ValueCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueCDMA2000 = { + "ARFCN-ValueCDMA2000", + "ARFCN-ValueCDMA2000", + ARFCN_ValueCDMA2000_free, + ARFCN_ValueCDMA2000_print, + ARFCN_ValueCDMA2000_constraint, + ARFCN_ValueCDMA2000_decode_ber, + ARFCN_ValueCDMA2000_encode_der, + ARFCN_ValueCDMA2000_decode_xer, + ARFCN_ValueCDMA2000_encode_xer, + ARFCN_ValueCDMA2000_decode_uper, + ARFCN_ValueCDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ARFCN_ValueCDMA2000_tags_1, + sizeof(asn_DEF_ARFCN_ValueCDMA2000_tags_1) + /sizeof(asn_DEF_ARFCN_ValueCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_ARFCN_ValueCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_ARFCN_ValueCDMA2000_tags_1) + /sizeof(asn_DEF_ARFCN_ValueCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_ARFCN_ValueCDMA2000_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ARFCN-ValueCDMA2000.h b/lte/rrc/asn/ARFCN-ValueCDMA2000.h new file mode 100644 index 000000000..14e736159 --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueCDMA2000.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ARFCN_ValueCDMA2000_H_ +#define _ARFCN_ValueCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ARFCN-ValueCDMA2000 */ +typedef long ARFCN_ValueCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueCDMA2000; +asn_struct_free_f ARFCN_ValueCDMA2000_free; +asn_struct_print_f ARFCN_ValueCDMA2000_print; +asn_constr_check_f ARFCN_ValueCDMA2000_constraint; +ber_type_decoder_f ARFCN_ValueCDMA2000_decode_ber; +der_type_encoder_f ARFCN_ValueCDMA2000_encode_der; +xer_type_decoder_f ARFCN_ValueCDMA2000_decode_xer; +xer_type_encoder_f ARFCN_ValueCDMA2000_encode_xer; +per_type_decoder_f ARFCN_ValueCDMA2000_decode_uper; +per_type_encoder_f ARFCN_ValueCDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ARFCN_ValueCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/ARFCN-ValueEUTRA.c b/lte/rrc/asn/ARFCN-ValueEUTRA.c new file mode 100644 index 000000000..9fc52199d --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueEUTRA.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ARFCN-ValueEUTRA.h" + +int +ARFCN_ValueEUTRA_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 65535)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ARFCN_ValueEUTRA_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ARFCN_ValueEUTRA_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueEUTRA_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ARFCN_ValueEUTRA_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueEUTRA_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ARFCN_ValueEUTRA_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueEUTRA_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ARFCN_ValueEUTRA_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ARFCN_ValueEUTRA_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ARFCN_ValueEUTRA_constr_1 = { + { APC_CONSTRAINED, 16, 16, 0, 65535 } /* (0..65535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ARFCN_ValueEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueEUTRA = { + "ARFCN-ValueEUTRA", + "ARFCN-ValueEUTRA", + ARFCN_ValueEUTRA_free, + ARFCN_ValueEUTRA_print, + ARFCN_ValueEUTRA_constraint, + ARFCN_ValueEUTRA_decode_ber, + ARFCN_ValueEUTRA_encode_der, + ARFCN_ValueEUTRA_decode_xer, + ARFCN_ValueEUTRA_encode_xer, + ARFCN_ValueEUTRA_decode_uper, + ARFCN_ValueEUTRA_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ARFCN_ValueEUTRA_tags_1, + sizeof(asn_DEF_ARFCN_ValueEUTRA_tags_1) + /sizeof(asn_DEF_ARFCN_ValueEUTRA_tags_1[0]), /* 1 */ + asn_DEF_ARFCN_ValueEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_ARFCN_ValueEUTRA_tags_1) + /sizeof(asn_DEF_ARFCN_ValueEUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_ARFCN_ValueEUTRA_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ARFCN-ValueEUTRA.h b/lte/rrc/asn/ARFCN-ValueEUTRA.h new file mode 100644 index 000000000..d76f3488e --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueEUTRA.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ARFCN_ValueEUTRA_H_ +#define _ARFCN_ValueEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ARFCN-ValueEUTRA */ +typedef long ARFCN_ValueEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueEUTRA; +asn_struct_free_f ARFCN_ValueEUTRA_free; +asn_struct_print_f ARFCN_ValueEUTRA_print; +asn_constr_check_f ARFCN_ValueEUTRA_constraint; +ber_type_decoder_f ARFCN_ValueEUTRA_decode_ber; +der_type_encoder_f ARFCN_ValueEUTRA_encode_der; +xer_type_decoder_f ARFCN_ValueEUTRA_decode_xer; +xer_type_encoder_f ARFCN_ValueEUTRA_encode_xer; +per_type_decoder_f ARFCN_ValueEUTRA_decode_uper; +per_type_encoder_f ARFCN_ValueEUTRA_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ARFCN_ValueEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/ARFCN-ValueGERAN.c b/lte/rrc/asn/ARFCN-ValueGERAN.c new file mode 100644 index 000000000..be5e61522 --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueGERAN.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ARFCN-ValueGERAN.h" + +int +ARFCN_ValueGERAN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ARFCN_ValueGERAN_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ARFCN_ValueGERAN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueGERAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ARFCN_ValueGERAN_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueGERAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ARFCN_ValueGERAN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueGERAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ARFCN_ValueGERAN_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ARFCN_ValueGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ARFCN_ValueGERAN_constr_1 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ARFCN_ValueGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueGERAN = { + "ARFCN-ValueGERAN", + "ARFCN-ValueGERAN", + ARFCN_ValueGERAN_free, + ARFCN_ValueGERAN_print, + ARFCN_ValueGERAN_constraint, + ARFCN_ValueGERAN_decode_ber, + ARFCN_ValueGERAN_encode_der, + ARFCN_ValueGERAN_decode_xer, + ARFCN_ValueGERAN_encode_xer, + ARFCN_ValueGERAN_decode_uper, + ARFCN_ValueGERAN_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ARFCN_ValueGERAN_tags_1, + sizeof(asn_DEF_ARFCN_ValueGERAN_tags_1) + /sizeof(asn_DEF_ARFCN_ValueGERAN_tags_1[0]), /* 1 */ + asn_DEF_ARFCN_ValueGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_ARFCN_ValueGERAN_tags_1) + /sizeof(asn_DEF_ARFCN_ValueGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_ARFCN_ValueGERAN_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ARFCN-ValueGERAN.h b/lte/rrc/asn/ARFCN-ValueGERAN.h new file mode 100644 index 000000000..e5ce8a14b --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueGERAN.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ARFCN_ValueGERAN_H_ +#define _ARFCN_ValueGERAN_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ARFCN-ValueGERAN */ +typedef long ARFCN_ValueGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueGERAN; +asn_struct_free_f ARFCN_ValueGERAN_free; +asn_struct_print_f ARFCN_ValueGERAN_print; +asn_constr_check_f ARFCN_ValueGERAN_constraint; +ber_type_decoder_f ARFCN_ValueGERAN_decode_ber; +der_type_encoder_f ARFCN_ValueGERAN_encode_der; +xer_type_decoder_f ARFCN_ValueGERAN_decode_xer; +xer_type_encoder_f ARFCN_ValueGERAN_encode_xer; +per_type_decoder_f ARFCN_ValueGERAN_decode_uper; +per_type_encoder_f ARFCN_ValueGERAN_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ARFCN_ValueGERAN_H_ */ +#include diff --git a/lte/rrc/asn/ARFCN-ValueUTRA.c b/lte/rrc/asn/ARFCN-ValueUTRA.c new file mode 100644 index 000000000..aa6f259cb --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueUTRA.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ARFCN-ValueUTRA.h" + +int +ARFCN_ValueUTRA_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 16383)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ARFCN_ValueUTRA_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ARFCN_ValueUTRA_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueUTRA_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ARFCN_ValueUTRA_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueUTRA_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ARFCN_ValueUTRA_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ARFCN_ValueUTRA_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ARFCN_ValueUTRA_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ARFCN_ValueUTRA_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ARFCN_ValueUTRA_constr_1 = { + { APC_CONSTRAINED, 14, 14, 0, 16383 } /* (0..16383) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ARFCN_ValueUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueUTRA = { + "ARFCN-ValueUTRA", + "ARFCN-ValueUTRA", + ARFCN_ValueUTRA_free, + ARFCN_ValueUTRA_print, + ARFCN_ValueUTRA_constraint, + ARFCN_ValueUTRA_decode_ber, + ARFCN_ValueUTRA_encode_der, + ARFCN_ValueUTRA_decode_xer, + ARFCN_ValueUTRA_encode_xer, + ARFCN_ValueUTRA_decode_uper, + ARFCN_ValueUTRA_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ARFCN_ValueUTRA_tags_1, + sizeof(asn_DEF_ARFCN_ValueUTRA_tags_1) + /sizeof(asn_DEF_ARFCN_ValueUTRA_tags_1[0]), /* 1 */ + asn_DEF_ARFCN_ValueUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_ARFCN_ValueUTRA_tags_1) + /sizeof(asn_DEF_ARFCN_ValueUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_ARFCN_ValueUTRA_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ARFCN-ValueUTRA.h b/lte/rrc/asn/ARFCN-ValueUTRA.h new file mode 100644 index 000000000..f483e0f4b --- /dev/null +++ b/lte/rrc/asn/ARFCN-ValueUTRA.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ARFCN_ValueUTRA_H_ +#define _ARFCN_ValueUTRA_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ARFCN-ValueUTRA */ +typedef long ARFCN_ValueUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ARFCN_ValueUTRA; +asn_struct_free_f ARFCN_ValueUTRA_free; +asn_struct_print_f ARFCN_ValueUTRA_print; +asn_constr_check_f ARFCN_ValueUTRA_constraint; +ber_type_decoder_f ARFCN_ValueUTRA_decode_ber; +der_type_encoder_f ARFCN_ValueUTRA_encode_der; +xer_type_decoder_f ARFCN_ValueUTRA_decode_xer; +xer_type_encoder_f ARFCN_ValueUTRA_encode_xer; +per_type_decoder_f ARFCN_ValueUTRA_decode_uper; +per_type_encoder_f ARFCN_ValueUTRA_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ARFCN_ValueUTRA_H_ */ +#include diff --git a/lte/rrc/asn/AS-Config.c b/lte/rrc/asn/AS-Config.c new file mode 100644 index 000000000..ce5e5dcf3 --- /dev/null +++ b/lte/rrc/asn/AS-Config.c @@ -0,0 +1,210 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "AS-Config.h" + +static int +memb_sourceSystemInformationBlockType1_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +static int +memb_sourceSystemInformationBlockType1Ext_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_sourceSystemInformationBlockType1_constr_7 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sourceSystemInformationBlockType1Ext_constr_12 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 } /* (SIZE(0..MAX)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_AS_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceMeasConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceMeasConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceRadioResourceConfig), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceRadioResourceConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceSecurityAlgorithmConfig), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityAlgorithmConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceSecurityAlgorithmConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceUE_Identity), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceUE-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceMasterInformationBlock), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MasterInformationBlock, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceMasterInformationBlock" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceSystemInformationBlockType1), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType1, + memb_sourceSystemInformationBlockType1_constraint_1, + &asn_PER_memb_sourceSystemInformationBlockType1_constr_7, + 0, + "sourceSystemInformationBlockType1" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceSystemInformationBlockType2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceSystemInformationBlockType2" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, antennaInfoCommon), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfoCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct AS_Config, sourceDl_CarrierFreq), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceDl-CarrierFreq" + }, + { ATF_POINTER, 2, offsetof(struct AS_Config, sourceSystemInformationBlockType1Ext), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_sourceSystemInformationBlockType1Ext_constraint_1, + &asn_PER_memb_sourceSystemInformationBlockType1Ext_constr_12, + 0, + "sourceSystemInformationBlockType1Ext" + }, + { ATF_POINTER, 1, offsetof(struct AS_Config, sourceOtherConfig_r9), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OtherConfig_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourceOtherConfig-r9" + }, +}; +static const int asn_MAP_AS_Config_oms_1[] = { 9, 10 }; +static const ber_tlv_tag_t asn_DEF_AS_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AS_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sourceMeasConfig */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sourceRadioResourceConfig */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sourceSecurityAlgorithmConfig */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sourceUE-Identity */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sourceMasterInformationBlock */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* sourceSystemInformationBlockType1 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* sourceSystemInformationBlockType2 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* antennaInfoCommon */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* sourceDl-CarrierFreq */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* sourceSystemInformationBlockType1Ext */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 } /* sourceOtherConfig-r9 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AS_Config_specs_1 = { + sizeof(struct AS_Config), + offsetof(struct AS_Config, _asn_ctx), + asn_MAP_AS_Config_tag2el_1, + 11, /* Count of tags in the map */ + asn_MAP_AS_Config_oms_1, /* Optional members */ + 0, 2, /* Root/Additions */ + 8, /* Start extensions */ + 12 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AS_Config = { + "AS-Config", + "AS-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AS_Config_tags_1, + sizeof(asn_DEF_AS_Config_tags_1) + /sizeof(asn_DEF_AS_Config_tags_1[0]), /* 1 */ + asn_DEF_AS_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_AS_Config_tags_1) + /sizeof(asn_DEF_AS_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AS_Config_1, + 11, /* Elements count */ + &asn_SPC_AS_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AS-Config.h b/lte/rrc/asn/AS-Config.h new file mode 100644 index 000000000..ac116ce15 --- /dev/null +++ b/lte/rrc/asn/AS-Config.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _AS_Config_H_ +#define _AS_Config_H_ + + +#include + +/* Including external dependencies */ +#include "MeasConfig.h" +#include "RadioResourceConfigDedicated.h" +#include "SecurityAlgorithmConfig.h" +#include "C-RNTI.h" +#include "MasterInformationBlock.h" +#include "SystemInformationBlockType1.h" +#include "SystemInformationBlockType2.h" +#include "AntennaInfoCommon.h" +#include "ARFCN-ValueEUTRA.h" +#include +#include "OtherConfig-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct OtherConfig_r9; + +/* AS-Config */ +typedef struct AS_Config { + MeasConfig_t sourceMeasConfig; + RadioResourceConfigDedicated_t sourceRadioResourceConfig; + SecurityAlgorithmConfig_t sourceSecurityAlgorithmConfig; + C_RNTI_t sourceUE_Identity; + MasterInformationBlock_t sourceMasterInformationBlock; + SystemInformationBlockType1_t sourceSystemInformationBlockType1; + SystemInformationBlockType2_t sourceSystemInformationBlockType2; + AntennaInfoCommon_t antennaInfoCommon; + ARFCN_ValueEUTRA_t sourceDl_CarrierFreq; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *sourceSystemInformationBlockType1Ext /* OPTIONAL */; + struct OtherConfig_r9 *sourceOtherConfig_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AS_Config_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AS_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _AS_Config_H_ */ +#include diff --git a/lte/rrc/asn/AS-Context.c b/lte/rrc/asn/AS-Context.c new file mode 100644 index 000000000..ff9e43e87 --- /dev/null +++ b/lte/rrc/asn/AS-Context.c @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "AS-Context.h" + +static asn_TYPE_member_t asn_MBR_AS_Context_1[] = { + { ATF_POINTER, 1, offsetof(struct AS_Context, reestablishmentInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReestablishmentInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reestablishmentInfo" + }, +}; +static const int asn_MAP_AS_Context_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_AS_Context_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AS_Context_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* reestablishmentInfo */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AS_Context_specs_1 = { + sizeof(struct AS_Context), + offsetof(struct AS_Context, _asn_ctx), + asn_MAP_AS_Context_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_AS_Context_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AS_Context = { + "AS-Context", + "AS-Context", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AS_Context_tags_1, + sizeof(asn_DEF_AS_Context_tags_1) + /sizeof(asn_DEF_AS_Context_tags_1[0]), /* 1 */ + asn_DEF_AS_Context_tags_1, /* Same as above */ + sizeof(asn_DEF_AS_Context_tags_1) + /sizeof(asn_DEF_AS_Context_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AS_Context_1, + 1, /* Elements count */ + &asn_SPC_AS_Context_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AS-Context.h b/lte/rrc/asn/AS-Context.h new file mode 100644 index 000000000..3a9e785db --- /dev/null +++ b/lte/rrc/asn/AS-Context.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _AS_Context_H_ +#define _AS_Context_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ReestablishmentInfo; + +/* AS-Context */ +typedef struct AS_Context { + struct ReestablishmentInfo *reestablishmentInfo /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AS_Context_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AS_Context; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ReestablishmentInfo.h" + +#endif /* _AS_Context_H_ */ +#include diff --git a/lte/rrc/asn/AbsoluteTimeInfo-r10.c b/lte/rrc/asn/AbsoluteTimeInfo-r10.c new file mode 100644 index 000000000..a4b9178fe --- /dev/null +++ b/lte/rrc/asn/AbsoluteTimeInfo-r10.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AbsoluteTimeInfo-r10.h" + +int +AbsoluteTimeInfo_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 48)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +AbsoluteTimeInfo_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +AbsoluteTimeInfo_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +AbsoluteTimeInfo_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +AbsoluteTimeInfo_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +AbsoluteTimeInfo_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +AbsoluteTimeInfo_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +AbsoluteTimeInfo_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +AbsoluteTimeInfo_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + AbsoluteTimeInfo_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_AbsoluteTimeInfo_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 48, 48 } /* (SIZE(48..48)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_AbsoluteTimeInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AbsoluteTimeInfo_r10 = { + "AbsoluteTimeInfo-r10", + "AbsoluteTimeInfo-r10", + AbsoluteTimeInfo_r10_free, + AbsoluteTimeInfo_r10_print, + AbsoluteTimeInfo_r10_constraint, + AbsoluteTimeInfo_r10_decode_ber, + AbsoluteTimeInfo_r10_encode_der, + AbsoluteTimeInfo_r10_decode_xer, + AbsoluteTimeInfo_r10_encode_xer, + AbsoluteTimeInfo_r10_decode_uper, + AbsoluteTimeInfo_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AbsoluteTimeInfo_r10_tags_1, + sizeof(asn_DEF_AbsoluteTimeInfo_r10_tags_1) + /sizeof(asn_DEF_AbsoluteTimeInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_AbsoluteTimeInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_AbsoluteTimeInfo_r10_tags_1) + /sizeof(asn_DEF_AbsoluteTimeInfo_r10_tags_1[0]), /* 1 */ + &asn_PER_type_AbsoluteTimeInfo_r10_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/AbsoluteTimeInfo-r10.h b/lte/rrc/asn/AbsoluteTimeInfo-r10.h new file mode 100644 index 000000000..dfa6340b2 --- /dev/null +++ b/lte/rrc/asn/AbsoluteTimeInfo-r10.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AbsoluteTimeInfo_r10_H_ +#define _AbsoluteTimeInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* AbsoluteTimeInfo-r10 */ +typedef BIT_STRING_t AbsoluteTimeInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AbsoluteTimeInfo_r10; +asn_struct_free_f AbsoluteTimeInfo_r10_free; +asn_struct_print_f AbsoluteTimeInfo_r10_print; +asn_constr_check_f AbsoluteTimeInfo_r10_constraint; +ber_type_decoder_f AbsoluteTimeInfo_r10_decode_ber; +der_type_encoder_f AbsoluteTimeInfo_r10_encode_der; +xer_type_decoder_f AbsoluteTimeInfo_r10_decode_xer; +xer_type_encoder_f AbsoluteTimeInfo_r10_encode_xer; +per_type_decoder_f AbsoluteTimeInfo_r10_decode_uper; +per_type_encoder_f AbsoluteTimeInfo_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AbsoluteTimeInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/AccessStratumRelease.c b/lte/rrc/asn/AccessStratumRelease.c new file mode 100644 index 000000000..ad3b41695 --- /dev/null +++ b/lte/rrc/asn/AccessStratumRelease.c @@ -0,0 +1,160 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AccessStratumRelease.h" + +int +AccessStratumRelease_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +AccessStratumRelease_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +AccessStratumRelease_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +AccessStratumRelease_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +AccessStratumRelease_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +AccessStratumRelease_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +AccessStratumRelease_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +AccessStratumRelease_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +AccessStratumRelease_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +AccessStratumRelease_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + AccessStratumRelease_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_AccessStratumRelease_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_AccessStratumRelease_value2enum_1[] = { + { 0, 4, "rel8" }, + { 1, 4, "rel9" }, + { 2, 5, "rel10" }, + { 3, 6, "spare5" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_AccessStratumRelease_enum2value_1[] = { + 2, /* rel10(2) */ + 0, /* rel8(0) */ + 1, /* rel9(1) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 3 /* spare5(3) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_AccessStratumRelease_specs_1 = { + asn_MAP_AccessStratumRelease_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_AccessStratumRelease_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_AccessStratumRelease_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AccessStratumRelease = { + "AccessStratumRelease", + "AccessStratumRelease", + AccessStratumRelease_free, + AccessStratumRelease_print, + AccessStratumRelease_constraint, + AccessStratumRelease_decode_ber, + AccessStratumRelease_encode_der, + AccessStratumRelease_decode_xer, + AccessStratumRelease_encode_xer, + AccessStratumRelease_decode_uper, + AccessStratumRelease_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AccessStratumRelease_tags_1, + sizeof(asn_DEF_AccessStratumRelease_tags_1) + /sizeof(asn_DEF_AccessStratumRelease_tags_1[0]), /* 1 */ + asn_DEF_AccessStratumRelease_tags_1, /* Same as above */ + sizeof(asn_DEF_AccessStratumRelease_tags_1) + /sizeof(asn_DEF_AccessStratumRelease_tags_1[0]), /* 1 */ + &asn_PER_type_AccessStratumRelease_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_AccessStratumRelease_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AccessStratumRelease.h b/lte/rrc/asn/AccessStratumRelease.h new file mode 100644 index 000000000..73c9b2bd8 --- /dev/null +++ b/lte/rrc/asn/AccessStratumRelease.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AccessStratumRelease_H_ +#define _AccessStratumRelease_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AccessStratumRelease { + AccessStratumRelease_rel8 = 0, + AccessStratumRelease_rel9 = 1, + AccessStratumRelease_rel10 = 2, + AccessStratumRelease_spare5 = 3, + AccessStratumRelease_spare4 = 4, + AccessStratumRelease_spare3 = 5, + AccessStratumRelease_spare2 = 6, + AccessStratumRelease_spare1 = 7 + /* + * Enumeration is extensible + */ +} e_AccessStratumRelease; + +/* AccessStratumRelease */ +typedef long AccessStratumRelease_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AccessStratumRelease; +asn_struct_free_f AccessStratumRelease_free; +asn_struct_print_f AccessStratumRelease_print; +asn_constr_check_f AccessStratumRelease_constraint; +ber_type_decoder_f AccessStratumRelease_decode_ber; +der_type_encoder_f AccessStratumRelease_encode_der; +xer_type_decoder_f AccessStratumRelease_decode_xer; +xer_type_encoder_f AccessStratumRelease_encode_xer; +per_type_decoder_f AccessStratumRelease_decode_uper; +per_type_encoder_f AccessStratumRelease_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AccessStratumRelease_H_ */ +#include diff --git a/lte/rrc/asn/AdditionalReestabInfo.c b/lte/rrc/asn/AdditionalReestabInfo.c new file mode 100644 index 000000000..b45abd1f1 --- /dev/null +++ b/lte/rrc/asn/AdditionalReestabInfo.c @@ -0,0 +1,79 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "AdditionalReestabInfo.h" + +static asn_TYPE_member_t asn_MBR_AdditionalReestabInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AdditionalReestabInfo, cellIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIdentity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalReestabInfo, key_eNodeB_Star), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Key_eNodeB_Star, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "key-eNodeB-Star" + }, + { ATF_NOFLAGS, 0, offsetof(struct AdditionalReestabInfo, shortMAC_I), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ShortMAC_I, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "shortMAC-I" + }, +}; +static const ber_tlv_tag_t asn_DEF_AdditionalReestabInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_AdditionalReestabInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* key-eNodeB-Star */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* shortMAC-I */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AdditionalReestabInfo_specs_1 = { + sizeof(struct AdditionalReestabInfo), + offsetof(struct AdditionalReestabInfo, _asn_ctx), + asn_MAP_AdditionalReestabInfo_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalReestabInfo = { + "AdditionalReestabInfo", + "AdditionalReestabInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AdditionalReestabInfo_tags_1, + sizeof(asn_DEF_AdditionalReestabInfo_tags_1) + /sizeof(asn_DEF_AdditionalReestabInfo_tags_1[0]), /* 1 */ + asn_DEF_AdditionalReestabInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalReestabInfo_tags_1) + /sizeof(asn_DEF_AdditionalReestabInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AdditionalReestabInfo_1, + 3, /* Elements count */ + &asn_SPC_AdditionalReestabInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AdditionalReestabInfo.h b/lte/rrc/asn/AdditionalReestabInfo.h new file mode 100644 index 000000000..f641cf00c --- /dev/null +++ b/lte/rrc/asn/AdditionalReestabInfo.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _AdditionalReestabInfo_H_ +#define _AdditionalReestabInfo_H_ + + +#include + +/* Including external dependencies */ +#include "CellIdentity.h" +#include "Key-eNodeB-Star.h" +#include "ShortMAC-I.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* AdditionalReestabInfo */ +typedef struct AdditionalReestabInfo { + CellIdentity_t cellIdentity; + Key_eNodeB_Star_t key_eNodeB_Star; + ShortMAC_I_t shortMAC_I; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalReestabInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AdditionalReestabInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalReestabInfo_H_ */ +#include diff --git a/lte/rrc/asn/AdditionalReestabInfoList.c b/lte/rrc/asn/AdditionalReestabInfoList.c new file mode 100644 index 000000000..e822a4e84 --- /dev/null +++ b/lte/rrc/asn/AdditionalReestabInfoList.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "AdditionalReestabInfoList.h" + +static asn_per_constraints_t asn_PER_type_AdditionalReestabInfoList_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_AdditionalReestabInfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_AdditionalReestabInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_AdditionalReestabInfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_AdditionalReestabInfoList_specs_1 = { + sizeof(struct AdditionalReestabInfoList), + offsetof(struct AdditionalReestabInfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalReestabInfoList = { + "AdditionalReestabInfoList", + "AdditionalReestabInfoList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AdditionalReestabInfoList_tags_1, + sizeof(asn_DEF_AdditionalReestabInfoList_tags_1) + /sizeof(asn_DEF_AdditionalReestabInfoList_tags_1[0]), /* 1 */ + asn_DEF_AdditionalReestabInfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalReestabInfoList_tags_1) + /sizeof(asn_DEF_AdditionalReestabInfoList_tags_1[0]), /* 1 */ + &asn_PER_type_AdditionalReestabInfoList_constr_1, + asn_MBR_AdditionalReestabInfoList_1, + 1, /* Single element */ + &asn_SPC_AdditionalReestabInfoList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AdditionalReestabInfoList.h b/lte/rrc/asn/AdditionalReestabInfoList.h new file mode 100644 index 000000000..96f8a3998 --- /dev/null +++ b/lte/rrc/asn/AdditionalReestabInfoList.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _AdditionalReestabInfoList_H_ +#define _AdditionalReestabInfoList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct AdditionalReestabInfo; + +/* AdditionalReestabInfoList */ +typedef struct AdditionalReestabInfoList { + A_SEQUENCE_OF(struct AdditionalReestabInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalReestabInfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AdditionalReestabInfoList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "AdditionalReestabInfo.h" + +#endif /* _AdditionalReestabInfoList_H_ */ +#include diff --git a/lte/rrc/asn/AdditionalSI-Info-r9.c b/lte/rrc/asn/AdditionalSI-Info-r9.c new file mode 100644 index 000000000..94a5f0f4d --- /dev/null +++ b/lte/rrc/asn/AdditionalSI-Info-r9.c @@ -0,0 +1,209 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AdditionalSI-Info-r9.h" + +static int +csg_MemberStatus_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +csg_MemberStatus_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +csg_MemberStatus_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +csg_MemberStatus_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +csg_MemberStatus_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +csg_MemberStatus_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +csg_MemberStatus_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +csg_MemberStatus_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +csg_MemberStatus_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +csg_MemberStatus_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + csg_MemberStatus_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_csg_MemberStatus_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_csg_MemberStatus_r9_value2enum_2[] = { + { 0, 6, "member" } +}; +static unsigned int asn_MAP_csg_MemberStatus_r9_enum2value_2[] = { + 0 /* member(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_csg_MemberStatus_r9_specs_2 = { + asn_MAP_csg_MemberStatus_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_csg_MemberStatus_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_csg_MemberStatus_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_csg_MemberStatus_r9_2 = { + "csg-MemberStatus-r9", + "csg-MemberStatus-r9", + csg_MemberStatus_r9_2_free, + csg_MemberStatus_r9_2_print, + csg_MemberStatus_r9_2_constraint, + csg_MemberStatus_r9_2_decode_ber, + csg_MemberStatus_r9_2_encode_der, + csg_MemberStatus_r9_2_decode_xer, + csg_MemberStatus_r9_2_encode_xer, + csg_MemberStatus_r9_2_decode_uper, + csg_MemberStatus_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_csg_MemberStatus_r9_tags_2, + sizeof(asn_DEF_csg_MemberStatus_r9_tags_2) + /sizeof(asn_DEF_csg_MemberStatus_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_csg_MemberStatus_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_csg_MemberStatus_r9_tags_2) + /sizeof(asn_DEF_csg_MemberStatus_r9_tags_2[0]), /* 2 */ + &asn_PER_type_csg_MemberStatus_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_csg_MemberStatus_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AdditionalSI_Info_r9_1[] = { + { ATF_POINTER, 2, offsetof(struct AdditionalSI_Info_r9, csg_MemberStatus_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_csg_MemberStatus_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-MemberStatus-r9" + }, + { ATF_POINTER, 1, offsetof(struct AdditionalSI_Info_r9, csg_Identity_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSG_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-Identity-r9" + }, +}; +static int asn_MAP_AdditionalSI_Info_r9_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_AdditionalSI_Info_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AdditionalSI_Info_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csg-MemberStatus-r9 at 3458 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* csg-Identity-r9 at 3459 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AdditionalSI_Info_r9_specs_1 = { + sizeof(struct AdditionalSI_Info_r9), + offsetof(struct AdditionalSI_Info_r9, _asn_ctx), + asn_MAP_AdditionalSI_Info_r9_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_AdditionalSI_Info_r9_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSI_Info_r9 = { + "AdditionalSI-Info-r9", + "AdditionalSI-Info-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AdditionalSI_Info_r9_tags_1, + sizeof(asn_DEF_AdditionalSI_Info_r9_tags_1) + /sizeof(asn_DEF_AdditionalSI_Info_r9_tags_1[0]), /* 1 */ + asn_DEF_AdditionalSI_Info_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalSI_Info_r9_tags_1) + /sizeof(asn_DEF_AdditionalSI_Info_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AdditionalSI_Info_r9_1, + 2, /* Elements count */ + &asn_SPC_AdditionalSI_Info_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AdditionalSI-Info-r9.h b/lte/rrc/asn/AdditionalSI-Info-r9.h new file mode 100644 index 000000000..0275f92e7 --- /dev/null +++ b/lte/rrc/asn/AdditionalSI-Info-r9.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AdditionalSI_Info_r9_H_ +#define _AdditionalSI_Info_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include "CSG-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AdditionalSI_Info_r9__csg_MemberStatus_r9 { + AdditionalSI_Info_r9__csg_MemberStatus_r9_member = 0 +} e_AdditionalSI_Info_r9__csg_MemberStatus_r9; + +/* AdditionalSI-Info-r9 */ +typedef struct AdditionalSI_Info_r9 { + long *csg_MemberStatus_r9 /* OPTIONAL */; + CSG_Identity_t *csg_Identity_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AdditionalSI_Info_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_csg_MemberStatus_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSI_Info_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalSI_Info_r9_H_ */ +#include diff --git a/lte/rrc/asn/AdditionalSpectrumEmission.c b/lte/rrc/asn/AdditionalSpectrumEmission.c new file mode 100644 index 000000000..9fac125f8 --- /dev/null +++ b/lte/rrc/asn/AdditionalSpectrumEmission.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AdditionalSpectrumEmission.h" + +int +AdditionalSpectrumEmission_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +AdditionalSpectrumEmission_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +AdditionalSpectrumEmission_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +AdditionalSpectrumEmission_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +AdditionalSpectrumEmission_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +AdditionalSpectrumEmission_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +AdditionalSpectrumEmission_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +AdditionalSpectrumEmission_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +AdditionalSpectrumEmission_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + AdditionalSpectrumEmission_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_AdditionalSpectrumEmission_constr_1 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_AdditionalSpectrumEmission_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AdditionalSpectrumEmission = { + "AdditionalSpectrumEmission", + "AdditionalSpectrumEmission", + AdditionalSpectrumEmission_free, + AdditionalSpectrumEmission_print, + AdditionalSpectrumEmission_constraint, + AdditionalSpectrumEmission_decode_ber, + AdditionalSpectrumEmission_encode_der, + AdditionalSpectrumEmission_decode_xer, + AdditionalSpectrumEmission_encode_xer, + AdditionalSpectrumEmission_decode_uper, + AdditionalSpectrumEmission_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AdditionalSpectrumEmission_tags_1, + sizeof(asn_DEF_AdditionalSpectrumEmission_tags_1) + /sizeof(asn_DEF_AdditionalSpectrumEmission_tags_1[0]), /* 1 */ + asn_DEF_AdditionalSpectrumEmission_tags_1, /* Same as above */ + sizeof(asn_DEF_AdditionalSpectrumEmission_tags_1) + /sizeof(asn_DEF_AdditionalSpectrumEmission_tags_1[0]), /* 1 */ + &asn_PER_type_AdditionalSpectrumEmission_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/AdditionalSpectrumEmission.h b/lte/rrc/asn/AdditionalSpectrumEmission.h new file mode 100644 index 000000000..f2726580c --- /dev/null +++ b/lte/rrc/asn/AdditionalSpectrumEmission.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AdditionalSpectrumEmission_H_ +#define _AdditionalSpectrumEmission_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* AdditionalSpectrumEmission */ +typedef long AdditionalSpectrumEmission_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AdditionalSpectrumEmission; +asn_struct_free_f AdditionalSpectrumEmission_free; +asn_struct_print_f AdditionalSpectrumEmission_print; +asn_constr_check_f AdditionalSpectrumEmission_constraint; +ber_type_decoder_f AdditionalSpectrumEmission_decode_ber; +der_type_encoder_f AdditionalSpectrumEmission_encode_der; +xer_type_decoder_f AdditionalSpectrumEmission_decode_xer; +xer_type_encoder_f AdditionalSpectrumEmission_encode_xer; +per_type_decoder_f AdditionalSpectrumEmission_decode_uper; +per_type_encoder_f AdditionalSpectrumEmission_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AdditionalSpectrumEmission_H_ */ +#include diff --git a/lte/rrc/asn/AllowedMeasBandwidth.c b/lte/rrc/asn/AllowedMeasBandwidth.c new file mode 100644 index 000000000..1d914ec04 --- /dev/null +++ b/lte/rrc/asn/AllowedMeasBandwidth.c @@ -0,0 +1,154 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AllowedMeasBandwidth.h" + +int +AllowedMeasBandwidth_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +AllowedMeasBandwidth_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +AllowedMeasBandwidth_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +AllowedMeasBandwidth_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +AllowedMeasBandwidth_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +AllowedMeasBandwidth_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +AllowedMeasBandwidth_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +AllowedMeasBandwidth_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +AllowedMeasBandwidth_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +AllowedMeasBandwidth_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + AllowedMeasBandwidth_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_AllowedMeasBandwidth_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_AllowedMeasBandwidth_value2enum_1[] = { + { 0, 4, "mbw6" }, + { 1, 5, "mbw15" }, + { 2, 5, "mbw25" }, + { 3, 5, "mbw50" }, + { 4, 5, "mbw75" }, + { 5, 6, "mbw100" } +}; +static unsigned int asn_MAP_AllowedMeasBandwidth_enum2value_1[] = { + 5, /* mbw100(5) */ + 1, /* mbw15(1) */ + 2, /* mbw25(2) */ + 3, /* mbw50(3) */ + 0, /* mbw6(0) */ + 4 /* mbw75(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_AllowedMeasBandwidth_specs_1 = { + asn_MAP_AllowedMeasBandwidth_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_AllowedMeasBandwidth_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_AllowedMeasBandwidth_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_AllowedMeasBandwidth = { + "AllowedMeasBandwidth", + "AllowedMeasBandwidth", + AllowedMeasBandwidth_free, + AllowedMeasBandwidth_print, + AllowedMeasBandwidth_constraint, + AllowedMeasBandwidth_decode_ber, + AllowedMeasBandwidth_encode_der, + AllowedMeasBandwidth_decode_xer, + AllowedMeasBandwidth_encode_xer, + AllowedMeasBandwidth_decode_uper, + AllowedMeasBandwidth_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AllowedMeasBandwidth_tags_1, + sizeof(asn_DEF_AllowedMeasBandwidth_tags_1) + /sizeof(asn_DEF_AllowedMeasBandwidth_tags_1[0]), /* 1 */ + asn_DEF_AllowedMeasBandwidth_tags_1, /* Same as above */ + sizeof(asn_DEF_AllowedMeasBandwidth_tags_1) + /sizeof(asn_DEF_AllowedMeasBandwidth_tags_1[0]), /* 1 */ + &asn_PER_type_AllowedMeasBandwidth_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_AllowedMeasBandwidth_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AllowedMeasBandwidth.h b/lte/rrc/asn/AllowedMeasBandwidth.h new file mode 100644 index 000000000..29f64c916 --- /dev/null +++ b/lte/rrc/asn/AllowedMeasBandwidth.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AllowedMeasBandwidth_H_ +#define _AllowedMeasBandwidth_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AllowedMeasBandwidth { + AllowedMeasBandwidth_mbw6 = 0, + AllowedMeasBandwidth_mbw15 = 1, + AllowedMeasBandwidth_mbw25 = 2, + AllowedMeasBandwidth_mbw50 = 3, + AllowedMeasBandwidth_mbw75 = 4, + AllowedMeasBandwidth_mbw100 = 5 +} e_AllowedMeasBandwidth; + +/* AllowedMeasBandwidth */ +typedef long AllowedMeasBandwidth_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AllowedMeasBandwidth; +asn_struct_free_f AllowedMeasBandwidth_free; +asn_struct_print_f AllowedMeasBandwidth_print; +asn_constr_check_f AllowedMeasBandwidth_constraint; +ber_type_decoder_f AllowedMeasBandwidth_decode_ber; +der_type_encoder_f AllowedMeasBandwidth_encode_der; +xer_type_decoder_f AllowedMeasBandwidth_decode_xer; +xer_type_encoder_f AllowedMeasBandwidth_encode_xer; +per_type_decoder_f AllowedMeasBandwidth_decode_uper; +per_type_encoder_f AllowedMeasBandwidth_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _AllowedMeasBandwidth_H_ */ +#include diff --git a/lte/rrc/asn/AntennaInfoCommon.c b/lte/rrc/asn/AntennaInfoCommon.c new file mode 100644 index 000000000..961e2491a --- /dev/null +++ b/lte/rrc/asn/AntennaInfoCommon.c @@ -0,0 +1,203 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AntennaInfoCommon.h" + +static int +antennaPortsCount_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +antennaPortsCount_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +antennaPortsCount_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +antennaPortsCount_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +antennaPortsCount_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +antennaPortsCount_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +antennaPortsCount_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +antennaPortsCount_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +antennaPortsCount_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +antennaPortsCount_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + antennaPortsCount_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_antennaPortsCount_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_antennaPortsCount_value2enum_2[] = { + { 0, 3, "an1" }, + { 1, 3, "an2" }, + { 2, 3, "an4" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_antennaPortsCount_enum2value_2[] = { + 0, /* an1(0) */ + 1, /* an2(1) */ + 2, /* an4(2) */ + 3 /* spare1(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_antennaPortsCount_specs_2 = { + asn_MAP_antennaPortsCount_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_antennaPortsCount_enum2value_2, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_antennaPortsCount_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_antennaPortsCount_2 = { + "antennaPortsCount", + "antennaPortsCount", + antennaPortsCount_2_free, + antennaPortsCount_2_print, + antennaPortsCount_2_constraint, + antennaPortsCount_2_decode_ber, + antennaPortsCount_2_encode_der, + antennaPortsCount_2_decode_xer, + antennaPortsCount_2_encode_xer, + antennaPortsCount_2_decode_uper, + antennaPortsCount_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_antennaPortsCount_tags_2, + sizeof(asn_DEF_antennaPortsCount_tags_2) + /sizeof(asn_DEF_antennaPortsCount_tags_2[0]) - 1, /* 1 */ + asn_DEF_antennaPortsCount_tags_2, /* Same as above */ + sizeof(asn_DEF_antennaPortsCount_tags_2) + /sizeof(asn_DEF_antennaPortsCount_tags_2[0]), /* 2 */ + &asn_PER_type_antennaPortsCount_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_antennaPortsCount_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AntennaInfoCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoCommon, antennaPortsCount), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_antennaPortsCount_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaPortsCount" + }, +}; +static ber_tlv_tag_t asn_DEF_AntennaInfoCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AntennaInfoCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* antennaPortsCount at 1799 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AntennaInfoCommon_specs_1 = { + sizeof(struct AntennaInfoCommon), + offsetof(struct AntennaInfoCommon, _asn_ctx), + asn_MAP_AntennaInfoCommon_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AntennaInfoCommon = { + "AntennaInfoCommon", + "AntennaInfoCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AntennaInfoCommon_tags_1, + sizeof(asn_DEF_AntennaInfoCommon_tags_1) + /sizeof(asn_DEF_AntennaInfoCommon_tags_1[0]), /* 1 */ + asn_DEF_AntennaInfoCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_AntennaInfoCommon_tags_1) + /sizeof(asn_DEF_AntennaInfoCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AntennaInfoCommon_1, + 1, /* Elements count */ + &asn_SPC_AntennaInfoCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AntennaInfoCommon.h b/lte/rrc/asn/AntennaInfoCommon.h new file mode 100644 index 000000000..5be110a87 --- /dev/null +++ b/lte/rrc/asn/AntennaInfoCommon.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AntennaInfoCommon_H_ +#define _AntennaInfoCommon_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AntennaInfoCommon__antennaPortsCount { + AntennaInfoCommon__antennaPortsCount_an1 = 0, + AntennaInfoCommon__antennaPortsCount_an2 = 1, + AntennaInfoCommon__antennaPortsCount_an4 = 2, + AntennaInfoCommon__antennaPortsCount_spare1 = 3 +} e_AntennaInfoCommon__antennaPortsCount; + +/* AntennaInfoCommon */ +typedef struct AntennaInfoCommon { + long antennaPortsCount; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AntennaInfoCommon_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_antennaPortsCount_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_AntennaInfoCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _AntennaInfoCommon_H_ */ +#include diff --git a/lte/rrc/asn/AntennaInfoDedicated-r10.c b/lte/rrc/asn/AntennaInfoDedicated-r10.c new file mode 100644 index 000000000..5e0485b9b --- /dev/null +++ b/lte/rrc/asn/AntennaInfoDedicated-r10.c @@ -0,0 +1,451 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AntennaInfoDedicated-r10.h" + +static int +transmissionMode_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +transmissionMode_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +transmissionMode_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +transmissionMode_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +transmissionMode_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +transmissionMode_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +transmissionMode_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +transmissionMode_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +transmissionMode_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +transmissionMode_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + transmissionMode_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +setup_22_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +setup_22_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +setup_22_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + setup_22_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +setup_22_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + setup_22_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +setup_22_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + setup_22_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +setup_22_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + setup_22_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +setup_22_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + setup_22_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +setup_22_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + setup_22_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +setup_22_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + setup_22_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +setup_22_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + setup_22_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_transmissionMode_r10_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_setup_constr_22 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ue_TransmitAntennaSelection_constr_20 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_transmissionMode_r10_value2enum_2[] = { + { 0, 3, "tm1" }, + { 1, 3, "tm2" }, + { 2, 3, "tm3" }, + { 3, 3, "tm4" }, + { 4, 3, "tm5" }, + { 5, 3, "tm6" }, + { 6, 3, "tm7" }, + { 7, 8, "tm8-v920" }, + { 8, 9, "tm9-v1020" }, + { 9, 6, "spare7" }, + { 10, 6, "spare6" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_transmissionMode_r10_enum2value_2[] = { + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11, /* spare5(11) */ + 10, /* spare6(10) */ + 9, /* spare7(9) */ + 0, /* tm1(0) */ + 1, /* tm2(1) */ + 2, /* tm3(2) */ + 3, /* tm4(3) */ + 4, /* tm5(4) */ + 5, /* tm6(5) */ + 6, /* tm7(6) */ + 7, /* tm8-v920(7) */ + 8 /* tm9-v1020(8) */ +}; +static asn_INTEGER_specifics_t asn_SPC_transmissionMode_r10_specs_2 = { + asn_MAP_transmissionMode_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_transmissionMode_r10_enum2value_2, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_transmissionMode_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_transmissionMode_r10_2 = { + "transmissionMode-r10", + "transmissionMode-r10", + transmissionMode_r10_2_free, + transmissionMode_r10_2_print, + transmissionMode_r10_2_constraint, + transmissionMode_r10_2_decode_ber, + transmissionMode_r10_2_encode_der, + transmissionMode_r10_2_decode_xer, + transmissionMode_r10_2_encode_xer, + transmissionMode_r10_2_decode_uper, + transmissionMode_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_transmissionMode_r10_tags_2, + sizeof(asn_DEF_transmissionMode_r10_tags_2) + /sizeof(asn_DEF_transmissionMode_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_transmissionMode_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_transmissionMode_r10_tags_2) + /sizeof(asn_DEF_transmissionMode_r10_tags_2[0]), /* 2 */ + &asn_PER_type_transmissionMode_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_transmissionMode_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_setup_value2enum_22[] = { + { 0, 10, "closedLoop" }, + { 1, 8, "openLoop" } +}; +static unsigned int asn_MAP_setup_enum2value_22[] = { + 0, /* closedLoop(0) */ + 1 /* openLoop(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_setup_specs_22 = { + asn_MAP_setup_value2enum_22, /* "tag" => N; sorted by tag */ + asn_MAP_setup_enum2value_22, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_setup_tags_22[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_22 = { + "setup", + "setup", + setup_22_free, + setup_22_print, + setup_22_constraint, + setup_22_decode_ber, + setup_22_encode_der, + setup_22_decode_xer, + setup_22_encode_xer, + setup_22_decode_uper, + setup_22_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_22, + sizeof(asn_DEF_setup_tags_22) + /sizeof(asn_DEF_setup_tags_22[0]) - 1, /* 1 */ + asn_DEF_setup_tags_22, /* Same as above */ + sizeof(asn_DEF_setup_tags_22) + /sizeof(asn_DEF_setup_tags_22[0]), /* 2 */ + &asn_PER_type_setup_constr_22, + 0, 0, /* Defined elsewhere */ + &asn_SPC_setup_specs_22 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ue_TransmitAntennaSelection_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_setup_22, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_ue_TransmitAntennaSelection_tag2el_20[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1836 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1837 */ +}; +static asn_CHOICE_specifics_t asn_SPC_ue_TransmitAntennaSelection_specs_20 = { + sizeof(struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection), + offsetof(struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection, _asn_ctx), + offsetof(struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection, present), + sizeof(((struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection *)0)->present), + asn_MAP_ue_TransmitAntennaSelection_tag2el_20, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ue_TransmitAntennaSelection_20 = { + "ue-TransmitAntennaSelection", + "ue-TransmitAntennaSelection", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_ue_TransmitAntennaSelection_constr_20, + asn_MBR_ue_TransmitAntennaSelection_20, + 2, /* Elements count */ + &asn_SPC_ue_TransmitAntennaSelection_specs_20 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AntennaInfoDedicated_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated_r10, transmissionMode_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_transmissionMode_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "transmissionMode-r10" + }, + { ATF_POINTER, 1, offsetof(struct AntennaInfoDedicated_r10, codebookSubsetRestriction_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "codebookSubsetRestriction-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated_r10, ue_TransmitAntennaSelection), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ue_TransmitAntennaSelection_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-TransmitAntennaSelection" + }, +}; +static int asn_MAP_AntennaInfoDedicated_r10_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_AntennaInfoDedicated_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AntennaInfoDedicated_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transmissionMode-r10 at 1831 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* codebookSubsetRestriction-r10 at 1834 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ue-TransmitAntennaSelection at 1836 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AntennaInfoDedicated_r10_specs_1 = { + sizeof(struct AntennaInfoDedicated_r10), + offsetof(struct AntennaInfoDedicated_r10, _asn_ctx), + asn_MAP_AntennaInfoDedicated_r10_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_AntennaInfoDedicated_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AntennaInfoDedicated_r10 = { + "AntennaInfoDedicated-r10", + "AntennaInfoDedicated-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AntennaInfoDedicated_r10_tags_1, + sizeof(asn_DEF_AntennaInfoDedicated_r10_tags_1) + /sizeof(asn_DEF_AntennaInfoDedicated_r10_tags_1[0]), /* 1 */ + asn_DEF_AntennaInfoDedicated_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_AntennaInfoDedicated_r10_tags_1) + /sizeof(asn_DEF_AntennaInfoDedicated_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AntennaInfoDedicated_r10_1, + 3, /* Elements count */ + &asn_SPC_AntennaInfoDedicated_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AntennaInfoDedicated-r10.h b/lte/rrc/asn/AntennaInfoDedicated-r10.h new file mode 100644 index 000000000..de8615060 --- /dev/null +++ b/lte/rrc/asn/AntennaInfoDedicated-r10.h @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AntennaInfoDedicated_r10_H_ +#define _AntennaInfoDedicated_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AntennaInfoDedicated_r10__transmissionMode_r10 { + AntennaInfoDedicated_r10__transmissionMode_r10_tm1 = 0, + AntennaInfoDedicated_r10__transmissionMode_r10_tm2 = 1, + AntennaInfoDedicated_r10__transmissionMode_r10_tm3 = 2, + AntennaInfoDedicated_r10__transmissionMode_r10_tm4 = 3, + AntennaInfoDedicated_r10__transmissionMode_r10_tm5 = 4, + AntennaInfoDedicated_r10__transmissionMode_r10_tm6 = 5, + AntennaInfoDedicated_r10__transmissionMode_r10_tm7 = 6, + AntennaInfoDedicated_r10__transmissionMode_r10_tm8_v920 = 7, + AntennaInfoDedicated_r10__transmissionMode_r10_tm9_v1020 = 8, + AntennaInfoDedicated_r10__transmissionMode_r10_spare7 = 9, + AntennaInfoDedicated_r10__transmissionMode_r10_spare6 = 10, + AntennaInfoDedicated_r10__transmissionMode_r10_spare5 = 11, + AntennaInfoDedicated_r10__transmissionMode_r10_spare4 = 12, + AntennaInfoDedicated_r10__transmissionMode_r10_spare3 = 13, + AntennaInfoDedicated_r10__transmissionMode_r10_spare2 = 14, + AntennaInfoDedicated_r10__transmissionMode_r10_spare1 = 15 +} e_AntennaInfoDedicated_r10__transmissionMode_r10; +typedef enum AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_PR { + AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_PR_NOTHING, /* No components present */ + AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_PR_release, + AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_PR_setup +} AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_PR; +typedef enum AntennaInfoDedicated_r10__ue_TransmitAntennaSelection__setup { + AntennaInfoDedicated_r10__ue_TransmitAntennaSelection__setup_closedLoop = 0, + AntennaInfoDedicated_r10__ue_TransmitAntennaSelection__setup_openLoop = 1 +} e_AntennaInfoDedicated_r10__ue_TransmitAntennaSelection__setup; + +/* AntennaInfoDedicated-r10 */ +typedef struct AntennaInfoDedicated_r10 { + long transmissionMode_r10; + BIT_STRING_t *codebookSubsetRestriction_r10 /* OPTIONAL */; + struct AntennaInfoDedicated_r10__ue_TransmitAntennaSelection { + AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_PR present; + union AntennaInfoDedicated_r10__ue_TransmitAntennaSelection_u { + NULL_t release; + long setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ue_TransmitAntennaSelection; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AntennaInfoDedicated_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_transmissionMode_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_setup_22; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_AntennaInfoDedicated_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _AntennaInfoDedicated_r10_H_ */ +#include diff --git a/lte/rrc/asn/AntennaInfoDedicated-v920.c b/lte/rrc/asn/AntennaInfoDedicated-v920.c new file mode 100644 index 000000000..7a8459775 --- /dev/null +++ b/lte/rrc/asn/AntennaInfoDedicated-v920.c @@ -0,0 +1,197 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AntennaInfoDedicated-v920.h" + +static int +memb_n2TxAntenna_tm8_r9_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n4TxAntenna_tm8_r9_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_n2TxAntenna_tm8_r9_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n4TxAntenna_tm8_r9_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_codebookSubsetRestriction_v920_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_codebookSubsetRestriction_v920_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920, choice.n2TxAntenna_tm8_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n2TxAntenna_tm8_r9_constraint_2, + &asn_PER_memb_n2TxAntenna_tm8_r9_constr_3, + 0, + "n2TxAntenna-tm8-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920, choice.n4TxAntenna_tm8_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n4TxAntenna_tm8_r9_constraint_2, + &asn_PER_memb_n4TxAntenna_tm8_r9_constr_4, + 0, + "n4TxAntenna-tm8-r9" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_codebookSubsetRestriction_v920_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* n2TxAntenna-tm8-r9 at 1824 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* n4TxAntenna-tm8-r9 at 1825 */ +}; +static asn_CHOICE_specifics_t asn_SPC_codebookSubsetRestriction_v920_specs_2 = { + sizeof(struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920), + offsetof(struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920, _asn_ctx), + offsetof(struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920, present), + sizeof(((struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920 *)0)->present), + asn_MAP_codebookSubsetRestriction_v920_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_codebookSubsetRestriction_v920_2 = { + "codebookSubsetRestriction-v920", + "codebookSubsetRestriction-v920", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_codebookSubsetRestriction_v920_constr_2, + asn_MBR_codebookSubsetRestriction_v920_2, + 2, /* Elements count */ + &asn_SPC_codebookSubsetRestriction_v920_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AntennaInfoDedicated_v920_1[] = { + { ATF_POINTER, 1, offsetof(struct AntennaInfoDedicated_v920, codebookSubsetRestriction_v920), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_codebookSubsetRestriction_v920_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "codebookSubsetRestriction-v920" + }, +}; +static int asn_MAP_AntennaInfoDedicated_v920_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_AntennaInfoDedicated_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AntennaInfoDedicated_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* codebookSubsetRestriction-v920 at 1824 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AntennaInfoDedicated_v920_specs_1 = { + sizeof(struct AntennaInfoDedicated_v920), + offsetof(struct AntennaInfoDedicated_v920, _asn_ctx), + asn_MAP_AntennaInfoDedicated_v920_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_AntennaInfoDedicated_v920_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AntennaInfoDedicated_v920 = { + "AntennaInfoDedicated-v920", + "AntennaInfoDedicated-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AntennaInfoDedicated_v920_tags_1, + sizeof(asn_DEF_AntennaInfoDedicated_v920_tags_1) + /sizeof(asn_DEF_AntennaInfoDedicated_v920_tags_1[0]), /* 1 */ + asn_DEF_AntennaInfoDedicated_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_AntennaInfoDedicated_v920_tags_1) + /sizeof(asn_DEF_AntennaInfoDedicated_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AntennaInfoDedicated_v920_1, + 1, /* Elements count */ + &asn_SPC_AntennaInfoDedicated_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AntennaInfoDedicated-v920.h b/lte/rrc/asn/AntennaInfoDedicated-v920.h new file mode 100644 index 000000000..2c28cbdfe --- /dev/null +++ b/lte/rrc/asn/AntennaInfoDedicated-v920.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AntennaInfoDedicated_v920_H_ +#define _AntennaInfoDedicated_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_PR { + AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_PR_NOTHING, /* No components present */ + AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_PR_n2TxAntenna_tm8_r9, + AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_PR_n4TxAntenna_tm8_r9 +} AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_PR; + +/* AntennaInfoDedicated-v920 */ +typedef struct AntennaInfoDedicated_v920 { + struct AntennaInfoDedicated_v920__codebookSubsetRestriction_v920 { + AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_PR present; + union AntennaInfoDedicated_v920__codebookSubsetRestriction_v920_u { + BIT_STRING_t n2TxAntenna_tm8_r9; + BIT_STRING_t n4TxAntenna_tm8_r9; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *codebookSubsetRestriction_v920; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AntennaInfoDedicated_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AntennaInfoDedicated_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _AntennaInfoDedicated_v920_H_ */ +#include diff --git a/lte/rrc/asn/AntennaInfoDedicated.c b/lte/rrc/asn/AntennaInfoDedicated.c new file mode 100644 index 000000000..8e3fa8b3c --- /dev/null +++ b/lte/rrc/asn/AntennaInfoDedicated.c @@ -0,0 +1,846 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AntennaInfoDedicated.h" + +static int +transmissionMode_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +transmissionMode_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +transmissionMode_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + transmissionMode_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +transmissionMode_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +transmissionMode_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +transmissionMode_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +transmissionMode_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +transmissionMode_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +transmissionMode_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +transmissionMode_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + transmissionMode_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_n2TxAntenna_tm3_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n4TxAntenna_tm3_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n2TxAntenna_tm4_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n4TxAntenna_tm4_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 64)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n2TxAntenna_tm5_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n4TxAntenna_tm5_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n2TxAntenna_tm6_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n4TxAntenna_tm6_constraint_11(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +setup_22_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +setup_22_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +setup_22_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + setup_22_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +setup_22_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + setup_22_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +setup_22_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + setup_22_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +setup_22_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + setup_22_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +setup_22_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + setup_22_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +setup_22_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + setup_22_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +setup_22_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + setup_22_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +setup_22_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + setup_22_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_transmissionMode_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n2TxAntenna_tm3_constr_12 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n4TxAntenna_tm3_constr_13 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n2TxAntenna_tm4_constr_14 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n4TxAntenna_tm4_constr_15 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 64, 64 } /* (SIZE(64..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n2TxAntenna_tm5_constr_16 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n4TxAntenna_tm5_constr_17 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n2TxAntenna_tm6_constr_18 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 4, 4 } /* (SIZE(4..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n4TxAntenna_tm6_constr_19 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_codebookSubsetRestriction_constr_11 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_setup_constr_22 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ue_TransmitAntennaSelection_constr_20 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_transmissionMode_value2enum_2[] = { + { 0, 3, "tm1" }, + { 1, 3, "tm2" }, + { 2, 3, "tm3" }, + { 3, 3, "tm4" }, + { 4, 3, "tm5" }, + { 5, 3, "tm6" }, + { 6, 3, "tm7" }, + { 7, 8, "tm8-v920" } +}; +static unsigned int asn_MAP_transmissionMode_enum2value_2[] = { + 0, /* tm1(0) */ + 1, /* tm2(1) */ + 2, /* tm3(2) */ + 3, /* tm4(3) */ + 4, /* tm5(4) */ + 5, /* tm6(5) */ + 6, /* tm7(6) */ + 7 /* tm8-v920(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_transmissionMode_specs_2 = { + asn_MAP_transmissionMode_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_transmissionMode_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_transmissionMode_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_transmissionMode_2 = { + "transmissionMode", + "transmissionMode", + transmissionMode_2_free, + transmissionMode_2_print, + transmissionMode_2_constraint, + transmissionMode_2_decode_ber, + transmissionMode_2_encode_der, + transmissionMode_2_decode_xer, + transmissionMode_2_encode_xer, + transmissionMode_2_decode_uper, + transmissionMode_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_transmissionMode_tags_2, + sizeof(asn_DEF_transmissionMode_tags_2) + /sizeof(asn_DEF_transmissionMode_tags_2[0]) - 1, /* 1 */ + asn_DEF_transmissionMode_tags_2, /* Same as above */ + sizeof(asn_DEF_transmissionMode_tags_2) + /sizeof(asn_DEF_transmissionMode_tags_2[0]), /* 2 */ + &asn_PER_type_transmissionMode_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_transmissionMode_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_codebookSubsetRestriction_11[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n2TxAntenna_tm3), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n2TxAntenna_tm3_constraint_11, + &asn_PER_memb_n2TxAntenna_tm3_constr_12, + 0, + "n2TxAntenna-tm3" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n4TxAntenna_tm3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n4TxAntenna_tm3_constraint_11, + &asn_PER_memb_n4TxAntenna_tm3_constr_13, + 0, + "n4TxAntenna-tm3" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n2TxAntenna_tm4), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n2TxAntenna_tm4_constraint_11, + &asn_PER_memb_n2TxAntenna_tm4_constr_14, + 0, + "n2TxAntenna-tm4" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n4TxAntenna_tm4), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n4TxAntenna_tm4_constraint_11, + &asn_PER_memb_n4TxAntenna_tm4_constr_15, + 0, + "n4TxAntenna-tm4" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n2TxAntenna_tm5), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n2TxAntenna_tm5_constraint_11, + &asn_PER_memb_n2TxAntenna_tm5_constr_16, + 0, + "n2TxAntenna-tm5" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n4TxAntenna_tm5), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n4TxAntenna_tm5_constraint_11, + &asn_PER_memb_n4TxAntenna_tm5_constr_17, + 0, + "n4TxAntenna-tm5" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n2TxAntenna_tm6), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n2TxAntenna_tm6_constraint_11, + &asn_PER_memb_n2TxAntenna_tm6_constr_18, + 0, + "n2TxAntenna-tm6" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, choice.n4TxAntenna_tm6), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_n4TxAntenna_tm6_constraint_11, + &asn_PER_memb_n4TxAntenna_tm6_constr_19, + 0, + "n4TxAntenna-tm6" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_codebookSubsetRestriction_tag2el_11[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* n2TxAntenna-tm3 at 1807 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* n4TxAntenna-tm3 at 1808 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* n2TxAntenna-tm4 at 1809 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* n4TxAntenna-tm4 at 1810 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* n2TxAntenna-tm5 at 1811 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* n4TxAntenna-tm5 at 1812 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* n2TxAntenna-tm6 at 1813 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* n4TxAntenna-tm6 at 1814 */ +}; +static asn_CHOICE_specifics_t asn_SPC_codebookSubsetRestriction_specs_11 = { + sizeof(struct AntennaInfoDedicated__codebookSubsetRestriction), + offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, _asn_ctx), + offsetof(struct AntennaInfoDedicated__codebookSubsetRestriction, present), + sizeof(((struct AntennaInfoDedicated__codebookSubsetRestriction *)0)->present), + asn_MAP_codebookSubsetRestriction_tag2el_11, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_codebookSubsetRestriction_11 = { + "codebookSubsetRestriction", + "codebookSubsetRestriction", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_codebookSubsetRestriction_constr_11, + asn_MBR_codebookSubsetRestriction_11, + 8, /* Elements count */ + &asn_SPC_codebookSubsetRestriction_specs_11 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_setup_value2enum_22[] = { + { 0, 10, "closedLoop" }, + { 1, 8, "openLoop" } +}; +static unsigned int asn_MAP_setup_enum2value_22[] = { + 0, /* closedLoop(0) */ + 1 /* openLoop(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_setup_specs_22 = { + asn_MAP_setup_value2enum_22, /* "tag" => N; sorted by tag */ + asn_MAP_setup_enum2value_22, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_setup_tags_22[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_22 = { + "setup", + "setup", + setup_22_free, + setup_22_print, + setup_22_constraint, + setup_22_decode_ber, + setup_22_encode_der, + setup_22_decode_xer, + setup_22_encode_xer, + setup_22_decode_uper, + setup_22_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_22, + sizeof(asn_DEF_setup_tags_22) + /sizeof(asn_DEF_setup_tags_22[0]) - 1, /* 1 */ + asn_DEF_setup_tags_22, /* Same as above */ + sizeof(asn_DEF_setup_tags_22) + /sizeof(asn_DEF_setup_tags_22[0]), /* 2 */ + &asn_PER_type_setup_constr_22, + 0, 0, /* Defined elsewhere */ + &asn_SPC_setup_specs_22 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ue_TransmitAntennaSelection_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__ue_TransmitAntennaSelection, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated__ue_TransmitAntennaSelection, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_setup_22, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_ue_TransmitAntennaSelection_tag2el_20[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1817 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1818 */ +}; +static asn_CHOICE_specifics_t asn_SPC_ue_TransmitAntennaSelection_specs_20 = { + sizeof(struct AntennaInfoDedicated__ue_TransmitAntennaSelection), + offsetof(struct AntennaInfoDedicated__ue_TransmitAntennaSelection, _asn_ctx), + offsetof(struct AntennaInfoDedicated__ue_TransmitAntennaSelection, present), + sizeof(((struct AntennaInfoDedicated__ue_TransmitAntennaSelection *)0)->present), + asn_MAP_ue_TransmitAntennaSelection_tag2el_20, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ue_TransmitAntennaSelection_20 = { + "ue-TransmitAntennaSelection", + "ue-TransmitAntennaSelection", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_ue_TransmitAntennaSelection_constr_20, + asn_MBR_ue_TransmitAntennaSelection_20, + 2, /* Elements count */ + &asn_SPC_ue_TransmitAntennaSelection_specs_20 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AntennaInfoDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated, transmissionMode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_transmissionMode_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "transmissionMode" + }, + { ATF_POINTER, 1, offsetof(struct AntennaInfoDedicated, codebookSubsetRestriction), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_codebookSubsetRestriction_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "codebookSubsetRestriction" + }, + { ATF_NOFLAGS, 0, offsetof(struct AntennaInfoDedicated, ue_TransmitAntennaSelection), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ue_TransmitAntennaSelection_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-TransmitAntennaSelection" + }, +}; +static int asn_MAP_AntennaInfoDedicated_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_AntennaInfoDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AntennaInfoDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transmissionMode at 1804 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* codebookSubsetRestriction at 1807 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ue-TransmitAntennaSelection at 1817 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AntennaInfoDedicated_specs_1 = { + sizeof(struct AntennaInfoDedicated), + offsetof(struct AntennaInfoDedicated, _asn_ctx), + asn_MAP_AntennaInfoDedicated_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_AntennaInfoDedicated_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AntennaInfoDedicated = { + "AntennaInfoDedicated", + "AntennaInfoDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AntennaInfoDedicated_tags_1, + sizeof(asn_DEF_AntennaInfoDedicated_tags_1) + /sizeof(asn_DEF_AntennaInfoDedicated_tags_1[0]), /* 1 */ + asn_DEF_AntennaInfoDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_AntennaInfoDedicated_tags_1) + /sizeof(asn_DEF_AntennaInfoDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AntennaInfoDedicated_1, + 3, /* Elements count */ + &asn_SPC_AntennaInfoDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AntennaInfoDedicated.h b/lte/rrc/asn/AntennaInfoDedicated.h new file mode 100644 index 000000000..30d12ac5e --- /dev/null +++ b/lte/rrc/asn/AntennaInfoDedicated.h @@ -0,0 +1,101 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AntennaInfoDedicated_H_ +#define _AntennaInfoDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AntennaInfoDedicated__transmissionMode { + AntennaInfoDedicated__transmissionMode_tm1 = 0, + AntennaInfoDedicated__transmissionMode_tm2 = 1, + AntennaInfoDedicated__transmissionMode_tm3 = 2, + AntennaInfoDedicated__transmissionMode_tm4 = 3, + AntennaInfoDedicated__transmissionMode_tm5 = 4, + AntennaInfoDedicated__transmissionMode_tm6 = 5, + AntennaInfoDedicated__transmissionMode_tm7 = 6, + AntennaInfoDedicated__transmissionMode_tm8_v920 = 7 +} e_AntennaInfoDedicated__transmissionMode; +typedef enum AntennaInfoDedicated__codebookSubsetRestriction_PR { + AntennaInfoDedicated__codebookSubsetRestriction_PR_NOTHING, /* No components present */ + AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm3, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n4TxAntenna_tm3, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm4, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n4TxAntenna_tm4, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm5, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n4TxAntenna_tm5, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n2TxAntenna_tm6, + AntennaInfoDedicated__codebookSubsetRestriction_PR_n4TxAntenna_tm6 +} AntennaInfoDedicated__codebookSubsetRestriction_PR; +typedef enum AntennaInfoDedicated__ue_TransmitAntennaSelection_PR { + AntennaInfoDedicated__ue_TransmitAntennaSelection_PR_NOTHING, /* No components present */ + AntennaInfoDedicated__ue_TransmitAntennaSelection_PR_release, + AntennaInfoDedicated__ue_TransmitAntennaSelection_PR_setup +} AntennaInfoDedicated__ue_TransmitAntennaSelection_PR; +typedef enum AntennaInfoDedicated__ue_TransmitAntennaSelection__setup { + AntennaInfoDedicated__ue_TransmitAntennaSelection__setup_closedLoop = 0, + AntennaInfoDedicated__ue_TransmitAntennaSelection__setup_openLoop = 1 +} e_AntennaInfoDedicated__ue_TransmitAntennaSelection__setup; + +/* AntennaInfoDedicated */ +typedef struct AntennaInfoDedicated { + long transmissionMode; + struct AntennaInfoDedicated__codebookSubsetRestriction { + AntennaInfoDedicated__codebookSubsetRestriction_PR present; + union AntennaInfoDedicated__codebookSubsetRestriction_u { + BIT_STRING_t n2TxAntenna_tm3; + BIT_STRING_t n4TxAntenna_tm3; + BIT_STRING_t n2TxAntenna_tm4; + BIT_STRING_t n4TxAntenna_tm4; + BIT_STRING_t n2TxAntenna_tm5; + BIT_STRING_t n4TxAntenna_tm5; + BIT_STRING_t n2TxAntenna_tm6; + BIT_STRING_t n4TxAntenna_tm6; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *codebookSubsetRestriction; + struct AntennaInfoDedicated__ue_TransmitAntennaSelection { + AntennaInfoDedicated__ue_TransmitAntennaSelection_PR present; + union AntennaInfoDedicated__ue_TransmitAntennaSelection_u { + NULL_t release; + long setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ue_TransmitAntennaSelection; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AntennaInfoDedicated_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_transmissionMode_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_setup_22; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_AntennaInfoDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _AntennaInfoDedicated_H_ */ +#include diff --git a/lte/rrc/asn/AntennaInfoUL-r10.c b/lte/rrc/asn/AntennaInfoUL-r10.c new file mode 100644 index 000000000..324647a83 --- /dev/null +++ b/lte/rrc/asn/AntennaInfoUL-r10.c @@ -0,0 +1,360 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AntennaInfoUL-r10.h" + +static int +transmissionModeUL_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +transmissionModeUL_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +transmissionModeUL_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +transmissionModeUL_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +transmissionModeUL_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +transmissionModeUL_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +transmissionModeUL_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +transmissionModeUL_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +transmissionModeUL_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +transmissionModeUL_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + transmissionModeUL_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +fourAntennaPortActivated_r10_11_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +fourAntennaPortActivated_r10_11_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +fourAntennaPortActivated_r10_11_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +fourAntennaPortActivated_r10_11_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +fourAntennaPortActivated_r10_11_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +fourAntennaPortActivated_r10_11_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +fourAntennaPortActivated_r10_11_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +fourAntennaPortActivated_r10_11_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +fourAntennaPortActivated_r10_11_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + fourAntennaPortActivated_r10_11_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_transmissionModeUL_r10_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_fourAntennaPortActivated_r10_constr_11 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_transmissionModeUL_r10_value2enum_2[] = { + { 0, 3, "tm1" }, + { 1, 3, "tm2" }, + { 2, 6, "spare6" }, + { 3, 6, "spare5" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_transmissionModeUL_r10_enum2value_2[] = { + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 3, /* spare5(3) */ + 2, /* spare6(2) */ + 0, /* tm1(0) */ + 1 /* tm2(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_transmissionModeUL_r10_specs_2 = { + asn_MAP_transmissionModeUL_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_transmissionModeUL_r10_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_transmissionModeUL_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_transmissionModeUL_r10_2 = { + "transmissionModeUL-r10", + "transmissionModeUL-r10", + transmissionModeUL_r10_2_free, + transmissionModeUL_r10_2_print, + transmissionModeUL_r10_2_constraint, + transmissionModeUL_r10_2_decode_ber, + transmissionModeUL_r10_2_encode_der, + transmissionModeUL_r10_2_decode_xer, + transmissionModeUL_r10_2_encode_xer, + transmissionModeUL_r10_2_decode_uper, + transmissionModeUL_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_transmissionModeUL_r10_tags_2, + sizeof(asn_DEF_transmissionModeUL_r10_tags_2) + /sizeof(asn_DEF_transmissionModeUL_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_transmissionModeUL_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_transmissionModeUL_r10_tags_2) + /sizeof(asn_DEF_transmissionModeUL_r10_tags_2[0]), /* 2 */ + &asn_PER_type_transmissionModeUL_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_transmissionModeUL_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_fourAntennaPortActivated_r10_value2enum_11[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_fourAntennaPortActivated_r10_enum2value_11[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_fourAntennaPortActivated_r10_specs_11 = { + asn_MAP_fourAntennaPortActivated_r10_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_fourAntennaPortActivated_r10_enum2value_11, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_fourAntennaPortActivated_r10_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fourAntennaPortActivated_r10_11 = { + "fourAntennaPortActivated-r10", + "fourAntennaPortActivated-r10", + fourAntennaPortActivated_r10_11_free, + fourAntennaPortActivated_r10_11_print, + fourAntennaPortActivated_r10_11_constraint, + fourAntennaPortActivated_r10_11_decode_ber, + fourAntennaPortActivated_r10_11_encode_der, + fourAntennaPortActivated_r10_11_decode_xer, + fourAntennaPortActivated_r10_11_encode_xer, + fourAntennaPortActivated_r10_11_decode_uper, + fourAntennaPortActivated_r10_11_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_fourAntennaPortActivated_r10_tags_11, + sizeof(asn_DEF_fourAntennaPortActivated_r10_tags_11) + /sizeof(asn_DEF_fourAntennaPortActivated_r10_tags_11[0]) - 1, /* 1 */ + asn_DEF_fourAntennaPortActivated_r10_tags_11, /* Same as above */ + sizeof(asn_DEF_fourAntennaPortActivated_r10_tags_11) + /sizeof(asn_DEF_fourAntennaPortActivated_r10_tags_11[0]), /* 2 */ + &asn_PER_type_fourAntennaPortActivated_r10_constr_11, + 0, 0, /* Defined elsewhere */ + &asn_SPC_fourAntennaPortActivated_r10_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_AntennaInfoUL_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct AntennaInfoUL_r10, transmissionModeUL_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_transmissionModeUL_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "transmissionModeUL-r10" + }, + { ATF_POINTER, 1, offsetof(struct AntennaInfoUL_r10, fourAntennaPortActivated_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_fourAntennaPortActivated_r10_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "fourAntennaPortActivated-r10" + }, +}; +static int asn_MAP_AntennaInfoUL_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_AntennaInfoUL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_AntennaInfoUL_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* transmissionModeUL-r10 at 1843 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fourAntennaPortActivated-r10 at 1845 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_AntennaInfoUL_r10_specs_1 = { + sizeof(struct AntennaInfoUL_r10), + offsetof(struct AntennaInfoUL_r10, _asn_ctx), + asn_MAP_AntennaInfoUL_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_AntennaInfoUL_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_AntennaInfoUL_r10 = { + "AntennaInfoUL-r10", + "AntennaInfoUL-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_AntennaInfoUL_r10_tags_1, + sizeof(asn_DEF_AntennaInfoUL_r10_tags_1) + /sizeof(asn_DEF_AntennaInfoUL_r10_tags_1[0]), /* 1 */ + asn_DEF_AntennaInfoUL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_AntennaInfoUL_r10_tags_1) + /sizeof(asn_DEF_AntennaInfoUL_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_AntennaInfoUL_r10_1, + 2, /* Elements count */ + &asn_SPC_AntennaInfoUL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AntennaInfoUL-r10.h b/lte/rrc/asn/AntennaInfoUL-r10.h new file mode 100644 index 000000000..456ebb083 --- /dev/null +++ b/lte/rrc/asn/AntennaInfoUL-r10.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AntennaInfoUL_r10_H_ +#define _AntennaInfoUL_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AntennaInfoUL_r10__transmissionModeUL_r10 { + AntennaInfoUL_r10__transmissionModeUL_r10_tm1 = 0, + AntennaInfoUL_r10__transmissionModeUL_r10_tm2 = 1, + AntennaInfoUL_r10__transmissionModeUL_r10_spare6 = 2, + AntennaInfoUL_r10__transmissionModeUL_r10_spare5 = 3, + AntennaInfoUL_r10__transmissionModeUL_r10_spare4 = 4, + AntennaInfoUL_r10__transmissionModeUL_r10_spare3 = 5, + AntennaInfoUL_r10__transmissionModeUL_r10_spare2 = 6, + AntennaInfoUL_r10__transmissionModeUL_r10_spare1 = 7 +} e_AntennaInfoUL_r10__transmissionModeUL_r10; +typedef enum AntennaInfoUL_r10__fourAntennaPortActivated_r10 { + AntennaInfoUL_r10__fourAntennaPortActivated_r10_setup = 0 +} e_AntennaInfoUL_r10__fourAntennaPortActivated_r10; + +/* AntennaInfoUL-r10 */ +typedef struct AntennaInfoUL_r10 { + long *transmissionModeUL_r10 /* OPTIONAL */; + long *fourAntennaPortActivated_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AntennaInfoUL_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_transmissionModeUL_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_fourAntennaPortActivated_r10_11; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_AntennaInfoUL_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _AntennaInfoUL_r10_H_ */ +#include diff --git a/lte/rrc/asn/AreaConfiguration-r10.c b/lte/rrc/asn/AreaConfiguration-r10.c new file mode 100644 index 000000000..938709526 --- /dev/null +++ b/lte/rrc/asn/AreaConfiguration-r10.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "AreaConfiguration-r10.h" + +static asn_per_constraints_t asn_PER_type_AreaConfiguration_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_AreaConfiguration_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct AreaConfiguration_r10, choice.cellGlobalIdList_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellGlobalIdList-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct AreaConfiguration_r10, choice.trackingAreaCodeList_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TrackingAreaCodeList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "trackingAreaCodeList-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_AreaConfiguration_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobalIdList-r10 at 3632 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* trackingAreaCodeList-r10 at 3634 */ +}; +static asn_CHOICE_specifics_t asn_SPC_AreaConfiguration_r10_specs_1 = { + sizeof(struct AreaConfiguration_r10), + offsetof(struct AreaConfiguration_r10, _asn_ctx), + offsetof(struct AreaConfiguration_r10, present), + sizeof(((struct AreaConfiguration_r10 *)0)->present), + asn_MAP_AreaConfiguration_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_AreaConfiguration_r10 = { + "AreaConfiguration-r10", + "AreaConfiguration-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_AreaConfiguration_r10_constr_1, + asn_MBR_AreaConfiguration_r10_1, + 2, /* Elements count */ + &asn_SPC_AreaConfiguration_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/AreaConfiguration-r10.h b/lte/rrc/asn/AreaConfiguration-r10.h new file mode 100644 index 000000000..3f662828d --- /dev/null +++ b/lte/rrc/asn/AreaConfiguration-r10.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _AreaConfiguration_r10_H_ +#define _AreaConfiguration_r10_H_ + + +#include + +/* Including external dependencies */ +#include "CellGlobalIdList-r10.h" +#include "TrackingAreaCodeList-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum AreaConfiguration_r10_PR { + AreaConfiguration_r10_PR_NOTHING, /* No components present */ + AreaConfiguration_r10_PR_cellGlobalIdList_r10, + AreaConfiguration_r10_PR_trackingAreaCodeList_r10 +} AreaConfiguration_r10_PR; + +/* AreaConfiguration-r10 */ +typedef struct AreaConfiguration_r10 { + AreaConfiguration_r10_PR present; + union AreaConfiguration_r10_u { + CellGlobalIdList_r10_t cellGlobalIdList_r10; + TrackingAreaCodeList_r10_t trackingAreaCodeList_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} AreaConfiguration_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_AreaConfiguration_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _AreaConfiguration_r10_H_ */ +#include diff --git a/lte/rrc/asn/BCCH-BCH-Message.c b/lte/rrc/asn/BCCH-BCH-Message.c new file mode 100644 index 000000000..a87c4fcce --- /dev/null +++ b/lte/rrc/asn/BCCH-BCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BCCH-BCH-Message.h" + +static asn_TYPE_member_t asn_MBR_BCCH_BCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BCCH_BCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BCCH_BCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_BCCH_BCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BCCH_BCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 8 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BCCH_BCH_Message_specs_1 = { + sizeof(struct BCCH_BCH_Message), + offsetof(struct BCCH_BCH_Message, _asn_ctx), + asn_MAP_BCCH_BCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BCCH_BCH_Message = { + "BCCH-BCH-Message", + "BCCH-BCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BCCH_BCH_Message_tags_1, + sizeof(asn_DEF_BCCH_BCH_Message_tags_1) + /sizeof(asn_DEF_BCCH_BCH_Message_tags_1[0]), /* 1 */ + asn_DEF_BCCH_BCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_BCCH_BCH_Message_tags_1) + /sizeof(asn_DEF_BCCH_BCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BCCH_BCH_Message_1, + 1, /* Elements count */ + &asn_SPC_BCCH_BCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BCCH-BCH-Message.h b/lte/rrc/asn/BCCH-BCH-Message.h new file mode 100644 index 000000000..926dfe8a1 --- /dev/null +++ b/lte/rrc/asn/BCCH-BCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BCCH_BCH_Message_H_ +#define _BCCH_BCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "BCCH-BCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BCCH-BCH-Message */ +typedef struct BCCH_BCH_Message { + BCCH_BCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BCCH_BCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BCCH_BCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _BCCH_BCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/BCCH-BCH-MessageType.c b/lte/rrc/asn/BCCH-BCH-MessageType.c new file mode 100644 index 000000000..7ddbcf128 --- /dev/null +++ b/lte/rrc/asn/BCCH-BCH-MessageType.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BCCH-BCH-MessageType.h" + +int +BCCH_BCH_MessageType_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_MasterInformationBlock.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using MasterInformationBlock, + * so here we adjust the DEF accordingly. + */ +static void +BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_MasterInformationBlock.free_struct; + td->print_struct = asn_DEF_MasterInformationBlock.print_struct; + td->ber_decoder = asn_DEF_MasterInformationBlock.ber_decoder; + td->der_encoder = asn_DEF_MasterInformationBlock.der_encoder; + td->xer_decoder = asn_DEF_MasterInformationBlock.xer_decoder; + td->xer_encoder = asn_DEF_MasterInformationBlock.xer_encoder; + td->uper_decoder = asn_DEF_MasterInformationBlock.uper_decoder; + td->uper_encoder = asn_DEF_MasterInformationBlock.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_MasterInformationBlock.per_constraints; + td->elements = asn_DEF_MasterInformationBlock.elements; + td->elements_count = asn_DEF_MasterInformationBlock.elements_count; + td->specifics = asn_DEF_MasterInformationBlock.specifics; +} + +void +BCCH_BCH_MessageType_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +BCCH_BCH_MessageType_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +BCCH_BCH_MessageType_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +BCCH_BCH_MessageType_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +BCCH_BCH_MessageType_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +BCCH_BCH_MessageType_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +BCCH_BCH_MessageType_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +BCCH_BCH_MessageType_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + BCCH_BCH_MessageType_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_BCCH_BCH_MessageType_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BCCH_BCH_MessageType = { + "BCCH-BCH-MessageType", + "BCCH-BCH-MessageType", + BCCH_BCH_MessageType_free, + BCCH_BCH_MessageType_print, + BCCH_BCH_MessageType_constraint, + BCCH_BCH_MessageType_decode_ber, + BCCH_BCH_MessageType_encode_der, + BCCH_BCH_MessageType_decode_xer, + BCCH_BCH_MessageType_encode_xer, + BCCH_BCH_MessageType_decode_uper, + BCCH_BCH_MessageType_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BCCH_BCH_MessageType_tags_1, + sizeof(asn_DEF_BCCH_BCH_MessageType_tags_1) + /sizeof(asn_DEF_BCCH_BCH_MessageType_tags_1[0]), /* 1 */ + asn_DEF_BCCH_BCH_MessageType_tags_1, /* Same as above */ + sizeof(asn_DEF_BCCH_BCH_MessageType_tags_1) + /sizeof(asn_DEF_BCCH_BCH_MessageType_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* Defined elsewhere */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/BCCH-BCH-MessageType.h b/lte/rrc/asn/BCCH-BCH-MessageType.h new file mode 100644 index 000000000..f84eb85ec --- /dev/null +++ b/lte/rrc/asn/BCCH-BCH-MessageType.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BCCH_BCH_MessageType_H_ +#define _BCCH_BCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "MasterInformationBlock.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* BCCH-BCH-MessageType */ +typedef MasterInformationBlock_t BCCH_BCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BCCH_BCH_MessageType; +asn_struct_free_f BCCH_BCH_MessageType_free; +asn_struct_print_f BCCH_BCH_MessageType_print; +asn_constr_check_f BCCH_BCH_MessageType_constraint; +ber_type_decoder_f BCCH_BCH_MessageType_decode_ber; +der_type_encoder_f BCCH_BCH_MessageType_encode_der; +xer_type_decoder_f BCCH_BCH_MessageType_decode_xer; +xer_type_encoder_f BCCH_BCH_MessageType_encode_xer; +per_type_decoder_f BCCH_BCH_MessageType_decode_uper; +per_type_encoder_f BCCH_BCH_MessageType_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BCCH_BCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/BCCH-Config.c b/lte/rrc/asn/BCCH-Config.c new file mode 100644 index 000000000..993d86acf --- /dev/null +++ b/lte/rrc/asn/BCCH-Config.c @@ -0,0 +1,203 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BCCH-Config.h" + +static int +modificationPeriodCoeff_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +modificationPeriodCoeff_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +modificationPeriodCoeff_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +modificationPeriodCoeff_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +modificationPeriodCoeff_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +modificationPeriodCoeff_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +modificationPeriodCoeff_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +modificationPeriodCoeff_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +modificationPeriodCoeff_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +modificationPeriodCoeff_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + modificationPeriodCoeff_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_modificationPeriodCoeff_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_modificationPeriodCoeff_value2enum_2[] = { + { 0, 2, "n2" }, + { 1, 2, "n4" }, + { 2, 2, "n8" }, + { 3, 3, "n16" } +}; +static unsigned int asn_MAP_modificationPeriodCoeff_enum2value_2[] = { + 3, /* n16(3) */ + 0, /* n2(0) */ + 1, /* n4(1) */ + 2 /* n8(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_modificationPeriodCoeff_specs_2 = { + asn_MAP_modificationPeriodCoeff_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_modificationPeriodCoeff_enum2value_2, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_modificationPeriodCoeff_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_modificationPeriodCoeff_2 = { + "modificationPeriodCoeff", + "modificationPeriodCoeff", + modificationPeriodCoeff_2_free, + modificationPeriodCoeff_2_print, + modificationPeriodCoeff_2_constraint, + modificationPeriodCoeff_2_decode_ber, + modificationPeriodCoeff_2_encode_der, + modificationPeriodCoeff_2_decode_xer, + modificationPeriodCoeff_2_encode_xer, + modificationPeriodCoeff_2_decode_uper, + modificationPeriodCoeff_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_modificationPeriodCoeff_tags_2, + sizeof(asn_DEF_modificationPeriodCoeff_tags_2) + /sizeof(asn_DEF_modificationPeriodCoeff_tags_2[0]) - 1, /* 1 */ + asn_DEF_modificationPeriodCoeff_tags_2, /* Same as above */ + sizeof(asn_DEF_modificationPeriodCoeff_tags_2) + /sizeof(asn_DEF_modificationPeriodCoeff_tags_2[0]), /* 2 */ + &asn_PER_type_modificationPeriodCoeff_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_modificationPeriodCoeff_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_BCCH_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BCCH_Config, modificationPeriodCoeff), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_modificationPeriodCoeff_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "modificationPeriodCoeff" + }, +}; +static ber_tlv_tag_t asn_DEF_BCCH_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BCCH_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* modificationPeriodCoeff at 2428 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BCCH_Config_specs_1 = { + sizeof(struct BCCH_Config), + offsetof(struct BCCH_Config, _asn_ctx), + asn_MAP_BCCH_Config_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BCCH_Config = { + "BCCH-Config", + "BCCH-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BCCH_Config_tags_1, + sizeof(asn_DEF_BCCH_Config_tags_1) + /sizeof(asn_DEF_BCCH_Config_tags_1[0]), /* 1 */ + asn_DEF_BCCH_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_BCCH_Config_tags_1) + /sizeof(asn_DEF_BCCH_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BCCH_Config_1, + 1, /* Elements count */ + &asn_SPC_BCCH_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BCCH-Config.h b/lte/rrc/asn/BCCH-Config.h new file mode 100644 index 000000000..cd0b58f01 --- /dev/null +++ b/lte/rrc/asn/BCCH-Config.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BCCH_Config_H_ +#define _BCCH_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BCCH_Config__modificationPeriodCoeff { + BCCH_Config__modificationPeriodCoeff_n2 = 0, + BCCH_Config__modificationPeriodCoeff_n4 = 1, + BCCH_Config__modificationPeriodCoeff_n8 = 2, + BCCH_Config__modificationPeriodCoeff_n16 = 3 +} e_BCCH_Config__modificationPeriodCoeff; + +/* BCCH-Config */ +typedef struct BCCH_Config { + long modificationPeriodCoeff; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BCCH_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_modificationPeriodCoeff_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_BCCH_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _BCCH_Config_H_ */ +#include diff --git a/lte/rrc/asn/BCCH-DL-SCH-Message.c b/lte/rrc/asn/BCCH-DL-SCH-Message.c new file mode 100644 index 000000000..30acb6016 --- /dev/null +++ b/lte/rrc/asn/BCCH-DL-SCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BCCH-DL-SCH-Message.h" + +static asn_TYPE_member_t asn_MBR_BCCH_DL_SCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BCCH_DL_SCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_BCCH_DL_SCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_BCCH_DL_SCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BCCH_DL_SCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 15 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BCCH_DL_SCH_Message_specs_1 = { + sizeof(struct BCCH_DL_SCH_Message), + offsetof(struct BCCH_DL_SCH_Message, _asn_ctx), + asn_MAP_BCCH_DL_SCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BCCH_DL_SCH_Message = { + "BCCH-DL-SCH-Message", + "BCCH-DL-SCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BCCH_DL_SCH_Message_tags_1, + sizeof(asn_DEF_BCCH_DL_SCH_Message_tags_1) + /sizeof(asn_DEF_BCCH_DL_SCH_Message_tags_1[0]), /* 1 */ + asn_DEF_BCCH_DL_SCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_BCCH_DL_SCH_Message_tags_1) + /sizeof(asn_DEF_BCCH_DL_SCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BCCH_DL_SCH_Message_1, + 1, /* Elements count */ + &asn_SPC_BCCH_DL_SCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BCCH-DL-SCH-Message.h b/lte/rrc/asn/BCCH-DL-SCH-Message.h new file mode 100644 index 000000000..7c6770ff5 --- /dev/null +++ b/lte/rrc/asn/BCCH-DL-SCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BCCH_DL_SCH_Message_H_ +#define _BCCH_DL_SCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "BCCH-DL-SCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BCCH-DL-SCH-Message */ +typedef struct BCCH_DL_SCH_Message { + BCCH_DL_SCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BCCH_DL_SCH_Message_t; + +/* Implementation */ +LIBLTE_API extern asn_TYPE_descriptor_t asn_DEF_BCCH_DL_SCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _BCCH_DL_SCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/BCCH-DL-SCH-MessageType.c b/lte/rrc/asn/BCCH-DL-SCH-MessageType.c new file mode 100644 index 000000000..7b51e8898 --- /dev/null +++ b/lte/rrc/asn/BCCH-DL-SCH-MessageType.c @@ -0,0 +1,172 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BCCH-DL-SCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_BCCH_DL_SCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct BCCH_DL_SCH_MessageType__c1, choice.systemInformation), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformation, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct BCCH_DL_SCH_MessageType__c1, choice.systemInformationBlockType1), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType1, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformationBlockType1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* systemInformation at 19 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* systemInformationBlockType1 at 21 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct BCCH_DL_SCH_MessageType__c1), + offsetof(struct BCCH_DL_SCH_MessageType__c1, _asn_ctx), + offsetof(struct BCCH_DL_SCH_MessageType__c1, present), + sizeof(((struct BCCH_DL_SCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 2, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_5 = { + sizeof(struct BCCH_DL_SCH_MessageType__messageClassExtension), + offsetof(struct BCCH_DL_SCH_MessageType__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_5 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_5, + sizeof(asn_DEF_messageClassExtension_tags_5) + /sizeof(asn_DEF_messageClassExtension_tags_5[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_5, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_5) + /sizeof(asn_DEF_messageClassExtension_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_BCCH_DL_SCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BCCH_DL_SCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct BCCH_DL_SCH_MessageType, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_BCCH_DL_SCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 19 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 22 */ +}; +static asn_CHOICE_specifics_t asn_SPC_BCCH_DL_SCH_MessageType_specs_1 = { + sizeof(struct BCCH_DL_SCH_MessageType), + offsetof(struct BCCH_DL_SCH_MessageType, _asn_ctx), + offsetof(struct BCCH_DL_SCH_MessageType, present), + sizeof(((struct BCCH_DL_SCH_MessageType *)0)->present), + asn_MAP_BCCH_DL_SCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_BCCH_DL_SCH_MessageType = { + "BCCH-DL-SCH-MessageType", + "BCCH-DL-SCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_BCCH_DL_SCH_MessageType_constr_1, + asn_MBR_BCCH_DL_SCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_BCCH_DL_SCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BCCH-DL-SCH-MessageType.h b/lte/rrc/asn/BCCH-DL-SCH-MessageType.h new file mode 100644 index 000000000..7c6640ef9 --- /dev/null +++ b/lte/rrc/asn/BCCH-DL-SCH-MessageType.h @@ -0,0 +1,69 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BCCH_DL_SCH_MessageType_H_ +#define _BCCH_DL_SCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "SystemInformation.h" +#include "SystemInformationBlockType1.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BCCH_DL_SCH_MessageType_PR { + BCCH_DL_SCH_MessageType_PR_NOTHING, /* No components present */ + BCCH_DL_SCH_MessageType_PR_c1, + BCCH_DL_SCH_MessageType_PR_messageClassExtension +} BCCH_DL_SCH_MessageType_PR; +typedef enum BCCH_DL_SCH_MessageType__c1_PR { + BCCH_DL_SCH_MessageType__c1_PR_NOTHING, /* No components present */ + BCCH_DL_SCH_MessageType__c1_PR_systemInformation, + BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1 +} BCCH_DL_SCH_MessageType__c1_PR; + +/* BCCH-DL-SCH-MessageType */ +typedef struct BCCH_DL_SCH_MessageType { + BCCH_DL_SCH_MessageType_PR present; + union BCCH_DL_SCH_MessageType_u { + struct BCCH_DL_SCH_MessageType__c1 { + BCCH_DL_SCH_MessageType__c1_PR present; + union BCCH_DL_SCH_MessageType__c1_u { + SystemInformation_t systemInformation; + SystemInformationBlockType1_t systemInformationBlockType1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct BCCH_DL_SCH_MessageType__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BCCH_DL_SCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BCCH_DL_SCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _BCCH_DL_SCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/BIT_STRING.c b/lte/rrc/asn/BIT_STRING.c index 9e0e50c69..9b9827127 100644 --- a/lte/rrc/asn/BIT_STRING.c +++ b/lte/rrc/asn/BIT_STRING.c @@ -9,7 +9,7 @@ /* * BIT STRING basic type description. */ -static const ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { +static ber_tlv_tag_t asn_DEF_BIT_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; static asn_OCTET_STRING_specifics_t asn_DEF_BIT_STRING_specs = { @@ -140,7 +140,7 @@ cb_failed: int BIT_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { - const char * const h2c = "0123456789ABCDEF"; + static const char *h2c = "0123456789ABCDEF"; char scratch[64]; const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; uint8_t *buf; diff --git a/lte/rrc/asn/BOOLEAN.c b/lte/rrc/asn/BOOLEAN.c index 2ba07840f..2c2bbcf2f 100644 --- a/lte/rrc/asn/BOOLEAN.c +++ b/lte/rrc/asn/BOOLEAN.c @@ -9,7 +9,7 @@ /* * BOOLEAN basic type description. */ -static const ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { +static ber_tlv_tag_t asn_DEF_BOOLEAN_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) }; asn_TYPE_descriptor_t asn_DEF_BOOLEAN = { @@ -161,7 +161,10 @@ BOOLEAN__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun } return XPBD_BODY_CONSUMED; } else { - return XPBD_BROKEN_ENCODING; + if(xer_is_whitespace(chunk_buf, chunk_size)) + return XPBD_NOT_BODY_IGNORE; + else + return XPBD_BROKEN_ENCODING; } } @@ -269,14 +272,13 @@ asn_enc_rval_t BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; - asn_enc_rval_t er = { 0, 0, 0 }; + asn_enc_rval_t er; (void)constraints; if(!st) _ASN_ENCODE_FAILED; - if(per_put_few_bits(po, *st ? 1 : 0, 1)) - _ASN_ENCODE_FAILED; + per_put_few_bits(po, *st ? 1 : 0, 1); _ASN_ENCODED_OK(er); } diff --git a/lte/rrc/asn/BandClassInfoCDMA2000.c b/lte/rrc/asn/BandClassInfoCDMA2000.c new file mode 100644 index 000000000..2dc8019c0 --- /dev/null +++ b/lte/rrc/asn/BandClassInfoCDMA2000.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandClassInfoCDMA2000.h" + +static int +memb_threshX_High_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_threshX_Low_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_threshX_High_constr_4 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_threshX_Low_constr_5 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandClassInfoCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandClassInfoCDMA2000, bandClass), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClass" + }, + { ATF_POINTER, 1, offsetof(struct BandClassInfoCDMA2000, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, + { ATF_NOFLAGS, 0, offsetof(struct BandClassInfoCDMA2000, threshX_High), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_threshX_High_constraint_1, + &asn_PER_memb_threshX_High_constr_4, + 0, + "threshX-High" + }, + { ATF_NOFLAGS, 0, offsetof(struct BandClassInfoCDMA2000, threshX_Low), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_threshX_Low_constraint_1, + &asn_PER_memb_threshX_Low_constr_5, + 0, + "threshX-Low" + }, +}; +static int asn_MAP_BandClassInfoCDMA2000_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_BandClassInfoCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BandClassInfoCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandClass at 1728 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellReselectionPriority at 1729 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* threshX-High at 1730 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* threshX-Low at 1731 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BandClassInfoCDMA2000_specs_1 = { + sizeof(struct BandClassInfoCDMA2000), + offsetof(struct BandClassInfoCDMA2000, _asn_ctx), + asn_MAP_BandClassInfoCDMA2000_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_BandClassInfoCDMA2000_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BandClassInfoCDMA2000 = { + "BandClassInfoCDMA2000", + "BandClassInfoCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandClassInfoCDMA2000_tags_1, + sizeof(asn_DEF_BandClassInfoCDMA2000_tags_1) + /sizeof(asn_DEF_BandClassInfoCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_BandClassInfoCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_BandClassInfoCDMA2000_tags_1) + /sizeof(asn_DEF_BandClassInfoCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BandClassInfoCDMA2000_1, + 4, /* Elements count */ + &asn_SPC_BandClassInfoCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandClassInfoCDMA2000.h b/lte/rrc/asn/BandClassInfoCDMA2000.h new file mode 100644 index 000000000..34c1b611f --- /dev/null +++ b/lte/rrc/asn/BandClassInfoCDMA2000.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandClassInfoCDMA2000_H_ +#define _BandClassInfoCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include "CellReselectionPriority.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BandClassInfoCDMA2000 */ +typedef struct BandClassInfoCDMA2000 { + BandclassCDMA2000_t bandClass; + CellReselectionPriority_t *cellReselectionPriority /* OPTIONAL */; + long threshX_High; + long threshX_Low; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandClassInfoCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandClassInfoCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandClassInfoCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/BandClassListCDMA2000.c b/lte/rrc/asn/BandClassListCDMA2000.c new file mode 100644 index 000000000..5df93e331 --- /dev/null +++ b/lte/rrc/asn/BandClassListCDMA2000.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandClassListCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_BandClassListCDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandClassListCDMA2000_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandClassInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandClassListCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandClassListCDMA2000_specs_1 = { + sizeof(struct BandClassListCDMA2000), + offsetof(struct BandClassListCDMA2000, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandClassListCDMA2000 = { + "BandClassListCDMA2000", + "BandClassListCDMA2000", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandClassListCDMA2000_tags_1, + sizeof(asn_DEF_BandClassListCDMA2000_tags_1) + /sizeof(asn_DEF_BandClassListCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_BandClassListCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_BandClassListCDMA2000_tags_1) + /sizeof(asn_DEF_BandClassListCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_BandClassListCDMA2000_constr_1, + asn_MBR_BandClassListCDMA2000_1, + 1, /* Single element */ + &asn_SPC_BandClassListCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandClassListCDMA2000.h b/lte/rrc/asn/BandClassListCDMA2000.h new file mode 100644 index 000000000..9a2c3b1d6 --- /dev/null +++ b/lte/rrc/asn/BandClassListCDMA2000.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandClassListCDMA2000_H_ +#define _BandClassListCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandClassInfoCDMA2000; + +/* BandClassListCDMA2000 */ +typedef struct BandClassListCDMA2000 { + A_SEQUENCE_OF(struct BandClassInfoCDMA2000) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandClassListCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandClassListCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandClassInfoCDMA2000.h" + +#endif /* _BandClassListCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/BandClassPriority1XRTT.c b/lte/rrc/asn/BandClassPriority1XRTT.c new file mode 100644 index 000000000..e86ef4020 --- /dev/null +++ b/lte/rrc/asn/BandClassPriority1XRTT.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandClassPriority1XRTT.h" + +static asn_TYPE_member_t asn_MBR_BandClassPriority1XRTT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandClassPriority1XRTT, bandClass), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClass" + }, + { ATF_NOFLAGS, 0, offsetof(struct BandClassPriority1XRTT, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static ber_tlv_tag_t asn_DEF_BandClassPriority1XRTT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BandClassPriority1XRTT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandClass at 954 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionPriority at 956 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BandClassPriority1XRTT_specs_1 = { + sizeof(struct BandClassPriority1XRTT), + offsetof(struct BandClassPriority1XRTT, _asn_ctx), + asn_MAP_BandClassPriority1XRTT_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BandClassPriority1XRTT = { + "BandClassPriority1XRTT", + "BandClassPriority1XRTT", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandClassPriority1XRTT_tags_1, + sizeof(asn_DEF_BandClassPriority1XRTT_tags_1) + /sizeof(asn_DEF_BandClassPriority1XRTT_tags_1[0]), /* 1 */ + asn_DEF_BandClassPriority1XRTT_tags_1, /* Same as above */ + sizeof(asn_DEF_BandClassPriority1XRTT_tags_1) + /sizeof(asn_DEF_BandClassPriority1XRTT_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BandClassPriority1XRTT_1, + 2, /* Elements count */ + &asn_SPC_BandClassPriority1XRTT_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandClassPriority1XRTT.h b/lte/rrc/asn/BandClassPriority1XRTT.h new file mode 100644 index 000000000..030bd2ae5 --- /dev/null +++ b/lte/rrc/asn/BandClassPriority1XRTT.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandClassPriority1XRTT_H_ +#define _BandClassPriority1XRTT_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include "CellReselectionPriority.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BandClassPriority1XRTT */ +typedef struct BandClassPriority1XRTT { + BandclassCDMA2000_t bandClass; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandClassPriority1XRTT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandClassPriority1XRTT; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandClassPriority1XRTT_H_ */ +#include diff --git a/lte/rrc/asn/BandClassPriorityHRPD.c b/lte/rrc/asn/BandClassPriorityHRPD.c new file mode 100644 index 000000000..054aebc9d --- /dev/null +++ b/lte/rrc/asn/BandClassPriorityHRPD.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandClassPriorityHRPD.h" + +static asn_TYPE_member_t asn_MBR_BandClassPriorityHRPD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandClassPriorityHRPD, bandClass), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClass" + }, + { ATF_NOFLAGS, 0, offsetof(struct BandClassPriorityHRPD, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static ber_tlv_tag_t asn_DEF_BandClassPriorityHRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BandClassPriorityHRPD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandClass at 947 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionPriority at 949 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BandClassPriorityHRPD_specs_1 = { + sizeof(struct BandClassPriorityHRPD), + offsetof(struct BandClassPriorityHRPD, _asn_ctx), + asn_MAP_BandClassPriorityHRPD_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BandClassPriorityHRPD = { + "BandClassPriorityHRPD", + "BandClassPriorityHRPD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandClassPriorityHRPD_tags_1, + sizeof(asn_DEF_BandClassPriorityHRPD_tags_1) + /sizeof(asn_DEF_BandClassPriorityHRPD_tags_1[0]), /* 1 */ + asn_DEF_BandClassPriorityHRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_BandClassPriorityHRPD_tags_1) + /sizeof(asn_DEF_BandClassPriorityHRPD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BandClassPriorityHRPD_1, + 2, /* Elements count */ + &asn_SPC_BandClassPriorityHRPD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandClassPriorityHRPD.h b/lte/rrc/asn/BandClassPriorityHRPD.h new file mode 100644 index 000000000..c507958e1 --- /dev/null +++ b/lte/rrc/asn/BandClassPriorityHRPD.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandClassPriorityHRPD_H_ +#define _BandClassPriorityHRPD_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include "CellReselectionPriority.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BandClassPriorityHRPD */ +typedef struct BandClassPriorityHRPD { + BandclassCDMA2000_t bandClass; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandClassPriorityHRPD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandClassPriorityHRPD; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandClassPriorityHRPD_H_ */ +#include diff --git a/lte/rrc/asn/BandClassPriorityList1XRTT.c b/lte/rrc/asn/BandClassPriorityList1XRTT.c new file mode 100644 index 000000000..1ffd34c36 --- /dev/null +++ b/lte/rrc/asn/BandClassPriorityList1XRTT.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandClassPriorityList1XRTT.h" + +static asn_per_constraints_t asn_PER_type_BandClassPriorityList1XRTT_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandClassPriorityList1XRTT_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandClassPriority1XRTT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandClassPriorityList1XRTT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandClassPriorityList1XRTT_specs_1 = { + sizeof(struct BandClassPriorityList1XRTT), + offsetof(struct BandClassPriorityList1XRTT, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandClassPriorityList1XRTT = { + "BandClassPriorityList1XRTT", + "BandClassPriorityList1XRTT", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandClassPriorityList1XRTT_tags_1, + sizeof(asn_DEF_BandClassPriorityList1XRTT_tags_1) + /sizeof(asn_DEF_BandClassPriorityList1XRTT_tags_1[0]), /* 1 */ + asn_DEF_BandClassPriorityList1XRTT_tags_1, /* Same as above */ + sizeof(asn_DEF_BandClassPriorityList1XRTT_tags_1) + /sizeof(asn_DEF_BandClassPriorityList1XRTT_tags_1[0]), /* 1 */ + &asn_PER_type_BandClassPriorityList1XRTT_constr_1, + asn_MBR_BandClassPriorityList1XRTT_1, + 1, /* Single element */ + &asn_SPC_BandClassPriorityList1XRTT_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandClassPriorityList1XRTT.h b/lte/rrc/asn/BandClassPriorityList1XRTT.h new file mode 100644 index 000000000..7223b3645 --- /dev/null +++ b/lte/rrc/asn/BandClassPriorityList1XRTT.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandClassPriorityList1XRTT_H_ +#define _BandClassPriorityList1XRTT_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandClassPriority1XRTT; + +/* BandClassPriorityList1XRTT */ +typedef struct BandClassPriorityList1XRTT { + A_SEQUENCE_OF(struct BandClassPriority1XRTT) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandClassPriorityList1XRTT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandClassPriorityList1XRTT; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandClassPriority1XRTT.h" + +#endif /* _BandClassPriorityList1XRTT_H_ */ +#include diff --git a/lte/rrc/asn/BandClassPriorityListHRPD.c b/lte/rrc/asn/BandClassPriorityListHRPD.c new file mode 100644 index 000000000..57f7b5a8c --- /dev/null +++ b/lte/rrc/asn/BandClassPriorityListHRPD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandClassPriorityListHRPD.h" + +static asn_per_constraints_t asn_PER_type_BandClassPriorityListHRPD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandClassPriorityListHRPD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandClassPriorityHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandClassPriorityListHRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandClassPriorityListHRPD_specs_1 = { + sizeof(struct BandClassPriorityListHRPD), + offsetof(struct BandClassPriorityListHRPD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandClassPriorityListHRPD = { + "BandClassPriorityListHRPD", + "BandClassPriorityListHRPD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandClassPriorityListHRPD_tags_1, + sizeof(asn_DEF_BandClassPriorityListHRPD_tags_1) + /sizeof(asn_DEF_BandClassPriorityListHRPD_tags_1[0]), /* 1 */ + asn_DEF_BandClassPriorityListHRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_BandClassPriorityListHRPD_tags_1) + /sizeof(asn_DEF_BandClassPriorityListHRPD_tags_1[0]), /* 1 */ + &asn_PER_type_BandClassPriorityListHRPD_constr_1, + asn_MBR_BandClassPriorityListHRPD_1, + 1, /* Single element */ + &asn_SPC_BandClassPriorityListHRPD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandClassPriorityListHRPD.h b/lte/rrc/asn/BandClassPriorityListHRPD.h new file mode 100644 index 000000000..c868d2dac --- /dev/null +++ b/lte/rrc/asn/BandClassPriorityListHRPD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandClassPriorityListHRPD_H_ +#define _BandClassPriorityListHRPD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandClassPriorityHRPD; + +/* BandClassPriorityListHRPD */ +typedef struct BandClassPriorityListHRPD { + A_SEQUENCE_OF(struct BandClassPriorityHRPD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandClassPriorityListHRPD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandClassPriorityListHRPD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandClassPriorityHRPD.h" + +#endif /* _BandClassPriorityListHRPD_H_ */ +#include diff --git a/lte/rrc/asn/BandCombinationListEUTRA-r10.c b/lte/rrc/asn/BandCombinationListEUTRA-r10.c new file mode 100644 index 000000000..4a19793a9 --- /dev/null +++ b/lte/rrc/asn/BandCombinationListEUTRA-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandCombinationListEUTRA-r10.h" + +static asn_per_constraints_t asn_PER_type_BandCombinationListEUTRA_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 1, 128 } /* (SIZE(1..128)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandCombinationListEUTRA_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandInfoEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandCombinationListEUTRA_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandCombinationListEUTRA_r10_specs_1 = { + sizeof(struct BandCombinationListEUTRA_r10), + offsetof(struct BandCombinationListEUTRA_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandCombinationListEUTRA_r10 = { + "BandCombinationListEUTRA-r10", + "BandCombinationListEUTRA-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandCombinationListEUTRA_r10_tags_1, + sizeof(asn_DEF_BandCombinationListEUTRA_r10_tags_1) + /sizeof(asn_DEF_BandCombinationListEUTRA_r10_tags_1[0]), /* 1 */ + asn_DEF_BandCombinationListEUTRA_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_BandCombinationListEUTRA_r10_tags_1) + /sizeof(asn_DEF_BandCombinationListEUTRA_r10_tags_1[0]), /* 1 */ + &asn_PER_type_BandCombinationListEUTRA_r10_constr_1, + asn_MBR_BandCombinationListEUTRA_r10_1, + 1, /* Single element */ + &asn_SPC_BandCombinationListEUTRA_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandCombinationListEUTRA-r10.h b/lte/rrc/asn/BandCombinationListEUTRA-r10.h new file mode 100644 index 000000000..ae2092979 --- /dev/null +++ b/lte/rrc/asn/BandCombinationListEUTRA-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandCombinationListEUTRA_r10_H_ +#define _BandCombinationListEUTRA_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandInfoEUTRA; + +/* BandCombinationListEUTRA-r10 */ +typedef struct BandCombinationListEUTRA_r10 { + A_SEQUENCE_OF(struct BandInfoEUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandCombinationListEUTRA_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandCombinationListEUTRA_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandInfoEUTRA.h" + +#endif /* _BandCombinationListEUTRA_r10_H_ */ +#include diff --git a/lte/rrc/asn/BandCombinationParameters-r10.c b/lte/rrc/asn/BandCombinationParameters-r10.c new file mode 100644 index 000000000..7554d17cf --- /dev/null +++ b/lte/rrc/asn/BandCombinationParameters-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandCombinationParameters-r10.h" + +static asn_per_constraints_t asn_PER_type_BandCombinationParameters_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandCombinationParameters_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandParameters_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandCombinationParameters_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandCombinationParameters_r10_specs_1 = { + sizeof(struct BandCombinationParameters_r10), + offsetof(struct BandCombinationParameters_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandCombinationParameters_r10 = { + "BandCombinationParameters-r10", + "BandCombinationParameters-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandCombinationParameters_r10_tags_1, + sizeof(asn_DEF_BandCombinationParameters_r10_tags_1) + /sizeof(asn_DEF_BandCombinationParameters_r10_tags_1[0]), /* 1 */ + asn_DEF_BandCombinationParameters_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_BandCombinationParameters_r10_tags_1) + /sizeof(asn_DEF_BandCombinationParameters_r10_tags_1[0]), /* 1 */ + &asn_PER_type_BandCombinationParameters_r10_constr_1, + asn_MBR_BandCombinationParameters_r10_1, + 1, /* Single element */ + &asn_SPC_BandCombinationParameters_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandCombinationParameters-r10.h b/lte/rrc/asn/BandCombinationParameters-r10.h new file mode 100644 index 000000000..0496a138a --- /dev/null +++ b/lte/rrc/asn/BandCombinationParameters-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandCombinationParameters_r10_H_ +#define _BandCombinationParameters_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandParameters_r10; + +/* BandCombinationParameters-r10 */ +typedef struct BandCombinationParameters_r10 { + A_SEQUENCE_OF(struct BandParameters_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandCombinationParameters_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandCombinationParameters_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandParameters-r10.h" + +#endif /* _BandCombinationParameters_r10_H_ */ +#include diff --git a/lte/rrc/asn/BandIndicatorGERAN.c b/lte/rrc/asn/BandIndicatorGERAN.c new file mode 100644 index 000000000..06a2b3c0e --- /dev/null +++ b/lte/rrc/asn/BandIndicatorGERAN.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandIndicatorGERAN.h" + +int +BandIndicatorGERAN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +BandIndicatorGERAN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +BandIndicatorGERAN_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +BandIndicatorGERAN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +BandIndicatorGERAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +BandIndicatorGERAN_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +BandIndicatorGERAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +BandIndicatorGERAN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +BandIndicatorGERAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +BandIndicatorGERAN_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + BandIndicatorGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_BandIndicatorGERAN_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_BandIndicatorGERAN_value2enum_1[] = { + { 0, 7, "dcs1800" }, + { 1, 7, "pcs1900" } +}; +static unsigned int asn_MAP_BandIndicatorGERAN_enum2value_1[] = { + 0, /* dcs1800(0) */ + 1 /* pcs1900(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_BandIndicatorGERAN_specs_1 = { + asn_MAP_BandIndicatorGERAN_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_BandIndicatorGERAN_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_BandIndicatorGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BandIndicatorGERAN = { + "BandIndicatorGERAN", + "BandIndicatorGERAN", + BandIndicatorGERAN_free, + BandIndicatorGERAN_print, + BandIndicatorGERAN_constraint, + BandIndicatorGERAN_decode_ber, + BandIndicatorGERAN_encode_der, + BandIndicatorGERAN_decode_xer, + BandIndicatorGERAN_encode_xer, + BandIndicatorGERAN_decode_uper, + BandIndicatorGERAN_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandIndicatorGERAN_tags_1, + sizeof(asn_DEF_BandIndicatorGERAN_tags_1) + /sizeof(asn_DEF_BandIndicatorGERAN_tags_1[0]), /* 1 */ + asn_DEF_BandIndicatorGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_BandIndicatorGERAN_tags_1) + /sizeof(asn_DEF_BandIndicatorGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_BandIndicatorGERAN_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_BandIndicatorGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandIndicatorGERAN.h b/lte/rrc/asn/BandIndicatorGERAN.h new file mode 100644 index 000000000..4a27d6e31 --- /dev/null +++ b/lte/rrc/asn/BandIndicatorGERAN.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandIndicatorGERAN_H_ +#define _BandIndicatorGERAN_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BandIndicatorGERAN { + BandIndicatorGERAN_dcs1800 = 0, + BandIndicatorGERAN_pcs1900 = 1 +} e_BandIndicatorGERAN; + +/* BandIndicatorGERAN */ +typedef long BandIndicatorGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandIndicatorGERAN; +asn_struct_free_f BandIndicatorGERAN_free; +asn_struct_print_f BandIndicatorGERAN_print; +asn_constr_check_f BandIndicatorGERAN_constraint; +ber_type_decoder_f BandIndicatorGERAN_decode_ber; +der_type_encoder_f BandIndicatorGERAN_encode_der; +xer_type_decoder_f BandIndicatorGERAN_decode_xer; +xer_type_encoder_f BandIndicatorGERAN_encode_xer; +per_type_decoder_f BandIndicatorGERAN_decode_uper; +per_type_encoder_f BandIndicatorGERAN_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandIndicatorGERAN_H_ */ +#include diff --git a/lte/rrc/asn/BandInfoEUTRA.c b/lte/rrc/asn/BandInfoEUTRA.c new file mode 100644 index 000000000..7e0a9b0c4 --- /dev/null +++ b/lte/rrc/asn/BandInfoEUTRA.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandInfoEUTRA.h" + +static asn_TYPE_member_t asn_MBR_BandInfoEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandInfoEUTRA, interFreqBandList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterFreqBandList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqBandList" + }, + { ATF_POINTER, 1, offsetof(struct BandInfoEUTRA, interRAT_BandList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterRAT_BandList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-BandList" + }, +}; +static int asn_MAP_BandInfoEUTRA_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_BandInfoEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BandInfoEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interFreqBandList at 3881 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* interRAT-BandList at 3882 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BandInfoEUTRA_specs_1 = { + sizeof(struct BandInfoEUTRA), + offsetof(struct BandInfoEUTRA, _asn_ctx), + asn_MAP_BandInfoEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_BandInfoEUTRA_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BandInfoEUTRA = { + "BandInfoEUTRA", + "BandInfoEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandInfoEUTRA_tags_1, + sizeof(asn_DEF_BandInfoEUTRA_tags_1) + /sizeof(asn_DEF_BandInfoEUTRA_tags_1[0]), /* 1 */ + asn_DEF_BandInfoEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_BandInfoEUTRA_tags_1) + /sizeof(asn_DEF_BandInfoEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BandInfoEUTRA_1, + 2, /* Elements count */ + &asn_SPC_BandInfoEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandInfoEUTRA.h b/lte/rrc/asn/BandInfoEUTRA.h new file mode 100644 index 000000000..396266595 --- /dev/null +++ b/lte/rrc/asn/BandInfoEUTRA.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandInfoEUTRA_H_ +#define _BandInfoEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "InterFreqBandList.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct InterRAT_BandList; + +/* BandInfoEUTRA */ +typedef struct BandInfoEUTRA { + InterFreqBandList_t interFreqBandList; + struct InterRAT_BandList *interRAT_BandList /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandInfoEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandInfoEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "InterRAT-BandList.h" + +#endif /* _BandInfoEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/BandListEUTRA.c b/lte/rrc/asn/BandListEUTRA.c new file mode 100644 index 000000000..b33a27e1d --- /dev/null +++ b/lte/rrc/asn/BandListEUTRA.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandListEUTRA.h" + +static asn_per_constraints_t asn_PER_type_BandListEUTRA_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandListEUTRA_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandInfoEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandListEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandListEUTRA_specs_1 = { + sizeof(struct BandListEUTRA), + offsetof(struct BandListEUTRA, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandListEUTRA = { + "BandListEUTRA", + "BandListEUTRA", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandListEUTRA_tags_1, + sizeof(asn_DEF_BandListEUTRA_tags_1) + /sizeof(asn_DEF_BandListEUTRA_tags_1[0]), /* 1 */ + asn_DEF_BandListEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_BandListEUTRA_tags_1) + /sizeof(asn_DEF_BandListEUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_BandListEUTRA_constr_1, + asn_MBR_BandListEUTRA_1, + 1, /* Single element */ + &asn_SPC_BandListEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandListEUTRA.h b/lte/rrc/asn/BandListEUTRA.h new file mode 100644 index 000000000..c9328c520 --- /dev/null +++ b/lte/rrc/asn/BandListEUTRA.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandListEUTRA_H_ +#define _BandListEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandInfoEUTRA; + +/* BandListEUTRA */ +typedef struct BandListEUTRA { + A_SEQUENCE_OF(struct BandInfoEUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandListEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandListEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandInfoEUTRA.h" + +#endif /* _BandListEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/BandParameters-r10.c b/lte/rrc/asn/BandParameters-r10.c new file mode 100644 index 000000000..8a79a9b8e --- /dev/null +++ b/lte/rrc/asn/BandParameters-r10.c @@ -0,0 +1,112 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandParameters-r10.h" + +static int +memb_bandEUTRA_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 64)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_bandEUTRA_r10_constr_2 = { + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (1..64) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandParameters_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BandParameters_r10, bandEUTRA_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_bandEUTRA_r10_constraint_1, + &asn_PER_memb_bandEUTRA_r10_constr_2, + 0, + "bandEUTRA-r10" + }, + { ATF_POINTER, 2, offsetof(struct BandParameters_r10, bandParametersUL_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandParametersUL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandParametersUL-r10" + }, + { ATF_POINTER, 1, offsetof(struct BandParameters_r10, bandParametersDL_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandParametersDL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandParametersDL-r10" + }, +}; +static int asn_MAP_BandParameters_r10_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_BandParameters_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BandParameters_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandEUTRA-r10 at 3836 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bandParametersUL-r10 at 3837 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* bandParametersDL-r10 at 3838 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BandParameters_r10_specs_1 = { + sizeof(struct BandParameters_r10), + offsetof(struct BandParameters_r10, _asn_ctx), + asn_MAP_BandParameters_r10_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_BandParameters_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BandParameters_r10 = { + "BandParameters-r10", + "BandParameters-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandParameters_r10_tags_1, + sizeof(asn_DEF_BandParameters_r10_tags_1) + /sizeof(asn_DEF_BandParameters_r10_tags_1[0]), /* 1 */ + asn_DEF_BandParameters_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_BandParameters_r10_tags_1) + /sizeof(asn_DEF_BandParameters_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BandParameters_r10_1, + 3, /* Elements count */ + &asn_SPC_BandParameters_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandParameters-r10.h b/lte/rrc/asn/BandParameters-r10.h new file mode 100644 index 000000000..f36034990 --- /dev/null +++ b/lte/rrc/asn/BandParameters-r10.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandParameters_r10_H_ +#define _BandParameters_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandParametersUL_r10; +struct BandParametersDL_r10; + +/* BandParameters-r10 */ +typedef struct BandParameters_r10 { + long bandEUTRA_r10; + struct BandParametersUL_r10 *bandParametersUL_r10 /* OPTIONAL */; + struct BandParametersDL_r10 *bandParametersDL_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandParameters_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandParameters_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandParametersUL-r10.h" +#include "BandParametersDL-r10.h" + +#endif /* _BandParameters_r10_H_ */ +#include diff --git a/lte/rrc/asn/BandParametersDL-r10.c b/lte/rrc/asn/BandParametersDL-r10.c new file mode 100644 index 000000000..f9b14fd63 --- /dev/null +++ b/lte/rrc/asn/BandParametersDL-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandParametersDL-r10.h" + +static asn_per_constraints_t asn_PER_type_BandParametersDL_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandParametersDL_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CA_MIMO_ParametersDL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandParametersDL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandParametersDL_r10_specs_1 = { + sizeof(struct BandParametersDL_r10), + offsetof(struct BandParametersDL_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandParametersDL_r10 = { + "BandParametersDL-r10", + "BandParametersDL-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandParametersDL_r10_tags_1, + sizeof(asn_DEF_BandParametersDL_r10_tags_1) + /sizeof(asn_DEF_BandParametersDL_r10_tags_1[0]), /* 1 */ + asn_DEF_BandParametersDL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_BandParametersDL_r10_tags_1) + /sizeof(asn_DEF_BandParametersDL_r10_tags_1[0]), /* 1 */ + &asn_PER_type_BandParametersDL_r10_constr_1, + asn_MBR_BandParametersDL_r10_1, + 1, /* Single element */ + &asn_SPC_BandParametersDL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandParametersDL-r10.h b/lte/rrc/asn/BandParametersDL-r10.h new file mode 100644 index 000000000..53df18f11 --- /dev/null +++ b/lte/rrc/asn/BandParametersDL-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandParametersDL_r10_H_ +#define _BandParametersDL_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CA_MIMO_ParametersDL_r10; + +/* BandParametersDL-r10 */ +typedef struct BandParametersDL_r10 { + A_SEQUENCE_OF(struct CA_MIMO_ParametersDL_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandParametersDL_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandParametersDL_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CA-MIMO-ParametersDL-r10.h" + +#endif /* _BandParametersDL_r10_H_ */ +#include diff --git a/lte/rrc/asn/BandParametersUL-r10.c b/lte/rrc/asn/BandParametersUL-r10.c new file mode 100644 index 000000000..2d45a0292 --- /dev/null +++ b/lte/rrc/asn/BandParametersUL-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandParametersUL-r10.h" + +static asn_per_constraints_t asn_PER_type_BandParametersUL_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BandParametersUL_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CA_MIMO_ParametersUL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BandParametersUL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BandParametersUL_r10_specs_1 = { + sizeof(struct BandParametersUL_r10), + offsetof(struct BandParametersUL_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BandParametersUL_r10 = { + "BandParametersUL-r10", + "BandParametersUL-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandParametersUL_r10_tags_1, + sizeof(asn_DEF_BandParametersUL_r10_tags_1) + /sizeof(asn_DEF_BandParametersUL_r10_tags_1[0]), /* 1 */ + asn_DEF_BandParametersUL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_BandParametersUL_r10_tags_1) + /sizeof(asn_DEF_BandParametersUL_r10_tags_1[0]), /* 1 */ + &asn_PER_type_BandParametersUL_r10_constr_1, + asn_MBR_BandParametersUL_r10_1, + 1, /* Single element */ + &asn_SPC_BandParametersUL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandParametersUL-r10.h b/lte/rrc/asn/BandParametersUL-r10.h new file mode 100644 index 000000000..0bc95c125 --- /dev/null +++ b/lte/rrc/asn/BandParametersUL-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandParametersUL_r10_H_ +#define _BandParametersUL_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CA_MIMO_ParametersUL_r10; + +/* BandParametersUL-r10 */ +typedef struct BandParametersUL_r10 { + A_SEQUENCE_OF(struct CA_MIMO_ParametersUL_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BandParametersUL_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandParametersUL_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CA-MIMO-ParametersUL-r10.h" + +#endif /* _BandParametersUL_r10_H_ */ +#include diff --git a/lte/rrc/asn/BandclassCDMA2000.c b/lte/rrc/asn/BandclassCDMA2000.c new file mode 100644 index 000000000..a4b5274c7 --- /dev/null +++ b/lte/rrc/asn/BandclassCDMA2000.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BandclassCDMA2000.h" + +int +BandclassCDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +BandclassCDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +BandclassCDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +BandclassCDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +BandclassCDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +BandclassCDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +BandclassCDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +BandclassCDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +BandclassCDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +BandclassCDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + BandclassCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_BandclassCDMA2000_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 5, 5, 0, 31 } /* (0..31,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_BandclassCDMA2000_value2enum_1[] = { + { 0, 3, "bc0" }, + { 1, 3, "bc1" }, + { 2, 3, "bc2" }, + { 3, 3, "bc3" }, + { 4, 3, "bc4" }, + { 5, 3, "bc5" }, + { 6, 3, "bc6" }, + { 7, 3, "bc7" }, + { 8, 3, "bc8" }, + { 9, 3, "bc9" }, + { 10, 4, "bc10" }, + { 11, 4, "bc11" }, + { 12, 4, "bc12" }, + { 13, 4, "bc13" }, + { 14, 4, "bc14" }, + { 15, 4, "bc15" }, + { 16, 4, "bc16" }, + { 17, 4, "bc17" }, + { 18, 7, "spare14" }, + { 19, 7, "spare13" }, + { 20, 7, "spare12" }, + { 21, 7, "spare11" }, + { 22, 7, "spare10" }, + { 23, 6, "spare9" }, + { 24, 6, "spare8" }, + { 25, 6, "spare7" }, + { 26, 6, "spare6" }, + { 27, 6, "spare5" }, + { 28, 6, "spare4" }, + { 29, 6, "spare3" }, + { 30, 6, "spare2" }, + { 31, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_BandclassCDMA2000_enum2value_1[] = { + 0, /* bc0(0) */ + 1, /* bc1(1) */ + 10, /* bc10(10) */ + 11, /* bc11(11) */ + 12, /* bc12(12) */ + 13, /* bc13(13) */ + 14, /* bc14(14) */ + 15, /* bc15(15) */ + 16, /* bc16(16) */ + 17, /* bc17(17) */ + 2, /* bc2(2) */ + 3, /* bc3(3) */ + 4, /* bc4(4) */ + 5, /* bc5(5) */ + 6, /* bc6(6) */ + 7, /* bc7(7) */ + 8, /* bc8(8) */ + 9, /* bc9(9) */ + 31, /* spare1(31) */ + 22, /* spare10(22) */ + 21, /* spare11(21) */ + 20, /* spare12(20) */ + 19, /* spare13(19) */ + 18, /* spare14(18) */ + 30, /* spare2(30) */ + 29, /* spare3(29) */ + 28, /* spare4(28) */ + 27, /* spare5(27) */ + 26, /* spare6(26) */ + 25, /* spare7(25) */ + 24, /* spare8(24) */ + 23 /* spare9(23) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_BandclassCDMA2000_specs_1 = { + asn_MAP_BandclassCDMA2000_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_BandclassCDMA2000_enum2value_1, /* N => "tag"; sorted by N */ + 32, /* Number of elements in the maps */ + 33, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_BandclassCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BandclassCDMA2000 = { + "BandclassCDMA2000", + "BandclassCDMA2000", + BandclassCDMA2000_free, + BandclassCDMA2000_print, + BandclassCDMA2000_constraint, + BandclassCDMA2000_decode_ber, + BandclassCDMA2000_encode_der, + BandclassCDMA2000_decode_xer, + BandclassCDMA2000_encode_xer, + BandclassCDMA2000_decode_uper, + BandclassCDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BandclassCDMA2000_tags_1, + sizeof(asn_DEF_BandclassCDMA2000_tags_1) + /sizeof(asn_DEF_BandclassCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_BandclassCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_BandclassCDMA2000_tags_1) + /sizeof(asn_DEF_BandclassCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_BandclassCDMA2000_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_BandclassCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BandclassCDMA2000.h b/lte/rrc/asn/BandclassCDMA2000.h new file mode 100644 index 000000000..49b995b91 --- /dev/null +++ b/lte/rrc/asn/BandclassCDMA2000.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BandclassCDMA2000_H_ +#define _BandclassCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum BandclassCDMA2000 { + BandclassCDMA2000_bc0 = 0, + BandclassCDMA2000_bc1 = 1, + BandclassCDMA2000_bc2 = 2, + BandclassCDMA2000_bc3 = 3, + BandclassCDMA2000_bc4 = 4, + BandclassCDMA2000_bc5 = 5, + BandclassCDMA2000_bc6 = 6, + BandclassCDMA2000_bc7 = 7, + BandclassCDMA2000_bc8 = 8, + BandclassCDMA2000_bc9 = 9, + BandclassCDMA2000_bc10 = 10, + BandclassCDMA2000_bc11 = 11, + BandclassCDMA2000_bc12 = 12, + BandclassCDMA2000_bc13 = 13, + BandclassCDMA2000_bc14 = 14, + BandclassCDMA2000_bc15 = 15, + BandclassCDMA2000_bc16 = 16, + BandclassCDMA2000_bc17 = 17, + BandclassCDMA2000_spare14 = 18, + BandclassCDMA2000_spare13 = 19, + BandclassCDMA2000_spare12 = 20, + BandclassCDMA2000_spare11 = 21, + BandclassCDMA2000_spare10 = 22, + BandclassCDMA2000_spare9 = 23, + BandclassCDMA2000_spare8 = 24, + BandclassCDMA2000_spare7 = 25, + BandclassCDMA2000_spare6 = 26, + BandclassCDMA2000_spare5 = 27, + BandclassCDMA2000_spare4 = 28, + BandclassCDMA2000_spare3 = 29, + BandclassCDMA2000_spare2 = 30, + BandclassCDMA2000_spare1 = 31 + /* + * Enumeration is extensible + */ +} e_BandclassCDMA2000; + +/* BandclassCDMA2000 */ +typedef long BandclassCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BandclassCDMA2000; +asn_struct_free_f BandclassCDMA2000_free; +asn_struct_print_f BandclassCDMA2000_print; +asn_constr_check_f BandclassCDMA2000_constraint; +ber_type_decoder_f BandclassCDMA2000_decode_ber; +der_type_encoder_f BandclassCDMA2000_encode_der; +xer_type_decoder_f BandclassCDMA2000_decode_xer; +xer_type_encoder_f BandclassCDMA2000_encode_xer; +per_type_decoder_f BandclassCDMA2000_decode_uper; +per_type_encoder_f BandclassCDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BandclassCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/BetaOffset-CA-Index.c b/lte/rrc/asn/BetaOffset-CA-Index.c new file mode 100644 index 000000000..9af6d7a42 --- /dev/null +++ b/lte/rrc/asn/BetaOffset-CA-Index.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BetaOffset-CA-Index.h" + +int +BetaOffset_CA_Index_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeInteger.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +BetaOffset_CA_Index_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +BetaOffset_CA_Index_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +BetaOffset_CA_Index_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +BetaOffset_CA_Index_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +BetaOffset_CA_Index_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +BetaOffset_CA_Index_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +BetaOffset_CA_Index_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +BetaOffset_CA_Index_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +BetaOffset_CA_Index_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + BetaOffset_CA_Index_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_BetaOffset_CA_Index_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_BetaOffset_CA_Index = { + "BetaOffset-CA-Index", + "BetaOffset-CA-Index", + BetaOffset_CA_Index_free, + BetaOffset_CA_Index_print, + BetaOffset_CA_Index_constraint, + BetaOffset_CA_Index_decode_ber, + BetaOffset_CA_Index_encode_der, + BetaOffset_CA_Index_decode_xer, + BetaOffset_CA_Index_encode_xer, + BetaOffset_CA_Index_decode_uper, + BetaOffset_CA_Index_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BetaOffset_CA_Index_tags_1, + sizeof(asn_DEF_BetaOffset_CA_Index_tags_1) + /sizeof(asn_DEF_BetaOffset_CA_Index_tags_1[0]), /* 1 */ + asn_DEF_BetaOffset_CA_Index_tags_1, /* Same as above */ + sizeof(asn_DEF_BetaOffset_CA_Index_tags_1) + /sizeof(asn_DEF_BetaOffset_CA_Index_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/BetaOffset-CA-Index.h b/lte/rrc/asn/BetaOffset-CA-Index.h new file mode 100644 index 000000000..c69b7a854 --- /dev/null +++ b/lte/rrc/asn/BetaOffset-CA-Index.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BetaOffset_CA_Index_H_ +#define _BetaOffset_CA_Index_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BetaOffset-CA-Index */ +typedef long BetaOffset_CA_Index_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BetaOffset_CA_Index; +asn_struct_free_f BetaOffset_CA_Index_free; +asn_struct_print_f BetaOffset_CA_Index_print; +asn_constr_check_f BetaOffset_CA_Index_constraint; +ber_type_decoder_f BetaOffset_CA_Index_decode_ber; +der_type_encoder_f BetaOffset_CA_Index_encode_der; +xer_type_decoder_f BetaOffset_CA_Index_decode_xer; +xer_type_encoder_f BetaOffset_CA_Index_encode_xer; +per_type_decoder_f BetaOffset_CA_Index_decode_uper; +per_type_encoder_f BetaOffset_CA_Index_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _BetaOffset_CA_Index_H_ */ +#include diff --git a/lte/rrc/asn/BlackCellsToAddMod.c b/lte/rrc/asn/BlackCellsToAddMod.c new file mode 100644 index 000000000..2d8c11129 --- /dev/null +++ b/lte/rrc/asn/BlackCellsToAddMod.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BlackCellsToAddMod.h" + +static int +memb_cellIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellIndex_constr_2 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BlackCellsToAddMod_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct BlackCellsToAddMod, cellIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cellIndex_constraint_1, + &asn_PER_memb_cellIndex_constr_2, + 0, + "cellIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct BlackCellsToAddMod, physCellIdRange), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdRange" + }, +}; +static ber_tlv_tag_t asn_DEF_BlackCellsToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_BlackCellsToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIndex at 3271 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* physCellIdRange at 3273 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_BlackCellsToAddMod_specs_1 = { + sizeof(struct BlackCellsToAddMod), + offsetof(struct BlackCellsToAddMod, _asn_ctx), + asn_MAP_BlackCellsToAddMod_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_BlackCellsToAddMod = { + "BlackCellsToAddMod", + "BlackCellsToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BlackCellsToAddMod_tags_1, + sizeof(asn_DEF_BlackCellsToAddMod_tags_1) + /sizeof(asn_DEF_BlackCellsToAddMod_tags_1[0]), /* 1 */ + asn_DEF_BlackCellsToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_BlackCellsToAddMod_tags_1) + /sizeof(asn_DEF_BlackCellsToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_BlackCellsToAddMod_1, + 2, /* Elements count */ + &asn_SPC_BlackCellsToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BlackCellsToAddMod.h b/lte/rrc/asn/BlackCellsToAddMod.h new file mode 100644 index 000000000..c9914dfd7 --- /dev/null +++ b/lte/rrc/asn/BlackCellsToAddMod.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BlackCellsToAddMod_H_ +#define _BlackCellsToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellIdRange.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* BlackCellsToAddMod */ +typedef struct BlackCellsToAddMod { + long cellIndex; + PhysCellIdRange_t physCellIdRange; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BlackCellsToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BlackCellsToAddMod; + +#ifdef __cplusplus +} +#endif + +#endif /* _BlackCellsToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/BlackCellsToAddModList.c b/lte/rrc/asn/BlackCellsToAddModList.c new file mode 100644 index 000000000..b69d99cc5 --- /dev/null +++ b/lte/rrc/asn/BlackCellsToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "BlackCellsToAddModList.h" + +static asn_per_constraints_t asn_PER_type_BlackCellsToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_BlackCellsToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BlackCellsToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_BlackCellsToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_BlackCellsToAddModList_specs_1 = { + sizeof(struct BlackCellsToAddModList), + offsetof(struct BlackCellsToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_BlackCellsToAddModList = { + "BlackCellsToAddModList", + "BlackCellsToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_BlackCellsToAddModList_tags_1, + sizeof(asn_DEF_BlackCellsToAddModList_tags_1) + /sizeof(asn_DEF_BlackCellsToAddModList_tags_1[0]), /* 1 */ + asn_DEF_BlackCellsToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_BlackCellsToAddModList_tags_1) + /sizeof(asn_DEF_BlackCellsToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_BlackCellsToAddModList_constr_1, + asn_MBR_BlackCellsToAddModList_1, + 1, /* Single element */ + &asn_SPC_BlackCellsToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/BlackCellsToAddModList.h b/lte/rrc/asn/BlackCellsToAddModList.h new file mode 100644 index 000000000..6d2cd0a87 --- /dev/null +++ b/lte/rrc/asn/BlackCellsToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _BlackCellsToAddModList_H_ +#define _BlackCellsToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BlackCellsToAddMod; + +/* BlackCellsToAddModList */ +typedef struct BlackCellsToAddModList { + A_SEQUENCE_OF(struct BlackCellsToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} BlackCellsToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_BlackCellsToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BlackCellsToAddMod.h" + +#endif /* _BlackCellsToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/C-RNTI.c b/lte/rrc/asn/C-RNTI.c new file mode 100644 index 000000000..7ae0f6778 --- /dev/null +++ b/lte/rrc/asn/C-RNTI.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "C-RNTI.h" + +int +C_RNTI_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +C_RNTI_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +C_RNTI_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + C_RNTI_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +C_RNTI_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +C_RNTI_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +C_RNTI_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +C_RNTI_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +C_RNTI_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +C_RNTI_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +C_RNTI_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + C_RNTI_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_C_RNTI_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_C_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_C_RNTI = { + "C-RNTI", + "C-RNTI", + C_RNTI_free, + C_RNTI_print, + C_RNTI_constraint, + C_RNTI_decode_ber, + C_RNTI_encode_der, + C_RNTI_decode_xer, + C_RNTI_encode_xer, + C_RNTI_decode_uper, + C_RNTI_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_C_RNTI_tags_1, + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + asn_DEF_C_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_C_RNTI_tags_1) + /sizeof(asn_DEF_C_RNTI_tags_1[0]), /* 1 */ + &asn_PER_type_C_RNTI_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/C-RNTI.h b/lte/rrc/asn/C-RNTI.h new file mode 100644 index 000000000..933d15275 --- /dev/null +++ b/lte/rrc/asn/C-RNTI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _C_RNTI_H_ +#define _C_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* C-RNTI */ +typedef BIT_STRING_t C_RNTI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_C_RNTI; +asn_struct_free_f C_RNTI_free; +asn_struct_print_f C_RNTI_print; +asn_constr_check_f C_RNTI_constraint; +ber_type_decoder_f C_RNTI_decode_ber; +der_type_encoder_f C_RNTI_encode_der; +xer_type_decoder_f C_RNTI_decode_xer; +xer_type_encoder_f C_RNTI_encode_xer; +per_type_decoder_f C_RNTI_decode_uper; +per_type_encoder_f C_RNTI_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _C_RNTI_H_ */ +#include diff --git a/lte/rrc/asn/CA-BandwidthClass-r10.c b/lte/rrc/asn/CA-BandwidthClass-r10.c new file mode 100644 index 000000000..37d688563 --- /dev/null +++ b/lte/rrc/asn/CA-BandwidthClass-r10.c @@ -0,0 +1,156 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CA-BandwidthClass-r10.h" + +int +CA_BandwidthClass_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +CA_BandwidthClass_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CA_BandwidthClass_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CA_BandwidthClass_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CA_BandwidthClass_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CA_BandwidthClass_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CA_BandwidthClass_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CA_BandwidthClass_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CA_BandwidthClass_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CA_BandwidthClass_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CA_BandwidthClass_r10_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_CA_BandwidthClass_r10_value2enum_1[] = { + { 0, 1, "a" }, + { 1, 1, "b" }, + { 2, 1, "c" }, + { 3, 1, "d" }, + { 4, 1, "e" }, + { 5, 1, "f" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_CA_BandwidthClass_r10_enum2value_1[] = { + 0, /* a(0) */ + 1, /* b(1) */ + 2, /* c(2) */ + 3, /* d(3) */ + 4, /* e(4) */ + 5 /* f(5) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_CA_BandwidthClass_r10_specs_1 = { + asn_MAP_CA_BandwidthClass_r10_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CA_BandwidthClass_r10_enum2value_1, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 7, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_CA_BandwidthClass_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CA_BandwidthClass_r10 = { + "CA-BandwidthClass-r10", + "CA-BandwidthClass-r10", + CA_BandwidthClass_r10_free, + CA_BandwidthClass_r10_print, + CA_BandwidthClass_r10_constraint, + CA_BandwidthClass_r10_decode_ber, + CA_BandwidthClass_r10_encode_der, + CA_BandwidthClass_r10_decode_xer, + CA_BandwidthClass_r10_encode_xer, + CA_BandwidthClass_r10_decode_uper, + CA_BandwidthClass_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CA_BandwidthClass_r10_tags_1, + sizeof(asn_DEF_CA_BandwidthClass_r10_tags_1) + /sizeof(asn_DEF_CA_BandwidthClass_r10_tags_1[0]), /* 1 */ + asn_DEF_CA_BandwidthClass_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CA_BandwidthClass_r10_tags_1) + /sizeof(asn_DEF_CA_BandwidthClass_r10_tags_1[0]), /* 1 */ + &asn_PER_type_CA_BandwidthClass_r10_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CA_BandwidthClass_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CA-BandwidthClass-r10.h b/lte/rrc/asn/CA-BandwidthClass-r10.h new file mode 100644 index 000000000..117c4a44a --- /dev/null +++ b/lte/rrc/asn/CA-BandwidthClass-r10.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CA_BandwidthClass_r10_H_ +#define _CA_BandwidthClass_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CA_BandwidthClass_r10 { + CA_BandwidthClass_r10_a = 0, + CA_BandwidthClass_r10_b = 1, + CA_BandwidthClass_r10_c = 2, + CA_BandwidthClass_r10_d = 3, + CA_BandwidthClass_r10_e = 4, + CA_BandwidthClass_r10_f = 5 + /* + * Enumeration is extensible + */ +} e_CA_BandwidthClass_r10; + +/* CA-BandwidthClass-r10 */ +typedef long CA_BandwidthClass_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CA_BandwidthClass_r10; +asn_struct_free_f CA_BandwidthClass_r10_free; +asn_struct_print_f CA_BandwidthClass_r10_print; +asn_constr_check_f CA_BandwidthClass_r10_constraint; +ber_type_decoder_f CA_BandwidthClass_r10_decode_ber; +der_type_encoder_f CA_BandwidthClass_r10_encode_der; +xer_type_decoder_f CA_BandwidthClass_r10_decode_xer; +xer_type_encoder_f CA_BandwidthClass_r10_encode_xer; +per_type_decoder_f CA_BandwidthClass_r10_decode_uper; +per_type_encoder_f CA_BandwidthClass_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CA_BandwidthClass_r10_H_ */ +#include diff --git a/lte/rrc/asn/CA-MIMO-ParametersDL-r10.c b/lte/rrc/asn/CA-MIMO-ParametersDL-r10.c new file mode 100644 index 000000000..7d3c04ee4 --- /dev/null +++ b/lte/rrc/asn/CA-MIMO-ParametersDL-r10.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CA-MIMO-ParametersDL-r10.h" + +static asn_TYPE_member_t asn_MBR_CA_MIMO_ParametersDL_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CA_MIMO_ParametersDL_r10, ca_BandwidthClassDL_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CA_BandwidthClass_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ca-BandwidthClassDL-r10" + }, + { ATF_POINTER, 1, offsetof(struct CA_MIMO_ParametersDL_r10, supportedMIMO_CapabilityDL_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MIMO_CapabilityDL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedMIMO-CapabilityDL-r10" + }, +}; +static int asn_MAP_CA_MIMO_ParametersDL_r10_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CA_MIMO_ParametersDL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CA_MIMO_ParametersDL_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ca-BandwidthClassDL-r10 at 3851 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* supportedMIMO-CapabilityDL-r10 at 3852 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CA_MIMO_ParametersDL_r10_specs_1 = { + sizeof(struct CA_MIMO_ParametersDL_r10), + offsetof(struct CA_MIMO_ParametersDL_r10, _asn_ctx), + asn_MAP_CA_MIMO_ParametersDL_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CA_MIMO_ParametersDL_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CA_MIMO_ParametersDL_r10 = { + "CA-MIMO-ParametersDL-r10", + "CA-MIMO-ParametersDL-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CA_MIMO_ParametersDL_r10_tags_1, + sizeof(asn_DEF_CA_MIMO_ParametersDL_r10_tags_1) + /sizeof(asn_DEF_CA_MIMO_ParametersDL_r10_tags_1[0]), /* 1 */ + asn_DEF_CA_MIMO_ParametersDL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CA_MIMO_ParametersDL_r10_tags_1) + /sizeof(asn_DEF_CA_MIMO_ParametersDL_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CA_MIMO_ParametersDL_r10_1, + 2, /* Elements count */ + &asn_SPC_CA_MIMO_ParametersDL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CA-MIMO-ParametersDL-r10.h b/lte/rrc/asn/CA-MIMO-ParametersDL-r10.h new file mode 100644 index 000000000..99cd553ab --- /dev/null +++ b/lte/rrc/asn/CA-MIMO-ParametersDL-r10.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CA_MIMO_ParametersDL_r10_H_ +#define _CA_MIMO_ParametersDL_r10_H_ + + +#include + +/* Including external dependencies */ +#include "CA-BandwidthClass-r10.h" +#include "MIMO-CapabilityDL-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CA-MIMO-ParametersDL-r10 */ +typedef struct CA_MIMO_ParametersDL_r10 { + CA_BandwidthClass_r10_t ca_BandwidthClassDL_r10; + MIMO_CapabilityDL_r10_t *supportedMIMO_CapabilityDL_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CA_MIMO_ParametersDL_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CA_MIMO_ParametersDL_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CA_MIMO_ParametersDL_r10_H_ */ +#include diff --git a/lte/rrc/asn/CA-MIMO-ParametersUL-r10.c b/lte/rrc/asn/CA-MIMO-ParametersUL-r10.c new file mode 100644 index 000000000..bb3669c3d --- /dev/null +++ b/lte/rrc/asn/CA-MIMO-ParametersUL-r10.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CA-MIMO-ParametersUL-r10.h" + +static asn_TYPE_member_t asn_MBR_CA_MIMO_ParametersUL_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CA_MIMO_ParametersUL_r10, ca_BandwidthClassUL_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CA_BandwidthClass_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ca-BandwidthClassUL-r10" + }, + { ATF_POINTER, 1, offsetof(struct CA_MIMO_ParametersUL_r10, supportedMIMO_CapabilityUL_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MIMO_CapabilityUL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedMIMO-CapabilityUL-r10" + }, +}; +static int asn_MAP_CA_MIMO_ParametersUL_r10_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CA_MIMO_ParametersUL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CA_MIMO_ParametersUL_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ca-BandwidthClassUL-r10 at 3844 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* supportedMIMO-CapabilityUL-r10 at 3845 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CA_MIMO_ParametersUL_r10_specs_1 = { + sizeof(struct CA_MIMO_ParametersUL_r10), + offsetof(struct CA_MIMO_ParametersUL_r10, _asn_ctx), + asn_MAP_CA_MIMO_ParametersUL_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CA_MIMO_ParametersUL_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CA_MIMO_ParametersUL_r10 = { + "CA-MIMO-ParametersUL-r10", + "CA-MIMO-ParametersUL-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CA_MIMO_ParametersUL_r10_tags_1, + sizeof(asn_DEF_CA_MIMO_ParametersUL_r10_tags_1) + /sizeof(asn_DEF_CA_MIMO_ParametersUL_r10_tags_1[0]), /* 1 */ + asn_DEF_CA_MIMO_ParametersUL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CA_MIMO_ParametersUL_r10_tags_1) + /sizeof(asn_DEF_CA_MIMO_ParametersUL_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CA_MIMO_ParametersUL_r10_1, + 2, /* Elements count */ + &asn_SPC_CA_MIMO_ParametersUL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CA-MIMO-ParametersUL-r10.h b/lte/rrc/asn/CA-MIMO-ParametersUL-r10.h new file mode 100644 index 000000000..d29b222f9 --- /dev/null +++ b/lte/rrc/asn/CA-MIMO-ParametersUL-r10.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CA_MIMO_ParametersUL_r10_H_ +#define _CA_MIMO_ParametersUL_r10_H_ + + +#include + +/* Including external dependencies */ +#include "CA-BandwidthClass-r10.h" +#include "MIMO-CapabilityUL-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CA-MIMO-ParametersUL-r10 */ +typedef struct CA_MIMO_ParametersUL_r10 { + CA_BandwidthClass_r10_t ca_BandwidthClassUL_r10; + MIMO_CapabilityUL_r10_t *supportedMIMO_CapabilityUL_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CA_MIMO_ParametersUL_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CA_MIMO_ParametersUL_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CA_MIMO_ParametersUL_r10_H_ */ +#include diff --git a/lte/rrc/asn/CA-RNTI.c b/lte/rrc/asn/CA-RNTI.c new file mode 100644 index 000000000..7f3b37c9e --- /dev/null +++ b/lte/rrc/asn/CA-RNTI.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CA-RNTI.h" + +int +CA_RNTI_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +CA_RNTI_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +CA_RNTI_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CA_RNTI_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CA_RNTI_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CA_RNTI_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CA_RNTI_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CA_RNTI_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CA_RNTI_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CA_RNTI_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CA_RNTI_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CA_RNTI_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_CA_RNTI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CA_RNTI = { + "CA-RNTI", + "CA-RNTI", + CA_RNTI_free, + CA_RNTI_print, + CA_RNTI_constraint, + CA_RNTI_decode_ber, + CA_RNTI_encode_der, + CA_RNTI_decode_xer, + CA_RNTI_encode_xer, + CA_RNTI_decode_uper, + CA_RNTI_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CA_RNTI_tags_1, + sizeof(asn_DEF_CA_RNTI_tags_1) + /sizeof(asn_DEF_CA_RNTI_tags_1[0]), /* 1 */ + asn_DEF_CA_RNTI_tags_1, /* Same as above */ + sizeof(asn_DEF_CA_RNTI_tags_1) + /sizeof(asn_DEF_CA_RNTI_tags_1[0]), /* 1 */ + &asn_PER_type_CA_RNTI_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/CA-RNTI.h b/lte/rrc/asn/CA-RNTI.h new file mode 100644 index 000000000..7d925e63c --- /dev/null +++ b/lte/rrc/asn/CA-RNTI.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CA_RNTI_H_ +#define _CA_RNTI_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CA-RNTI */ +typedef BIT_STRING_t CA_RNTI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CA_RNTI; +asn_struct_free_f CA_RNTI_free; +asn_struct_print_f CA_RNTI_print; +asn_constr_check_f CA_RNTI_constraint; +ber_type_decoder_f CA_RNTI_decode_ber; +der_type_encoder_f CA_RNTI_encode_der; +xer_type_decoder_f CA_RNTI_decode_xer; +xer_type_encoder_f CA_RNTI_encode_xer; +per_type_decoder_f CA_RNTI_decode_uper; +per_type_encoder_f CA_RNTI_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CA_RNTI_H_ */ +#include diff --git a/lte/rrc/asn/CA-semiPersistSchedIntervalUL.c b/lte/rrc/asn/CA-semiPersistSchedIntervalUL.c new file mode 100644 index 000000000..9bd30ec21 --- /dev/null +++ b/lte/rrc/asn/CA-semiPersistSchedIntervalUL.c @@ -0,0 +1,174 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CA-semiPersistSchedIntervalUL.h" + +int +CA_semiPersistSchedIntervalUL_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +CA_semiPersistSchedIntervalUL_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CA_semiPersistSchedIntervalUL_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CA_semiPersistSchedIntervalUL_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CA_semiPersistSchedIntervalUL_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CA_semiPersistSchedIntervalUL_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CA_semiPersistSchedIntervalUL_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CA_semiPersistSchedIntervalUL_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CA_semiPersistSchedIntervalUL_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CA_semiPersistSchedIntervalUL_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CA_semiPersistSchedIntervalUL_constr_1 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_CA_semiPersistSchedIntervalUL_value2enum_1[] = { + { 0, 4, "sf10" }, + { 1, 4, "sf20" }, + { 2, 4, "sf32" }, + { 3, 4, "sf40" }, + { 4, 4, "sf64" }, + { 5, 4, "sf80" }, + { 6, 5, "sf128" }, + { 7, 5, "sf160" }, + { 8, 5, "sf320" }, + { 9, 5, "sf640" }, + { 10, 6, "spare6" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_CA_semiPersistSchedIntervalUL_enum2value_1[] = { + 0, /* sf10(0) */ + 6, /* sf128(6) */ + 7, /* sf160(7) */ + 1, /* sf20(1) */ + 2, /* sf32(2) */ + 8, /* sf320(8) */ + 3, /* sf40(3) */ + 4, /* sf64(4) */ + 9, /* sf640(9) */ + 5, /* sf80(5) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11, /* spare5(11) */ + 10 /* spare6(10) */ +}; +static asn_INTEGER_specifics_t asn_SPC_CA_semiPersistSchedIntervalUL_specs_1 = { + asn_MAP_CA_semiPersistSchedIntervalUL_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CA_semiPersistSchedIntervalUL_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_CA_semiPersistSchedIntervalUL_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CA_semiPersistSchedIntervalUL = { + "CA-semiPersistSchedIntervalUL", + "CA-semiPersistSchedIntervalUL", + CA_semiPersistSchedIntervalUL_free, + CA_semiPersistSchedIntervalUL_print, + CA_semiPersistSchedIntervalUL_constraint, + CA_semiPersistSchedIntervalUL_decode_ber, + CA_semiPersistSchedIntervalUL_encode_der, + CA_semiPersistSchedIntervalUL_decode_xer, + CA_semiPersistSchedIntervalUL_encode_xer, + CA_semiPersistSchedIntervalUL_decode_uper, + CA_semiPersistSchedIntervalUL_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CA_semiPersistSchedIntervalUL_tags_1, + sizeof(asn_DEF_CA_semiPersistSchedIntervalUL_tags_1) + /sizeof(asn_DEF_CA_semiPersistSchedIntervalUL_tags_1[0]), /* 1 */ + asn_DEF_CA_semiPersistSchedIntervalUL_tags_1, /* Same as above */ + sizeof(asn_DEF_CA_semiPersistSchedIntervalUL_tags_1) + /sizeof(asn_DEF_CA_semiPersistSchedIntervalUL_tags_1[0]), /* 1 */ + &asn_PER_type_CA_semiPersistSchedIntervalUL_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CA_semiPersistSchedIntervalUL_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CA-semiPersistSchedIntervalUL.h b/lte/rrc/asn/CA-semiPersistSchedIntervalUL.h new file mode 100644 index 000000000..a5b2719df --- /dev/null +++ b/lte/rrc/asn/CA-semiPersistSchedIntervalUL.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CA_semiPersistSchedIntervalUL_H_ +#define _CA_semiPersistSchedIntervalUL_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CA_semiPersistSchedIntervalUL { + CA_semiPersistSchedIntervalUL_sf10 = 0, + CA_semiPersistSchedIntervalUL_sf20 = 1, + CA_semiPersistSchedIntervalUL_sf32 = 2, + CA_semiPersistSchedIntervalUL_sf40 = 3, + CA_semiPersistSchedIntervalUL_sf64 = 4, + CA_semiPersistSchedIntervalUL_sf80 = 5, + CA_semiPersistSchedIntervalUL_sf128 = 6, + CA_semiPersistSchedIntervalUL_sf160 = 7, + CA_semiPersistSchedIntervalUL_sf320 = 8, + CA_semiPersistSchedIntervalUL_sf640 = 9, + CA_semiPersistSchedIntervalUL_spare6 = 10, + CA_semiPersistSchedIntervalUL_spare5 = 11, + CA_semiPersistSchedIntervalUL_spare4 = 12, + CA_semiPersistSchedIntervalUL_spare3 = 13, + CA_semiPersistSchedIntervalUL_spare2 = 14, + CA_semiPersistSchedIntervalUL_spare1 = 15 +} e_CA_semiPersistSchedIntervalUL; + +/* CA-semiPersistSchedIntervalUL */ +typedef long CA_semiPersistSchedIntervalUL_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CA_semiPersistSchedIntervalUL; +asn_struct_free_f CA_semiPersistSchedIntervalUL_free; +asn_struct_print_f CA_semiPersistSchedIntervalUL_print; +asn_constr_check_f CA_semiPersistSchedIntervalUL_constraint; +ber_type_decoder_f CA_semiPersistSchedIntervalUL_decode_ber; +der_type_encoder_f CA_semiPersistSchedIntervalUL_encode_der; +xer_type_decoder_f CA_semiPersistSchedIntervalUL_decode_xer; +xer_type_encoder_f CA_semiPersistSchedIntervalUL_encode_xer; +per_type_decoder_f CA_semiPersistSchedIntervalUL_decode_uper; +per_type_encoder_f CA_semiPersistSchedIntervalUL_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CA_semiPersistSchedIntervalUL_H_ */ +#include diff --git a/lte/rrc/asn/CDMA2000-Type.c b/lte/rrc/asn/CDMA2000-Type.c new file mode 100644 index 000000000..fe10896af --- /dev/null +++ b/lte/rrc/asn/CDMA2000-Type.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CDMA2000-Type.h" + +int +CDMA2000_Type_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +CDMA2000_Type_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +CDMA2000_Type_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CDMA2000_Type_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CDMA2000_Type_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CDMA2000_Type_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CDMA2000_Type_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CDMA2000_Type_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CDMA2000_Type_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CDMA2000_Type_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CDMA2000_Type_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CDMA2000_Type_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_CDMA2000_Type_value2enum_1[] = { + { 0, 9, "type1XRTT" }, + { 1, 8, "typeHRPD" } +}; +static unsigned int asn_MAP_CDMA2000_Type_enum2value_1[] = { + 0, /* type1XRTT(0) */ + 1 /* typeHRPD(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_CDMA2000_Type_specs_1 = { + asn_MAP_CDMA2000_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CDMA2000_Type_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_CDMA2000_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CDMA2000_Type = { + "CDMA2000-Type", + "CDMA2000-Type", + CDMA2000_Type_free, + CDMA2000_Type_print, + CDMA2000_Type_constraint, + CDMA2000_Type_decode_ber, + CDMA2000_Type_encode_der, + CDMA2000_Type_decode_xer, + CDMA2000_Type_encode_xer, + CDMA2000_Type_decode_uper, + CDMA2000_Type_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CDMA2000_Type_tags_1, + sizeof(asn_DEF_CDMA2000_Type_tags_1) + /sizeof(asn_DEF_CDMA2000_Type_tags_1[0]), /* 1 */ + asn_DEF_CDMA2000_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_CDMA2000_Type_tags_1) + /sizeof(asn_DEF_CDMA2000_Type_tags_1[0]), /* 1 */ + &asn_PER_type_CDMA2000_Type_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CDMA2000_Type_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CDMA2000-Type.h b/lte/rrc/asn/CDMA2000-Type.h new file mode 100644 index 000000000..674d9faa8 --- /dev/null +++ b/lte/rrc/asn/CDMA2000-Type.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CDMA2000_Type_H_ +#define _CDMA2000_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CDMA2000_Type { + CDMA2000_Type_type1XRTT = 0, + CDMA2000_Type_typeHRPD = 1 +} e_CDMA2000_Type; + +/* CDMA2000-Type */ +typedef long CDMA2000_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CDMA2000_Type; +asn_struct_free_f CDMA2000_Type_free; +asn_struct_print_f CDMA2000_Type_print; +asn_constr_check_f CDMA2000_Type_constraint; +ber_type_decoder_f CDMA2000_Type_decode_ber; +der_type_encoder_f CDMA2000_Type_encode_der; +xer_type_decoder_f CDMA2000_Type_decode_xer; +xer_type_encoder_f CDMA2000_Type_encode_xer; +per_type_decoder_f CDMA2000_Type_decode_uper; +per_type_encoder_f CDMA2000_Type_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CDMA2000_Type_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportAperiodic-r10.c b/lte/rrc/asn/CQI-ReportAperiodic-r10.c new file mode 100644 index 000000000..c0f5afa37 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportAperiodic-r10.c @@ -0,0 +1,422 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportAperiodic-r10.h" + +static int +cqi_ReportModeAperiodic_r10_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cqi_ReportModeAperiodic_r10_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cqi_ReportModeAperiodic_r10_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cqi_ReportModeAperiodic_r10_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cqi_ReportModeAperiodic_r10_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cqi_ReportModeAperiodic_r10_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cqi_ReportModeAperiodic_r10_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cqi_ReportModeAperiodic_r10_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cqi_ReportModeAperiodic_r10_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cqi_ReportModeAperiodic_r10_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_trigger1_r10_constraint_13(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_trigger2_r10_constraint_13(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_cqi_ReportModeAperiodic_r10_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_trigger1_r10_constr_14 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_trigger2_r10_constr_15 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_CQI_ReportAperiodic_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_cqi_ReportModeAperiodic_r10_value2enum_4[] = { + { 0, 4, "rm12" }, + { 1, 4, "rm20" }, + { 2, 4, "rm22" }, + { 3, 4, "rm30" }, + { 4, 4, "rm31" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_cqi_ReportModeAperiodic_r10_enum2value_4[] = { + 0, /* rm12(0) */ + 1, /* rm20(1) */ + 2, /* rm22(2) */ + 3, /* rm30(3) */ + 4, /* rm31(4) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5 /* spare3(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cqi_ReportModeAperiodic_r10_specs_4 = { + asn_MAP_cqi_ReportModeAperiodic_r10_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_cqi_ReportModeAperiodic_r10_enum2value_4, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cqi_ReportModeAperiodic_r10_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cqi_ReportModeAperiodic_r10_4 = { + "cqi-ReportModeAperiodic-r10", + "cqi-ReportModeAperiodic-r10", + cqi_ReportModeAperiodic_r10_4_free, + cqi_ReportModeAperiodic_r10_4_print, + cqi_ReportModeAperiodic_r10_4_constraint, + cqi_ReportModeAperiodic_r10_4_decode_ber, + cqi_ReportModeAperiodic_r10_4_encode_der, + cqi_ReportModeAperiodic_r10_4_decode_xer, + cqi_ReportModeAperiodic_r10_4_encode_xer, + cqi_ReportModeAperiodic_r10_4_decode_uper, + cqi_ReportModeAperiodic_r10_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cqi_ReportModeAperiodic_r10_tags_4, + sizeof(asn_DEF_cqi_ReportModeAperiodic_r10_tags_4) + /sizeof(asn_DEF_cqi_ReportModeAperiodic_r10_tags_4[0]) - 1, /* 1 */ + asn_DEF_cqi_ReportModeAperiodic_r10_tags_4, /* Same as above */ + sizeof(asn_DEF_cqi_ReportModeAperiodic_r10_tags_4) + /sizeof(asn_DEF_cqi_ReportModeAperiodic_r10_tags_4[0]), /* 2 */ + &asn_PER_type_cqi_ReportModeAperiodic_r10_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cqi_ReportModeAperiodic_r10_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_aperiodicCSI_Trigger_r10_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportAperiodic_r10__setup__aperiodicCSI_Trigger_r10, trigger1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_trigger1_r10_constraint_13, + &asn_PER_memb_trigger1_r10_constr_14, + 0, + "trigger1-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportAperiodic_r10__setup__aperiodicCSI_Trigger_r10, trigger2_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_trigger2_r10_constraint_13, + &asn_PER_memb_trigger2_r10_constr_15, + 0, + "trigger2-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_aperiodicCSI_Trigger_r10_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_aperiodicCSI_Trigger_r10_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* trigger1-r10 at 1933 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* trigger2-r10 at 1934 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_aperiodicCSI_Trigger_r10_specs_13 = { + sizeof(struct CQI_ReportAperiodic_r10__setup__aperiodicCSI_Trigger_r10), + offsetof(struct CQI_ReportAperiodic_r10__setup__aperiodicCSI_Trigger_r10, _asn_ctx), + asn_MAP_aperiodicCSI_Trigger_r10_tag2el_13, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_aperiodicCSI_Trigger_r10_13 = { + "aperiodicCSI-Trigger-r10", + "aperiodicCSI-Trigger-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_aperiodicCSI_Trigger_r10_tags_13, + sizeof(asn_DEF_aperiodicCSI_Trigger_r10_tags_13) + /sizeof(asn_DEF_aperiodicCSI_Trigger_r10_tags_13[0]) - 1, /* 1 */ + asn_DEF_aperiodicCSI_Trigger_r10_tags_13, /* Same as above */ + sizeof(asn_DEF_aperiodicCSI_Trigger_r10_tags_13) + /sizeof(asn_DEF_aperiodicCSI_Trigger_r10_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_aperiodicCSI_Trigger_r10_13, + 2, /* Elements count */ + &asn_SPC_aperiodicCSI_Trigger_r10_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportAperiodic_r10__setup, cqi_ReportModeAperiodic_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cqi_ReportModeAperiodic_r10_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportModeAperiodic-r10" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportAperiodic_r10__setup, aperiodicCSI_Trigger_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_aperiodicCSI_Trigger_r10_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "aperiodicCSI-Trigger-r10" + }, +}; +static int asn_MAP_setup_oms_3[] = { 1 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-ReportModeAperiodic-r10 at 1930 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* aperiodicCSI-Trigger-r10 at 1933 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct CQI_ReportAperiodic_r10__setup), + offsetof(struct CQI_ReportAperiodic_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 2, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CQI_ReportAperiodic_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportAperiodic_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportAperiodic_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportAperiodic_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1927 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1931 */ +}; +static asn_CHOICE_specifics_t asn_SPC_CQI_ReportAperiodic_r10_specs_1 = { + sizeof(struct CQI_ReportAperiodic_r10), + offsetof(struct CQI_ReportAperiodic_r10, _asn_ctx), + offsetof(struct CQI_ReportAperiodic_r10, present), + sizeof(((struct CQI_ReportAperiodic_r10 *)0)->present), + asn_MAP_CQI_ReportAperiodic_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportAperiodic_r10 = { + "CQI-ReportAperiodic-r10", + "CQI-ReportAperiodic-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_CQI_ReportAperiodic_r10_constr_1, + asn_MBR_CQI_ReportAperiodic_r10_1, + 2, /* Elements count */ + &asn_SPC_CQI_ReportAperiodic_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportAperiodic-r10.h b/lte/rrc/asn/CQI-ReportAperiodic-r10.h new file mode 100644 index 000000000..31ffc2b25 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportAperiodic-r10.h @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportAperiodic_r10_H_ +#define _CQI_ReportAperiodic_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportAperiodic_r10_PR { + CQI_ReportAperiodic_r10_PR_NOTHING, /* No components present */ + CQI_ReportAperiodic_r10_PR_release, + CQI_ReportAperiodic_r10_PR_setup +} CQI_ReportAperiodic_r10_PR; +typedef enum CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10 { + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_rm12 = 0, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_rm20 = 1, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_rm22 = 2, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_rm30 = 3, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_rm31 = 4, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_spare3 = 5, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_spare2 = 6, + CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10_spare1 = 7 +} e_CQI_ReportAperiodic_r10__setup__cqi_ReportModeAperiodic_r10; + +/* CQI-ReportAperiodic-r10 */ +typedef struct CQI_ReportAperiodic_r10 { + CQI_ReportAperiodic_r10_PR present; + union CQI_ReportAperiodic_r10_u { + NULL_t release; + struct CQI_ReportAperiodic_r10__setup { + long cqi_ReportModeAperiodic_r10; + struct CQI_ReportAperiodic_r10__setup__aperiodicCSI_Trigger_r10 { + BIT_STRING_t trigger1_r10; + BIT_STRING_t trigger2_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *aperiodicCSI_Trigger_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportAperiodic_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cqi_ReportModeAperiodic_r10_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportAperiodic_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CQI_ReportAperiodic_r10_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportConfig-r10.c b/lte/rrc/asn/CQI-ReportConfig-r10.c new file mode 100644 index 000000000..07a52b406 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfig-r10.c @@ -0,0 +1,395 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportConfig-r10.h" + +static int +pmi_RI_Report_r9_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +pmi_RI_Report_r9_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +pmi_RI_Report_r9_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +pmi_RI_Report_r9_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r9_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +pmi_RI_Report_r9_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r9_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +pmi_RI_Report_r9_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r9_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +pmi_RI_Report_r9_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + pmi_RI_Report_r9_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_nomPDSCH_RS_EPRE_Offset_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_pmi_RI_Report_r9_constr_5 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_csi_SubframePatternConfig_r10_constr_7 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nomPDSCH_RS_EPRE_Offset_constr_3 = { + { APC_CONSTRAINED, 3, 3, -1, 6 } /* (-1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_pmi_RI_Report_r9_value2enum_5[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_pmi_RI_Report_r9_enum2value_5[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_pmi_RI_Report_r9_specs_5 = { + asn_MAP_pmi_RI_Report_r9_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_pmi_RI_Report_r9_enum2value_5, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_pmi_RI_Report_r9_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pmi_RI_Report_r9_5 = { + "pmi-RI-Report-r9", + "pmi-RI-Report-r9", + pmi_RI_Report_r9_5_free, + pmi_RI_Report_r9_5_print, + pmi_RI_Report_r9_5_constraint, + pmi_RI_Report_r9_5_decode_ber, + pmi_RI_Report_r9_5_encode_der, + pmi_RI_Report_r9_5_decode_xer, + pmi_RI_Report_r9_5_encode_xer, + pmi_RI_Report_r9_5_decode_uper, + pmi_RI_Report_r9_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pmi_RI_Report_r9_tags_5, + sizeof(asn_DEF_pmi_RI_Report_r9_tags_5) + /sizeof(asn_DEF_pmi_RI_Report_r9_tags_5[0]) - 1, /* 1 */ + asn_DEF_pmi_RI_Report_r9_tags_5, /* Same as above */ + sizeof(asn_DEF_pmi_RI_Report_r9_tags_5) + /sizeof(asn_DEF_pmi_RI_Report_r9_tags_5[0]), /* 2 */ + &asn_PER_type_pmi_RI_Report_r9_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pmi_RI_Report_r9_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10__setup, csi_MeasSubframeSet1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasSubframePattern_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-MeasSubframeSet1-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10__setup, csi_MeasSubframeSet2_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasSubframePattern_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-MeasSubframeSet2-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csi-MeasSubframeSet1-r10 at 1868 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* csi-MeasSubframeSet2-r10 at 1870 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_9 = { + sizeof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10__setup), + offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_9, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_9 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_9, + sizeof(asn_DEF_setup_tags_9) + /sizeof(asn_DEF_setup_tags_9[0]) - 1, /* 1 */ + asn_DEF_setup_tags_9, /* Same as above */ + sizeof(asn_DEF_setup_tags_9) + /sizeof(asn_DEF_setup_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_9, + 2, /* Elements count */ + &asn_SPC_setup_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_csi_SubframePatternConfig_r10_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_csi_SubframePatternConfig_r10_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1866 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1868 */ +}; +static asn_CHOICE_specifics_t asn_SPC_csi_SubframePatternConfig_r10_specs_7 = { + sizeof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10), + offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10, _asn_ctx), + offsetof(struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10, present), + sizeof(((struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10 *)0)->present), + asn_MAP_csi_SubframePatternConfig_r10_tag2el_7, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_csi_SubframePatternConfig_r10_7 = { + "csi-SubframePatternConfig-r10", + "csi-SubframePatternConfig-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_csi_SubframePatternConfig_r10_constr_7, + asn_MBR_csi_SubframePatternConfig_r10_7, + 2, /* Elements count */ + &asn_SPC_csi_SubframePatternConfig_r10_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CQI_ReportConfig_r10_1[] = { + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfig_r10, cqi_ReportAperiodic_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CQI_ReportAperiodic_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportAperiodic-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfig_r10, nomPDSCH_RS_EPRE_Offset), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_nomPDSCH_RS_EPRE_Offset_constraint_1, + &asn_PER_memb_nomPDSCH_RS_EPRE_Offset_constr_3, + 0, + "nomPDSCH-RS-EPRE-Offset" + }, + { ATF_POINTER, 3, offsetof(struct CQI_ReportConfig_r10, cqi_ReportPeriodic_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CQI_ReportPeriodic_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportPeriodic-r10" + }, + { ATF_POINTER, 2, offsetof(struct CQI_ReportConfig_r10, pmi_RI_Report_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pmi_RI_Report_r9_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pmi-RI-Report-r9" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfig_r10, csi_SubframePatternConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_csi_SubframePatternConfig_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-SubframePatternConfig-r10" + }, +}; +static int asn_MAP_CQI_ReportConfig_r10_oms_1[] = { 0, 2, 3, 4 }; +static ber_tlv_tag_t asn_DEF_CQI_ReportConfig_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportConfig_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-ReportAperiodic-r10 at 1861 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nomPDSCH-RS-EPRE-Offset at 1862 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cqi-ReportPeriodic-r10 at 1863 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pmi-RI-Report-r9 at 1864 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* csi-SubframePatternConfig-r10 at 1866 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CQI_ReportConfig_r10_specs_1 = { + sizeof(struct CQI_ReportConfig_r10), + offsetof(struct CQI_ReportConfig_r10, _asn_ctx), + asn_MAP_CQI_ReportConfig_r10_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_CQI_ReportConfig_r10_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfig_r10 = { + "CQI-ReportConfig-r10", + "CQI-ReportConfig-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CQI_ReportConfig_r10_tags_1, + sizeof(asn_DEF_CQI_ReportConfig_r10_tags_1) + /sizeof(asn_DEF_CQI_ReportConfig_r10_tags_1[0]), /* 1 */ + asn_DEF_CQI_ReportConfig_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CQI_ReportConfig_r10_tags_1) + /sizeof(asn_DEF_CQI_ReportConfig_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CQI_ReportConfig_r10_1, + 5, /* Elements count */ + &asn_SPC_CQI_ReportConfig_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportConfig-r10.h b/lte/rrc/asn/CQI-ReportConfig-r10.h new file mode 100644 index 000000000..9744e7393 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfig-r10.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportConfig_r10_H_ +#define _CQI_ReportConfig_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include "MeasSubframePattern-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportConfig_r10__pmi_RI_Report_r9 { + CQI_ReportConfig_r10__pmi_RI_Report_r9_setup = 0 +} e_CQI_ReportConfig_r10__pmi_RI_Report_r9; +typedef enum CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_PR { + CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_PR_NOTHING, /* No components present */ + CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_PR_release, + CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_PR_setup +} CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_PR; + +/* Forward declarations */ +struct CQI_ReportAperiodic_r10; +struct CQI_ReportPeriodic_r10; + +/* CQI-ReportConfig-r10 */ +typedef struct CQI_ReportConfig_r10 { + struct CQI_ReportAperiodic_r10 *cqi_ReportAperiodic_r10 /* OPTIONAL */; + long nomPDSCH_RS_EPRE_Offset; + struct CQI_ReportPeriodic_r10 *cqi_ReportPeriodic_r10 /* OPTIONAL */; + long *pmi_RI_Report_r9 /* OPTIONAL */; + struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10 { + CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_PR present; + union CQI_ReportConfig_r10__csi_SubframePatternConfig_r10_u { + NULL_t release; + struct CQI_ReportConfig_r10__csi_SubframePatternConfig_r10__setup { + MeasSubframePattern_r10_t csi_MeasSubframeSet1_r10; + MeasSubframePattern_r10_t csi_MeasSubframeSet2_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *csi_SubframePatternConfig_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportConfig_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_pmi_RI_Report_r9_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfig_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CQI-ReportAperiodic-r10.h" +#include "CQI-ReportPeriodic-r10.h" + +#endif /* _CQI_ReportConfig_r10_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportConfig-v920.c b/lte/rrc/asn/CQI-ReportConfig-v920.c new file mode 100644 index 000000000..5ab57430f --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfig-v920.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportConfig-v920.h" + +static int +cqi_Mask_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cqi_Mask_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cqi_Mask_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cqi_Mask_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cqi_Mask_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cqi_Mask_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cqi_Mask_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cqi_Mask_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cqi_Mask_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cqi_Mask_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cqi_Mask_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +pmi_RI_Report_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +pmi_RI_Report_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +pmi_RI_Report_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +pmi_RI_Report_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +pmi_RI_Report_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +pmi_RI_Report_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +pmi_RI_Report_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + pmi_RI_Report_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_cqi_Mask_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_pmi_RI_Report_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_cqi_Mask_r9_value2enum_2[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_cqi_Mask_r9_enum2value_2[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cqi_Mask_r9_specs_2 = { + asn_MAP_cqi_Mask_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_cqi_Mask_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cqi_Mask_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cqi_Mask_r9_2 = { + "cqi-Mask-r9", + "cqi-Mask-r9", + cqi_Mask_r9_2_free, + cqi_Mask_r9_2_print, + cqi_Mask_r9_2_constraint, + cqi_Mask_r9_2_decode_ber, + cqi_Mask_r9_2_encode_der, + cqi_Mask_r9_2_decode_xer, + cqi_Mask_r9_2_encode_xer, + cqi_Mask_r9_2_decode_uper, + cqi_Mask_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cqi_Mask_r9_tags_2, + sizeof(asn_DEF_cqi_Mask_r9_tags_2) + /sizeof(asn_DEF_cqi_Mask_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_cqi_Mask_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_cqi_Mask_r9_tags_2) + /sizeof(asn_DEF_cqi_Mask_r9_tags_2[0]), /* 2 */ + &asn_PER_type_cqi_Mask_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cqi_Mask_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_pmi_RI_Report_r9_value2enum_4[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_pmi_RI_Report_r9_enum2value_4[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_pmi_RI_Report_r9_specs_4 = { + asn_MAP_pmi_RI_Report_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_pmi_RI_Report_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_pmi_RI_Report_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pmi_RI_Report_r9_4 = { + "pmi-RI-Report-r9", + "pmi-RI-Report-r9", + pmi_RI_Report_r9_4_free, + pmi_RI_Report_r9_4_print, + pmi_RI_Report_r9_4_constraint, + pmi_RI_Report_r9_4_decode_ber, + pmi_RI_Report_r9_4_encode_der, + pmi_RI_Report_r9_4_decode_xer, + pmi_RI_Report_r9_4_encode_xer, + pmi_RI_Report_r9_4_decode_uper, + pmi_RI_Report_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pmi_RI_Report_r9_tags_4, + sizeof(asn_DEF_pmi_RI_Report_r9_tags_4) + /sizeof(asn_DEF_pmi_RI_Report_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_pmi_RI_Report_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_pmi_RI_Report_r9_tags_4) + /sizeof(asn_DEF_pmi_RI_Report_r9_tags_4[0]), /* 2 */ + &asn_PER_type_pmi_RI_Report_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pmi_RI_Report_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CQI_ReportConfig_v920_1[] = { + { ATF_POINTER, 2, offsetof(struct CQI_ReportConfig_v920, cqi_Mask_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cqi_Mask_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-Mask-r9" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfig_v920, pmi_RI_Report_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pmi_RI_Report_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pmi-RI-Report-r9" + }, +}; +static int asn_MAP_CQI_ReportConfig_v920_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_CQI_ReportConfig_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportConfig_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-Mask-r9 at 1856 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pmi-RI-Report-r9 at 1857 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CQI_ReportConfig_v920_specs_1 = { + sizeof(struct CQI_ReportConfig_v920), + offsetof(struct CQI_ReportConfig_v920, _asn_ctx), + asn_MAP_CQI_ReportConfig_v920_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CQI_ReportConfig_v920_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfig_v920 = { + "CQI-ReportConfig-v920", + "CQI-ReportConfig-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CQI_ReportConfig_v920_tags_1, + sizeof(asn_DEF_CQI_ReportConfig_v920_tags_1) + /sizeof(asn_DEF_CQI_ReportConfig_v920_tags_1[0]), /* 1 */ + asn_DEF_CQI_ReportConfig_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_CQI_ReportConfig_v920_tags_1) + /sizeof(asn_DEF_CQI_ReportConfig_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CQI_ReportConfig_v920_1, + 2, /* Elements count */ + &asn_SPC_CQI_ReportConfig_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportConfig-v920.h b/lte/rrc/asn/CQI-ReportConfig-v920.h new file mode 100644 index 000000000..2581c8fc3 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfig-v920.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportConfig_v920_H_ +#define _CQI_ReportConfig_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportConfig_v920__cqi_Mask_r9 { + CQI_ReportConfig_v920__cqi_Mask_r9_setup = 0 +} e_CQI_ReportConfig_v920__cqi_Mask_r9; +typedef enum CQI_ReportConfig_v920__pmi_RI_Report_r9 { + CQI_ReportConfig_v920__pmi_RI_Report_r9_setup = 0 +} e_CQI_ReportConfig_v920__pmi_RI_Report_r9; + +/* CQI-ReportConfig-v920 */ +typedef struct CQI_ReportConfig_v920 { + long *cqi_Mask_r9 /* OPTIONAL */; + long *pmi_RI_Report_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportConfig_v920_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cqi_Mask_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_pmi_RI_Report_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfig_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _CQI_ReportConfig_v920_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportConfig.c b/lte/rrc/asn/CQI-ReportConfig.c new file mode 100644 index 000000000..256cfddce --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfig.c @@ -0,0 +1,112 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportConfig.h" + +static int +memb_nomPDSCH_RS_EPRE_Offset_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_nomPDSCH_RS_EPRE_Offset_constr_3 = { + { APC_CONSTRAINED, 3, 3, -1, 6 } /* (-1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CQI_ReportConfig_1[] = { + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfig, cqi_ReportModeAperiodic), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CQI_ReportModeAperiodic, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportModeAperiodic" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfig, nomPDSCH_RS_EPRE_Offset), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_nomPDSCH_RS_EPRE_Offset_constraint_1, + &asn_PER_memb_nomPDSCH_RS_EPRE_Offset_constr_3, + 0, + "nomPDSCH-RS-EPRE-Offset" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfig, cqi_ReportPeriodic), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CQI_ReportPeriodic, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportPeriodic" + }, +}; +static int asn_MAP_CQI_ReportConfig_oms_1[] = { 0, 2 }; +static ber_tlv_tag_t asn_DEF_CQI_ReportConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-ReportModeAperiodic at 1850 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nomPDSCH-RS-EPRE-Offset at 1851 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cqi-ReportPeriodic at 1852 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CQI_ReportConfig_specs_1 = { + sizeof(struct CQI_ReportConfig), + offsetof(struct CQI_ReportConfig, _asn_ctx), + asn_MAP_CQI_ReportConfig_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CQI_ReportConfig_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfig = { + "CQI-ReportConfig", + "CQI-ReportConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CQI_ReportConfig_tags_1, + sizeof(asn_DEF_CQI_ReportConfig_tags_1) + /sizeof(asn_DEF_CQI_ReportConfig_tags_1[0]), /* 1 */ + asn_DEF_CQI_ReportConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_CQI_ReportConfig_tags_1) + /sizeof(asn_DEF_CQI_ReportConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CQI_ReportConfig_1, + 3, /* Elements count */ + &asn_SPC_CQI_ReportConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportConfig.h b/lte/rrc/asn/CQI-ReportConfig.h new file mode 100644 index 000000000..634ad3302 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfig.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportConfig_H_ +#define _CQI_ReportConfig_H_ + + +#include + +/* Including external dependencies */ +#include "CQI-ReportModeAperiodic.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CQI_ReportPeriodic; + +/* CQI-ReportConfig */ +typedef struct CQI_ReportConfig { + CQI_ReportModeAperiodic_t *cqi_ReportModeAperiodic /* OPTIONAL */; + long nomPDSCH_RS_EPRE_Offset; + struct CQI_ReportPeriodic *cqi_ReportPeriodic /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfig; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CQI-ReportPeriodic.h" + +#endif /* _CQI_ReportConfig_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportConfigSCell-r10.c b/lte/rrc/asn/CQI-ReportConfigSCell-r10.c new file mode 100644 index 000000000..85d5acb55 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfigSCell-r10.c @@ -0,0 +1,259 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportConfigSCell-r10.h" + +static int +pmi_RI_Report_r10_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +pmi_RI_Report_r10_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +pmi_RI_Report_r10_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +pmi_RI_Report_r10_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r10_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +pmi_RI_Report_r10_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r10_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +pmi_RI_Report_r10_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +pmi_RI_Report_r10_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +pmi_RI_Report_r10_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + pmi_RI_Report_r10_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_nomPDSCH_RS_EPRE_Offset_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_pmi_RI_Report_r10_constr_5 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nomPDSCH_RS_EPRE_Offset_r10_constr_3 = { + { APC_CONSTRAINED, 3, 3, -1, 6 } /* (-1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_pmi_RI_Report_r10_value2enum_5[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_pmi_RI_Report_r10_enum2value_5[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_pmi_RI_Report_r10_specs_5 = { + asn_MAP_pmi_RI_Report_r10_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_pmi_RI_Report_r10_enum2value_5, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_pmi_RI_Report_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pmi_RI_Report_r10_5 = { + "pmi-RI-Report-r10", + "pmi-RI-Report-r10", + pmi_RI_Report_r10_5_free, + pmi_RI_Report_r10_5_print, + pmi_RI_Report_r10_5_constraint, + pmi_RI_Report_r10_5_decode_ber, + pmi_RI_Report_r10_5_encode_der, + pmi_RI_Report_r10_5_decode_xer, + pmi_RI_Report_r10_5_encode_xer, + pmi_RI_Report_r10_5_decode_uper, + pmi_RI_Report_r10_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pmi_RI_Report_r10_tags_5, + sizeof(asn_DEF_pmi_RI_Report_r10_tags_5) + /sizeof(asn_DEF_pmi_RI_Report_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_pmi_RI_Report_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_pmi_RI_Report_r10_tags_5) + /sizeof(asn_DEF_pmi_RI_Report_r10_tags_5[0]), /* 2 */ + &asn_PER_type_pmi_RI_Report_r10_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pmi_RI_Report_r10_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CQI_ReportConfigSCell_r10_1[] = { + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfigSCell_r10, cqi_ReportModeAperiodic_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CQI_ReportModeAperiodic, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportModeAperiodic-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportConfigSCell_r10, nomPDSCH_RS_EPRE_Offset_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_nomPDSCH_RS_EPRE_Offset_r10_constraint_1, + &asn_PER_memb_nomPDSCH_RS_EPRE_Offset_r10_constr_3, + 0, + "nomPDSCH-RS-EPRE-Offset-r10" + }, + { ATF_POINTER, 2, offsetof(struct CQI_ReportConfigSCell_r10, cqi_ReportPeriodicSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CQI_ReportPeriodic_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportPeriodicSCell-r10" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportConfigSCell_r10, pmi_RI_Report_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pmi_RI_Report_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pmi-RI-Report-r10" + }, +}; +static int asn_MAP_CQI_ReportConfigSCell_r10_oms_1[] = { 0, 2, 3 }; +static ber_tlv_tag_t asn_DEF_CQI_ReportConfigSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportConfigSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-ReportModeAperiodic-r10 at 1875 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nomPDSCH-RS-EPRE-Offset-r10 at 1876 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cqi-ReportPeriodicSCell-r10 at 1878 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pmi-RI-Report-r10 at 1879 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CQI_ReportConfigSCell_r10_specs_1 = { + sizeof(struct CQI_ReportConfigSCell_r10), + offsetof(struct CQI_ReportConfigSCell_r10, _asn_ctx), + asn_MAP_CQI_ReportConfigSCell_r10_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CQI_ReportConfigSCell_r10_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfigSCell_r10 = { + "CQI-ReportConfigSCell-r10", + "CQI-ReportConfigSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CQI_ReportConfigSCell_r10_tags_1, + sizeof(asn_DEF_CQI_ReportConfigSCell_r10_tags_1) + /sizeof(asn_DEF_CQI_ReportConfigSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_CQI_ReportConfigSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CQI_ReportConfigSCell_r10_tags_1) + /sizeof(asn_DEF_CQI_ReportConfigSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CQI_ReportConfigSCell_r10_1, + 4, /* Elements count */ + &asn_SPC_CQI_ReportConfigSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportConfigSCell-r10.h b/lte/rrc/asn/CQI-ReportConfigSCell-r10.h new file mode 100644 index 000000000..2e503788e --- /dev/null +++ b/lte/rrc/asn/CQI-ReportConfigSCell-r10.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportConfigSCell_r10_H_ +#define _CQI_ReportConfigSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include "CQI-ReportModeAperiodic.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportConfigSCell_r10__pmi_RI_Report_r10 { + CQI_ReportConfigSCell_r10__pmi_RI_Report_r10_setup = 0 +} e_CQI_ReportConfigSCell_r10__pmi_RI_Report_r10; + +/* Forward declarations */ +struct CQI_ReportPeriodic_r10; + +/* CQI-ReportConfigSCell-r10 */ +typedef struct CQI_ReportConfigSCell_r10 { + CQI_ReportModeAperiodic_t *cqi_ReportModeAperiodic_r10 /* OPTIONAL */; + long nomPDSCH_RS_EPRE_Offset_r10; + struct CQI_ReportPeriodic_r10 *cqi_ReportPeriodicSCell_r10 /* OPTIONAL */; + long *pmi_RI_Report_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportConfigSCell_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_pmi_RI_Report_r10_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportConfigSCell_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CQI-ReportPeriodic-r10.h" + +#endif /* _CQI_ReportConfigSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportModeAperiodic.c b/lte/rrc/asn/CQI-ReportModeAperiodic.c new file mode 100644 index 000000000..0445a7b10 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportModeAperiodic.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportModeAperiodic.h" + +int +CQI_ReportModeAperiodic_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +CQI_ReportModeAperiodic_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CQI_ReportModeAperiodic_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CQI_ReportModeAperiodic_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CQI_ReportModeAperiodic_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CQI_ReportModeAperiodic_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CQI_ReportModeAperiodic_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CQI_ReportModeAperiodic_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CQI_ReportModeAperiodic_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CQI_ReportModeAperiodic_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CQI_ReportModeAperiodic_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_CQI_ReportModeAperiodic_value2enum_1[] = { + { 0, 4, "rm12" }, + { 1, 4, "rm20" }, + { 2, 4, "rm22" }, + { 3, 4, "rm30" }, + { 4, 4, "rm31" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_CQI_ReportModeAperiodic_enum2value_1[] = { + 0, /* rm12(0) */ + 1, /* rm20(1) */ + 2, /* rm22(2) */ + 3, /* rm30(3) */ + 4, /* rm31(4) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5 /* spare3(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_CQI_ReportModeAperiodic_specs_1 = { + asn_MAP_CQI_ReportModeAperiodic_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_CQI_ReportModeAperiodic_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_CQI_ReportModeAperiodic_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportModeAperiodic = { + "CQI-ReportModeAperiodic", + "CQI-ReportModeAperiodic", + CQI_ReportModeAperiodic_free, + CQI_ReportModeAperiodic_print, + CQI_ReportModeAperiodic_constraint, + CQI_ReportModeAperiodic_decode_ber, + CQI_ReportModeAperiodic_encode_der, + CQI_ReportModeAperiodic_decode_xer, + CQI_ReportModeAperiodic_encode_xer, + CQI_ReportModeAperiodic_decode_uper, + CQI_ReportModeAperiodic_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CQI_ReportModeAperiodic_tags_1, + sizeof(asn_DEF_CQI_ReportModeAperiodic_tags_1) + /sizeof(asn_DEF_CQI_ReportModeAperiodic_tags_1[0]), /* 1 */ + asn_DEF_CQI_ReportModeAperiodic_tags_1, /* Same as above */ + sizeof(asn_DEF_CQI_ReportModeAperiodic_tags_1) + /sizeof(asn_DEF_CQI_ReportModeAperiodic_tags_1[0]), /* 1 */ + &asn_PER_type_CQI_ReportModeAperiodic_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_CQI_ReportModeAperiodic_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportModeAperiodic.h b/lte/rrc/asn/CQI-ReportModeAperiodic.h new file mode 100644 index 000000000..45de4f0be --- /dev/null +++ b/lte/rrc/asn/CQI-ReportModeAperiodic.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportModeAperiodic_H_ +#define _CQI_ReportModeAperiodic_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportModeAperiodic { + CQI_ReportModeAperiodic_rm12 = 0, + CQI_ReportModeAperiodic_rm20 = 1, + CQI_ReportModeAperiodic_rm22 = 2, + CQI_ReportModeAperiodic_rm30 = 3, + CQI_ReportModeAperiodic_rm31 = 4, + CQI_ReportModeAperiodic_spare3 = 5, + CQI_ReportModeAperiodic_spare2 = 6, + CQI_ReportModeAperiodic_spare1 = 7 +} e_CQI_ReportModeAperiodic; + +/* CQI-ReportModeAperiodic */ +typedef long CQI_ReportModeAperiodic_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportModeAperiodic; +asn_struct_free_f CQI_ReportModeAperiodic_free; +asn_struct_print_f CQI_ReportModeAperiodic_print; +asn_constr_check_f CQI_ReportModeAperiodic_constraint; +ber_type_decoder_f CQI_ReportModeAperiodic_decode_ber; +der_type_encoder_f CQI_ReportModeAperiodic_encode_der; +xer_type_decoder_f CQI_ReportModeAperiodic_decode_xer; +xer_type_encoder_f CQI_ReportModeAperiodic_encode_xer; +per_type_decoder_f CQI_ReportModeAperiodic_decode_uper; +per_type_encoder_f CQI_ReportModeAperiodic_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CQI_ReportModeAperiodic_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportPeriodic-r10.c b/lte/rrc/asn/CQI-ReportPeriodic-r10.c new file mode 100644 index 000000000..dd53420c0 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportPeriodic-r10.c @@ -0,0 +1,1130 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportPeriodic-r10.h" + +static int +csi_ReportMode_r10_9_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +csi_ReportMode_r10_9_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +csi_ReportMode_r10_9_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +csi_ReportMode_r10_9_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +csi_ReportMode_r10_9_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +csi_ReportMode_r10_9_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +csi_ReportMode_r10_9_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +csi_ReportMode_r10_9_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +csi_ReportMode_r10_9_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +csi_ReportMode_r10_9_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + csi_ReportMode_r10_9_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +periodicityFactor_r10_14_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +periodicityFactor_r10_14_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +periodicityFactor_r10_14_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +periodicityFactor_r10_14_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +periodicityFactor_r10_14_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +periodicityFactor_r10_14_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +periodicityFactor_r10_14_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +periodicityFactor_r10_14_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +periodicityFactor_r10_14_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +periodicityFactor_r10_14_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + periodicityFactor_r10_14_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_k_constraint_12(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +cqi_Mask_r9_19_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cqi_Mask_r9_19_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cqi_Mask_r9_19_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cqi_Mask_r9_19_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cqi_Mask_r9_19_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cqi_Mask_r9_19_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cqi_Mask_r9_19_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cqi_Mask_r9_19_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cqi_Mask_r9_19_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cqi_Mask_r9_19_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cqi_Mask_r9_19_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_cqi_pmi_ConfigIndex2_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ri_ConfigIndex2_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cqi_PUCCH_ResourceIndex_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1184)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cqi_PUCCH_ResourceIndexP1_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1184)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cqi_pmi_ConfigIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ri_ConfigIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_csi_ReportMode_r10_constr_9 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_periodicityFactor_r10_constr_14 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_k_constr_13 = { + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (1..4) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cqi_FormatIndicatorPeriodic_r10_constr_7 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cqi_Mask_r9_constr_19 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cqi_pmi_ConfigIndex2_r10_constr_24 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ri_ConfigIndex2_r10_constr_25 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_csi_ConfigIndex_r10_constr_21 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cqi_PUCCH_ResourceIndex_r10_constr_4 = { + { APC_CONSTRAINED, 11, 11, 0, 1184 } /* (0..1184) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cqi_PUCCH_ResourceIndexP1_r10_constr_5 = { + { APC_CONSTRAINED, 11, 11, 0, 1184 } /* (0..1184) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cqi_pmi_ConfigIndex_constr_6 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ri_ConfigIndex_constr_17 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_CQI_ReportPeriodic_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_csi_ReportMode_r10_value2enum_9[] = { + { 0, 8, "submode1" }, + { 1, 8, "submode2" } +}; +static unsigned int asn_MAP_csi_ReportMode_r10_enum2value_9[] = { + 0, /* submode1(0) */ + 1 /* submode2(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_csi_ReportMode_r10_specs_9 = { + asn_MAP_csi_ReportMode_r10_value2enum_9, /* "tag" => N; sorted by tag */ + asn_MAP_csi_ReportMode_r10_enum2value_9, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_csi_ReportMode_r10_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_csi_ReportMode_r10_9 = { + "csi-ReportMode-r10", + "csi-ReportMode-r10", + csi_ReportMode_r10_9_free, + csi_ReportMode_r10_9_print, + csi_ReportMode_r10_9_constraint, + csi_ReportMode_r10_9_decode_ber, + csi_ReportMode_r10_9_encode_der, + csi_ReportMode_r10_9_decode_xer, + csi_ReportMode_r10_9_encode_xer, + csi_ReportMode_r10_9_decode_uper, + csi_ReportMode_r10_9_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_csi_ReportMode_r10_tags_9, + sizeof(asn_DEF_csi_ReportMode_r10_tags_9) + /sizeof(asn_DEF_csi_ReportMode_r10_tags_9[0]) - 1, /* 1 */ + asn_DEF_csi_ReportMode_r10_tags_9, /* Same as above */ + sizeof(asn_DEF_csi_ReportMode_r10_tags_9) + /sizeof(asn_DEF_csi_ReportMode_r10_tags_9[0]), /* 2 */ + &asn_PER_type_csi_ReportMode_r10_constr_9, + 0, 0, /* Defined elsewhere */ + &asn_SPC_csi_ReportMode_r10_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_widebandCQI_r10_8[] = { + { ATF_POINTER, 1, offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10, csi_ReportMode_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_csi_ReportMode_r10_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-ReportMode-r10" + }, +}; +static int asn_MAP_widebandCQI_r10_oms_8[] = { 0 }; +static ber_tlv_tag_t asn_DEF_widebandCQI_r10_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_widebandCQI_r10_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* csi-ReportMode-r10 at 1906 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_widebandCQI_r10_specs_8 = { + sizeof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10), + offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10, _asn_ctx), + asn_MAP_widebandCQI_r10_tag2el_8, + 1, /* Count of tags in the map */ + asn_MAP_widebandCQI_r10_oms_8, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_widebandCQI_r10_8 = { + "widebandCQI-r10", + "widebandCQI-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_widebandCQI_r10_tags_8, + sizeof(asn_DEF_widebandCQI_r10_tags_8) + /sizeof(asn_DEF_widebandCQI_r10_tags_8[0]) - 1, /* 1 */ + asn_DEF_widebandCQI_r10_tags_8, /* Same as above */ + sizeof(asn_DEF_widebandCQI_r10_tags_8) + /sizeof(asn_DEF_widebandCQI_r10_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_widebandCQI_r10_8, + 1, /* Elements count */ + &asn_SPC_widebandCQI_r10_specs_8 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_periodicityFactor_r10_value2enum_14[] = { + { 0, 2, "n2" }, + { 1, 2, "n4" } +}; +static unsigned int asn_MAP_periodicityFactor_r10_enum2value_14[] = { + 0, /* n2(0) */ + 1 /* n4(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_periodicityFactor_r10_specs_14 = { + asn_MAP_periodicityFactor_r10_value2enum_14, /* "tag" => N; sorted by tag */ + asn_MAP_periodicityFactor_r10_enum2value_14, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_periodicityFactor_r10_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_periodicityFactor_r10_14 = { + "periodicityFactor-r10", + "periodicityFactor-r10", + periodicityFactor_r10_14_free, + periodicityFactor_r10_14_print, + periodicityFactor_r10_14_constraint, + periodicityFactor_r10_14_decode_ber, + periodicityFactor_r10_14_encode_der, + periodicityFactor_r10_14_decode_xer, + periodicityFactor_r10_14_encode_xer, + periodicityFactor_r10_14_decode_uper, + periodicityFactor_r10_14_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_periodicityFactor_r10_tags_14, + sizeof(asn_DEF_periodicityFactor_r10_tags_14) + /sizeof(asn_DEF_periodicityFactor_r10_tags_14[0]) - 1, /* 1 */ + asn_DEF_periodicityFactor_r10_tags_14, /* Same as above */ + sizeof(asn_DEF_periodicityFactor_r10_tags_14) + /sizeof(asn_DEF_periodicityFactor_r10_tags_14[0]), /* 2 */ + &asn_PER_type_periodicityFactor_r10_constr_14, + 0, 0, /* Defined elsewhere */ + &asn_SPC_periodicityFactor_r10_specs_14 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_subbandCQI_r10_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10, k), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_k_constraint_12, + &asn_PER_memb_k_constr_13, + 0, + "k" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10, periodicityFactor_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_periodicityFactor_r10_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "periodicityFactor-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_subbandCQI_r10_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_subbandCQI_r10_tag2el_12[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* k at 1909 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* periodicityFactor-r10 at 1910 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_subbandCQI_r10_specs_12 = { + sizeof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10), + offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10, _asn_ctx), + asn_MAP_subbandCQI_r10_tag2el_12, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_subbandCQI_r10_12 = { + "subbandCQI-r10", + "subbandCQI-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_subbandCQI_r10_tags_12, + sizeof(asn_DEF_subbandCQI_r10_tags_12) + /sizeof(asn_DEF_subbandCQI_r10_tags_12[0]) - 1, /* 1 */ + asn_DEF_subbandCQI_r10_tags_12, /* Same as above */ + sizeof(asn_DEF_subbandCQI_r10_tags_12) + /sizeof(asn_DEF_subbandCQI_r10_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_subbandCQI_r10_12, + 2, /* Elements count */ + &asn_SPC_subbandCQI_r10_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cqi_FormatIndicatorPeriodic_r10_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10, choice.widebandCQI_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_widebandCQI_r10_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "widebandCQI-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10, choice.subbandCQI_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_subbandCQI_r10_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "subbandCQI-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_cqi_FormatIndicatorPeriodic_r10_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* widebandCQI-r10 at 1906 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* subbandCQI-r10 at 1909 */ +}; +static asn_CHOICE_specifics_t asn_SPC_cqi_FormatIndicatorPeriodic_r10_specs_7 = { + sizeof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10), + offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10, _asn_ctx), + offsetof(struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10, present), + sizeof(((struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10 *)0)->present), + asn_MAP_cqi_FormatIndicatorPeriodic_r10_tag2el_7, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cqi_FormatIndicatorPeriodic_r10_7 = { + "cqi-FormatIndicatorPeriodic-r10", + "cqi-FormatIndicatorPeriodic-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_cqi_FormatIndicatorPeriodic_r10_constr_7, + asn_MBR_cqi_FormatIndicatorPeriodic_r10_7, + 2, /* Elements count */ + &asn_SPC_cqi_FormatIndicatorPeriodic_r10_specs_7 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_cqi_Mask_r9_value2enum_19[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_cqi_Mask_r9_enum2value_19[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cqi_Mask_r9_specs_19 = { + asn_MAP_cqi_Mask_r9_value2enum_19, /* "tag" => N; sorted by tag */ + asn_MAP_cqi_Mask_r9_enum2value_19, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cqi_Mask_r9_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cqi_Mask_r9_19 = { + "cqi-Mask-r9", + "cqi-Mask-r9", + cqi_Mask_r9_19_free, + cqi_Mask_r9_19_print, + cqi_Mask_r9_19_constraint, + cqi_Mask_r9_19_decode_ber, + cqi_Mask_r9_19_encode_der, + cqi_Mask_r9_19_decode_xer, + cqi_Mask_r9_19_encode_xer, + cqi_Mask_r9_19_decode_uper, + cqi_Mask_r9_19_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cqi_Mask_r9_tags_19, + sizeof(asn_DEF_cqi_Mask_r9_tags_19) + /sizeof(asn_DEF_cqi_Mask_r9_tags_19[0]) - 1, /* 1 */ + asn_DEF_cqi_Mask_r9_tags_19, /* Same as above */ + sizeof(asn_DEF_cqi_Mask_r9_tags_19) + /sizeof(asn_DEF_cqi_Mask_r9_tags_19[0]), /* 2 */ + &asn_PER_type_cqi_Mask_r9_constr_19, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cqi_Mask_r9_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_23[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10__setup, cqi_pmi_ConfigIndex2_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cqi_pmi_ConfigIndex2_r10_constraint_23, + &asn_PER_memb_cqi_pmi_ConfigIndex2_r10_constr_24, + 0, + "cqi-pmi-ConfigIndex2-r10" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10__setup, ri_ConfigIndex2_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ri_ConfigIndex2_r10_constraint_23, + &asn_PER_memb_ri_ConfigIndex2_r10_constr_25, + 0, + "ri-ConfigIndex2-r10" + }, +}; +static int asn_MAP_setup_oms_23[] = { 1 }; +static ber_tlv_tag_t asn_DEF_setup_tags_23[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_23[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-pmi-ConfigIndex2-r10 at 1919 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ri-ConfigIndex2-r10 at 1920 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_23 = { + sizeof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10__setup), + offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_23, + 2, /* Count of tags in the map */ + asn_MAP_setup_oms_23, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_23 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_23, + sizeof(asn_DEF_setup_tags_23) + /sizeof(asn_DEF_setup_tags_23[0]) - 1, /* 1 */ + asn_DEF_setup_tags_23, /* Same as above */ + sizeof(asn_DEF_setup_tags_23) + /sizeof(asn_DEF_setup_tags_23[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_23, + 2, /* Elements count */ + &asn_SPC_setup_specs_23 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_csi_ConfigIndex_r10_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_23, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_csi_ConfigIndex_r10_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1917 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1919 */ +}; +static asn_CHOICE_specifics_t asn_SPC_csi_ConfigIndex_r10_specs_21 = { + sizeof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10), + offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10, _asn_ctx), + offsetof(struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10, present), + sizeof(((struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10 *)0)->present), + asn_MAP_csi_ConfigIndex_r10_tag2el_21, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_csi_ConfigIndex_r10_21 = { + "csi-ConfigIndex-r10", + "csi-ConfigIndex-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_csi_ConfigIndex_r10_constr_21, + asn_MBR_csi_ConfigIndex_r10_21, + 2, /* Elements count */ + &asn_SPC_csi_ConfigIndex_r10_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup, cqi_PUCCH_ResourceIndex_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cqi_PUCCH_ResourceIndex_r10_constraint_3, + &asn_PER_memb_cqi_PUCCH_ResourceIndex_r10_constr_4, + 0, + "cqi-PUCCH-ResourceIndex-r10" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportPeriodic_r10__setup, cqi_PUCCH_ResourceIndexP1_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cqi_PUCCH_ResourceIndexP1_r10_constraint_3, + &asn_PER_memb_cqi_PUCCH_ResourceIndexP1_r10_constr_5, + 0, + "cqi-PUCCH-ResourceIndexP1-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup, cqi_pmi_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cqi_pmi_ConfigIndex_constraint_3, + &asn_PER_memb_cqi_pmi_ConfigIndex_constr_6, + 0, + "cqi-pmi-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup, cqi_FormatIndicatorPeriodic_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_cqi_FormatIndicatorPeriodic_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-FormatIndicatorPeriodic-r10" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportPeriodic_r10__setup, ri_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ri_ConfigIndex_constraint_3, + &asn_PER_memb_ri_ConfigIndex_constr_17, + 0, + "ri-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10__setup, simultaneousAckNackAndCQI), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "simultaneousAckNackAndCQI" + }, + { ATF_POINTER, 2, offsetof(struct CQI_ReportPeriodic_r10__setup, cqi_Mask_r9), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cqi_Mask_r9_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-Mask-r9" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportPeriodic_r10__setup, csi_ConfigIndex_r10), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_csi_ConfigIndex_r10_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-ConfigIndex-r10" + }, +}; +static int asn_MAP_setup_oms_3[] = { 1, 4, 6, 7 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-PUCCH-ResourceIndex-r10 at 1901 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cqi-PUCCH-ResourceIndexP1-r10 at 1902 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cqi-pmi-ConfigIndex at 1903 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* cqi-FormatIndicatorPeriodic-r10 at 1907 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ri-ConfigIndex at 1913 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* simultaneousAckNackAndCQI at 1914 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* cqi-Mask-r9 at 1915 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* csi-ConfigIndex-r10 at 1917 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct CQI_ReportPeriodic_r10__setup), + offsetof(struct CQI_ReportPeriodic_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 8, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 8, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CQI_ReportPeriodic_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportPeriodic_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1899 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1901 */ +}; +static asn_CHOICE_specifics_t asn_SPC_CQI_ReportPeriodic_r10_specs_1 = { + sizeof(struct CQI_ReportPeriodic_r10), + offsetof(struct CQI_ReportPeriodic_r10, _asn_ctx), + offsetof(struct CQI_ReportPeriodic_r10, present), + sizeof(((struct CQI_ReportPeriodic_r10 *)0)->present), + asn_MAP_CQI_ReportPeriodic_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportPeriodic_r10 = { + "CQI-ReportPeriodic-r10", + "CQI-ReportPeriodic-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_CQI_ReportPeriodic_r10_constr_1, + asn_MBR_CQI_ReportPeriodic_r10_1, + 2, /* Elements count */ + &asn_SPC_CQI_ReportPeriodic_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportPeriodic-r10.h b/lte/rrc/asn/CQI-ReportPeriodic-r10.h new file mode 100644 index 000000000..de0e28acf --- /dev/null +++ b/lte/rrc/asn/CQI-ReportPeriodic-r10.h @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportPeriodic_r10_H_ +#define _CQI_ReportPeriodic_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportPeriodic_r10_PR { + CQI_ReportPeriodic_r10_PR_NOTHING, /* No components present */ + CQI_ReportPeriodic_r10_PR_release, + CQI_ReportPeriodic_r10_PR_setup +} CQI_ReportPeriodic_r10_PR; +typedef enum CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_PR { + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_PR_NOTHING, /* No components present */ + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_PR_widebandCQI_r10, + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_PR_subbandCQI_r10 +} CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_PR; +typedef enum CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10__csi_ReportMode_r10 { + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10__csi_ReportMode_r10_submode1 = 0, + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10__csi_ReportMode_r10_submode2 = 1 +} e_CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10__csi_ReportMode_r10; +typedef enum CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10__periodicityFactor_r10 { + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10__periodicityFactor_r10_n2 = 0, + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10__periodicityFactor_r10_n4 = 1 +} e_CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10__periodicityFactor_r10; +typedef enum CQI_ReportPeriodic_r10__setup__cqi_Mask_r9 { + CQI_ReportPeriodic_r10__setup__cqi_Mask_r9_setup = 0 +} e_CQI_ReportPeriodic_r10__setup__cqi_Mask_r9; +typedef enum CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_PR { + CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_PR_NOTHING, /* No components present */ + CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_PR_release, + CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_PR_setup +} CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_PR; + +/* CQI-ReportPeriodic-r10 */ +typedef struct CQI_ReportPeriodic_r10 { + CQI_ReportPeriodic_r10_PR present; + union CQI_ReportPeriodic_r10_u { + NULL_t release; + struct CQI_ReportPeriodic_r10__setup { + long cqi_PUCCH_ResourceIndex_r10; + long *cqi_PUCCH_ResourceIndexP1_r10 /* OPTIONAL */; + long cqi_pmi_ConfigIndex; + struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10 { + CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_PR present; + union CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10_u { + struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__widebandCQI_r10 { + long *csi_ReportMode_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } widebandCQI_r10; + struct CQI_ReportPeriodic_r10__setup__cqi_FormatIndicatorPeriodic_r10__subbandCQI_r10 { + long k; + long periodicityFactor_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } subbandCQI_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cqi_FormatIndicatorPeriodic_r10; + long *ri_ConfigIndex /* OPTIONAL */; + BOOLEAN_t simultaneousAckNackAndCQI; + long *cqi_Mask_r9 /* OPTIONAL */; + struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10 { + CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_PR present; + union CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10_u { + NULL_t release; + struct CQI_ReportPeriodic_r10__setup__csi_ConfigIndex_r10__setup { + long cqi_pmi_ConfigIndex2_r10; + long *ri_ConfigIndex2_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *csi_ConfigIndex_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportPeriodic_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_csi_ReportMode_r10_9; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_periodicityFactor_r10_14; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_cqi_Mask_r9_19; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportPeriodic_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CQI_ReportPeriodic_r10_H_ */ +#include diff --git a/lte/rrc/asn/CQI-ReportPeriodic.c b/lte/rrc/asn/CQI-ReportPeriodic.c new file mode 100644 index 000000000..78ac16f85 --- /dev/null +++ b/lte/rrc/asn/CQI-ReportPeriodic.c @@ -0,0 +1,402 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CQI-ReportPeriodic.h" + +static int +memb_k_constraint_8(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cqi_PUCCH_ResourceIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1185)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cqi_pmi_ConfigIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ri_ConfigIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_k_constr_9 = { + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (1..4) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cqi_FormatIndicatorPeriodic_constr_6 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cqi_PUCCH_ResourceIndex_constr_4 = { + { APC_CONSTRAINED, 11, 11, 0, 1185 } /* (0..1185) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cqi_pmi_ConfigIndex_constr_5 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ri_ConfigIndex_constr_10 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_CQI_ReportPeriodic_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_subbandCQI_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic__subbandCQI, k), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_k_constraint_8, + &asn_PER_memb_k_constr_9, + 0, + "k" + }, +}; +static ber_tlv_tag_t asn_DEF_subbandCQI_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_subbandCQI_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* k at 1890 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_subbandCQI_specs_8 = { + sizeof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic__subbandCQI), + offsetof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic__subbandCQI, _asn_ctx), + asn_MAP_subbandCQI_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_subbandCQI_8 = { + "subbandCQI", + "subbandCQI", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_subbandCQI_tags_8, + sizeof(asn_DEF_subbandCQI_tags_8) + /sizeof(asn_DEF_subbandCQI_tags_8[0]) - 1, /* 1 */ + asn_DEF_subbandCQI_tags_8, /* Same as above */ + sizeof(asn_DEF_subbandCQI_tags_8) + /sizeof(asn_DEF_subbandCQI_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_subbandCQI_8, + 1, /* Elements count */ + &asn_SPC_subbandCQI_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cqi_FormatIndicatorPeriodic_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic, choice.widebandCQI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "widebandCQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic, choice.subbandCQI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_subbandCQI_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "subbandCQI" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_cqi_FormatIndicatorPeriodic_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* widebandCQI at 1888 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* subbandCQI at 1891 */ +}; +static asn_CHOICE_specifics_t asn_SPC_cqi_FormatIndicatorPeriodic_specs_6 = { + sizeof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic), + offsetof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic, _asn_ctx), + offsetof(struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic, present), + sizeof(((struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic *)0)->present), + asn_MAP_cqi_FormatIndicatorPeriodic_tag2el_6, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cqi_FormatIndicatorPeriodic_6 = { + "cqi-FormatIndicatorPeriodic", + "cqi-FormatIndicatorPeriodic", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_cqi_FormatIndicatorPeriodic_constr_6, + asn_MBR_cqi_FormatIndicatorPeriodic_6, + 2, /* Elements count */ + &asn_SPC_cqi_FormatIndicatorPeriodic_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup, cqi_PUCCH_ResourceIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cqi_PUCCH_ResourceIndex_constraint_3, + &asn_PER_memb_cqi_PUCCH_ResourceIndex_constr_4, + 0, + "cqi-PUCCH-ResourceIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup, cqi_pmi_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cqi_pmi_ConfigIndex_constraint_3, + &asn_PER_memb_cqi_pmi_ConfigIndex_constr_5, + 0, + "cqi-pmi-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup, cqi_FormatIndicatorPeriodic), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_cqi_FormatIndicatorPeriodic_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-FormatIndicatorPeriodic" + }, + { ATF_POINTER, 1, offsetof(struct CQI_ReportPeriodic__setup, ri_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ri_ConfigIndex_constraint_3, + &asn_PER_memb_ri_ConfigIndex_constr_10, + 0, + "ri-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic__setup, simultaneousAckNackAndCQI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "simultaneousAckNackAndCQI" + }, +}; +static int asn_MAP_setup_oms_3[] = { 3 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cqi-PUCCH-ResourceIndex at 1885 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cqi-pmi-ConfigIndex at 1886 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cqi-FormatIndicatorPeriodic at 1888 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* ri-ConfigIndex at 1893 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* simultaneousAckNackAndCQI at 1894 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct CQI_ReportPeriodic__setup), + offsetof(struct CQI_ReportPeriodic__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 5, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 5, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CQI_ReportPeriodic_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CQI_ReportPeriodic, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_CQI_ReportPeriodic_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1883 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1885 */ +}; +static asn_CHOICE_specifics_t asn_SPC_CQI_ReportPeriodic_specs_1 = { + sizeof(struct CQI_ReportPeriodic), + offsetof(struct CQI_ReportPeriodic, _asn_ctx), + offsetof(struct CQI_ReportPeriodic, present), + sizeof(((struct CQI_ReportPeriodic *)0)->present), + asn_MAP_CQI_ReportPeriodic_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CQI_ReportPeriodic = { + "CQI-ReportPeriodic", + "CQI-ReportPeriodic", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_CQI_ReportPeriodic_constr_1, + asn_MBR_CQI_ReportPeriodic_1, + 2, /* Elements count */ + &asn_SPC_CQI_ReportPeriodic_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CQI-ReportPeriodic.h b/lte/rrc/asn/CQI-ReportPeriodic.h new file mode 100644 index 000000000..c4b5a435d --- /dev/null +++ b/lte/rrc/asn/CQI-ReportPeriodic.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CQI_ReportPeriodic_H_ +#define _CQI_ReportPeriodic_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CQI_ReportPeriodic_PR { + CQI_ReportPeriodic_PR_NOTHING, /* No components present */ + CQI_ReportPeriodic_PR_release, + CQI_ReportPeriodic_PR_setup +} CQI_ReportPeriodic_PR; +typedef enum CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR { + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_NOTHING, /* No components present */ + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_widebandCQI, + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR_subbandCQI +} CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR; + +/* CQI-ReportPeriodic */ +typedef struct CQI_ReportPeriodic { + CQI_ReportPeriodic_PR present; + union CQI_ReportPeriodic_u { + NULL_t release; + struct CQI_ReportPeriodic__setup { + long cqi_PUCCH_ResourceIndex; + long cqi_pmi_ConfigIndex; + struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic { + CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_PR present; + union CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic_u { + NULL_t widebandCQI; + struct CQI_ReportPeriodic__setup__cqi_FormatIndicatorPeriodic__subbandCQI { + long k; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } subbandCQI; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cqi_FormatIndicatorPeriodic; + long *ri_ConfigIndex /* OPTIONAL */; + BOOLEAN_t simultaneousAckNackAndCQI; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CQI_ReportPeriodic_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CQI_ReportPeriodic; + +#ifdef __cplusplus +} +#endif + +#endif /* _CQI_ReportPeriodic_H_ */ +#include diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.c b/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.c new file mode 100644 index 000000000..e687d92dd --- /dev/null +++ b/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.c @@ -0,0 +1,197 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFB-RegistrationParam1XRTT-v920.h" + +static int +powerDownReg_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +powerDownReg_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +powerDownReg_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +powerDownReg_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +powerDownReg_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +powerDownReg_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +powerDownReg_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +powerDownReg_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +powerDownReg_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +powerDownReg_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + powerDownReg_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_powerDownReg_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_powerDownReg_r9_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_powerDownReg_r9_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_powerDownReg_r9_specs_2 = { + asn_MAP_powerDownReg_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_powerDownReg_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_powerDownReg_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_powerDownReg_r9_2 = { + "powerDownReg-r9", + "powerDownReg-r9", + powerDownReg_r9_2_free, + powerDownReg_r9_2_print, + powerDownReg_r9_2_constraint, + powerDownReg_r9_2_decode_ber, + powerDownReg_r9_2_encode_der, + powerDownReg_r9_2_decode_xer, + powerDownReg_r9_2_encode_xer, + powerDownReg_r9_2_decode_uper, + powerDownReg_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_powerDownReg_r9_tags_2, + sizeof(asn_DEF_powerDownReg_r9_tags_2) + /sizeof(asn_DEF_powerDownReg_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_powerDownReg_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_powerDownReg_r9_tags_2) + /sizeof(asn_DEF_powerDownReg_r9_tags_2[0]), /* 2 */ + &asn_PER_type_powerDownReg_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_powerDownReg_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSFB_RegistrationParam1XRTT_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT_v920, powerDownReg_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_powerDownReg_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "powerDownReg-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFB_RegistrationParam1XRTT_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* powerDownReg-r9 at 2960 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFB_RegistrationParam1XRTT_v920_specs_1 = { + sizeof(struct CSFB_RegistrationParam1XRTT_v920), + offsetof(struct CSFB_RegistrationParam1XRTT_v920, _asn_ctx), + asn_MAP_CSFB_RegistrationParam1XRTT_v920_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFB_RegistrationParam1XRTT_v920 = { + "CSFB-RegistrationParam1XRTT-v920", + "CSFB-RegistrationParam1XRTT-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1, + sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1) + /sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1[0]), /* 1 */ + asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1) + /sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFB_RegistrationParam1XRTT_v920_1, + 1, /* Elements count */ + &asn_SPC_CSFB_RegistrationParam1XRTT_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h b/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h new file mode 100644 index 000000000..0f9fff6fd --- /dev/null +++ b/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFB_RegistrationParam1XRTT_v920_H_ +#define _CSFB_RegistrationParam1XRTT_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CSFB_RegistrationParam1XRTT_v920__powerDownReg_r9 { + CSFB_RegistrationParam1XRTT_v920__powerDownReg_r9_true = 0 +} e_CSFB_RegistrationParam1XRTT_v920__powerDownReg_r9; + +/* CSFB-RegistrationParam1XRTT-v920 */ +typedef struct CSFB_RegistrationParam1XRTT_v920 { + long powerDownReg_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFB_RegistrationParam1XRTT_v920_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_powerDownReg_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CSFB_RegistrationParam1XRTT_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSFB_RegistrationParam1XRTT_v920_H_ */ +#include diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT.c b/lte/rrc/asn/CSFB-RegistrationParam1XRTT.c new file mode 100644 index 000000000..f5c302cd3 --- /dev/null +++ b/lte/rrc/asn/CSFB-RegistrationParam1XRTT.c @@ -0,0 +1,396 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFB-RegistrationParam1XRTT.h" + +static int +memb_sid_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nid_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_registrationPeriod_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_registrationZone_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 12)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_totalZone_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_zoneTimer_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_sid_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 15, 15 } /* (SIZE(15..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nid_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_registrationPeriod_constr_11 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 7, 7 } /* (SIZE(7..7)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_registrationZone_constr_12 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 12, 12 } /* (SIZE(12..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_totalZone_constr_13 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_zoneTimer_constr_14 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CSFB_RegistrationParam1XRTT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, sid), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_sid_constraint_1, + &asn_PER_memb_sid_constr_2, + 0, + "sid" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, nid), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nid_constraint_1, + &asn_PER_memb_nid_constr_3, + 0, + "nid" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, multipleSID), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "multipleSID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, multipleNID), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "multipleNID" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, homeReg), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "homeReg" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, foreignSIDReg), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "foreignSIDReg" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, foreignNIDReg), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "foreignNIDReg" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, parameterReg), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "parameterReg" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, powerUpReg), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "powerUpReg" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, registrationPeriod), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_registrationPeriod_constraint_1, + &asn_PER_memb_registrationPeriod_constr_11, + 0, + "registrationPeriod" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, registrationZone), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_registrationZone_constraint_1, + &asn_PER_memb_registrationZone_constr_12, + 0, + "registrationZone" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, totalZone), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_totalZone_constraint_1, + &asn_PER_memb_totalZone_constr_13, + 0, + "totalZone" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFB_RegistrationParam1XRTT, zoneTimer), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_zoneTimer_constraint_1, + &asn_PER_memb_zoneTimer_constr_14, + 0, + "zoneTimer" + }, +}; +static ber_tlv_tag_t asn_DEF_CSFB_RegistrationParam1XRTT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFB_RegistrationParam1XRTT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sid at 2944 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nid at 2945 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* multipleSID at 2946 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* multipleNID at 2947 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* homeReg at 2948 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* foreignSIDReg at 2949 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* foreignNIDReg at 2950 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* parameterReg at 2951 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* powerUpReg at 2952 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* registrationPeriod at 2953 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* registrationZone at 2954 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* totalZone at 2955 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 } /* zoneTimer at 2956 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFB_RegistrationParam1XRTT_specs_1 = { + sizeof(struct CSFB_RegistrationParam1XRTT), + offsetof(struct CSFB_RegistrationParam1XRTT, _asn_ctx), + asn_MAP_CSFB_RegistrationParam1XRTT_tag2el_1, + 13, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFB_RegistrationParam1XRTT = { + "CSFB-RegistrationParam1XRTT", + "CSFB-RegistrationParam1XRTT", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFB_RegistrationParam1XRTT_tags_1, + sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_tags_1) + /sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_tags_1[0]), /* 1 */ + asn_DEF_CSFB_RegistrationParam1XRTT_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_tags_1) + /sizeof(asn_DEF_CSFB_RegistrationParam1XRTT_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFB_RegistrationParam1XRTT_1, + 13, /* Elements count */ + &asn_SPC_CSFB_RegistrationParam1XRTT_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT.h b/lte/rrc/asn/CSFB-RegistrationParam1XRTT.h new file mode 100644 index 000000000..4a81074ce --- /dev/null +++ b/lte/rrc/asn/CSFB-RegistrationParam1XRTT.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFB_RegistrationParam1XRTT_H_ +#define _CSFB_RegistrationParam1XRTT_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CSFB-RegistrationParam1XRTT */ +typedef struct CSFB_RegistrationParam1XRTT { + BIT_STRING_t sid; + BIT_STRING_t nid; + BOOLEAN_t multipleSID; + BOOLEAN_t multipleNID; + BOOLEAN_t homeReg; + BOOLEAN_t foreignSIDReg; + BOOLEAN_t foreignNIDReg; + BOOLEAN_t parameterReg; + BOOLEAN_t powerUpReg; + BIT_STRING_t registrationPeriod; + BIT_STRING_t registrationZone; + BIT_STRING_t totalZone; + BIT_STRING_t zoneTimer; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFB_RegistrationParam1XRTT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFB_RegistrationParam1XRTT; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSFB_RegistrationParam1XRTT_H_ */ +#include diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.c b/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.c new file mode 100644 index 000000000..df923f3dd --- /dev/null +++ b/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFBParametersRequestCDMA2000-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_CSFBParametersRequestCDMA2000_r8_IEs_1[] = { + { ATF_POINTER, 1, offsetof(struct CSFBParametersRequestCDMA2000_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CSFBParametersRequestCDMA2000_r8_IEs_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFBParametersRequestCDMA2000_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonCriticalExtension at 200 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFBParametersRequestCDMA2000_r8_IEs_specs_1 = { + sizeof(struct CSFBParametersRequestCDMA2000_r8_IEs), + offsetof(struct CSFBParametersRequestCDMA2000_r8_IEs, _asn_ctx), + asn_MAP_CSFBParametersRequestCDMA2000_r8_IEs_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_CSFBParametersRequestCDMA2000_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs = { + "CSFBParametersRequestCDMA2000-r8-IEs", + "CSFBParametersRequestCDMA2000-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1, + sizeof(asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFBParametersRequestCDMA2000_r8_IEs_1, + 1, /* Elements count */ + &asn_SPC_CSFBParametersRequestCDMA2000_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h b/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h new file mode 100644 index 000000000..622f02240 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFBParametersRequestCDMA2000_r8_IEs_H_ +#define _CSFBParametersRequestCDMA2000_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CSFBParametersRequestCDMA2000_v8a0_IEs; + +/* CSFBParametersRequestCDMA2000-r8-IEs */ +typedef struct CSFBParametersRequestCDMA2000_r8_IEs { + struct CSFBParametersRequestCDMA2000_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFBParametersRequestCDMA2000_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CSFBParametersRequestCDMA2000-v8a0-IEs.h" + +#endif /* _CSFBParametersRequestCDMA2000_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.c b/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.c new file mode 100644 index 000000000..7e5ef35e5 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFBParametersRequestCDMA2000-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct CSFBParametersRequestCDMA2000_v8a0_IEs__nonCriticalExtension), + offsetof(struct CSFBParametersRequestCDMA2000_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSFBParametersRequestCDMA2000_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct CSFBParametersRequestCDMA2000_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct CSFBParametersRequestCDMA2000_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CSFBParametersRequestCDMA2000_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFBParametersRequestCDMA2000_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 204 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 205 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFBParametersRequestCDMA2000_v8a0_IEs_specs_1 = { + sizeof(struct CSFBParametersRequestCDMA2000_v8a0_IEs), + offsetof(struct CSFBParametersRequestCDMA2000_v8a0_IEs, _asn_ctx), + asn_MAP_CSFBParametersRequestCDMA2000_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CSFBParametersRequestCDMA2000_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs = { + "CSFBParametersRequestCDMA2000-v8a0-IEs", + "CSFBParametersRequestCDMA2000-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1, + sizeof(asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFBParametersRequestCDMA2000_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_CSFBParametersRequestCDMA2000_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h b/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h new file mode 100644 index 000000000..a5b8db0ed --- /dev/null +++ b/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFBParametersRequestCDMA2000_v8a0_IEs_H_ +#define _CSFBParametersRequestCDMA2000_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CSFBParametersRequestCDMA2000-v8a0-IEs */ +typedef struct CSFBParametersRequestCDMA2000_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct CSFBParametersRequestCDMA2000_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFBParametersRequestCDMA2000_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFBParametersRequestCDMA2000_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSFBParametersRequestCDMA2000_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000.c b/lte/rrc/asn/CSFBParametersRequestCDMA2000.c new file mode 100644 index 000000000..aab5d194c --- /dev/null +++ b/lte/rrc/asn/CSFBParametersRequestCDMA2000.c @@ -0,0 +1,161 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFBParametersRequestCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_4 = { + sizeof(struct CSFBParametersRequestCDMA2000__criticalExtensions__criticalExtensionsFuture), + offsetof(struct CSFBParametersRequestCDMA2000__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_4 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_4, + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_4, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersRequestCDMA2000__criticalExtensions, choice.csfbParametersRequestCDMA2000_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFBParametersRequestCDMA2000_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfbParametersRequestCDMA2000-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersRequestCDMA2000__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csfbParametersRequestCDMA2000-r8 at 194 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 195 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct CSFBParametersRequestCDMA2000__criticalExtensions), + offsetof(struct CSFBParametersRequestCDMA2000__criticalExtensions, _asn_ctx), + offsetof(struct CSFBParametersRequestCDMA2000__criticalExtensions, present), + sizeof(((struct CSFBParametersRequestCDMA2000__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSFBParametersRequestCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersRequestCDMA2000, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_CSFBParametersRequestCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFBParametersRequestCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 194 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFBParametersRequestCDMA2000_specs_1 = { + sizeof(struct CSFBParametersRequestCDMA2000), + offsetof(struct CSFBParametersRequestCDMA2000, _asn_ctx), + asn_MAP_CSFBParametersRequestCDMA2000_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFBParametersRequestCDMA2000 = { + "CSFBParametersRequestCDMA2000", + "CSFBParametersRequestCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFBParametersRequestCDMA2000_tags_1, + sizeof(asn_DEF_CSFBParametersRequestCDMA2000_tags_1) + /sizeof(asn_DEF_CSFBParametersRequestCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_CSFBParametersRequestCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFBParametersRequestCDMA2000_tags_1) + /sizeof(asn_DEF_CSFBParametersRequestCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFBParametersRequestCDMA2000_1, + 1, /* Elements count */ + &asn_SPC_CSFBParametersRequestCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000.h b/lte/rrc/asn/CSFBParametersRequestCDMA2000.h new file mode 100644 index 000000000..d2551cb3c --- /dev/null +++ b/lte/rrc/asn/CSFBParametersRequestCDMA2000.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFBParametersRequestCDMA2000_H_ +#define _CSFBParametersRequestCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "CSFBParametersRequestCDMA2000-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CSFBParametersRequestCDMA2000__criticalExtensions_PR { + CSFBParametersRequestCDMA2000__criticalExtensions_PR_NOTHING, /* No components present */ + CSFBParametersRequestCDMA2000__criticalExtensions_PR_csfbParametersRequestCDMA2000_r8, + CSFBParametersRequestCDMA2000__criticalExtensions_PR_criticalExtensionsFuture +} CSFBParametersRequestCDMA2000__criticalExtensions_PR; + +/* CSFBParametersRequestCDMA2000 */ +typedef struct CSFBParametersRequestCDMA2000 { + struct CSFBParametersRequestCDMA2000__criticalExtensions { + CSFBParametersRequestCDMA2000__criticalExtensions_PR present; + union CSFBParametersRequestCDMA2000__criticalExtensions_u { + CSFBParametersRequestCDMA2000_r8_IEs_t csfbParametersRequestCDMA2000_r8; + struct CSFBParametersRequestCDMA2000__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFBParametersRequestCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFBParametersRequestCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSFBParametersRequestCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.c b/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.c new file mode 100644 index 000000000..ad7dc1ac1 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.c @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFBParametersResponseCDMA2000-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_CSFBParametersResponseCDMA2000_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersResponseCDMA2000_r8_IEs, rand), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAND_CDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rand" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersResponseCDMA2000_r8_IEs, mobilityParameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityParametersCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityParameters" + }, + { ATF_POINTER, 1, offsetof(struct CSFBParametersResponseCDMA2000_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CSFBParametersResponseCDMA2000_r8_IEs_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFBParametersResponseCDMA2000_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rand at 218 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mobilityParameters at 219 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 220 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFBParametersResponseCDMA2000_r8_IEs_specs_1 = { + sizeof(struct CSFBParametersResponseCDMA2000_r8_IEs), + offsetof(struct CSFBParametersResponseCDMA2000_r8_IEs, _asn_ctx), + asn_MAP_CSFBParametersResponseCDMA2000_r8_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CSFBParametersResponseCDMA2000_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs = { + "CSFBParametersResponseCDMA2000-r8-IEs", + "CSFBParametersResponseCDMA2000-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1, + sizeof(asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFBParametersResponseCDMA2000_r8_IEs_1, + 3, /* Elements count */ + &asn_SPC_CSFBParametersResponseCDMA2000_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h b/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h new file mode 100644 index 000000000..d4cab9b24 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFBParametersResponseCDMA2000_r8_IEs_H_ +#define _CSFBParametersResponseCDMA2000_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "RAND-CDMA2000.h" +#include "MobilityParametersCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CSFBParametersResponseCDMA2000_v8a0_IEs; + +/* CSFBParametersResponseCDMA2000-r8-IEs */ +typedef struct CSFBParametersResponseCDMA2000_r8_IEs { + RAND_CDMA2000_t rand; + MobilityParametersCDMA2000_t mobilityParameters; + struct CSFBParametersResponseCDMA2000_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFBParametersResponseCDMA2000_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CSFBParametersResponseCDMA2000-v8a0-IEs.h" + +#endif /* _CSFBParametersResponseCDMA2000_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.c b/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.c new file mode 100644 index 000000000..cd5ea94b2 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFBParametersResponseCDMA2000-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct CSFBParametersResponseCDMA2000_v8a0_IEs__nonCriticalExtension), + offsetof(struct CSFBParametersResponseCDMA2000_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSFBParametersResponseCDMA2000_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct CSFBParametersResponseCDMA2000_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct CSFBParametersResponseCDMA2000_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CSFBParametersResponseCDMA2000_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFBParametersResponseCDMA2000_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 224 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 225 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFBParametersResponseCDMA2000_v8a0_IEs_specs_1 = { + sizeof(struct CSFBParametersResponseCDMA2000_v8a0_IEs), + offsetof(struct CSFBParametersResponseCDMA2000_v8a0_IEs, _asn_ctx), + asn_MAP_CSFBParametersResponseCDMA2000_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CSFBParametersResponseCDMA2000_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs = { + "CSFBParametersResponseCDMA2000-v8a0-IEs", + "CSFBParametersResponseCDMA2000-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1, + sizeof(asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFBParametersResponseCDMA2000_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_CSFBParametersResponseCDMA2000_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h b/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h new file mode 100644 index 000000000..9a634c977 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFBParametersResponseCDMA2000_v8a0_IEs_H_ +#define _CSFBParametersResponseCDMA2000_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CSFBParametersResponseCDMA2000-v8a0-IEs */ +typedef struct CSFBParametersResponseCDMA2000_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct CSFBParametersResponseCDMA2000_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFBParametersResponseCDMA2000_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFBParametersResponseCDMA2000_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSFBParametersResponseCDMA2000_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000.c b/lte/rrc/asn/CSFBParametersResponseCDMA2000.c new file mode 100644 index 000000000..8623fddd2 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersResponseCDMA2000.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSFBParametersResponseCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_5 = { + sizeof(struct CSFBParametersResponseCDMA2000__criticalExtensions__criticalExtensionsFuture), + offsetof(struct CSFBParametersResponseCDMA2000__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_5 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_5, + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_5, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersResponseCDMA2000__criticalExtensions, choice.csfbParametersResponseCDMA2000_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFBParametersResponseCDMA2000_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfbParametersResponseCDMA2000-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersResponseCDMA2000__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csfbParametersResponseCDMA2000-r8 at 212 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 213 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct CSFBParametersResponseCDMA2000__criticalExtensions), + offsetof(struct CSFBParametersResponseCDMA2000__criticalExtensions, _asn_ctx), + offsetof(struct CSFBParametersResponseCDMA2000__criticalExtensions, present), + sizeof(((struct CSFBParametersResponseCDMA2000__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSFBParametersResponseCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersResponseCDMA2000, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSFBParametersResponseCDMA2000, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_CSFBParametersResponseCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSFBParametersResponseCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 210 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 212 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSFBParametersResponseCDMA2000_specs_1 = { + sizeof(struct CSFBParametersResponseCDMA2000), + offsetof(struct CSFBParametersResponseCDMA2000, _asn_ctx), + asn_MAP_CSFBParametersResponseCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSFBParametersResponseCDMA2000 = { + "CSFBParametersResponseCDMA2000", + "CSFBParametersResponseCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSFBParametersResponseCDMA2000_tags_1, + sizeof(asn_DEF_CSFBParametersResponseCDMA2000_tags_1) + /sizeof(asn_DEF_CSFBParametersResponseCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_CSFBParametersResponseCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_CSFBParametersResponseCDMA2000_tags_1) + /sizeof(asn_DEF_CSFBParametersResponseCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSFBParametersResponseCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_CSFBParametersResponseCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000.h b/lte/rrc/asn/CSFBParametersResponseCDMA2000.h new file mode 100644 index 000000000..ed1dfea69 --- /dev/null +++ b/lte/rrc/asn/CSFBParametersResponseCDMA2000.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSFBParametersResponseCDMA2000_H_ +#define _CSFBParametersResponseCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "CSFBParametersResponseCDMA2000-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CSFBParametersResponseCDMA2000__criticalExtensions_PR { + CSFBParametersResponseCDMA2000__criticalExtensions_PR_NOTHING, /* No components present */ + CSFBParametersResponseCDMA2000__criticalExtensions_PR_csfbParametersResponseCDMA2000_r8, + CSFBParametersResponseCDMA2000__criticalExtensions_PR_criticalExtensionsFuture +} CSFBParametersResponseCDMA2000__criticalExtensions_PR; + +/* CSFBParametersResponseCDMA2000 */ +typedef struct CSFBParametersResponseCDMA2000 { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct CSFBParametersResponseCDMA2000__criticalExtensions { + CSFBParametersResponseCDMA2000__criticalExtensions_PR present; + union CSFBParametersResponseCDMA2000__criticalExtensions_u { + CSFBParametersResponseCDMA2000_r8_IEs_t csfbParametersResponseCDMA2000_r8; + struct CSFBParametersResponseCDMA2000__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSFBParametersResponseCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSFBParametersResponseCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSFBParametersResponseCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CSG-AllowedReportingCells-r9.c b/lte/rrc/asn/CSG-AllowedReportingCells-r9.c new file mode 100644 index 000000000..7c75e7818 --- /dev/null +++ b/lte/rrc/asn/CSG-AllowedReportingCells-r9.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSG-AllowedReportingCells-r9.h" + +static asn_TYPE_member_t asn_MBR_CSG_AllowedReportingCells_r9_1[] = { + { ATF_POINTER, 1, offsetof(struct CSG_AllowedReportingCells_r9, physCellIdRangeUTRA_FDDList_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdRangeUTRA_FDDList_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdRangeUTRA-FDDList-r9" + }, +}; +static int asn_MAP_CSG_AllowedReportingCells_r9_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_CSG_AllowedReportingCells_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSG_AllowedReportingCells_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* physCellIdRangeUTRA-FDDList-r9 at 3345 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSG_AllowedReportingCells_r9_specs_1 = { + sizeof(struct CSG_AllowedReportingCells_r9), + offsetof(struct CSG_AllowedReportingCells_r9, _asn_ctx), + asn_MAP_CSG_AllowedReportingCells_r9_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_CSG_AllowedReportingCells_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSG_AllowedReportingCells_r9 = { + "CSG-AllowedReportingCells-r9", + "CSG-AllowedReportingCells-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSG_AllowedReportingCells_r9_tags_1, + sizeof(asn_DEF_CSG_AllowedReportingCells_r9_tags_1) + /sizeof(asn_DEF_CSG_AllowedReportingCells_r9_tags_1[0]), /* 1 */ + asn_DEF_CSG_AllowedReportingCells_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CSG_AllowedReportingCells_r9_tags_1) + /sizeof(asn_DEF_CSG_AllowedReportingCells_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSG_AllowedReportingCells_r9_1, + 1, /* Elements count */ + &asn_SPC_CSG_AllowedReportingCells_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSG-AllowedReportingCells-r9.h b/lte/rrc/asn/CSG-AllowedReportingCells-r9.h new file mode 100644 index 000000000..78a67766e --- /dev/null +++ b/lte/rrc/asn/CSG-AllowedReportingCells-r9.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSG_AllowedReportingCells_r9_H_ +#define _CSG_AllowedReportingCells_r9_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysCellIdRangeUTRA_FDDList_r9; + +/* CSG-AllowedReportingCells-r9 */ +typedef struct CSG_AllowedReportingCells_r9 { + struct PhysCellIdRangeUTRA_FDDList_r9 *physCellIdRangeUTRA_FDDList_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSG_AllowedReportingCells_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CSG_AllowedReportingCells_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysCellIdRangeUTRA-FDDList-r9.h" + +#endif /* _CSG_AllowedReportingCells_r9_H_ */ +#include diff --git a/lte/rrc/asn/CSG-Identity.c b/lte/rrc/asn/CSG-Identity.c index e08ae7deb..823a99521 100644 --- a/lte/rrc/asn/CSG-Identity.c +++ b/lte/rrc/asn/CSG-Identity.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "CSG-Identity.h" @@ -45,7 +46,6 @@ static void CSG_Identity_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; - td->check_constraints = asn_DEF_BIT_STRING.check_constraints; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; @@ -118,12 +118,12 @@ CSG_Identity_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_CSG_Identity_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_CSG_Identity_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 27, 27 } /* (SIZE(27..27)) */, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_CSG_Identity_tags_1[] = { +static ber_tlv_tag_t asn_DEF_CSG_Identity_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_CSG_Identity = { diff --git a/lte/rrc/asn/CSG-Identity.h b/lte/rrc/asn/CSG-Identity.h index d5c74fcaa..5c06b1cfb 100644 --- a/lte/rrc/asn/CSG-Identity.h +++ b/lte/rrc/asn/CSG-Identity.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _CSG_Identity_H_ diff --git a/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.c b/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.c new file mode 100644 index 000000000..78a06a817 --- /dev/null +++ b/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.c @@ -0,0 +1,493 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSG-ProximityIndicationParameters-r9.h" + +static int +intraFreqProximityIndication_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +intraFreqProximityIndication_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +intraFreqProximityIndication_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +intraFreqProximityIndication_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +intraFreqProximityIndication_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +intraFreqProximityIndication_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +intraFreqProximityIndication_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +intraFreqProximityIndication_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +intraFreqProximityIndication_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + intraFreqProximityIndication_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +interFreqProximityIndication_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +interFreqProximityIndication_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +interFreqProximityIndication_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +interFreqProximityIndication_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +interFreqProximityIndication_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +interFreqProximityIndication_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +interFreqProximityIndication_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +interFreqProximityIndication_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +interFreqProximityIndication_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + interFreqProximityIndication_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +utran_ProximityIndication_r9_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +utran_ProximityIndication_r9_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +utran_ProximityIndication_r9_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +utran_ProximityIndication_r9_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +utran_ProximityIndication_r9_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +utran_ProximityIndication_r9_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +utran_ProximityIndication_r9_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +utran_ProximityIndication_r9_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +utran_ProximityIndication_r9_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + utran_ProximityIndication_r9_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_intraFreqProximityIndication_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_interFreqProximityIndication_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_utran_ProximityIndication_r9_constr_6 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_intraFreqProximityIndication_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_intraFreqProximityIndication_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_intraFreqProximityIndication_r9_specs_2 = { + asn_MAP_intraFreqProximityIndication_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_intraFreqProximityIndication_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_intraFreqProximityIndication_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_intraFreqProximityIndication_r9_2 = { + "intraFreqProximityIndication-r9", + "intraFreqProximityIndication-r9", + intraFreqProximityIndication_r9_2_free, + intraFreqProximityIndication_r9_2_print, + intraFreqProximityIndication_r9_2_constraint, + intraFreqProximityIndication_r9_2_decode_ber, + intraFreqProximityIndication_r9_2_encode_der, + intraFreqProximityIndication_r9_2_decode_xer, + intraFreqProximityIndication_r9_2_encode_xer, + intraFreqProximityIndication_r9_2_decode_uper, + intraFreqProximityIndication_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_intraFreqProximityIndication_r9_tags_2, + sizeof(asn_DEF_intraFreqProximityIndication_r9_tags_2) + /sizeof(asn_DEF_intraFreqProximityIndication_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_intraFreqProximityIndication_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_intraFreqProximityIndication_r9_tags_2) + /sizeof(asn_DEF_intraFreqProximityIndication_r9_tags_2[0]), /* 2 */ + &asn_PER_type_intraFreqProximityIndication_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_intraFreqProximityIndication_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_interFreqProximityIndication_r9_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_interFreqProximityIndication_r9_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_interFreqProximityIndication_r9_specs_4 = { + asn_MAP_interFreqProximityIndication_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_interFreqProximityIndication_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_interFreqProximityIndication_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_interFreqProximityIndication_r9_4 = { + "interFreqProximityIndication-r9", + "interFreqProximityIndication-r9", + interFreqProximityIndication_r9_4_free, + interFreqProximityIndication_r9_4_print, + interFreqProximityIndication_r9_4_constraint, + interFreqProximityIndication_r9_4_decode_ber, + interFreqProximityIndication_r9_4_encode_der, + interFreqProximityIndication_r9_4_decode_xer, + interFreqProximityIndication_r9_4_encode_xer, + interFreqProximityIndication_r9_4_decode_uper, + interFreqProximityIndication_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_interFreqProximityIndication_r9_tags_4, + sizeof(asn_DEF_interFreqProximityIndication_r9_tags_4) + /sizeof(asn_DEF_interFreqProximityIndication_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_interFreqProximityIndication_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_interFreqProximityIndication_r9_tags_4) + /sizeof(asn_DEF_interFreqProximityIndication_r9_tags_4[0]), /* 2 */ + &asn_PER_type_interFreqProximityIndication_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_interFreqProximityIndication_r9_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_utran_ProximityIndication_r9_value2enum_6[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_utran_ProximityIndication_r9_enum2value_6[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_utran_ProximityIndication_r9_specs_6 = { + asn_MAP_utran_ProximityIndication_r9_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_utran_ProximityIndication_r9_enum2value_6, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_utran_ProximityIndication_r9_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_utran_ProximityIndication_r9_6 = { + "utran-ProximityIndication-r9", + "utran-ProximityIndication-r9", + utran_ProximityIndication_r9_6_free, + utran_ProximityIndication_r9_6_print, + utran_ProximityIndication_r9_6_constraint, + utran_ProximityIndication_r9_6_decode_ber, + utran_ProximityIndication_r9_6_encode_der, + utran_ProximityIndication_r9_6_decode_xer, + utran_ProximityIndication_r9_6_encode_xer, + utran_ProximityIndication_r9_6_decode_uper, + utran_ProximityIndication_r9_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_utran_ProximityIndication_r9_tags_6, + sizeof(asn_DEF_utran_ProximityIndication_r9_tags_6) + /sizeof(asn_DEF_utran_ProximityIndication_r9_tags_6[0]) - 1, /* 1 */ + asn_DEF_utran_ProximityIndication_r9_tags_6, /* Same as above */ + sizeof(asn_DEF_utran_ProximityIndication_r9_tags_6) + /sizeof(asn_DEF_utran_ProximityIndication_r9_tags_6[0]), /* 2 */ + &asn_PER_type_utran_ProximityIndication_r9_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_utran_ProximityIndication_r9_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSG_ProximityIndicationParameters_r9_1[] = { + { ATF_POINTER, 3, offsetof(struct CSG_ProximityIndicationParameters_r9, intraFreqProximityIndication_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_intraFreqProximityIndication_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraFreqProximityIndication-r9" + }, + { ATF_POINTER, 2, offsetof(struct CSG_ProximityIndicationParameters_r9, interFreqProximityIndication_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_interFreqProximityIndication_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqProximityIndication-r9" + }, + { ATF_POINTER, 1, offsetof(struct CSG_ProximityIndicationParameters_r9, utran_ProximityIndication_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_utran_ProximityIndication_r9_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utran-ProximityIndication-r9" + }, +}; +static int asn_MAP_CSG_ProximityIndicationParameters_r9_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSG_ProximityIndicationParameters_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* intraFreqProximityIndication-r9 at 3993 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interFreqProximityIndication-r9 at 3994 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* utran-ProximityIndication-r9 at 3995 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSG_ProximityIndicationParameters_r9_specs_1 = { + sizeof(struct CSG_ProximityIndicationParameters_r9), + offsetof(struct CSG_ProximityIndicationParameters_r9, _asn_ctx), + asn_MAP_CSG_ProximityIndicationParameters_r9_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_CSG_ProximityIndicationParameters_r9_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSG_ProximityIndicationParameters_r9 = { + "CSG-ProximityIndicationParameters-r9", + "CSG-ProximityIndicationParameters-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1, + sizeof(asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1) + /sizeof(asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1[0]), /* 1 */ + asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1) + /sizeof(asn_DEF_CSG_ProximityIndicationParameters_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSG_ProximityIndicationParameters_r9_1, + 3, /* Elements count */ + &asn_SPC_CSG_ProximityIndicationParameters_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.h b/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.h new file mode 100644 index 000000000..c90ac5a39 --- /dev/null +++ b/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSG_ProximityIndicationParameters_r9_H_ +#define _CSG_ProximityIndicationParameters_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CSG_ProximityIndicationParameters_r9__intraFreqProximityIndication_r9 { + CSG_ProximityIndicationParameters_r9__intraFreqProximityIndication_r9_supported = 0 +} e_CSG_ProximityIndicationParameters_r9__intraFreqProximityIndication_r9; +typedef enum CSG_ProximityIndicationParameters_r9__interFreqProximityIndication_r9 { + CSG_ProximityIndicationParameters_r9__interFreqProximityIndication_r9_supported = 0 +} e_CSG_ProximityIndicationParameters_r9__interFreqProximityIndication_r9; +typedef enum CSG_ProximityIndicationParameters_r9__utran_ProximityIndication_r9 { + CSG_ProximityIndicationParameters_r9__utran_ProximityIndication_r9_supported = 0 +} e_CSG_ProximityIndicationParameters_r9__utran_ProximityIndication_r9; + +/* CSG-ProximityIndicationParameters-r9 */ +typedef struct CSG_ProximityIndicationParameters_r9 { + long *intraFreqProximityIndication_r9 /* OPTIONAL */; + long *interFreqProximityIndication_r9 /* OPTIONAL */; + long *utran_ProximityIndication_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSG_ProximityIndicationParameters_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_intraFreqProximityIndication_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_interFreqProximityIndication_r9_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_utran_ProximityIndication_r9_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CSG_ProximityIndicationParameters_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSG_ProximityIndicationParameters_r9_H_ */ +#include diff --git a/lte/rrc/asn/CSI-RS-Config-r10.c b/lte/rrc/asn/CSI-RS-Config-r10.c new file mode 100644 index 000000000..7e4466b89 --- /dev/null +++ b/lte/rrc/asn/CSI-RS-Config-r10.c @@ -0,0 +1,643 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CSI-RS-Config-r10.h" + +static int +antennaPortsCount_r10_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +antennaPortsCount_r10_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +antennaPortsCount_r10_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +antennaPortsCount_r10_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +antennaPortsCount_r10_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +antennaPortsCount_r10_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +antennaPortsCount_r10_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +antennaPortsCount_r10_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +antennaPortsCount_r10_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +antennaPortsCount_r10_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + antennaPortsCount_r10_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_resourceConfig_r10_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_subframeConfig_r10_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 154)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p_C_r10_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -8 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_zeroTxPowerResourceConfigList_r10_constraint_15(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_zeroTxPowerSubframeConfig_r10_constraint_15(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 154)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_antennaPortsCount_r10_constr_5 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_resourceConfig_r10_constr_10 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_subframeConfig_r10_constr_11 = { + { APC_CONSTRAINED, 8, 8, 0, 154 } /* (0..154) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p_C_r10_constr_12 = { + { APC_CONSTRAINED, 5, 5, -8, 15 } /* (-8..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_csi_RS_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_zeroTxPowerResourceConfigList_r10_constr_16 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_zeroTxPowerSubframeConfig_r10_constr_17 = { + { APC_CONSTRAINED, 8, 8, 0, 154 } /* (0..154) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_zeroTxPowerCSI_RS_r10_constr_13 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_antennaPortsCount_r10_value2enum_5[] = { + { 0, 3, "an1" }, + { 1, 3, "an2" }, + { 2, 3, "an4" }, + { 3, 3, "an8" } +}; +static unsigned int asn_MAP_antennaPortsCount_r10_enum2value_5[] = { + 0, /* an1(0) */ + 1, /* an2(1) */ + 2, /* an4(2) */ + 3 /* an8(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_antennaPortsCount_r10_specs_5 = { + asn_MAP_antennaPortsCount_r10_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_antennaPortsCount_r10_enum2value_5, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_antennaPortsCount_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_antennaPortsCount_r10_5 = { + "antennaPortsCount-r10", + "antennaPortsCount-r10", + antennaPortsCount_r10_5_free, + antennaPortsCount_r10_5_print, + antennaPortsCount_r10_5_constraint, + antennaPortsCount_r10_5_decode_ber, + antennaPortsCount_r10_5_encode_der, + antennaPortsCount_r10_5_decode_xer, + antennaPortsCount_r10_5_encode_xer, + antennaPortsCount_r10_5_decode_uper, + antennaPortsCount_r10_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_antennaPortsCount_r10_tags_5, + sizeof(asn_DEF_antennaPortsCount_r10_tags_5) + /sizeof(asn_DEF_antennaPortsCount_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_antennaPortsCount_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_antennaPortsCount_r10_tags_5) + /sizeof(asn_DEF_antennaPortsCount_r10_tags_5[0]), /* 2 */ + &asn_PER_type_antennaPortsCount_r10_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_antennaPortsCount_r10_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__csi_RS_r10__setup, antennaPortsCount_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_antennaPortsCount_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaPortsCount-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__csi_RS_r10__setup, resourceConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_resourceConfig_r10_constraint_4, + &asn_PER_memb_resourceConfig_r10_constr_10, + 0, + "resourceConfig-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__csi_RS_r10__setup, subframeConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_subframeConfig_r10_constraint_4, + &asn_PER_memb_subframeConfig_r10_constr_11, + 0, + "subframeConfig-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__csi_RS_r10__setup, p_C_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p_C_r10_constraint_4, + &asn_PER_memb_p_C_r10_constr_12, + 0, + "p-C-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* antennaPortsCount-r10 at 1962 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* resourceConfig-r10 at 1963 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* subframeConfig-r10 at 1964 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* p-C-r10 at 1965 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_4 = { + sizeof(struct CSI_RS_Config_r10__csi_RS_r10__setup), + offsetof(struct CSI_RS_Config_r10__csi_RS_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_4, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_4 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_4, + sizeof(asn_DEF_setup_tags_4) + /sizeof(asn_DEF_setup_tags_4[0]) - 1, /* 1 */ + asn_DEF_setup_tags_4, /* Same as above */ + sizeof(asn_DEF_setup_tags_4) + /sizeof(asn_DEF_setup_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_4, + 4, /* Elements count */ + &asn_SPC_setup_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_csi_RS_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__csi_RS_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__csi_RS_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_csi_RS_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1960 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1962 */ +}; +static asn_CHOICE_specifics_t asn_SPC_csi_RS_r10_specs_2 = { + sizeof(struct CSI_RS_Config_r10__csi_RS_r10), + offsetof(struct CSI_RS_Config_r10__csi_RS_r10, _asn_ctx), + offsetof(struct CSI_RS_Config_r10__csi_RS_r10, present), + sizeof(((struct CSI_RS_Config_r10__csi_RS_r10 *)0)->present), + asn_MAP_csi_RS_r10_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_csi_RS_r10_2 = { + "csi-RS-r10", + "csi-RS-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_csi_RS_r10_constr_2, + asn_MBR_csi_RS_r10_2, + 2, /* Elements count */ + &asn_SPC_csi_RS_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_15[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10__setup, zeroTxPowerResourceConfigList_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_zeroTxPowerResourceConfigList_r10_constraint_15, + &asn_PER_memb_zeroTxPowerResourceConfigList_r10_constr_16, + 0, + "zeroTxPowerResourceConfigList-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10__setup, zeroTxPowerSubframeConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_zeroTxPowerSubframeConfig_r10_constraint_15, + &asn_PER_memb_zeroTxPowerSubframeConfig_r10_constr_17, + 0, + "zeroTxPowerSubframeConfig-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_15[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_15[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* zeroTxPowerResourceConfigList-r10 at 1971 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* zeroTxPowerSubframeConfig-r10 at 1972 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_15 = { + sizeof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10__setup), + offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_15, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_15 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_15, + sizeof(asn_DEF_setup_tags_15) + /sizeof(asn_DEF_setup_tags_15[0]) - 1, /* 1 */ + asn_DEF_setup_tags_15, /* Same as above */ + sizeof(asn_DEF_setup_tags_15) + /sizeof(asn_DEF_setup_tags_15[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_15, + 2, /* Elements count */ + &asn_SPC_setup_specs_15 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_zeroTxPowerCSI_RS_r10_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_15, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_zeroTxPowerCSI_RS_r10_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 1969 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 1971 */ +}; +static asn_CHOICE_specifics_t asn_SPC_zeroTxPowerCSI_RS_r10_specs_13 = { + sizeof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10), + offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10, _asn_ctx), + offsetof(struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10, present), + sizeof(((struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10 *)0)->present), + asn_MAP_zeroTxPowerCSI_RS_r10_tag2el_13, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_zeroTxPowerCSI_RS_r10_13 = { + "zeroTxPowerCSI-RS-r10", + "zeroTxPowerCSI-RS-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_zeroTxPowerCSI_RS_r10_constr_13, + asn_MBR_zeroTxPowerCSI_RS_r10_13, + 2, /* Elements count */ + &asn_SPC_zeroTxPowerCSI_RS_r10_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CSI_RS_Config_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct CSI_RS_Config_r10, csi_RS_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_csi_RS_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-RS-r10" + }, + { ATF_POINTER, 1, offsetof(struct CSI_RS_Config_r10, zeroTxPowerCSI_RS_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_zeroTxPowerCSI_RS_r10_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "zeroTxPowerCSI-RS-r10" + }, +}; +static int asn_MAP_CSI_RS_Config_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_CSI_RS_Config_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CSI_RS_Config_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csi-RS-r10 at 1960 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* zeroTxPowerCSI-RS-r10 at 1969 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CSI_RS_Config_r10_specs_1 = { + sizeof(struct CSI_RS_Config_r10), + offsetof(struct CSI_RS_Config_r10, _asn_ctx), + asn_MAP_CSI_RS_Config_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CSI_RS_Config_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CSI_RS_Config_r10 = { + "CSI-RS-Config-r10", + "CSI-RS-Config-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CSI_RS_Config_r10_tags_1, + sizeof(asn_DEF_CSI_RS_Config_r10_tags_1) + /sizeof(asn_DEF_CSI_RS_Config_r10_tags_1[0]), /* 1 */ + asn_DEF_CSI_RS_Config_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CSI_RS_Config_r10_tags_1) + /sizeof(asn_DEF_CSI_RS_Config_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CSI_RS_Config_r10_1, + 2, /* Elements count */ + &asn_SPC_CSI_RS_Config_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CSI-RS-Config-r10.h b/lte/rrc/asn/CSI-RS-Config-r10.h new file mode 100644 index 000000000..f7f1fbd8f --- /dev/null +++ b/lte/rrc/asn/CSI-RS-Config-r10.h @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CSI_RS_Config_r10_H_ +#define _CSI_RS_Config_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CSI_RS_Config_r10__csi_RS_r10_PR { + CSI_RS_Config_r10__csi_RS_r10_PR_NOTHING, /* No components present */ + CSI_RS_Config_r10__csi_RS_r10_PR_release, + CSI_RS_Config_r10__csi_RS_r10_PR_setup +} CSI_RS_Config_r10__csi_RS_r10_PR; +typedef enum CSI_RS_Config_r10__csi_RS_r10__setup__antennaPortsCount_r10 { + CSI_RS_Config_r10__csi_RS_r10__setup__antennaPortsCount_r10_an1 = 0, + CSI_RS_Config_r10__csi_RS_r10__setup__antennaPortsCount_r10_an2 = 1, + CSI_RS_Config_r10__csi_RS_r10__setup__antennaPortsCount_r10_an4 = 2, + CSI_RS_Config_r10__csi_RS_r10__setup__antennaPortsCount_r10_an8 = 3 +} e_CSI_RS_Config_r10__csi_RS_r10__setup__antennaPortsCount_r10; +typedef enum CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_PR { + CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_PR_NOTHING, /* No components present */ + CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_PR_release, + CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_PR_setup +} CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_PR; + +/* CSI-RS-Config-r10 */ +typedef struct CSI_RS_Config_r10 { + struct CSI_RS_Config_r10__csi_RS_r10 { + CSI_RS_Config_r10__csi_RS_r10_PR present; + union CSI_RS_Config_r10__csi_RS_r10_u { + NULL_t release; + struct CSI_RS_Config_r10__csi_RS_r10__setup { + long antennaPortsCount_r10; + long resourceConfig_r10; + long subframeConfig_r10; + long p_C_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *csi_RS_r10; + struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10 { + CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_PR present; + union CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10_u { + NULL_t release; + struct CSI_RS_Config_r10__zeroTxPowerCSI_RS_r10__setup { + BIT_STRING_t zeroTxPowerResourceConfigList_r10; + long zeroTxPowerSubframeConfig_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *zeroTxPowerCSI_RS_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CSI_RS_Config_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_antennaPortsCount_r10_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CSI_RS_Config_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CSI_RS_Config_r10_H_ */ +#include diff --git a/lte/rrc/asn/CShift.c b/lte/rrc/asn/CShift.c new file mode 100644 index 000000000..6afd89fad --- /dev/null +++ b/lte/rrc/asn/CShift.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CShift.h" + +int +CShift_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeInteger.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +CShift_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +CShift_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CShift_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CShift_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CShift_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CShift_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CShift_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CShift_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CShift_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CShift_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CShift_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CShift_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CShift_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CShift_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CShift_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CShift_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CShift_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_CShift_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CShift = { + "CShift", + "CShift", + CShift_free, + CShift_print, + CShift_constraint, + CShift_decode_ber, + CShift_encode_der, + CShift_decode_xer, + CShift_encode_xer, + CShift_decode_uper, + CShift_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CShift_tags_1, + sizeof(asn_DEF_CShift_tags_1) + /sizeof(asn_DEF_CShift_tags_1[0]), /* 1 */ + asn_DEF_CShift_tags_1, /* Same as above */ + sizeof(asn_DEF_CShift_tags_1) + /sizeof(asn_DEF_CShift_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/CShift.h b/lte/rrc/asn/CShift.h new file mode 100644 index 000000000..8b7363070 --- /dev/null +++ b/lte/rrc/asn/CShift.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CShift_H_ +#define _CShift_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CShift */ +typedef long CShift_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CShift; +asn_struct_free_f CShift_free; +asn_struct_print_f CShift_print; +asn_constr_check_f CShift_constraint; +ber_type_decoder_f CShift_decode_ber; +der_type_encoder_f CShift_encode_der; +xer_type_decoder_f CShift_decode_xer; +xer_type_encoder_f CShift_encode_xer; +per_type_decoder_f CShift_decode_uper; +per_type_encoder_f CShift_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CShift_H_ */ +#include diff --git a/lte/rrc/asn/CarrierBandwidthEUTRA.c b/lte/rrc/asn/CarrierBandwidthEUTRA.c new file mode 100644 index 000000000..bf949ed40 --- /dev/null +++ b/lte/rrc/asn/CarrierBandwidthEUTRA.c @@ -0,0 +1,406 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierBandwidthEUTRA.h" + +static int +dl_Bandwidth_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dl_Bandwidth_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dl_Bandwidth_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dl_Bandwidth_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dl_Bandwidth_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dl_Bandwidth_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dl_Bandwidth_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dl_Bandwidth_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +ul_Bandwidth_19_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ul_Bandwidth_19_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ul_Bandwidth_19_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ul_Bandwidth_19_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_19_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ul_Bandwidth_19_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_19_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ul_Bandwidth_19_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_19_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ul_Bandwidth_19_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ul_Bandwidth_19_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_dl_Bandwidth_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ul_Bandwidth_constr_19 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_dl_Bandwidth_value2enum_2[] = { + { 0, 2, "n6" }, + { 1, 3, "n15" }, + { 2, 3, "n25" }, + { 3, 3, "n50" }, + { 4, 3, "n75" }, + { 5, 4, "n100" }, + { 6, 7, "spare10" }, + { 7, 6, "spare9" }, + { 8, 6, "spare8" }, + { 9, 6, "spare7" }, + { 10, 6, "spare6" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_dl_Bandwidth_enum2value_2[] = { + 5, /* n100(5) */ + 1, /* n15(1) */ + 2, /* n25(2) */ + 3, /* n50(3) */ + 0, /* n6(0) */ + 4, /* n75(4) */ + 15, /* spare1(15) */ + 6, /* spare10(6) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11, /* spare5(11) */ + 10, /* spare6(10) */ + 9, /* spare7(9) */ + 8, /* spare8(8) */ + 7 /* spare9(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dl_Bandwidth_specs_2 = { + asn_MAP_dl_Bandwidth_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_dl_Bandwidth_enum2value_2, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dl_Bandwidth_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dl_Bandwidth_2 = { + "dl-Bandwidth", + "dl-Bandwidth", + dl_Bandwidth_2_free, + dl_Bandwidth_2_print, + dl_Bandwidth_2_constraint, + dl_Bandwidth_2_decode_ber, + dl_Bandwidth_2_encode_der, + dl_Bandwidth_2_decode_xer, + dl_Bandwidth_2_encode_xer, + dl_Bandwidth_2_decode_uper, + dl_Bandwidth_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dl_Bandwidth_tags_2, + sizeof(asn_DEF_dl_Bandwidth_tags_2) + /sizeof(asn_DEF_dl_Bandwidth_tags_2[0]) - 1, /* 1 */ + asn_DEF_dl_Bandwidth_tags_2, /* Same as above */ + sizeof(asn_DEF_dl_Bandwidth_tags_2) + /sizeof(asn_DEF_dl_Bandwidth_tags_2[0]), /* 2 */ + &asn_PER_type_dl_Bandwidth_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dl_Bandwidth_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_ul_Bandwidth_value2enum_19[] = { + { 0, 2, "n6" }, + { 1, 3, "n15" }, + { 2, 3, "n25" }, + { 3, 3, "n50" }, + { 4, 3, "n75" }, + { 5, 4, "n100" }, + { 6, 7, "spare10" }, + { 7, 6, "spare9" }, + { 8, 6, "spare8" }, + { 9, 6, "spare7" }, + { 10, 6, "spare6" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_ul_Bandwidth_enum2value_19[] = { + 5, /* n100(5) */ + 1, /* n15(1) */ + 2, /* n25(2) */ + 3, /* n50(3) */ + 0, /* n6(0) */ + 4, /* n75(4) */ + 15, /* spare1(15) */ + 6, /* spare10(6) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11, /* spare5(11) */ + 10, /* spare6(10) */ + 9, /* spare7(9) */ + 8, /* spare8(8) */ + 7 /* spare9(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ul_Bandwidth_specs_19 = { + asn_MAP_ul_Bandwidth_value2enum_19, /* "tag" => N; sorted by tag */ + asn_MAP_ul_Bandwidth_enum2value_19, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ul_Bandwidth_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_Bandwidth_19 = { + "ul-Bandwidth", + "ul-Bandwidth", + ul_Bandwidth_19_free, + ul_Bandwidth_19_print, + ul_Bandwidth_19_constraint, + ul_Bandwidth_19_decode_ber, + ul_Bandwidth_19_encode_der, + ul_Bandwidth_19_decode_xer, + ul_Bandwidth_19_encode_xer, + ul_Bandwidth_19_decode_uper, + ul_Bandwidth_19_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_Bandwidth_tags_19, + sizeof(asn_DEF_ul_Bandwidth_tags_19) + /sizeof(asn_DEF_ul_Bandwidth_tags_19[0]) - 1, /* 1 */ + asn_DEF_ul_Bandwidth_tags_19, /* Same as above */ + sizeof(asn_DEF_ul_Bandwidth_tags_19) + /sizeof(asn_DEF_ul_Bandwidth_tags_19[0]), /* 2 */ + &asn_PER_type_ul_Bandwidth_constr_19, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ul_Bandwidth_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CarrierBandwidthEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierBandwidthEUTRA, dl_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dl_Bandwidth_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-Bandwidth" + }, + { ATF_POINTER, 1, offsetof(struct CarrierBandwidthEUTRA, ul_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ul_Bandwidth_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-Bandwidth" + }, +}; +static int asn_MAP_CarrierBandwidthEUTRA_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CarrierBandwidthEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierBandwidthEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-Bandwidth at 3008 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ul-Bandwidth at 3012 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierBandwidthEUTRA_specs_1 = { + sizeof(struct CarrierBandwidthEUTRA), + offsetof(struct CarrierBandwidthEUTRA, _asn_ctx), + asn_MAP_CarrierBandwidthEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CarrierBandwidthEUTRA_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierBandwidthEUTRA = { + "CarrierBandwidthEUTRA", + "CarrierBandwidthEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierBandwidthEUTRA_tags_1, + sizeof(asn_DEF_CarrierBandwidthEUTRA_tags_1) + /sizeof(asn_DEF_CarrierBandwidthEUTRA_tags_1[0]), /* 1 */ + asn_DEF_CarrierBandwidthEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierBandwidthEUTRA_tags_1) + /sizeof(asn_DEF_CarrierBandwidthEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierBandwidthEUTRA_1, + 2, /* Elements count */ + &asn_SPC_CarrierBandwidthEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierBandwidthEUTRA.h b/lte/rrc/asn/CarrierBandwidthEUTRA.h new file mode 100644 index 000000000..231683b06 --- /dev/null +++ b/lte/rrc/asn/CarrierBandwidthEUTRA.h @@ -0,0 +1,79 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierBandwidthEUTRA_H_ +#define _CarrierBandwidthEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CarrierBandwidthEUTRA__dl_Bandwidth { + CarrierBandwidthEUTRA__dl_Bandwidth_n6 = 0, + CarrierBandwidthEUTRA__dl_Bandwidth_n15 = 1, + CarrierBandwidthEUTRA__dl_Bandwidth_n25 = 2, + CarrierBandwidthEUTRA__dl_Bandwidth_n50 = 3, + CarrierBandwidthEUTRA__dl_Bandwidth_n75 = 4, + CarrierBandwidthEUTRA__dl_Bandwidth_n100 = 5, + CarrierBandwidthEUTRA__dl_Bandwidth_spare10 = 6, + CarrierBandwidthEUTRA__dl_Bandwidth_spare9 = 7, + CarrierBandwidthEUTRA__dl_Bandwidth_spare8 = 8, + CarrierBandwidthEUTRA__dl_Bandwidth_spare7 = 9, + CarrierBandwidthEUTRA__dl_Bandwidth_spare6 = 10, + CarrierBandwidthEUTRA__dl_Bandwidth_spare5 = 11, + CarrierBandwidthEUTRA__dl_Bandwidth_spare4 = 12, + CarrierBandwidthEUTRA__dl_Bandwidth_spare3 = 13, + CarrierBandwidthEUTRA__dl_Bandwidth_spare2 = 14, + CarrierBandwidthEUTRA__dl_Bandwidth_spare1 = 15 +} e_CarrierBandwidthEUTRA__dl_Bandwidth; +typedef enum CarrierBandwidthEUTRA__ul_Bandwidth { + CarrierBandwidthEUTRA__ul_Bandwidth_n6 = 0, + CarrierBandwidthEUTRA__ul_Bandwidth_n15 = 1, + CarrierBandwidthEUTRA__ul_Bandwidth_n25 = 2, + CarrierBandwidthEUTRA__ul_Bandwidth_n50 = 3, + CarrierBandwidthEUTRA__ul_Bandwidth_n75 = 4, + CarrierBandwidthEUTRA__ul_Bandwidth_n100 = 5, + CarrierBandwidthEUTRA__ul_Bandwidth_spare10 = 6, + CarrierBandwidthEUTRA__ul_Bandwidth_spare9 = 7, + CarrierBandwidthEUTRA__ul_Bandwidth_spare8 = 8, + CarrierBandwidthEUTRA__ul_Bandwidth_spare7 = 9, + CarrierBandwidthEUTRA__ul_Bandwidth_spare6 = 10, + CarrierBandwidthEUTRA__ul_Bandwidth_spare5 = 11, + CarrierBandwidthEUTRA__ul_Bandwidth_spare4 = 12, + CarrierBandwidthEUTRA__ul_Bandwidth_spare3 = 13, + CarrierBandwidthEUTRA__ul_Bandwidth_spare2 = 14, + CarrierBandwidthEUTRA__ul_Bandwidth_spare1 = 15 +} e_CarrierBandwidthEUTRA__ul_Bandwidth; + +/* CarrierBandwidthEUTRA */ +typedef struct CarrierBandwidthEUTRA { + long dl_Bandwidth; + long *ul_Bandwidth /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierBandwidthEUTRA_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_dl_Bandwidth_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_ul_Bandwidth_19; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierBandwidthEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierBandwidthEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqCDMA2000.c b/lte/rrc/asn/CarrierFreqCDMA2000.c new file mode 100644 index 000000000..797b2c7e8 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqCDMA2000.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqCDMA2000.h" + +static asn_TYPE_member_t asn_MBR_CarrierFreqCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqCDMA2000, bandClass), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClass" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqCDMA2000, arfcn), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "arfcn" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandClass at 2902 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* arfcn at 2904 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqCDMA2000_specs_1 = { + sizeof(struct CarrierFreqCDMA2000), + offsetof(struct CarrierFreqCDMA2000, _asn_ctx), + asn_MAP_CarrierFreqCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqCDMA2000 = { + "CarrierFreqCDMA2000", + "CarrierFreqCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqCDMA2000_tags_1, + sizeof(asn_DEF_CarrierFreqCDMA2000_tags_1) + /sizeof(asn_DEF_CarrierFreqCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqCDMA2000_tags_1) + /sizeof(asn_DEF_CarrierFreqCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_CarrierFreqCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqCDMA2000.h b/lte/rrc/asn/CarrierFreqCDMA2000.h new file mode 100644 index 000000000..00358537a --- /dev/null +++ b/lte/rrc/asn/CarrierFreqCDMA2000.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqCDMA2000_H_ +#define _CarrierFreqCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include "ARFCN-ValueCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqCDMA2000 */ +typedef struct CarrierFreqCDMA2000 { + BandclassCDMA2000_t bandClass; + ARFCN_ValueCDMA2000_t arfcn; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqEUTRA.c b/lte/rrc/asn/CarrierFreqEUTRA.c new file mode 100644 index 000000000..57031a749 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqEUTRA.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqEUTRA.h" + +static asn_TYPE_member_t asn_MBR_CarrierFreqEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqEUTRA, dl_CarrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-CarrierFreq" + }, + { ATF_POINTER, 1, offsetof(struct CarrierFreqEUTRA, ul_CarrierFreq), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-CarrierFreq" + }, +}; +static int asn_MAP_CarrierFreqEUTRA_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CarrierFreqEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-CarrierFreq at 3018 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ul-CarrierFreq at 3019 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqEUTRA_specs_1 = { + sizeof(struct CarrierFreqEUTRA), + offsetof(struct CarrierFreqEUTRA, _asn_ctx), + asn_MAP_CarrierFreqEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CarrierFreqEUTRA_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqEUTRA = { + "CarrierFreqEUTRA", + "CarrierFreqEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqEUTRA_tags_1, + sizeof(asn_DEF_CarrierFreqEUTRA_tags_1) + /sizeof(asn_DEF_CarrierFreqEUTRA_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqEUTRA_tags_1) + /sizeof(asn_DEF_CarrierFreqEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqEUTRA_1, + 2, /* Elements count */ + &asn_SPC_CarrierFreqEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqEUTRA.h b/lte/rrc/asn/CarrierFreqEUTRA.h new file mode 100644 index 000000000..e24ecd737 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqEUTRA.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqEUTRA_H_ +#define _CarrierFreqEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqEUTRA */ +typedef struct CarrierFreqEUTRA { + ARFCN_ValueEUTRA_t dl_CarrierFreq; + ARFCN_ValueEUTRA_t *ul_CarrierFreq /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqGERAN.c b/lte/rrc/asn/CarrierFreqGERAN.c new file mode 100644 index 000000000..d5cd75881 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqGERAN.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqGERAN.h" + +static asn_TYPE_member_t asn_MBR_CarrierFreqGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqGERAN, arfcn), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "arfcn" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqGERAN, bandIndicator), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandIndicatorGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandIndicator" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* arfcn at 2908 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* bandIndicator at 2910 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqGERAN_specs_1 = { + sizeof(struct CarrierFreqGERAN), + offsetof(struct CarrierFreqGERAN, _asn_ctx), + asn_MAP_CarrierFreqGERAN_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqGERAN = { + "CarrierFreqGERAN", + "CarrierFreqGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqGERAN_tags_1, + sizeof(asn_DEF_CarrierFreqGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqGERAN_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqGERAN_1, + 2, /* Elements count */ + &asn_SPC_CarrierFreqGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqGERAN.h b/lte/rrc/asn/CarrierFreqGERAN.h new file mode 100644 index 000000000..ae0263236 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqGERAN.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqGERAN_H_ +#define _CarrierFreqGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueGERAN.h" +#include "BandIndicatorGERAN.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqGERAN */ +typedef struct CarrierFreqGERAN { + ARFCN_ValueGERAN_t arfcn; + BandIndicatorGERAN_t bandIndicator; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqGERAN_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqListUTRA-FDD.c b/lte/rrc/asn/CarrierFreqListUTRA-FDD.c new file mode 100644 index 000000000..2328ea00e --- /dev/null +++ b/lte/rrc/asn/CarrierFreqListUTRA-FDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqListUTRA-FDD.h" + +static asn_per_constraints_t asn_PER_type_CarrierFreqListUTRA_FDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CarrierFreqListUTRA_FDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CarrierFreqUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqListUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CarrierFreqListUTRA_FDD_specs_1 = { + sizeof(struct CarrierFreqListUTRA_FDD), + offsetof(struct CarrierFreqListUTRA_FDD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqListUTRA_FDD = { + "CarrierFreqListUTRA-FDD", + "CarrierFreqListUTRA-FDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqListUTRA_FDD_tags_1, + sizeof(asn_DEF_CarrierFreqListUTRA_FDD_tags_1) + /sizeof(asn_DEF_CarrierFreqListUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqListUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqListUTRA_FDD_tags_1) + /sizeof(asn_DEF_CarrierFreqListUTRA_FDD_tags_1[0]), /* 1 */ + &asn_PER_type_CarrierFreqListUTRA_FDD_constr_1, + asn_MBR_CarrierFreqListUTRA_FDD_1, + 1, /* Single element */ + &asn_SPC_CarrierFreqListUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqListUTRA-FDD.h b/lte/rrc/asn/CarrierFreqListUTRA-FDD.h new file mode 100644 index 000000000..fe3e8efda --- /dev/null +++ b/lte/rrc/asn/CarrierFreqListUTRA-FDD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqListUTRA_FDD_H_ +#define _CarrierFreqListUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CarrierFreqUTRA_FDD; + +/* CarrierFreqListUTRA-FDD */ +typedef struct CarrierFreqListUTRA_FDD { + A_SEQUENCE_OF(struct CarrierFreqUTRA_FDD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqListUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqListUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqUTRA-FDD.h" + +#endif /* _CarrierFreqListUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c b/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c new file mode 100644 index 000000000..831f6dca8 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqListUTRA-TDD-r10.h" + +static asn_per_constraints_t asn_PER_type_CarrierFreqListUTRA_TDD_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 6 } /* (SIZE(1..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CarrierFreqListUTRA_TDD_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CarrierFreqListUTRA_TDD_r10_specs_1 = { + sizeof(struct CarrierFreqListUTRA_TDD_r10), + offsetof(struct CarrierFreqListUTRA_TDD_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqListUTRA_TDD_r10 = { + "CarrierFreqListUTRA-TDD-r10", + "CarrierFreqListUTRA-TDD-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1, + sizeof(asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1) + /sizeof(asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1) + /sizeof(asn_DEF_CarrierFreqListUTRA_TDD_r10_tags_1[0]), /* 1 */ + &asn_PER_type_CarrierFreqListUTRA_TDD_r10_constr_1, + asn_MBR_CarrierFreqListUTRA_TDD_r10_1, + 1, /* Single element */ + &asn_SPC_CarrierFreqListUTRA_TDD_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h b/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h new file mode 100644 index 000000000..5ed6ae9fe --- /dev/null +++ b/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqListUTRA_TDD_r10_H_ +#define _CarrierFreqListUTRA_TDD_r10_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqListUTRA-TDD-r10 */ +typedef struct CarrierFreqListUTRA_TDD_r10 { + A_SEQUENCE_OF(ARFCN_ValueUTRA_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqListUTRA_TDD_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqListUTRA_TDD_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqListUTRA_TDD_r10_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD.c b/lte/rrc/asn/CarrierFreqListUTRA-TDD.c new file mode 100644 index 000000000..43c13ee66 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqListUTRA-TDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqListUTRA-TDD.h" + +static asn_per_constraints_t asn_PER_type_CarrierFreqListUTRA_TDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CarrierFreqListUTRA_TDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CarrierFreqUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqListUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CarrierFreqListUTRA_TDD_specs_1 = { + sizeof(struct CarrierFreqListUTRA_TDD), + offsetof(struct CarrierFreqListUTRA_TDD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqListUTRA_TDD = { + "CarrierFreqListUTRA-TDD", + "CarrierFreqListUTRA-TDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqListUTRA_TDD_tags_1, + sizeof(asn_DEF_CarrierFreqListUTRA_TDD_tags_1) + /sizeof(asn_DEF_CarrierFreqListUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqListUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqListUTRA_TDD_tags_1) + /sizeof(asn_DEF_CarrierFreqListUTRA_TDD_tags_1[0]), /* 1 */ + &asn_PER_type_CarrierFreqListUTRA_TDD_constr_1, + asn_MBR_CarrierFreqListUTRA_TDD_1, + 1, /* Single element */ + &asn_SPC_CarrierFreqListUTRA_TDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD.h b/lte/rrc/asn/CarrierFreqListUTRA-TDD.h new file mode 100644 index 000000000..cd231ed92 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqListUTRA-TDD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqListUTRA_TDD_H_ +#define _CarrierFreqListUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CarrierFreqUTRA_TDD; + +/* CarrierFreqListUTRA-TDD */ +typedef struct CarrierFreqListUTRA_TDD { + A_SEQUENCE_OF(struct CarrierFreqUTRA_TDD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqListUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqListUTRA_TDD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqUTRA-TDD.h" + +#endif /* _CarrierFreqListUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqUTRA-FDD.c b/lte/rrc/asn/CarrierFreqUTRA-FDD.c new file mode 100644 index 000000000..4ea8b124c --- /dev/null +++ b/lte/rrc/asn/CarrierFreqUTRA-FDD.c @@ -0,0 +1,285 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqUTRA-FDD.h" + +static int +memb_q_RxLevMin_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -60 && value <= -13)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p_MaxUTRA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -50 && value <= 33)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_q_QualMin_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -24 && value <= 0)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_q_RxLevMin_constr_6 = { + { APC_CONSTRAINED, 6, 6, -60, -13 } /* (-60..-13) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p_MaxUTRA_constr_7 = { + { APC_CONSTRAINED, 7, 7, -50, 33 } /* (-50..33) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_q_QualMin_constr_8 = { + { APC_CONSTRAINED, 5, 5, -24, 0 } /* (-24..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_threshX_Q_r9_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD__threshX_Q_r9, threshX_HighQ_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-HighQ-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD__threshX_Q_r9, threshX_LowQ_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-LowQ-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_threshX_Q_r9_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_threshX_Q_r9_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* threshX-HighQ-r9 at 1621 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* threshX-LowQ-r9 at 1623 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_threshX_Q_r9_specs_9 = { + sizeof(struct CarrierFreqUTRA_FDD__threshX_Q_r9), + offsetof(struct CarrierFreqUTRA_FDD__threshX_Q_r9, _asn_ctx), + asn_MAP_threshX_Q_r9_tag2el_9, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_threshX_Q_r9_9 = { + "threshX-Q-r9", + "threshX-Q-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_threshX_Q_r9_tags_9, + sizeof(asn_DEF_threshX_Q_r9_tags_9) + /sizeof(asn_DEF_threshX_Q_r9_tags_9[0]) - 1, /* 1 */ + asn_DEF_threshX_Q_r9_tags_9, /* Same as above */ + sizeof(asn_DEF_threshX_Q_r9_tags_9) + /sizeof(asn_DEF_threshX_Q_r9_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_threshX_Q_r9_9, + 2, /* Elements count */ + &asn_SPC_threshX_Q_r9_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CarrierFreqUTRA_FDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_POINTER, 1, offsetof(struct CarrierFreqUTRA_FDD, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD, threshX_High), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-High" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD, threshX_Low), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-Low" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD, q_RxLevMin), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_q_RxLevMin_constraint_1, + &asn_PER_memb_q_RxLevMin_constr_6, + 0, + "q-RxLevMin" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD, p_MaxUTRA), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p_MaxUTRA_constraint_1, + &asn_PER_memb_p_MaxUTRA_constr_7, + 0, + "p-MaxUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_FDD, q_QualMin), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_q_QualMin_constraint_1, + &asn_PER_memb_q_QualMin_constr_8, + 0, + "q-QualMin" + }, + { ATF_POINTER, 1, offsetof(struct CarrierFreqUTRA_FDD, threshX_Q_r9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + 0, + &asn_DEF_threshX_Q_r9_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-Q-r9" + }, +}; +static int asn_MAP_CarrierFreqUTRA_FDD_oms_1[] = { 1, 7 }; +static ber_tlv_tag_t asn_DEF_CarrierFreqUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqUTRA_FDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 1613 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellReselectionPriority at 1614 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* threshX-High at 1615 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* threshX-Low at 1616 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* q-RxLevMin at 1617 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* p-MaxUTRA at 1618 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* q-QualMin at 1619 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* threshX-Q-r9 at 1621 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqUTRA_FDD_specs_1 = { + sizeof(struct CarrierFreqUTRA_FDD), + offsetof(struct CarrierFreqUTRA_FDD, _asn_ctx), + asn_MAP_CarrierFreqUTRA_FDD_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_CarrierFreqUTRA_FDD_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqUTRA_FDD = { + "CarrierFreqUTRA-FDD", + "CarrierFreqUTRA-FDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqUTRA_FDD_tags_1, + sizeof(asn_DEF_CarrierFreqUTRA_FDD_tags_1) + /sizeof(asn_DEF_CarrierFreqUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqUTRA_FDD_tags_1) + /sizeof(asn_DEF_CarrierFreqUTRA_FDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqUTRA_FDD_1, + 8, /* Elements count */ + &asn_SPC_CarrierFreqUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqUTRA-FDD.h b/lte/rrc/asn/CarrierFreqUTRA-FDD.h new file mode 100644 index 000000000..bd028302b --- /dev/null +++ b/lte/rrc/asn/CarrierFreqUTRA-FDD.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqUTRA_FDD_H_ +#define _CarrierFreqUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include "CellReselectionPriority.h" +#include "ReselectionThreshold.h" +#include +#include "ReselectionThresholdQ-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqUTRA-FDD */ +typedef struct CarrierFreqUTRA_FDD { + ARFCN_ValueUTRA_t carrierFreq; + CellReselectionPriority_t *cellReselectionPriority /* OPTIONAL */; + ReselectionThreshold_t threshX_High; + ReselectionThreshold_t threshX_Low; + long q_RxLevMin; + long p_MaxUTRA; + long q_QualMin; + struct CarrierFreqUTRA_FDD__threshX_Q_r9 { + ReselectionThresholdQ_r9_t threshX_HighQ_r9; + ReselectionThresholdQ_r9_t threshX_LowQ_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *threshX_Q_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqUTRA-TDD.c b/lte/rrc/asn/CarrierFreqUTRA-TDD.c new file mode 100644 index 000000000..3daaea6a7 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqUTRA-TDD.c @@ -0,0 +1,172 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqUTRA-TDD.h" + +static int +memb_q_RxLevMin_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -60 && value <= -13)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p_MaxUTRA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -50 && value <= 33)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_q_RxLevMin_constr_6 = { + { APC_CONSTRAINED, 6, 6, -60, -13 } /* (-60..-13) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p_MaxUTRA_constr_7 = { + { APC_CONSTRAINED, 7, 7, -50, 33 } /* (-50..33) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CarrierFreqUTRA_TDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_TDD, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_POINTER, 1, offsetof(struct CarrierFreqUTRA_TDD, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_TDD, threshX_High), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-High" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_TDD, threshX_Low), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-Low" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_TDD, q_RxLevMin), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_q_RxLevMin_constraint_1, + &asn_PER_memb_q_RxLevMin_constr_6, + 0, + "q-RxLevMin" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqUTRA_TDD, p_MaxUTRA), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p_MaxUTRA_constraint_1, + &asn_PER_memb_p_MaxUTRA_constr_7, + 0, + "p-MaxUTRA" + }, +}; +static int asn_MAP_CarrierFreqUTRA_TDD_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CarrierFreqUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqUTRA_TDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 1629 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellReselectionPriority at 1630 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* threshX-High at 1631 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* threshX-Low at 1632 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* q-RxLevMin at 1633 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* p-MaxUTRA at 1634 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqUTRA_TDD_specs_1 = { + sizeof(struct CarrierFreqUTRA_TDD), + offsetof(struct CarrierFreqUTRA_TDD, _asn_ctx), + asn_MAP_CarrierFreqUTRA_TDD_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_CarrierFreqUTRA_TDD_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* Start extensions */ + 7 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqUTRA_TDD = { + "CarrierFreqUTRA-TDD", + "CarrierFreqUTRA-TDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqUTRA_TDD_tags_1, + sizeof(asn_DEF_CarrierFreqUTRA_TDD_tags_1) + /sizeof(asn_DEF_CarrierFreqUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqUTRA_TDD_tags_1) + /sizeof(asn_DEF_CarrierFreqUTRA_TDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqUTRA_TDD_1, + 6, /* Elements count */ + &asn_SPC_CarrierFreqUTRA_TDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqUTRA-TDD.h b/lte/rrc/asn/CarrierFreqUTRA-TDD.h new file mode 100644 index 000000000..12497e949 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqUTRA-TDD.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqUTRA_TDD_H_ +#define _CarrierFreqUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include "CellReselectionPriority.h" +#include "ReselectionThreshold.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqUTRA-TDD */ +typedef struct CarrierFreqUTRA_TDD { + ARFCN_ValueUTRA_t carrierFreq; + CellReselectionPriority_t *cellReselectionPriority /* OPTIONAL */; + ReselectionThreshold_t threshX_High; + ReselectionThreshold_t threshX_Low; + long q_RxLevMin; + long p_MaxUTRA; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqUTRA_TDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqsGERAN.c b/lte/rrc/asn/CarrierFreqsGERAN.c new file mode 100644 index 000000000..b41ab56f1 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqsGERAN.c @@ -0,0 +1,307 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqsGERAN.h" + +static int +memb_arfcn_Spacing_constraint_6(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_numberOfFollowingARFCNs_constraint_6(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_variableBitMapOfARFCNs_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_arfcn_Spacing_constr_7 = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_numberOfFollowingARFCNs_constr_8 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_variableBitMapOfARFCNs_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_followingARFCNs_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_equallySpacedARFCNs_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN__followingARFCNs__equallySpacedARFCNs, arfcn_Spacing), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_arfcn_Spacing_constraint_6, + &asn_PER_memb_arfcn_Spacing_constr_7, + 0, + "arfcn-Spacing" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN__followingARFCNs__equallySpacedARFCNs, numberOfFollowingARFCNs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_numberOfFollowingARFCNs_constraint_6, + &asn_PER_memb_numberOfFollowingARFCNs_constr_8, + 0, + "numberOfFollowingARFCNs" + }, +}; +static ber_tlv_tag_t asn_DEF_equallySpacedARFCNs_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_equallySpacedARFCNs_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* arfcn-Spacing at 2919 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* numberOfFollowingARFCNs at 2920 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_equallySpacedARFCNs_specs_6 = { + sizeof(struct CarrierFreqsGERAN__followingARFCNs__equallySpacedARFCNs), + offsetof(struct CarrierFreqsGERAN__followingARFCNs__equallySpacedARFCNs, _asn_ctx), + asn_MAP_equallySpacedARFCNs_tag2el_6, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_equallySpacedARFCNs_6 = { + "equallySpacedARFCNs", + "equallySpacedARFCNs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_equallySpacedARFCNs_tags_6, + sizeof(asn_DEF_equallySpacedARFCNs_tags_6) + /sizeof(asn_DEF_equallySpacedARFCNs_tags_6[0]) - 1, /* 1 */ + asn_DEF_equallySpacedARFCNs_tags_6, /* Same as above */ + sizeof(asn_DEF_equallySpacedARFCNs_tags_6) + /sizeof(asn_DEF_equallySpacedARFCNs_tags_6[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_equallySpacedARFCNs_6, + 2, /* Elements count */ + &asn_SPC_equallySpacedARFCNs_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_followingARFCNs_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN__followingARFCNs, choice.explicitListOfARFCNs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ExplicitListOfARFCNs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitListOfARFCNs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN__followingARFCNs, choice.equallySpacedARFCNs), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_equallySpacedARFCNs_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "equallySpacedARFCNs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN__followingARFCNs, choice.variableBitMapOfARFCNs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_variableBitMapOfARFCNs_constraint_4, + &asn_PER_memb_variableBitMapOfARFCNs_constr_9, + 0, + "variableBitMapOfARFCNs" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_followingARFCNs_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* explicitListOfARFCNs at 2917 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* equallySpacedARFCNs at 2919 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* variableBitMapOfARFCNs at 2922 */ +}; +static asn_CHOICE_specifics_t asn_SPC_followingARFCNs_specs_4 = { + sizeof(struct CarrierFreqsGERAN__followingARFCNs), + offsetof(struct CarrierFreqsGERAN__followingARFCNs, _asn_ctx), + offsetof(struct CarrierFreqsGERAN__followingARFCNs, present), + sizeof(((struct CarrierFreqsGERAN__followingARFCNs *)0)->present), + asn_MAP_followingARFCNs_tag2el_4, + 3, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_followingARFCNs_4 = { + "followingARFCNs", + "followingARFCNs", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_followingARFCNs_constr_4, + asn_MBR_followingARFCNs_4, + 3, /* Elements count */ + &asn_SPC_followingARFCNs_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CarrierFreqsGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN, startingARFCN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "startingARFCN" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN, bandIndicator), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandIndicatorGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsGERAN, followingARFCNs), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_followingARFCNs_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "followingARFCNs" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqsGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqsGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* startingARFCN at 2914 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bandIndicator at 2915 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* followingARFCNs at 2917 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqsGERAN_specs_1 = { + sizeof(struct CarrierFreqsGERAN), + offsetof(struct CarrierFreqsGERAN, _asn_ctx), + asn_MAP_CarrierFreqsGERAN_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqsGERAN = { + "CarrierFreqsGERAN", + "CarrierFreqsGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqsGERAN_tags_1, + sizeof(asn_DEF_CarrierFreqsGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqsGERAN_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqsGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqsGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqsGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqsGERAN_1, + 3, /* Elements count */ + &asn_SPC_CarrierFreqsGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqsGERAN.h b/lte/rrc/asn/CarrierFreqsGERAN.h new file mode 100644 index 000000000..85e493c10 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqsGERAN.h @@ -0,0 +1,69 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqsGERAN_H_ +#define _CarrierFreqsGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueGERAN.h" +#include "BandIndicatorGERAN.h" +#include "ExplicitListOfARFCNs.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CarrierFreqsGERAN__followingARFCNs_PR { + CarrierFreqsGERAN__followingARFCNs_PR_NOTHING, /* No components present */ + CarrierFreqsGERAN__followingARFCNs_PR_explicitListOfARFCNs, + CarrierFreqsGERAN__followingARFCNs_PR_equallySpacedARFCNs, + CarrierFreqsGERAN__followingARFCNs_PR_variableBitMapOfARFCNs +} CarrierFreqsGERAN__followingARFCNs_PR; + +/* CarrierFreqsGERAN */ +typedef struct CarrierFreqsGERAN { + ARFCN_ValueGERAN_t startingARFCN; + BandIndicatorGERAN_t bandIndicator; + struct CarrierFreqsGERAN__followingARFCNs { + CarrierFreqsGERAN__followingARFCNs_PR present; + union CarrierFreqsGERAN__followingARFCNs_u { + ExplicitListOfARFCNs_t explicitListOfARFCNs; + struct CarrierFreqsGERAN__followingARFCNs__equallySpacedARFCNs { + long arfcn_Spacing; + long numberOfFollowingARFCNs; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } equallySpacedARFCNs; + OCTET_STRING_t variableBitMapOfARFCNs; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } followingARFCNs; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqsGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqsGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqsGERAN_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqsInfoGERAN.c b/lte/rrc/asn/CarrierFreqsInfoGERAN.c new file mode 100644 index 000000000..e4c74d36e --- /dev/null +++ b/lte/rrc/asn/CarrierFreqsInfoGERAN.c @@ -0,0 +1,271 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqsInfoGERAN.h" + +static int +memb_ncc_Permitted_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_q_RxLevMin_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 45)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p_MaxGERAN_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 39)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ncc_Permitted_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_q_RxLevMin_constr_6 = { + { APC_CONSTRAINED, 6, 6, 0, 45 } /* (0..45) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p_MaxGERAN_constr_7 = { + { APC_CONSTRAINED, 6, 6, 0, 39 } /* (0..39) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_commonInfo_3[] = { + { ATF_POINTER, 1, offsetof(struct CarrierFreqsInfoGERAN__commonInfo, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsInfoGERAN__commonInfo, ncc_Permitted), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_ncc_Permitted_constraint_3, + &asn_PER_memb_ncc_Permitted_constr_5, + 0, + "ncc-Permitted" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsInfoGERAN__commonInfo, q_RxLevMin), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_q_RxLevMin_constraint_3, + &asn_PER_memb_q_RxLevMin_constr_6, + 0, + "q-RxLevMin" + }, + { ATF_POINTER, 1, offsetof(struct CarrierFreqsInfoGERAN__commonInfo, p_MaxGERAN), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p_MaxGERAN_constraint_3, + &asn_PER_memb_p_MaxGERAN_constr_7, + 0, + "p-MaxGERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsInfoGERAN__commonInfo, threshX_High), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-High" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsInfoGERAN__commonInfo, threshX_Low), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-Low" + }, +}; +static int asn_MAP_commonInfo_oms_3[] = { 0, 3 }; +static ber_tlv_tag_t asn_DEF_commonInfo_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_commonInfo_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellReselectionPriority at 1652 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ncc-Permitted at 1653 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* q-RxLevMin at 1654 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* p-MaxGERAN at 1655 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* threshX-High at 1656 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* threshX-Low at 1658 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_commonInfo_specs_3 = { + sizeof(struct CarrierFreqsInfoGERAN__commonInfo), + offsetof(struct CarrierFreqsInfoGERAN__commonInfo, _asn_ctx), + asn_MAP_commonInfo_tag2el_3, + 6, /* Count of tags in the map */ + asn_MAP_commonInfo_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_commonInfo_3 = { + "commonInfo", + "commonInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_commonInfo_tags_3, + sizeof(asn_DEF_commonInfo_tags_3) + /sizeof(asn_DEF_commonInfo_tags_3[0]) - 1, /* 1 */ + asn_DEF_commonInfo_tags_3, /* Same as above */ + sizeof(asn_DEF_commonInfo_tags_3) + /sizeof(asn_DEF_commonInfo_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_commonInfo_3, + 6, /* Elements count */ + &asn_SPC_commonInfo_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CarrierFreqsInfoGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsInfoGERAN, carrierFreqs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqsGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreqs" + }, + { ATF_NOFLAGS, 0, offsetof(struct CarrierFreqsInfoGERAN, commonInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_commonInfo_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "commonInfo" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqsInfoGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CarrierFreqsInfoGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreqs at 1650 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* commonInfo at 1652 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CarrierFreqsInfoGERAN_specs_1 = { + sizeof(struct CarrierFreqsInfoGERAN), + offsetof(struct CarrierFreqsInfoGERAN, _asn_ctx), + asn_MAP_CarrierFreqsInfoGERAN_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqsInfoGERAN = { + "CarrierFreqsInfoGERAN", + "CarrierFreqsInfoGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqsInfoGERAN_tags_1, + sizeof(asn_DEF_CarrierFreqsInfoGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqsInfoGERAN_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqsInfoGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqsInfoGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqsInfoGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CarrierFreqsInfoGERAN_1, + 2, /* Elements count */ + &asn_SPC_CarrierFreqsInfoGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqsInfoGERAN.h b/lte/rrc/asn/CarrierFreqsInfoGERAN.h new file mode 100644 index 000000000..d6c7c8b9d --- /dev/null +++ b/lte/rrc/asn/CarrierFreqsInfoGERAN.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqsInfoGERAN_H_ +#define _CarrierFreqsInfoGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "CarrierFreqsGERAN.h" +#include "CellReselectionPriority.h" +#include +#include +#include "ReselectionThreshold.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CarrierFreqsInfoGERAN */ +typedef struct CarrierFreqsInfoGERAN { + CarrierFreqsGERAN_t carrierFreqs; + struct CarrierFreqsInfoGERAN__commonInfo { + CellReselectionPriority_t *cellReselectionPriority /* OPTIONAL */; + BIT_STRING_t ncc_Permitted; + long q_RxLevMin; + long *p_MaxGERAN /* OPTIONAL */; + ReselectionThreshold_t threshX_High; + ReselectionThreshold_t threshX_Low; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } commonInfo; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqsInfoGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqsInfoGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _CarrierFreqsInfoGERAN_H_ */ +#include diff --git a/lte/rrc/asn/CarrierFreqsInfoListGERAN.c b/lte/rrc/asn/CarrierFreqsInfoListGERAN.c new file mode 100644 index 000000000..785f4b584 --- /dev/null +++ b/lte/rrc/asn/CarrierFreqsInfoListGERAN.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CarrierFreqsInfoListGERAN.h" + +static asn_per_constraints_t asn_PER_type_CarrierFreqsInfoListGERAN_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CarrierFreqsInfoListGERAN_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CarrierFreqsInfoGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CarrierFreqsInfoListGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CarrierFreqsInfoListGERAN_specs_1 = { + sizeof(struct CarrierFreqsInfoListGERAN), + offsetof(struct CarrierFreqsInfoListGERAN, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CarrierFreqsInfoListGERAN = { + "CarrierFreqsInfoListGERAN", + "CarrierFreqsInfoListGERAN", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CarrierFreqsInfoListGERAN_tags_1, + sizeof(asn_DEF_CarrierFreqsInfoListGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqsInfoListGERAN_tags_1[0]), /* 1 */ + asn_DEF_CarrierFreqsInfoListGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_CarrierFreqsInfoListGERAN_tags_1) + /sizeof(asn_DEF_CarrierFreqsInfoListGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_CarrierFreqsInfoListGERAN_constr_1, + asn_MBR_CarrierFreqsInfoListGERAN_1, + 1, /* Single element */ + &asn_SPC_CarrierFreqsInfoListGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CarrierFreqsInfoListGERAN.h b/lte/rrc/asn/CarrierFreqsInfoListGERAN.h new file mode 100644 index 000000000..6e57b67ef --- /dev/null +++ b/lte/rrc/asn/CarrierFreqsInfoListGERAN.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CarrierFreqsInfoListGERAN_H_ +#define _CarrierFreqsInfoListGERAN_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CarrierFreqsInfoGERAN; + +/* CarrierFreqsInfoListGERAN */ +typedef struct CarrierFreqsInfoListGERAN { + A_SEQUENCE_OF(struct CarrierFreqsInfoGERAN) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CarrierFreqsInfoListGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CarrierFreqsInfoListGERAN; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqsInfoGERAN.h" + +#endif /* _CarrierFreqsInfoListGERAN_H_ */ +#include diff --git a/lte/rrc/asn/CellChangeOrder.c b/lte/rrc/asn/CellChangeOrder.c new file mode 100644 index 000000000..1a8cd16e1 --- /dev/null +++ b/lte/rrc/asn/CellChangeOrder.c @@ -0,0 +1,395 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellChangeOrder.h" + +static int +t304_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t304_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t304_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t304_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t304_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t304_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t304_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t304_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t304_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t304_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t304_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t304_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t304_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t304_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t304_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t304_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t304_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t304_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_networkControlOrder_constraint_12(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_t304_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_networkControlOrder_constr_15 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_targetRAT_Type_constr_11 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 0, 0, 0, 0 } /* (0..0,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_t304_value2enum_2[] = { + { 0, 5, "ms100" }, + { 1, 5, "ms200" }, + { 2, 5, "ms500" }, + { 3, 6, "ms1000" }, + { 4, 6, "ms2000" }, + { 5, 6, "ms4000" }, + { 6, 6, "ms8000" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_t304_enum2value_2[] = { + 0, /* ms100(0) */ + 3, /* ms1000(3) */ + 1, /* ms200(1) */ + 4, /* ms2000(4) */ + 5, /* ms4000(5) */ + 2, /* ms500(2) */ + 6, /* ms8000(6) */ + 7 /* spare1(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t304_specs_2 = { + asn_MAP_t304_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_t304_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t304_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t304_2 = { + "t304", + "t304", + t304_2_free, + t304_2_print, + t304_2_constraint, + t304_2_decode_ber, + t304_2_encode_der, + t304_2_decode_xer, + t304_2_encode_xer, + t304_2_decode_uper, + t304_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t304_tags_2, + sizeof(asn_DEF_t304_tags_2) + /sizeof(asn_DEF_t304_tags_2[0]) - 1, /* 1 */ + asn_DEF_t304_tags_2, /* Same as above */ + sizeof(asn_DEF_t304_tags_2) + /sizeof(asn_DEF_t304_tags_2[0]), /* 2 */ + &asn_PER_type_t304_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t304_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_geran_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellChangeOrder__targetRAT_Type__geran, physCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellChangeOrder__targetRAT_Type__geran, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_POINTER, 2, offsetof(struct CellChangeOrder__targetRAT_Type__geran, networkControlOrder), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_networkControlOrder_constraint_12, + &asn_PER_memb_networkControlOrder_constr_15, + 0, + "networkControlOrder" + }, + { ATF_POINTER, 1, offsetof(struct CellChangeOrder__targetRAT_Type__geran, systemInformation), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SI_OrPSI_GERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformation" + }, +}; +static int asn_MAP_geran_oms_12[] = { 2, 3 }; +static ber_tlv_tag_t asn_DEF_geran_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_geran_tag2el_12[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId at 500 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreq at 501 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* networkControlOrder at 502 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* systemInformation at 503 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_geran_specs_12 = { + sizeof(struct CellChangeOrder__targetRAT_Type__geran), + offsetof(struct CellChangeOrder__targetRAT_Type__geran, _asn_ctx), + asn_MAP_geran_tag2el_12, + 4, /* Count of tags in the map */ + asn_MAP_geran_oms_12, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_geran_12 = { + "geran", + "geran", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_geran_tags_12, + sizeof(asn_DEF_geran_tags_12) + /sizeof(asn_DEF_geran_tags_12[0]) - 1, /* 1 */ + asn_DEF_geran_tags_12, /* Same as above */ + sizeof(asn_DEF_geran_tags_12) + /sizeof(asn_DEF_geran_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_geran_12, + 4, /* Elements count */ + &asn_SPC_geran_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_targetRAT_Type_11[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellChangeOrder__targetRAT_Type, choice.geran), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_geran_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "geran" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_targetRAT_Type_tag2el_11[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* geran at 500 */ +}; +static asn_CHOICE_specifics_t asn_SPC_targetRAT_Type_specs_11 = { + sizeof(struct CellChangeOrder__targetRAT_Type), + offsetof(struct CellChangeOrder__targetRAT_Type, _asn_ctx), + offsetof(struct CellChangeOrder__targetRAT_Type, present), + sizeof(((struct CellChangeOrder__targetRAT_Type *)0)->present), + asn_MAP_targetRAT_Type_tag2el_11, + 1, /* Count of tags in the map */ + 0, + 1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_targetRAT_Type_11 = { + "targetRAT-Type", + "targetRAT-Type", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_targetRAT_Type_constr_11, + asn_MBR_targetRAT_Type_11, + 1, /* Elements count */ + &asn_SPC_targetRAT_Type_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CellChangeOrder_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellChangeOrder, t304), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t304_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t304" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellChangeOrder, targetRAT_Type), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_targetRAT_Type_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "targetRAT-Type" + }, +}; +static ber_tlv_tag_t asn_DEF_CellChangeOrder_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellChangeOrder_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t304 at 496 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* targetRAT-Type at 504 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellChangeOrder_specs_1 = { + sizeof(struct CellChangeOrder), + offsetof(struct CellChangeOrder, _asn_ctx), + asn_MAP_CellChangeOrder_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellChangeOrder = { + "CellChangeOrder", + "CellChangeOrder", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellChangeOrder_tags_1, + sizeof(asn_DEF_CellChangeOrder_tags_1) + /sizeof(asn_DEF_CellChangeOrder_tags_1[0]), /* 1 */ + asn_DEF_CellChangeOrder_tags_1, /* Same as above */ + sizeof(asn_DEF_CellChangeOrder_tags_1) + /sizeof(asn_DEF_CellChangeOrder_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellChangeOrder_1, + 2, /* Elements count */ + &asn_SPC_CellChangeOrder_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellChangeOrder.h b/lte/rrc/asn/CellChangeOrder.h new file mode 100644 index 000000000..42c422ffb --- /dev/null +++ b/lte/rrc/asn/CellChangeOrder.h @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellChangeOrder_H_ +#define _CellChangeOrder_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellIdGERAN.h" +#include "CarrierFreqGERAN.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CellChangeOrder__t304 { + CellChangeOrder__t304_ms100 = 0, + CellChangeOrder__t304_ms200 = 1, + CellChangeOrder__t304_ms500 = 2, + CellChangeOrder__t304_ms1000 = 3, + CellChangeOrder__t304_ms2000 = 4, + CellChangeOrder__t304_ms4000 = 5, + CellChangeOrder__t304_ms8000 = 6, + CellChangeOrder__t304_spare1 = 7 +} e_CellChangeOrder__t304; +typedef enum CellChangeOrder__targetRAT_Type_PR { + CellChangeOrder__targetRAT_Type_PR_NOTHING, /* No components present */ + CellChangeOrder__targetRAT_Type_PR_geran, + /* Extensions may appear below */ + +} CellChangeOrder__targetRAT_Type_PR; + +/* Forward declarations */ +struct SI_OrPSI_GERAN; + +/* CellChangeOrder */ +typedef struct CellChangeOrder { + long t304; + struct CellChangeOrder__targetRAT_Type { + CellChangeOrder__targetRAT_Type_PR present; + union CellChangeOrder__targetRAT_Type_u { + struct CellChangeOrder__targetRAT_Type__geran { + PhysCellIdGERAN_t physCellId; + CarrierFreqGERAN_t carrierFreq; + BIT_STRING_t *networkControlOrder /* OPTIONAL */; + struct SI_OrPSI_GERAN *systemInformation /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } geran; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } targetRAT_Type; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellChangeOrder_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_t304_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_CellChangeOrder; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SI-OrPSI-GERAN.h" + +#endif /* _CellChangeOrder_H_ */ +#include diff --git a/lte/rrc/asn/CellGlobalIdCDMA2000.c b/lte/rrc/asn/CellGlobalIdCDMA2000.c new file mode 100644 index 000000000..7c206c1f4 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdCDMA2000.c @@ -0,0 +1,143 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellGlobalIdCDMA2000.h" + +static int +memb_cellGlobalId1XRTT_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 47)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cellGlobalIdHRPD_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 128)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellGlobalId1XRTT_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 47, 47 } /* (SIZE(47..47)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cellGlobalIdHRPD_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 128, 128 } /* (SIZE(128..128)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_CellGlobalIdCDMA2000_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellGlobalIdCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdCDMA2000, choice.cellGlobalId1XRTT), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_cellGlobalId1XRTT_constraint_1, + &asn_PER_memb_cellGlobalId1XRTT_constr_2, + 0, + "cellGlobalId1XRTT" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdCDMA2000, choice.cellGlobalIdHRPD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_cellGlobalIdHRPD_constraint_1, + &asn_PER_memb_cellGlobalIdHRPD_constr_3, + 0, + "cellGlobalIdHRPD" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_CellGlobalIdCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobalId1XRTT at 2984 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellGlobalIdHRPD at 2985 */ +}; +static asn_CHOICE_specifics_t asn_SPC_CellGlobalIdCDMA2000_specs_1 = { + sizeof(struct CellGlobalIdCDMA2000), + offsetof(struct CellGlobalIdCDMA2000, _asn_ctx), + offsetof(struct CellGlobalIdCDMA2000, present), + sizeof(((struct CellGlobalIdCDMA2000 *)0)->present), + asn_MAP_CellGlobalIdCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_CellGlobalIdCDMA2000 = { + "CellGlobalIdCDMA2000", + "CellGlobalIdCDMA2000", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_CellGlobalIdCDMA2000_constr_1, + asn_MBR_CellGlobalIdCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_CellGlobalIdCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellGlobalIdCDMA2000.h b/lte/rrc/asn/CellGlobalIdCDMA2000.h new file mode 100644 index 000000000..e14601185 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdCDMA2000.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellGlobalIdCDMA2000_H_ +#define _CellGlobalIdCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CellGlobalIdCDMA2000_PR { + CellGlobalIdCDMA2000_PR_NOTHING, /* No components present */ + CellGlobalIdCDMA2000_PR_cellGlobalId1XRTT, + CellGlobalIdCDMA2000_PR_cellGlobalIdHRPD +} CellGlobalIdCDMA2000_PR; + +/* CellGlobalIdCDMA2000 */ +typedef struct CellGlobalIdCDMA2000 { + CellGlobalIdCDMA2000_PR present; + union CellGlobalIdCDMA2000_u { + BIT_STRING_t cellGlobalId1XRTT; + BIT_STRING_t cellGlobalIdHRPD; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellGlobalIdCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellGlobalIdCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellGlobalIdCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CellGlobalIdEUTRA.c b/lte/rrc/asn/CellGlobalIdEUTRA.c new file mode 100644 index 000000000..7eace8175 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdEUTRA.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellGlobalIdEUTRA.h" + +static asn_TYPE_member_t asn_MBR_CellGlobalIdEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdEUTRA, plmn_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdEUTRA, cellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIdentity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellIdentity" + }, +}; +static ber_tlv_tag_t asn_DEF_CellGlobalIdEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellGlobalIdEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity at 2965 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellIdentity at 2967 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellGlobalIdEUTRA_specs_1 = { + sizeof(struct CellGlobalIdEUTRA), + offsetof(struct CellGlobalIdEUTRA, _asn_ctx), + asn_MAP_CellGlobalIdEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellGlobalIdEUTRA = { + "CellGlobalIdEUTRA", + "CellGlobalIdEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellGlobalIdEUTRA_tags_1, + sizeof(asn_DEF_CellGlobalIdEUTRA_tags_1) + /sizeof(asn_DEF_CellGlobalIdEUTRA_tags_1[0]), /* 1 */ + asn_DEF_CellGlobalIdEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_CellGlobalIdEUTRA_tags_1) + /sizeof(asn_DEF_CellGlobalIdEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellGlobalIdEUTRA_1, + 2, /* Elements count */ + &asn_SPC_CellGlobalIdEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellGlobalIdEUTRA.h b/lte/rrc/asn/CellGlobalIdEUTRA.h new file mode 100644 index 000000000..b3cd94471 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdEUTRA.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellGlobalIdEUTRA_H_ +#define _CellGlobalIdEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include "CellIdentity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellGlobalIdEUTRA */ +typedef struct CellGlobalIdEUTRA { + PLMN_Identity_t plmn_Identity; + CellIdentity_t cellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellGlobalIdEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellGlobalIdEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellGlobalIdEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/CellGlobalIdGERAN.c b/lte/rrc/asn/CellGlobalIdGERAN.c new file mode 100644 index 000000000..b6c84ce17 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdGERAN.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellGlobalIdGERAN.h" + +static int +memb_locationAreaCode_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cellIdentity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_locationAreaCode_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cellIdentity_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellGlobalIdGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdGERAN, plmn_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdGERAN, locationAreaCode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_locationAreaCode_constraint_1, + &asn_PER_memb_locationAreaCode_constr_3, + 0, + "locationAreaCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdGERAN, cellIdentity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_cellIdentity_constraint_1, + &asn_PER_memb_cellIdentity_constr_4, + 0, + "cellIdentity" + }, +}; +static ber_tlv_tag_t asn_DEF_CellGlobalIdGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellGlobalIdGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity at 2977 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* locationAreaCode at 2978 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellIdentity at 2979 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellGlobalIdGERAN_specs_1 = { + sizeof(struct CellGlobalIdGERAN), + offsetof(struct CellGlobalIdGERAN, _asn_ctx), + asn_MAP_CellGlobalIdGERAN_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellGlobalIdGERAN = { + "CellGlobalIdGERAN", + "CellGlobalIdGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellGlobalIdGERAN_tags_1, + sizeof(asn_DEF_CellGlobalIdGERAN_tags_1) + /sizeof(asn_DEF_CellGlobalIdGERAN_tags_1[0]), /* 1 */ + asn_DEF_CellGlobalIdGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_CellGlobalIdGERAN_tags_1) + /sizeof(asn_DEF_CellGlobalIdGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellGlobalIdGERAN_1, + 3, /* Elements count */ + &asn_SPC_CellGlobalIdGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellGlobalIdGERAN.h b/lte/rrc/asn/CellGlobalIdGERAN.h new file mode 100644 index 000000000..fa74ced27 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdGERAN.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellGlobalIdGERAN_H_ +#define _CellGlobalIdGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellGlobalIdGERAN */ +typedef struct CellGlobalIdGERAN { + PLMN_Identity_t plmn_Identity; + BIT_STRING_t locationAreaCode; + BIT_STRING_t cellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellGlobalIdGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellGlobalIdGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellGlobalIdGERAN_H_ */ +#include diff --git a/lte/rrc/asn/CellGlobalIdList-r10.c b/lte/rrc/asn/CellGlobalIdList-r10.c new file mode 100644 index 000000000..d4696f97f --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellGlobalIdList-r10.h" + +static asn_per_constraints_t asn_PER_type_CellGlobalIdList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellGlobalIdList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellGlobalIdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellGlobalIdList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellGlobalIdList_r10_specs_1 = { + sizeof(struct CellGlobalIdList_r10), + offsetof(struct CellGlobalIdList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellGlobalIdList_r10 = { + "CellGlobalIdList-r10", + "CellGlobalIdList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellGlobalIdList_r10_tags_1, + sizeof(asn_DEF_CellGlobalIdList_r10_tags_1) + /sizeof(asn_DEF_CellGlobalIdList_r10_tags_1[0]), /* 1 */ + asn_DEF_CellGlobalIdList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CellGlobalIdList_r10_tags_1) + /sizeof(asn_DEF_CellGlobalIdList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_CellGlobalIdList_r10_constr_1, + asn_MBR_CellGlobalIdList_r10_1, + 1, /* Single element */ + &asn_SPC_CellGlobalIdList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellGlobalIdList-r10.h b/lte/rrc/asn/CellGlobalIdList-r10.h new file mode 100644 index 000000000..90484a9dc --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellGlobalIdList_r10_H_ +#define _CellGlobalIdList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellGlobalIdEUTRA; + +/* CellGlobalIdList-r10 */ +typedef struct CellGlobalIdList_r10 { + A_SEQUENCE_OF(struct CellGlobalIdEUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellGlobalIdList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellGlobalIdList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellGlobalIdEUTRA.h" + +#endif /* _CellGlobalIdList_r10_H_ */ +#include diff --git a/lte/rrc/asn/CellGlobalIdUTRA.c b/lte/rrc/asn/CellGlobalIdUTRA.c new file mode 100644 index 000000000..fa9328263 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdUTRA.c @@ -0,0 +1,106 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellGlobalIdUTRA.h" + +static int +memb_cellIdentity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 28)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellIdentity_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellGlobalIdUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdUTRA, plmn_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellGlobalIdUTRA, cellIdentity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_cellIdentity_constraint_1, + &asn_PER_memb_cellIdentity_constr_3, + 0, + "cellIdentity" + }, +}; +static ber_tlv_tag_t asn_DEF_CellGlobalIdUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellGlobalIdUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity at 2971 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellIdentity at 2972 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellGlobalIdUTRA_specs_1 = { + sizeof(struct CellGlobalIdUTRA), + offsetof(struct CellGlobalIdUTRA, _asn_ctx), + asn_MAP_CellGlobalIdUTRA_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellGlobalIdUTRA = { + "CellGlobalIdUTRA", + "CellGlobalIdUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellGlobalIdUTRA_tags_1, + sizeof(asn_DEF_CellGlobalIdUTRA_tags_1) + /sizeof(asn_DEF_CellGlobalIdUTRA_tags_1[0]), /* 1 */ + asn_DEF_CellGlobalIdUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_CellGlobalIdUTRA_tags_1) + /sizeof(asn_DEF_CellGlobalIdUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellGlobalIdUTRA_1, + 2, /* Elements count */ + &asn_SPC_CellGlobalIdUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellGlobalIdUTRA.h b/lte/rrc/asn/CellGlobalIdUTRA.h new file mode 100644 index 000000000..d5db85898 --- /dev/null +++ b/lte/rrc/asn/CellGlobalIdUTRA.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellGlobalIdUTRA_H_ +#define _CellGlobalIdUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellGlobalIdUTRA */ +typedef struct CellGlobalIdUTRA { + PLMN_Identity_t plmn_Identity; + BIT_STRING_t cellIdentity; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellGlobalIdUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellGlobalIdUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellGlobalIdUTRA_H_ */ +#include diff --git a/lte/rrc/asn/CellIdentity.c b/lte/rrc/asn/CellIdentity.c index e97c8c57a..966e9bade 100644 --- a/lte/rrc/asn/CellIdentity.c +++ b/lte/rrc/asn/CellIdentity.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "CellIdentity.h" @@ -45,7 +46,6 @@ static void CellIdentity_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; - td->check_constraints = asn_DEF_BIT_STRING.check_constraints; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; @@ -118,12 +118,12 @@ CellIdentity_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_CellIdentity_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_CellIdentity_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 28, 28 } /* (SIZE(28..28)) */, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_CellIdentity_tags_1[] = { +static ber_tlv_tag_t asn_DEF_CellIdentity_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_CellIdentity = { diff --git a/lte/rrc/asn/CellIdentity.h b/lte/rrc/asn/CellIdentity.h index d997bb83f..dc6d47e6b 100644 --- a/lte/rrc/asn/CellIdentity.h +++ b/lte/rrc/asn/CellIdentity.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _CellIdentity_H_ diff --git a/lte/rrc/asn/CellIndex.c b/lte/rrc/asn/CellIndex.c new file mode 100644 index 000000000..e830711df --- /dev/null +++ b/lte/rrc/asn/CellIndex.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellIndex.h" + +int +CellIndex_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +CellIndex_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +CellIndex_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CellIndex_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CellIndex_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CellIndex_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CellIndex_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CellIndex_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CellIndex_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CellIndex_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CellIndex_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CellIndex_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CellIndex_constr_1 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_CellIndex_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CellIndex = { + "CellIndex", + "CellIndex", + CellIndex_free, + CellIndex_print, + CellIndex_constraint, + CellIndex_decode_ber, + CellIndex_encode_der, + CellIndex_decode_xer, + CellIndex_encode_xer, + CellIndex_decode_uper, + CellIndex_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellIndex_tags_1, + sizeof(asn_DEF_CellIndex_tags_1) + /sizeof(asn_DEF_CellIndex_tags_1[0]), /* 1 */ + asn_DEF_CellIndex_tags_1, /* Same as above */ + sizeof(asn_DEF_CellIndex_tags_1) + /sizeof(asn_DEF_CellIndex_tags_1[0]), /* 1 */ + &asn_PER_type_CellIndex_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/CellIndex.h b/lte/rrc/asn/CellIndex.h new file mode 100644 index 000000000..d12ca85f4 --- /dev/null +++ b/lte/rrc/asn/CellIndex.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellIndex_H_ +#define _CellIndex_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellIndex */ +typedef long CellIndex_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellIndex; +asn_struct_free_f CellIndex_free; +asn_struct_print_f CellIndex_print; +asn_constr_check_f CellIndex_constraint; +ber_type_decoder_f CellIndex_decode_ber; +der_type_encoder_f CellIndex_encode_der; +xer_type_decoder_f CellIndex_decode_xer; +xer_type_encoder_f CellIndex_encode_xer; +per_type_decoder_f CellIndex_decode_uper; +per_type_encoder_f CellIndex_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellIndex_H_ */ +#include diff --git a/lte/rrc/asn/CellIndexList.c b/lte/rrc/asn/CellIndexList.c new file mode 100644 index 000000000..ad6c91040 --- /dev/null +++ b/lte/rrc/asn/CellIndexList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellIndexList.h" + +static asn_per_constraints_t asn_PER_type_CellIndexList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellIndexList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_CellIndex, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellIndexList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellIndexList_specs_1 = { + sizeof(struct CellIndexList), + offsetof(struct CellIndexList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellIndexList = { + "CellIndexList", + "CellIndexList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellIndexList_tags_1, + sizeof(asn_DEF_CellIndexList_tags_1) + /sizeof(asn_DEF_CellIndexList_tags_1[0]), /* 1 */ + asn_DEF_CellIndexList_tags_1, /* Same as above */ + sizeof(asn_DEF_CellIndexList_tags_1) + /sizeof(asn_DEF_CellIndexList_tags_1[0]), /* 1 */ + &asn_PER_type_CellIndexList_constr_1, + asn_MBR_CellIndexList_1, + 1, /* Single element */ + &asn_SPC_CellIndexList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellIndexList.h b/lte/rrc/asn/CellIndexList.h new file mode 100644 index 000000000..e33c288fd --- /dev/null +++ b/lte/rrc/asn/CellIndexList.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellIndexList_H_ +#define _CellIndexList_H_ + + +#include + +/* Including external dependencies */ +#include "CellIndex.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellIndexList */ +typedef struct CellIndexList { + A_SEQUENCE_OF(CellIndex_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellIndexList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellIndexList; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellIndexList_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoGERAN-r9.c b/lte/rrc/asn/CellInfoGERAN-r9.c new file mode 100644 index 000000000..cf22b8264 --- /dev/null +++ b/lte/rrc/asn/CellInfoGERAN-r9.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoGERAN-r9.h" + +static asn_TYPE_member_t asn_MBR_CellInfoGERAN_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInfoGERAN_r9, physCellId_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInfoGERAN_r9, carrierFreq_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInfoGERAN_r9, systemInformation_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInfoListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformation-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoGERAN_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellInfoGERAN_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r9 at 961 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreq-r9 at 962 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* systemInformation-r9 at 964 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellInfoGERAN_r9_specs_1 = { + sizeof(struct CellInfoGERAN_r9), + offsetof(struct CellInfoGERAN_r9, _asn_ctx), + asn_MAP_CellInfoGERAN_r9_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoGERAN_r9 = { + "CellInfoGERAN-r9", + "CellInfoGERAN-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoGERAN_r9_tags_1, + sizeof(asn_DEF_CellInfoGERAN_r9_tags_1) + /sizeof(asn_DEF_CellInfoGERAN_r9_tags_1[0]), /* 1 */ + asn_DEF_CellInfoGERAN_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoGERAN_r9_tags_1) + /sizeof(asn_DEF_CellInfoGERAN_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellInfoGERAN_r9_1, + 3, /* Elements count */ + &asn_SPC_CellInfoGERAN_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoGERAN-r9.h b/lte/rrc/asn/CellInfoGERAN-r9.h new file mode 100644 index 000000000..55d376e3f --- /dev/null +++ b/lte/rrc/asn/CellInfoGERAN-r9.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoGERAN_r9_H_ +#define _CellInfoGERAN_r9_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdGERAN.h" +#include "CarrierFreqGERAN.h" +#include "SystemInfoListGERAN.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellInfoGERAN-r9 */ +typedef struct CellInfoGERAN_r9 { + PhysCellIdGERAN_t physCellId_r9; + CarrierFreqGERAN_t carrierFreq_r9; + SystemInfoListGERAN_t systemInformation_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoGERAN_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoGERAN_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellInfoGERAN_r9_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoListGERAN-r9.c b/lte/rrc/asn/CellInfoListGERAN-r9.c new file mode 100644 index 000000000..907d68d4f --- /dev/null +++ b/lte/rrc/asn/CellInfoListGERAN-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoListGERAN-r9.h" + +static asn_per_constraints_t asn_PER_type_CellInfoListGERAN_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellInfoListGERAN_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInfoGERAN_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoListGERAN_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellInfoListGERAN_r9_specs_1 = { + sizeof(struct CellInfoListGERAN_r9), + offsetof(struct CellInfoListGERAN_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoListGERAN_r9 = { + "CellInfoListGERAN-r9", + "CellInfoListGERAN-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoListGERAN_r9_tags_1, + sizeof(asn_DEF_CellInfoListGERAN_r9_tags_1) + /sizeof(asn_DEF_CellInfoListGERAN_r9_tags_1[0]), /* 1 */ + asn_DEF_CellInfoListGERAN_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoListGERAN_r9_tags_1) + /sizeof(asn_DEF_CellInfoListGERAN_r9_tags_1[0]), /* 1 */ + &asn_PER_type_CellInfoListGERAN_r9_constr_1, + asn_MBR_CellInfoListGERAN_r9_1, + 1, /* Single element */ + &asn_SPC_CellInfoListGERAN_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoListGERAN-r9.h b/lte/rrc/asn/CellInfoListGERAN-r9.h new file mode 100644 index 000000000..1791ea456 --- /dev/null +++ b/lte/rrc/asn/CellInfoListGERAN-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoListGERAN_r9_H_ +#define _CellInfoListGERAN_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellInfoGERAN_r9; + +/* CellInfoListGERAN-r9 */ +typedef struct CellInfoListGERAN_r9 { + A_SEQUENCE_OF(struct CellInfoGERAN_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoListGERAN_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoListGERAN_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellInfoGERAN-r9.h" + +#endif /* _CellInfoListGERAN_r9_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoListUTRA-FDD-r9.c b/lte/rrc/asn/CellInfoListUTRA-FDD-r9.c new file mode 100644 index 000000000..256abd9ca --- /dev/null +++ b/lte/rrc/asn/CellInfoListUTRA-FDD-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoListUTRA-FDD-r9.h" + +static asn_per_constraints_t asn_PER_type_CellInfoListUTRA_FDD_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellInfoListUTRA_FDD_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInfoUTRA_FDD_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoListUTRA_FDD_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellInfoListUTRA_FDD_r9_specs_1 = { + sizeof(struct CellInfoListUTRA_FDD_r9), + offsetof(struct CellInfoListUTRA_FDD_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoListUTRA_FDD_r9 = { + "CellInfoListUTRA-FDD-r9", + "CellInfoListUTRA-FDD-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoListUTRA_FDD_r9_tags_1, + sizeof(asn_DEF_CellInfoListUTRA_FDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoListUTRA_FDD_r9_tags_1[0]), /* 1 */ + asn_DEF_CellInfoListUTRA_FDD_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoListUTRA_FDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoListUTRA_FDD_r9_tags_1[0]), /* 1 */ + &asn_PER_type_CellInfoListUTRA_FDD_r9_constr_1, + asn_MBR_CellInfoListUTRA_FDD_r9_1, + 1, /* Single element */ + &asn_SPC_CellInfoListUTRA_FDD_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoListUTRA-FDD-r9.h b/lte/rrc/asn/CellInfoListUTRA-FDD-r9.h new file mode 100644 index 000000000..a0dfa2e1d --- /dev/null +++ b/lte/rrc/asn/CellInfoListUTRA-FDD-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoListUTRA_FDD_r9_H_ +#define _CellInfoListUTRA_FDD_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellInfoUTRA_FDD_r9; + +/* CellInfoListUTRA-FDD-r9 */ +typedef struct CellInfoListUTRA_FDD_r9 { + A_SEQUENCE_OF(struct CellInfoUTRA_FDD_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoListUTRA_FDD_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoListUTRA_FDD_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellInfoUTRA-FDD-r9.h" + +#endif /* _CellInfoListUTRA_FDD_r9_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r10.c b/lte/rrc/asn/CellInfoListUTRA-TDD-r10.c new file mode 100644 index 000000000..280625462 --- /dev/null +++ b/lte/rrc/asn/CellInfoListUTRA-TDD-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoListUTRA-TDD-r10.h" + +static asn_per_constraints_t asn_PER_type_CellInfoListUTRA_TDD_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellInfoListUTRA_TDD_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInfoUTRA_TDD_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoListUTRA_TDD_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellInfoListUTRA_TDD_r10_specs_1 = { + sizeof(struct CellInfoListUTRA_TDD_r10), + offsetof(struct CellInfoListUTRA_TDD_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoListUTRA_TDD_r10 = { + "CellInfoListUTRA-TDD-r10", + "CellInfoListUTRA-TDD-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoListUTRA_TDD_r10_tags_1, + sizeof(asn_DEF_CellInfoListUTRA_TDD_r10_tags_1) + /sizeof(asn_DEF_CellInfoListUTRA_TDD_r10_tags_1[0]), /* 1 */ + asn_DEF_CellInfoListUTRA_TDD_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoListUTRA_TDD_r10_tags_1) + /sizeof(asn_DEF_CellInfoListUTRA_TDD_r10_tags_1[0]), /* 1 */ + &asn_PER_type_CellInfoListUTRA_TDD_r10_constr_1, + asn_MBR_CellInfoListUTRA_TDD_r10_1, + 1, /* Single element */ + &asn_SPC_CellInfoListUTRA_TDD_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r10.h b/lte/rrc/asn/CellInfoListUTRA-TDD-r10.h new file mode 100644 index 000000000..1ab80bb19 --- /dev/null +++ b/lte/rrc/asn/CellInfoListUTRA-TDD-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoListUTRA_TDD_r10_H_ +#define _CellInfoListUTRA_TDD_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellInfoUTRA_TDD_r10; + +/* CellInfoListUTRA-TDD-r10 */ +typedef struct CellInfoListUTRA_TDD_r10 { + A_SEQUENCE_OF(struct CellInfoUTRA_TDD_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoListUTRA_TDD_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoListUTRA_TDD_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellInfoUTRA-TDD-r10.h" + +#endif /* _CellInfoListUTRA_TDD_r10_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r9.c b/lte/rrc/asn/CellInfoListUTRA-TDD-r9.c new file mode 100644 index 000000000..1e7268bb8 --- /dev/null +++ b/lte/rrc/asn/CellInfoListUTRA-TDD-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoListUTRA-TDD-r9.h" + +static asn_per_constraints_t asn_PER_type_CellInfoListUTRA_TDD_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellInfoListUTRA_TDD_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellInfoUTRA_TDD_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoListUTRA_TDD_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellInfoListUTRA_TDD_r9_specs_1 = { + sizeof(struct CellInfoListUTRA_TDD_r9), + offsetof(struct CellInfoListUTRA_TDD_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoListUTRA_TDD_r9 = { + "CellInfoListUTRA-TDD-r9", + "CellInfoListUTRA-TDD-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoListUTRA_TDD_r9_tags_1, + sizeof(asn_DEF_CellInfoListUTRA_TDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoListUTRA_TDD_r9_tags_1[0]), /* 1 */ + asn_DEF_CellInfoListUTRA_TDD_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoListUTRA_TDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoListUTRA_TDD_r9_tags_1[0]), /* 1 */ + &asn_PER_type_CellInfoListUTRA_TDD_r9_constr_1, + asn_MBR_CellInfoListUTRA_TDD_r9_1, + 1, /* Single element */ + &asn_SPC_CellInfoListUTRA_TDD_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r9.h b/lte/rrc/asn/CellInfoListUTRA-TDD-r9.h new file mode 100644 index 000000000..74fbacae0 --- /dev/null +++ b/lte/rrc/asn/CellInfoListUTRA-TDD-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoListUTRA_TDD_r9_H_ +#define _CellInfoListUTRA_TDD_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellInfoUTRA_TDD_r9; + +/* CellInfoListUTRA-TDD-r9 */ +typedef struct CellInfoListUTRA_TDD_r9 { + A_SEQUENCE_OF(struct CellInfoUTRA_TDD_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoListUTRA_TDD_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoListUTRA_TDD_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellInfoUTRA-TDD-r9.h" + +#endif /* _CellInfoListUTRA_TDD_r9_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoUTRA-FDD-r9.c b/lte/rrc/asn/CellInfoUTRA-FDD-r9.c new file mode 100644 index 000000000..133c5f34c --- /dev/null +++ b/lte/rrc/asn/CellInfoUTRA-FDD-r9.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoUTRA-FDD-r9.h" + +static asn_TYPE_member_t asn_MBR_CellInfoUTRA_FDD_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_FDD_r9, physCellId_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_FDD_r9, utra_BCCH_Container_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-BCCH-Container-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoUTRA_FDD_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellInfoUTRA_FDD_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r9 at 969 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* utra-BCCH-Container-r9 at 970 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellInfoUTRA_FDD_r9_specs_1 = { + sizeof(struct CellInfoUTRA_FDD_r9), + offsetof(struct CellInfoUTRA_FDD_r9, _asn_ctx), + asn_MAP_CellInfoUTRA_FDD_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoUTRA_FDD_r9 = { + "CellInfoUTRA-FDD-r9", + "CellInfoUTRA-FDD-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoUTRA_FDD_r9_tags_1, + sizeof(asn_DEF_CellInfoUTRA_FDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoUTRA_FDD_r9_tags_1[0]), /* 1 */ + asn_DEF_CellInfoUTRA_FDD_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoUTRA_FDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoUTRA_FDD_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellInfoUTRA_FDD_r9_1, + 2, /* Elements count */ + &asn_SPC_CellInfoUTRA_FDD_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoUTRA-FDD-r9.h b/lte/rrc/asn/CellInfoUTRA-FDD-r9.h new file mode 100644 index 000000000..07ba3916c --- /dev/null +++ b/lte/rrc/asn/CellInfoUTRA-FDD-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoUTRA_FDD_r9_H_ +#define _CellInfoUTRA_FDD_r9_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdUTRA-FDD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellInfoUTRA-FDD-r9 */ +typedef struct CellInfoUTRA_FDD_r9 { + PhysCellIdUTRA_FDD_t physCellId_r9; + OCTET_STRING_t utra_BCCH_Container_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoUTRA_FDD_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoUTRA_FDD_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellInfoUTRA_FDD_r9_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r10.c b/lte/rrc/asn/CellInfoUTRA-TDD-r10.c new file mode 100644 index 000000000..d5d346f9c --- /dev/null +++ b/lte/rrc/asn/CellInfoUTRA-TDD-r10.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoUTRA-TDD-r10.h" + +static asn_TYPE_member_t asn_MBR_CellInfoUTRA_TDD_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_TDD_r10, physCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_TDD_r10, carrierFreq_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_TDD_r10, utra_BCCH_Container_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-BCCH-Container-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoUTRA_TDD_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellInfoUTRA_TDD_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r10 at 983 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreq-r10 at 984 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* utra-BCCH-Container-r10 at 985 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellInfoUTRA_TDD_r10_specs_1 = { + sizeof(struct CellInfoUTRA_TDD_r10), + offsetof(struct CellInfoUTRA_TDD_r10, _asn_ctx), + asn_MAP_CellInfoUTRA_TDD_r10_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoUTRA_TDD_r10 = { + "CellInfoUTRA-TDD-r10", + "CellInfoUTRA-TDD-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoUTRA_TDD_r10_tags_1, + sizeof(asn_DEF_CellInfoUTRA_TDD_r10_tags_1) + /sizeof(asn_DEF_CellInfoUTRA_TDD_r10_tags_1[0]), /* 1 */ + asn_DEF_CellInfoUTRA_TDD_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoUTRA_TDD_r10_tags_1) + /sizeof(asn_DEF_CellInfoUTRA_TDD_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellInfoUTRA_TDD_r10_1, + 3, /* Elements count */ + &asn_SPC_CellInfoUTRA_TDD_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r10.h b/lte/rrc/asn/CellInfoUTRA-TDD-r10.h new file mode 100644 index 000000000..593c2424e --- /dev/null +++ b/lte/rrc/asn/CellInfoUTRA-TDD-r10.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoUTRA_TDD_r10_H_ +#define _CellInfoUTRA_TDD_r10_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdUTRA-TDD.h" +#include "ARFCN-ValueUTRA.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellInfoUTRA-TDD-r10 */ +typedef struct CellInfoUTRA_TDD_r10 { + PhysCellIdUTRA_TDD_t physCellId_r10; + ARFCN_ValueUTRA_t carrierFreq_r10; + OCTET_STRING_t utra_BCCH_Container_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoUTRA_TDD_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoUTRA_TDD_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellInfoUTRA_TDD_r10_H_ */ +#include diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r9.c b/lte/rrc/asn/CellInfoUTRA-TDD-r9.c new file mode 100644 index 000000000..c3df7475c --- /dev/null +++ b/lte/rrc/asn/CellInfoUTRA-TDD-r9.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellInfoUTRA-TDD-r9.h" + +static asn_TYPE_member_t asn_MBR_CellInfoUTRA_TDD_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_TDD_r9, physCellId_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellInfoUTRA_TDD_r9, utra_BCCH_Container_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-BCCH-Container-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_CellInfoUTRA_TDD_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellInfoUTRA_TDD_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r9 at 976 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* utra-BCCH-Container-r9 at 977 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellInfoUTRA_TDD_r9_specs_1 = { + sizeof(struct CellInfoUTRA_TDD_r9), + offsetof(struct CellInfoUTRA_TDD_r9, _asn_ctx), + asn_MAP_CellInfoUTRA_TDD_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellInfoUTRA_TDD_r9 = { + "CellInfoUTRA-TDD-r9", + "CellInfoUTRA-TDD-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellInfoUTRA_TDD_r9_tags_1, + sizeof(asn_DEF_CellInfoUTRA_TDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoUTRA_TDD_r9_tags_1[0]), /* 1 */ + asn_DEF_CellInfoUTRA_TDD_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CellInfoUTRA_TDD_r9_tags_1) + /sizeof(asn_DEF_CellInfoUTRA_TDD_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellInfoUTRA_TDD_r9_1, + 2, /* Elements count */ + &asn_SPC_CellInfoUTRA_TDD_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r9.h b/lte/rrc/asn/CellInfoUTRA-TDD-r9.h new file mode 100644 index 000000000..5d19ca246 --- /dev/null +++ b/lte/rrc/asn/CellInfoUTRA-TDD-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellInfoUTRA_TDD_r9_H_ +#define _CellInfoUTRA_TDD_r9_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdUTRA-TDD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellInfoUTRA-TDD-r9 */ +typedef struct CellInfoUTRA_TDD_r9 { + PhysCellIdUTRA_TDD_t physCellId_r9; + OCTET_STRING_t utra_BCCH_Container_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellInfoUTRA_TDD_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellInfoUTRA_TDD_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellInfoUTRA_TDD_r9_H_ */ +#include diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.c b/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.c new file mode 100644 index 000000000..1fda889e1 --- /dev/null +++ b/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellReselectionParametersCDMA2000-v920.h" + +static asn_TYPE_member_t asn_MBR_CellReselectionParametersCDMA2000_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellReselectionParametersCDMA2000_v920, neighCellList_v920), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellListCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellList-v920" + }, +}; +static ber_tlv_tag_t asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellReselectionParametersCDMA2000_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* neighCellList-v920 at 1693 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellReselectionParametersCDMA2000_v920_specs_1 = { + sizeof(struct CellReselectionParametersCDMA2000_v920), + offsetof(struct CellReselectionParametersCDMA2000_v920, _asn_ctx), + asn_MAP_CellReselectionParametersCDMA2000_v920_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellReselectionParametersCDMA2000_v920 = { + "CellReselectionParametersCDMA2000-v920", + "CellReselectionParametersCDMA2000-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1, + sizeof(asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1) + /sizeof(asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1[0]), /* 1 */ + asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1) + /sizeof(asn_DEF_CellReselectionParametersCDMA2000_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellReselectionParametersCDMA2000_v920_1, + 1, /* Elements count */ + &asn_SPC_CellReselectionParametersCDMA2000_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.h b/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.h new file mode 100644 index 000000000..f7bafe64f --- /dev/null +++ b/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellReselectionParametersCDMA2000_v920_H_ +#define _CellReselectionParametersCDMA2000_v920_H_ + + +#include + +/* Including external dependencies */ +#include "NeighCellListCDMA2000-v920.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellReselectionParametersCDMA2000-v920 */ +typedef struct CellReselectionParametersCDMA2000_v920 { + NeighCellListCDMA2000_v920_t neighCellList_v920; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellReselectionParametersCDMA2000_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellReselectionParametersCDMA2000_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellReselectionParametersCDMA2000_v920_H_ */ +#include diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000.c b/lte/rrc/asn/CellReselectionParametersCDMA2000.c new file mode 100644 index 000000000..a752b3d9f --- /dev/null +++ b/lte/rrc/asn/CellReselectionParametersCDMA2000.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellReselectionParametersCDMA2000.h" + +static asn_TYPE_member_t asn_MBR_CellReselectionParametersCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellReselectionParametersCDMA2000, bandClassList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandClassListCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClassList" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellReselectionParametersCDMA2000, neighCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellListCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellList" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellReselectionParametersCDMA2000, t_ReselectionCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reselection, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionCDMA2000" + }, + { ATF_POINTER, 1, offsetof(struct CellReselectionParametersCDMA2000, t_ReselectionCDMA2000_SF), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionCDMA2000-SF" + }, +}; +static int asn_MAP_CellReselectionParametersCDMA2000_oms_1[] = { 3 }; +static ber_tlv_tag_t asn_DEF_CellReselectionParametersCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellReselectionParametersCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandClassList at 1685 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* neighCellList at 1686 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* t-ReselectionCDMA2000 at 1687 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* t-ReselectionCDMA2000-SF at 1688 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellReselectionParametersCDMA2000_specs_1 = { + sizeof(struct CellReselectionParametersCDMA2000), + offsetof(struct CellReselectionParametersCDMA2000, _asn_ctx), + asn_MAP_CellReselectionParametersCDMA2000_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_CellReselectionParametersCDMA2000_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellReselectionParametersCDMA2000 = { + "CellReselectionParametersCDMA2000", + "CellReselectionParametersCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellReselectionParametersCDMA2000_tags_1, + sizeof(asn_DEF_CellReselectionParametersCDMA2000_tags_1) + /sizeof(asn_DEF_CellReselectionParametersCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_CellReselectionParametersCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_CellReselectionParametersCDMA2000_tags_1) + /sizeof(asn_DEF_CellReselectionParametersCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellReselectionParametersCDMA2000_1, + 4, /* Elements count */ + &asn_SPC_CellReselectionParametersCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000.h b/lte/rrc/asn/CellReselectionParametersCDMA2000.h new file mode 100644 index 000000000..06c5fb286 --- /dev/null +++ b/lte/rrc/asn/CellReselectionParametersCDMA2000.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellReselectionParametersCDMA2000_H_ +#define _CellReselectionParametersCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "BandClassListCDMA2000.h" +#include "NeighCellListCDMA2000.h" +#include "T-Reselection.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SpeedStateScaleFactors; + +/* CellReselectionParametersCDMA2000 */ +typedef struct CellReselectionParametersCDMA2000 { + BandClassListCDMA2000_t bandClassList; + NeighCellListCDMA2000_t neighCellList; + T_Reselection_t t_ReselectionCDMA2000; + struct SpeedStateScaleFactors *t_ReselectionCDMA2000_SF /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellReselectionParametersCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellReselectionParametersCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SpeedStateScaleFactors.h" + +#endif /* _CellReselectionParametersCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CellReselectionPriority.c b/lte/rrc/asn/CellReselectionPriority.c new file mode 100644 index 000000000..ad2167091 --- /dev/null +++ b/lte/rrc/asn/CellReselectionPriority.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellReselectionPriority.h" + +int +CellReselectionPriority_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +CellReselectionPriority_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +CellReselectionPriority_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +CellReselectionPriority_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +CellReselectionPriority_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +CellReselectionPriority_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +CellReselectionPriority_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +CellReselectionPriority_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +CellReselectionPriority_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +CellReselectionPriority_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + CellReselectionPriority_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_CellReselectionPriority_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_CellReselectionPriority_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_CellReselectionPriority = { + "CellReselectionPriority", + "CellReselectionPriority", + CellReselectionPriority_free, + CellReselectionPriority_print, + CellReselectionPriority_constraint, + CellReselectionPriority_decode_ber, + CellReselectionPriority_encode_der, + CellReselectionPriority_decode_xer, + CellReselectionPriority_encode_xer, + CellReselectionPriority_decode_uper, + CellReselectionPriority_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellReselectionPriority_tags_1, + sizeof(asn_DEF_CellReselectionPriority_tags_1) + /sizeof(asn_DEF_CellReselectionPriority_tags_1[0]), /* 1 */ + asn_DEF_CellReselectionPriority_tags_1, /* Same as above */ + sizeof(asn_DEF_CellReselectionPriority_tags_1) + /sizeof(asn_DEF_CellReselectionPriority_tags_1[0]), /* 1 */ + &asn_PER_type_CellReselectionPriority_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/CellReselectionPriority.h b/lte/rrc/asn/CellReselectionPriority.h new file mode 100644 index 000000000..17d43b26a --- /dev/null +++ b/lte/rrc/asn/CellReselectionPriority.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellReselectionPriority_H_ +#define _CellReselectionPriority_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellReselectionPriority */ +typedef long CellReselectionPriority_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellReselectionPriority; +asn_struct_free_f CellReselectionPriority_free; +asn_struct_print_f CellReselectionPriority_print; +asn_constr_check_f CellReselectionPriority_constraint; +ber_type_decoder_f CellReselectionPriority_decode_ber; +der_type_encoder_f CellReselectionPriority_encode_der; +xer_type_decoder_f CellReselectionPriority_decode_xer; +xer_type_encoder_f CellReselectionPriority_encode_xer; +per_type_decoder_f CellReselectionPriority_decode_uper; +per_type_encoder_f CellReselectionPriority_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellReselectionPriority_H_ */ +#include diff --git a/lte/rrc/asn/CellSelectionInfo-v920.c b/lte/rrc/asn/CellSelectionInfo-v920.c index 113beae9f..cd4afca84 100644 --- a/lte/rrc/asn/CellSelectionInfo-v920.c +++ b/lte/rrc/asn/CellSelectionInfo-v920.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "CellSelectionInfo-v920.h" @@ -31,7 +32,7 @@ memb_q_QualMinOffset_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr } } -static asn_per_constraints_t asn_PER_memb_q_QualMinOffset_r9_constr_3 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_q_QualMinOffset_r9_constr_3 = { { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ @@ -56,13 +57,13 @@ static asn_TYPE_member_t asn_MBR_CellSelectionInfo_v920_1[] = { "q-QualMinOffset-r9" }, }; -static const int asn_MAP_CellSelectionInfo_v920_oms_1[] = { 1 }; -static const ber_tlv_tag_t asn_DEF_CellSelectionInfo_v920_tags_1[] = { +static int asn_MAP_CellSelectionInfo_v920_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CellSelectionInfo_v920_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_CellSelectionInfo_v920_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-QualMin-r9 */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-QualMinOffset-r9 */ +static asn_TYPE_tag2member_t asn_MAP_CellSelectionInfo_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-QualMin-r9 at 1228 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-QualMinOffset-r9 at 1229 */ }; static asn_SEQUENCE_specifics_t asn_SPC_CellSelectionInfo_v920_specs_1 = { sizeof(struct CellSelectionInfo_v920), diff --git a/lte/rrc/asn/CellSelectionInfo-v920.h b/lte/rrc/asn/CellSelectionInfo-v920.h index 8eb740718..338062e89 100644 --- a/lte/rrc/asn/CellSelectionInfo-v920.h +++ b/lte/rrc/asn/CellSelectionInfo-v920.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _CellSelectionInfo_v920_H_ diff --git a/lte/rrc/asn/CellsToAddMod.c b/lte/rrc/asn/CellsToAddMod.c new file mode 100644 index 000000000..8b09a7a47 --- /dev/null +++ b/lte/rrc/asn/CellsToAddMod.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddMod.h" + +static int +memb_cellIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellIndex_constr_2 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddMod_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddMod, cellIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cellIndex_constraint_1, + &asn_PER_memb_cellIndex_constr_2, + 0, + "cellIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddMod, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddMod, cellIndividualOffset), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellIndividualOffset" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellsToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIndex at 3263 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* physCellId at 3264 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellIndividualOffset at 3266 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellsToAddMod_specs_1 = { + sizeof(struct CellsToAddMod), + offsetof(struct CellsToAddMod, _asn_ctx), + asn_MAP_CellsToAddMod_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddMod = { + "CellsToAddMod", + "CellsToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddMod_tags_1, + sizeof(asn_DEF_CellsToAddMod_tags_1) + /sizeof(asn_DEF_CellsToAddMod_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddMod_tags_1) + /sizeof(asn_DEF_CellsToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellsToAddMod_1, + 3, /* Elements count */ + &asn_SPC_CellsToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddMod.h b/lte/rrc/asn/CellsToAddMod.h new file mode 100644 index 000000000..e169ed5fa --- /dev/null +++ b/lte/rrc/asn/CellsToAddMod.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddMod_H_ +#define _CellsToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellId.h" +#include "Q-OffsetRange.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellsToAddMod */ +typedef struct CellsToAddMod { + long cellIndex; + PhysCellId_t physCellId; + Q_OffsetRange_t cellIndividualOffset; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddMod; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellsToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModCDMA2000.c b/lte/rrc/asn/CellsToAddModCDMA2000.c new file mode 100644 index 000000000..6b4c188c5 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModCDMA2000.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModCDMA2000.h" + +static int +memb_cellIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellIndex_constr_2 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddModCDMA2000, cellIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cellIndex_constraint_1, + &asn_PER_memb_cellIndex_constr_2, + 0, + "cellIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddModCDMA2000, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellsToAddModCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIndex at 3238 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* physCellId at 3240 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellsToAddModCDMA2000_specs_1 = { + sizeof(struct CellsToAddModCDMA2000), + offsetof(struct CellsToAddModCDMA2000, _asn_ctx), + asn_MAP_CellsToAddModCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModCDMA2000 = { + "CellsToAddModCDMA2000", + "CellsToAddModCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModCDMA2000_tags_1, + sizeof(asn_DEF_CellsToAddModCDMA2000_tags_1) + /sizeof(asn_DEF_CellsToAddModCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModCDMA2000_tags_1) + /sizeof(asn_DEF_CellsToAddModCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellsToAddModCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_CellsToAddModCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModCDMA2000.h b/lte/rrc/asn/CellsToAddModCDMA2000.h new file mode 100644 index 000000000..3eafd929e --- /dev/null +++ b/lte/rrc/asn/CellsToAddModCDMA2000.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModCDMA2000_H_ +#define _CellsToAddModCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellIdCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellsToAddModCDMA2000 */ +typedef struct CellsToAddModCDMA2000 { + long cellIndex; + PhysCellIdCDMA2000_t physCellId; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellsToAddModCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModList.c b/lte/rrc/asn/CellsToAddModList.c new file mode 100644 index 000000000..b0b62909e --- /dev/null +++ b/lte/rrc/asn/CellsToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModList.h" + +static asn_per_constraints_t asn_PER_type_CellsToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellsToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellsToAddModList_specs_1 = { + sizeof(struct CellsToAddModList), + offsetof(struct CellsToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModList = { + "CellsToAddModList", + "CellsToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModList_tags_1, + sizeof(asn_DEF_CellsToAddModList_tags_1) + /sizeof(asn_DEF_CellsToAddModList_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModList_tags_1) + /sizeof(asn_DEF_CellsToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_CellsToAddModList_constr_1, + asn_MBR_CellsToAddModList_1, + 1, /* Single element */ + &asn_SPC_CellsToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModList.h b/lte/rrc/asn/CellsToAddModList.h new file mode 100644 index 000000000..3a0240033 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModList_H_ +#define _CellsToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellsToAddMod; + +/* CellsToAddModList */ +typedef struct CellsToAddModList { + A_SEQUENCE_OF(struct CellsToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellsToAddMod.h" + +#endif /* _CellsToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModListCDMA2000.c b/lte/rrc/asn/CellsToAddModListCDMA2000.c new file mode 100644 index 000000000..138f1ea0e --- /dev/null +++ b/lte/rrc/asn/CellsToAddModListCDMA2000.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModListCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_CellsToAddModListCDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModListCDMA2000_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellsToAddModCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModListCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellsToAddModListCDMA2000_specs_1 = { + sizeof(struct CellsToAddModListCDMA2000), + offsetof(struct CellsToAddModListCDMA2000, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModListCDMA2000 = { + "CellsToAddModListCDMA2000", + "CellsToAddModListCDMA2000", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModListCDMA2000_tags_1, + sizeof(asn_DEF_CellsToAddModListCDMA2000_tags_1) + /sizeof(asn_DEF_CellsToAddModListCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModListCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModListCDMA2000_tags_1) + /sizeof(asn_DEF_CellsToAddModListCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_CellsToAddModListCDMA2000_constr_1, + asn_MBR_CellsToAddModListCDMA2000_1, + 1, /* Single element */ + &asn_SPC_CellsToAddModListCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModListCDMA2000.h b/lte/rrc/asn/CellsToAddModListCDMA2000.h new file mode 100644 index 000000000..e68949b8d --- /dev/null +++ b/lte/rrc/asn/CellsToAddModListCDMA2000.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModListCDMA2000_H_ +#define _CellsToAddModListCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellsToAddModCDMA2000; + +/* CellsToAddModListCDMA2000 */ +typedef struct CellsToAddModListCDMA2000 { + A_SEQUENCE_OF(struct CellsToAddModCDMA2000) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModListCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModListCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellsToAddModCDMA2000.h" + +#endif /* _CellsToAddModListCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModListUTRA-FDD.c b/lte/rrc/asn/CellsToAddModListUTRA-FDD.c new file mode 100644 index 000000000..acad5247b --- /dev/null +++ b/lte/rrc/asn/CellsToAddModListUTRA-FDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModListUTRA-FDD.h" + +static asn_per_constraints_t asn_PER_type_CellsToAddModListUTRA_FDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModListUTRA_FDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellsToAddModUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModListUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellsToAddModListUTRA_FDD_specs_1 = { + sizeof(struct CellsToAddModListUTRA_FDD), + offsetof(struct CellsToAddModListUTRA_FDD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModListUTRA_FDD = { + "CellsToAddModListUTRA-FDD", + "CellsToAddModListUTRA-FDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModListUTRA_FDD_tags_1, + sizeof(asn_DEF_CellsToAddModListUTRA_FDD_tags_1) + /sizeof(asn_DEF_CellsToAddModListUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModListUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModListUTRA_FDD_tags_1) + /sizeof(asn_DEF_CellsToAddModListUTRA_FDD_tags_1[0]), /* 1 */ + &asn_PER_type_CellsToAddModListUTRA_FDD_constr_1, + asn_MBR_CellsToAddModListUTRA_FDD_1, + 1, /* Single element */ + &asn_SPC_CellsToAddModListUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModListUTRA-FDD.h b/lte/rrc/asn/CellsToAddModListUTRA-FDD.h new file mode 100644 index 000000000..5179f7424 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModListUTRA-FDD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModListUTRA_FDD_H_ +#define _CellsToAddModListUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellsToAddModUTRA_FDD; + +/* CellsToAddModListUTRA-FDD */ +typedef struct CellsToAddModListUTRA_FDD { + A_SEQUENCE_OF(struct CellsToAddModUTRA_FDD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModListUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModListUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellsToAddModUTRA-FDD.h" + +#endif /* _CellsToAddModListUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModListUTRA-TDD.c b/lte/rrc/asn/CellsToAddModListUTRA-TDD.c new file mode 100644 index 000000000..f26388ef5 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModListUTRA-TDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModListUTRA-TDD.h" + +static asn_per_constraints_t asn_PER_type_CellsToAddModListUTRA_TDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModListUTRA_TDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CellsToAddModUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModListUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellsToAddModListUTRA_TDD_specs_1 = { + sizeof(struct CellsToAddModListUTRA_TDD), + offsetof(struct CellsToAddModListUTRA_TDD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModListUTRA_TDD = { + "CellsToAddModListUTRA-TDD", + "CellsToAddModListUTRA-TDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModListUTRA_TDD_tags_1, + sizeof(asn_DEF_CellsToAddModListUTRA_TDD_tags_1) + /sizeof(asn_DEF_CellsToAddModListUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModListUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModListUTRA_TDD_tags_1) + /sizeof(asn_DEF_CellsToAddModListUTRA_TDD_tags_1[0]), /* 1 */ + &asn_PER_type_CellsToAddModListUTRA_TDD_constr_1, + asn_MBR_CellsToAddModListUTRA_TDD_1, + 1, /* Single element */ + &asn_SPC_CellsToAddModListUTRA_TDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModListUTRA-TDD.h b/lte/rrc/asn/CellsToAddModListUTRA-TDD.h new file mode 100644 index 000000000..5638e3765 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModListUTRA-TDD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModListUTRA_TDD_H_ +#define _CellsToAddModListUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellsToAddModUTRA_TDD; + +/* CellsToAddModListUTRA-TDD */ +typedef struct CellsToAddModListUTRA_TDD { + A_SEQUENCE_OF(struct CellsToAddModUTRA_TDD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModListUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModListUTRA_TDD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellsToAddModUTRA-TDD.h" + +#endif /* _CellsToAddModListUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModUTRA-FDD.c b/lte/rrc/asn/CellsToAddModUTRA-FDD.c new file mode 100644 index 000000000..28fe3bfaf --- /dev/null +++ b/lte/rrc/asn/CellsToAddModUTRA-FDD.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModUTRA-FDD.h" + +static int +memb_cellIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellIndex_constr_2 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModUTRA_FDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddModUTRA_FDD, cellIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cellIndex_constraint_1, + &asn_PER_memb_cellIndex_constr_2, + 0, + "cellIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddModUTRA_FDD, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellsToAddModUTRA_FDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIndex at 3333 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* physCellId at 3335 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellsToAddModUTRA_FDD_specs_1 = { + sizeof(struct CellsToAddModUTRA_FDD), + offsetof(struct CellsToAddModUTRA_FDD, _asn_ctx), + asn_MAP_CellsToAddModUTRA_FDD_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModUTRA_FDD = { + "CellsToAddModUTRA-FDD", + "CellsToAddModUTRA-FDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModUTRA_FDD_tags_1, + sizeof(asn_DEF_CellsToAddModUTRA_FDD_tags_1) + /sizeof(asn_DEF_CellsToAddModUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModUTRA_FDD_tags_1) + /sizeof(asn_DEF_CellsToAddModUTRA_FDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellsToAddModUTRA_FDD_1, + 2, /* Elements count */ + &asn_SPC_CellsToAddModUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModUTRA-FDD.h b/lte/rrc/asn/CellsToAddModUTRA-FDD.h new file mode 100644 index 000000000..e5af3ea18 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModUTRA-FDD.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModUTRA_FDD_H_ +#define _CellsToAddModUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellIdUTRA-FDD.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellsToAddModUTRA-FDD */ +typedef struct CellsToAddModUTRA_FDD { + long cellIndex; + PhysCellIdUTRA_FDD_t physCellId; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellsToAddModUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/CellsToAddModUTRA-TDD.c b/lte/rrc/asn/CellsToAddModUTRA-TDD.c new file mode 100644 index 000000000..6d3b64962 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModUTRA-TDD.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CellsToAddModUTRA-TDD.h" + +static int +memb_cellIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_cellIndex_constr_2 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CellsToAddModUTRA_TDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddModUTRA_TDD, cellIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cellIndex_constraint_1, + &asn_PER_memb_cellIndex_constr_2, + 0, + "cellIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct CellsToAddModUTRA_TDD, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, +}; +static ber_tlv_tag_t asn_DEF_CellsToAddModUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CellsToAddModUTRA_TDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIndex at 3340 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* physCellId at 3342 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CellsToAddModUTRA_TDD_specs_1 = { + sizeof(struct CellsToAddModUTRA_TDD), + offsetof(struct CellsToAddModUTRA_TDD, _asn_ctx), + asn_MAP_CellsToAddModUTRA_TDD_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsToAddModUTRA_TDD = { + "CellsToAddModUTRA-TDD", + "CellsToAddModUTRA-TDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsToAddModUTRA_TDD_tags_1, + sizeof(asn_DEF_CellsToAddModUTRA_TDD_tags_1) + /sizeof(asn_DEF_CellsToAddModUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_CellsToAddModUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsToAddModUTRA_TDD_tags_1) + /sizeof(asn_DEF_CellsToAddModUTRA_TDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CellsToAddModUTRA_TDD_1, + 2, /* Elements count */ + &asn_SPC_CellsToAddModUTRA_TDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsToAddModUTRA-TDD.h b/lte/rrc/asn/CellsToAddModUTRA-TDD.h new file mode 100644 index 000000000..562622dc3 --- /dev/null +++ b/lte/rrc/asn/CellsToAddModUTRA-TDD.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CellsToAddModUTRA_TDD_H_ +#define _CellsToAddModUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellIdUTRA-TDD.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CellsToAddModUTRA-TDD */ +typedef struct CellsToAddModUTRA_TDD { + long cellIndex; + PhysCellIdUTRA_TDD_t physCellId; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsToAddModUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsToAddModUTRA_TDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellsToAddModUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/CellsTriggeredList.c b/lte/rrc/asn/CellsTriggeredList.c new file mode 100644 index 000000000..9e0dabd27 --- /dev/null +++ b/lte/rrc/asn/CellsTriggeredList.c @@ -0,0 +1,266 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#include "CellsTriggeredList.h" + +static asn_per_constraints_t asn_PER_type_physCellIdUTRA_constr_4 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_Member_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_CellsTriggeredList_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_physCellIdUTRA_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct physCellIdUTRA, choice.fdd), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "fdd" + }, + { ATF_NOFLAGS, 0, offsetof(struct physCellIdUTRA, choice.tdd), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tdd" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_physCellIdUTRA_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd */ +}; +static asn_CHOICE_specifics_t asn_SPC_physCellIdUTRA_specs_4 = { + sizeof(struct physCellIdUTRA), + offsetof(struct physCellIdUTRA, _asn_ctx), + offsetof(struct physCellIdUTRA, present), + sizeof(((struct physCellIdUTRA *)0)->present), + asn_MAP_physCellIdUTRA_tag2el_4, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_physCellIdUTRA_4 = { + "physCellIdUTRA", + "physCellIdUTRA", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_physCellIdUTRA_constr_4, + asn_MBR_physCellIdUTRA_4, + 2, /* Elements count */ + &asn_SPC_physCellIdUTRA_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_physCellIdGERAN_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct physCellIdGERAN, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct physCellIdGERAN, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, +}; +static const ber_tlv_tag_t asn_DEF_physCellIdGERAN_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_physCellIdGERAN_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* physCellId */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_physCellIdGERAN_specs_7 = { + sizeof(struct physCellIdGERAN), + offsetof(struct physCellIdGERAN, _asn_ctx), + asn_MAP_physCellIdGERAN_tag2el_7, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_physCellIdGERAN_7 = { + "physCellIdGERAN", + "physCellIdGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_physCellIdGERAN_tags_7, + sizeof(asn_DEF_physCellIdGERAN_tags_7) + /sizeof(asn_DEF_physCellIdGERAN_tags_7[0]) - 1, /* 1 */ + asn_DEF_physCellIdGERAN_tags_7, /* Same as above */ + sizeof(asn_DEF_physCellIdGERAN_tags_7) + /sizeof(asn_DEF_physCellIdGERAN_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_physCellIdGERAN_7, + 2, /* Elements count */ + &asn_SPC_physCellIdGERAN_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_Member_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct Member, choice.physCellIdEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdEUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct Member, choice.physCellIdUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_physCellIdUTRA_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct Member, choice.physCellIdGERAN), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_physCellIdGERAN_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdGERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct Member, choice.physCellIdCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdCDMA2000" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_Member_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellIdEUTRA */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* physCellIdUTRA */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* physCellIdGERAN */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* physCellIdCDMA2000 */ +}; +static asn_CHOICE_specifics_t asn_SPC_Member_specs_2 = { + sizeof(struct Member), + offsetof(struct Member, _asn_ctx), + offsetof(struct Member, present), + sizeof(((struct Member *)0)->present), + asn_MAP_Member_tag2el_2, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_2 = { + "CHOICE", + "CHOICE", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_Member_constr_2, + asn_MBR_Member_2, + 4, /* Elements count */ + &asn_SPC_Member_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CellsTriggeredList_1[] = { + { ATF_POINTER, 0, 0, + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Member_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_CellsTriggeredList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CellsTriggeredList_specs_1 = { + sizeof(struct CellsTriggeredList), + offsetof(struct CellsTriggeredList, _asn_ctx), + 2, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_CellsTriggeredList = { + "CellsTriggeredList", + "CellsTriggeredList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CellsTriggeredList_tags_1, + sizeof(asn_DEF_CellsTriggeredList_tags_1) + /sizeof(asn_DEF_CellsTriggeredList_tags_1[0]), /* 1 */ + asn_DEF_CellsTriggeredList_tags_1, /* Same as above */ + sizeof(asn_DEF_CellsTriggeredList_tags_1) + /sizeof(asn_DEF_CellsTriggeredList_tags_1[0]), /* 1 */ + &asn_PER_type_CellsTriggeredList_constr_1, + asn_MBR_CellsTriggeredList_1, + 1, /* Single element */ + &asn_SPC_CellsTriggeredList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CellsTriggeredList.h b/lte/rrc/asn/CellsTriggeredList.h new file mode 100644 index 000000000..73a7bd81a --- /dev/null +++ b/lte/rrc/asn/CellsTriggeredList.h @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#ifndef _CellsTriggeredList_H_ +#define _CellsTriggeredList_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PhysCellId.h" +#include "PhysCellIdCDMA2000.h" +#include "PhysCellIdUTRA-FDD.h" +#include "PhysCellIdUTRA-TDD.h" +#include +#include "CarrierFreqGERAN.h" +#include "PhysCellIdGERAN.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Member_PR { + Member_PR_NOTHING, /* No components present */ + Member_PR_physCellIdEUTRA, + Member_PR_physCellIdUTRA, + Member_PR_physCellIdGERAN, + Member_PR_physCellIdCDMA2000 +} Member_PR; +typedef enum physCellIdUTRA_PR { + physCellIdUTRA_PR_NOTHING, /* No components present */ + physCellIdUTRA_PR_fdd, + physCellIdUTRA_PR_tdd +} physCellIdUTRA_PR; + +/* CellsTriggeredList */ +typedef struct CellsTriggeredList { + A_SEQUENCE_OF(struct Member { + Member_PR present; + union CellsTriggeredList__Member_u { + PhysCellId_t physCellIdEUTRA; + struct physCellIdUTRA { + physCellIdUTRA_PR present; + union physCellIdUTRA_u { + PhysCellIdUTRA_FDD_t fdd; + PhysCellIdUTRA_TDD_t tdd; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } physCellIdUTRA; + struct physCellIdGERAN { + CarrierFreqGERAN_t carrierFreq; + PhysCellIdGERAN_t physCellId; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } physCellIdGERAN; + PhysCellIdCDMA2000_t physCellIdCDMA2000; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CellsTriggeredList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CellsTriggeredList; + +#ifdef __cplusplus +} +#endif + +#endif /* _CellsTriggeredList_H_ */ +#include diff --git a/lte/rrc/asn/CommonSF-AllocPatternList-r9.c b/lte/rrc/asn/CommonSF-AllocPatternList-r9.c new file mode 100644 index 000000000..6ddb7932a --- /dev/null +++ b/lte/rrc/asn/CommonSF-AllocPatternList-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CommonSF-AllocPatternList-r9.h" + +static asn_per_constraints_t asn_PER_type_CommonSF_AllocPatternList_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CommonSF_AllocPatternList_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBSFN_SubframeConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CommonSF_AllocPatternList_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CommonSF_AllocPatternList_r9_specs_1 = { + sizeof(struct CommonSF_AllocPatternList_r9), + offsetof(struct CommonSF_AllocPatternList_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CommonSF_AllocPatternList_r9 = { + "CommonSF-AllocPatternList-r9", + "CommonSF-AllocPatternList-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CommonSF_AllocPatternList_r9_tags_1, + sizeof(asn_DEF_CommonSF_AllocPatternList_r9_tags_1) + /sizeof(asn_DEF_CommonSF_AllocPatternList_r9_tags_1[0]), /* 1 */ + asn_DEF_CommonSF_AllocPatternList_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_CommonSF_AllocPatternList_r9_tags_1) + /sizeof(asn_DEF_CommonSF_AllocPatternList_r9_tags_1[0]), /* 1 */ + &asn_PER_type_CommonSF_AllocPatternList_r9_constr_1, + asn_MBR_CommonSF_AllocPatternList_r9_1, + 1, /* Single element */ + &asn_SPC_CommonSF_AllocPatternList_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CommonSF-AllocPatternList-r9.h b/lte/rrc/asn/CommonSF-AllocPatternList-r9.h new file mode 100644 index 000000000..f9a738433 --- /dev/null +++ b/lte/rrc/asn/CommonSF-AllocPatternList-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CommonSF_AllocPatternList_r9_H_ +#define _CommonSF_AllocPatternList_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MBSFN_SubframeConfig; + +/* CommonSF-AllocPatternList-r9 */ +typedef struct CommonSF_AllocPatternList_r9 { + A_SEQUENCE_OF(struct MBSFN_SubframeConfig) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CommonSF_AllocPatternList_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CommonSF_AllocPatternList_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBSFN-SubframeConfig.h" + +#endif /* _CommonSF_AllocPatternList_r9_H_ */ +#include diff --git a/lte/rrc/asn/CounterCheck-r8-IEs.c b/lte/rrc/asn/CounterCheck-r8-IEs.c new file mode 100644 index 000000000..84ccaba5b --- /dev/null +++ b/lte/rrc/asn/CounterCheck-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CounterCheck-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_CounterCheck_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck_r8_IEs, drb_CountMSB_InfoList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_CountMSB_InfoList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-CountMSB-InfoList" + }, + { ATF_POINTER, 1, offsetof(struct CounterCheck_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CounterCheck_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CounterCheck_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CounterCheck_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CounterCheck_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* drb-CountMSB-InfoList at 147 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 148 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CounterCheck_r8_IEs_specs_1 = { + sizeof(struct CounterCheck_r8_IEs), + offsetof(struct CounterCheck_r8_IEs, _asn_ctx), + asn_MAP_CounterCheck_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CounterCheck_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CounterCheck_r8_IEs = { + "CounterCheck-r8-IEs", + "CounterCheck-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CounterCheck_r8_IEs_tags_1, + sizeof(asn_DEF_CounterCheck_r8_IEs_tags_1) + /sizeof(asn_DEF_CounterCheck_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_CounterCheck_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CounterCheck_r8_IEs_tags_1) + /sizeof(asn_DEF_CounterCheck_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CounterCheck_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_CounterCheck_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CounterCheck-r8-IEs.h b/lte/rrc/asn/CounterCheck-r8-IEs.h new file mode 100644 index 000000000..66037b771 --- /dev/null +++ b/lte/rrc/asn/CounterCheck-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CounterCheck_r8_IEs_H_ +#define _CounterCheck_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "DRB-CountMSB-InfoList.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CounterCheck_v8a0_IEs; + +/* CounterCheck-r8-IEs */ +typedef struct CounterCheck_r8_IEs { + DRB_CountMSB_InfoList_t drb_CountMSB_InfoList; + struct CounterCheck_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CounterCheck_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CounterCheck_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CounterCheck-v8a0-IEs.h" + +#endif /* _CounterCheck_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CounterCheck-v8a0-IEs.c b/lte/rrc/asn/CounterCheck-v8a0-IEs.c new file mode 100644 index 000000000..c98981c33 --- /dev/null +++ b/lte/rrc/asn/CounterCheck-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CounterCheck-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct CounterCheck_v8a0_IEs__nonCriticalExtension), + offsetof(struct CounterCheck_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CounterCheck_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct CounterCheck_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct CounterCheck_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CounterCheck_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_CounterCheck_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CounterCheck_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 152 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 153 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CounterCheck_v8a0_IEs_specs_1 = { + sizeof(struct CounterCheck_v8a0_IEs), + offsetof(struct CounterCheck_v8a0_IEs, _asn_ctx), + asn_MAP_CounterCheck_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CounterCheck_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CounterCheck_v8a0_IEs = { + "CounterCheck-v8a0-IEs", + "CounterCheck-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CounterCheck_v8a0_IEs_tags_1, + sizeof(asn_DEF_CounterCheck_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CounterCheck_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_CounterCheck_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CounterCheck_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CounterCheck_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CounterCheck_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_CounterCheck_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CounterCheck-v8a0-IEs.h b/lte/rrc/asn/CounterCheck-v8a0-IEs.h new file mode 100644 index 000000000..3c046d0e1 --- /dev/null +++ b/lte/rrc/asn/CounterCheck-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CounterCheck_v8a0_IEs_H_ +#define _CounterCheck_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CounterCheck-v8a0-IEs */ +typedef struct CounterCheck_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct CounterCheck_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CounterCheck_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CounterCheck_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _CounterCheck_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CounterCheck.c b/lte/rrc/asn/CounterCheck.c new file mode 100644 index 000000000..7d4a05a2c --- /dev/null +++ b/lte/rrc/asn/CounterCheck.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CounterCheck.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck__criticalExtensions__c1, choice.counterCheck_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CounterCheck_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "counterCheck-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* counterCheck-r8 at 139 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 140 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 140 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 140 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct CounterCheck__criticalExtensions__c1), + offsetof(struct CounterCheck__criticalExtensions__c1, _asn_ctx), + offsetof(struct CounterCheck__criticalExtensions__c1, present), + sizeof(((struct CounterCheck__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct CounterCheck__criticalExtensions__criticalExtensionsFuture), + offsetof(struct CounterCheck__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 139 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 142 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct CounterCheck__criticalExtensions), + offsetof(struct CounterCheck__criticalExtensions, _asn_ctx), + offsetof(struct CounterCheck__criticalExtensions, present), + sizeof(((struct CounterCheck__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CounterCheck_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheck, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_CounterCheck_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CounterCheck_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 136 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 141 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CounterCheck_specs_1 = { + sizeof(struct CounterCheck), + offsetof(struct CounterCheck, _asn_ctx), + asn_MAP_CounterCheck_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CounterCheck = { + "CounterCheck", + "CounterCheck", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CounterCheck_tags_1, + sizeof(asn_DEF_CounterCheck_tags_1) + /sizeof(asn_DEF_CounterCheck_tags_1[0]), /* 1 */ + asn_DEF_CounterCheck_tags_1, /* Same as above */ + sizeof(asn_DEF_CounterCheck_tags_1) + /sizeof(asn_DEF_CounterCheck_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CounterCheck_1, + 2, /* Elements count */ + &asn_SPC_CounterCheck_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CounterCheck.h b/lte/rrc/asn/CounterCheck.h new file mode 100644 index 000000000..177a6cec8 --- /dev/null +++ b/lte/rrc/asn/CounterCheck.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CounterCheck_H_ +#define _CounterCheck_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "CounterCheck-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CounterCheck__criticalExtensions_PR { + CounterCheck__criticalExtensions_PR_NOTHING, /* No components present */ + CounterCheck__criticalExtensions_PR_c1, + CounterCheck__criticalExtensions_PR_criticalExtensionsFuture +} CounterCheck__criticalExtensions_PR; +typedef enum CounterCheck__criticalExtensions__c1_PR { + CounterCheck__criticalExtensions__c1_PR_NOTHING, /* No components present */ + CounterCheck__criticalExtensions__c1_PR_counterCheck_r8, + CounterCheck__criticalExtensions__c1_PR_spare3, + CounterCheck__criticalExtensions__c1_PR_spare2, + CounterCheck__criticalExtensions__c1_PR_spare1 +} CounterCheck__criticalExtensions__c1_PR; + +/* CounterCheck */ +typedef struct CounterCheck { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct CounterCheck__criticalExtensions { + CounterCheck__criticalExtensions_PR present; + union CounterCheck__criticalExtensions_u { + struct CounterCheck__criticalExtensions__c1 { + CounterCheck__criticalExtensions__c1_PR present; + union CounterCheck__criticalExtensions__c1_u { + CounterCheck_r8_IEs_t counterCheck_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct CounterCheck__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CounterCheck_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CounterCheck; + +#ifdef __cplusplus +} +#endif + +#endif /* _CounterCheck_H_ */ +#include diff --git a/lte/rrc/asn/CounterCheckResponse-r8-IEs.c b/lte/rrc/asn/CounterCheckResponse-r8-IEs.c new file mode 100644 index 000000000..a96ad08cd --- /dev/null +++ b/lte/rrc/asn/CounterCheckResponse-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CounterCheckResponse-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_CounterCheckResponse_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheckResponse_r8_IEs, drb_CountInfoList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_CountInfoList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-CountInfoList" + }, + { ATF_POINTER, 1, offsetof(struct CounterCheckResponse_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CounterCheckResponse_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CounterCheckResponse_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_CounterCheckResponse_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CounterCheckResponse_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* drb-CountInfoList at 174 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 175 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CounterCheckResponse_r8_IEs_specs_1 = { + sizeof(struct CounterCheckResponse_r8_IEs), + offsetof(struct CounterCheckResponse_r8_IEs, _asn_ctx), + asn_MAP_CounterCheckResponse_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CounterCheckResponse_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CounterCheckResponse_r8_IEs = { + "CounterCheckResponse-r8-IEs", + "CounterCheckResponse-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CounterCheckResponse_r8_IEs_tags_1, + sizeof(asn_DEF_CounterCheckResponse_r8_IEs_tags_1) + /sizeof(asn_DEF_CounterCheckResponse_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_CounterCheckResponse_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CounterCheckResponse_r8_IEs_tags_1) + /sizeof(asn_DEF_CounterCheckResponse_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CounterCheckResponse_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_CounterCheckResponse_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CounterCheckResponse-r8-IEs.h b/lte/rrc/asn/CounterCheckResponse-r8-IEs.h new file mode 100644 index 000000000..76e9082c3 --- /dev/null +++ b/lte/rrc/asn/CounterCheckResponse-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CounterCheckResponse_r8_IEs_H_ +#define _CounterCheckResponse_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "DRB-CountInfoList.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CounterCheckResponse_v8a0_IEs; + +/* CounterCheckResponse-r8-IEs */ +typedef struct CounterCheckResponse_r8_IEs { + DRB_CountInfoList_t drb_CountInfoList; + struct CounterCheckResponse_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CounterCheckResponse_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CounterCheckResponse_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CounterCheckResponse-v8a0-IEs.h" + +#endif /* _CounterCheckResponse_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c b/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c new file mode 100644 index 000000000..c34d24ae2 --- /dev/null +++ b/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CounterCheckResponse-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct CounterCheckResponse_v8a0_IEs__nonCriticalExtension), + offsetof(struct CounterCheckResponse_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CounterCheckResponse_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct CounterCheckResponse_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct CounterCheckResponse_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_CounterCheckResponse_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CounterCheckResponse_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 179 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 180 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CounterCheckResponse_v8a0_IEs_specs_1 = { + sizeof(struct CounterCheckResponse_v8a0_IEs), + offsetof(struct CounterCheckResponse_v8a0_IEs, _asn_ctx), + asn_MAP_CounterCheckResponse_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_CounterCheckResponse_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CounterCheckResponse_v8a0_IEs = { + "CounterCheckResponse-v8a0-IEs", + "CounterCheckResponse-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1, + sizeof(asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1) + /sizeof(asn_DEF_CounterCheckResponse_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CounterCheckResponse_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_CounterCheckResponse_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h b/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h new file mode 100644 index 000000000..6397f61f7 --- /dev/null +++ b/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CounterCheckResponse_v8a0_IEs_H_ +#define _CounterCheckResponse_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CounterCheckResponse-v8a0-IEs */ +typedef struct CounterCheckResponse_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct CounterCheckResponse_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CounterCheckResponse_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CounterCheckResponse_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _CounterCheckResponse_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/CounterCheckResponse.c b/lte/rrc/asn/CounterCheckResponse.c new file mode 100644 index 000000000..9152766fa --- /dev/null +++ b/lte/rrc/asn/CounterCheckResponse.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CounterCheckResponse.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_5 = { + sizeof(struct CounterCheckResponse__criticalExtensions__criticalExtensionsFuture), + offsetof(struct CounterCheckResponse__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_5 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_5, + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_5, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheckResponse__criticalExtensions, choice.counterCheckResponse_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CounterCheckResponse_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "counterCheckResponse-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheckResponse__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* counterCheckResponse-r8 at 168 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 169 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct CounterCheckResponse__criticalExtensions), + offsetof(struct CounterCheckResponse__criticalExtensions, _asn_ctx), + offsetof(struct CounterCheckResponse__criticalExtensions, present), + sizeof(((struct CounterCheckResponse__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CounterCheckResponse_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CounterCheckResponse, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct CounterCheckResponse, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_CounterCheckResponse_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CounterCheckResponse_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 166 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 168 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CounterCheckResponse_specs_1 = { + sizeof(struct CounterCheckResponse), + offsetof(struct CounterCheckResponse, _asn_ctx), + asn_MAP_CounterCheckResponse_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CounterCheckResponse = { + "CounterCheckResponse", + "CounterCheckResponse", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CounterCheckResponse_tags_1, + sizeof(asn_DEF_CounterCheckResponse_tags_1) + /sizeof(asn_DEF_CounterCheckResponse_tags_1[0]), /* 1 */ + asn_DEF_CounterCheckResponse_tags_1, /* Same as above */ + sizeof(asn_DEF_CounterCheckResponse_tags_1) + /sizeof(asn_DEF_CounterCheckResponse_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CounterCheckResponse_1, + 2, /* Elements count */ + &asn_SPC_CounterCheckResponse_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CounterCheckResponse.h b/lte/rrc/asn/CounterCheckResponse.h new file mode 100644 index 000000000..12bc8d66b --- /dev/null +++ b/lte/rrc/asn/CounterCheckResponse.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CounterCheckResponse_H_ +#define _CounterCheckResponse_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "CounterCheckResponse-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CounterCheckResponse__criticalExtensions_PR { + CounterCheckResponse__criticalExtensions_PR_NOTHING, /* No components present */ + CounterCheckResponse__criticalExtensions_PR_counterCheckResponse_r8, + CounterCheckResponse__criticalExtensions_PR_criticalExtensionsFuture +} CounterCheckResponse__criticalExtensions_PR; + +/* CounterCheckResponse */ +typedef struct CounterCheckResponse { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct CounterCheckResponse__criticalExtensions { + CounterCheckResponse__criticalExtensions_PR present; + union CounterCheckResponse__criticalExtensions_u { + CounterCheckResponse_r8_IEs_t counterCheckResponse_r8; + struct CounterCheckResponse__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CounterCheckResponse_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CounterCheckResponse; + +#ifdef __cplusplus +} +#endif + +#endif /* _CounterCheckResponse_H_ */ +#include diff --git a/lte/rrc/asn/CountingRequestInfo-r10.c b/lte/rrc/asn/CountingRequestInfo-r10.c new file mode 100644 index 000000000..6a0dc0d1f --- /dev/null +++ b/lte/rrc/asn/CountingRequestInfo-r10.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CountingRequestInfo-r10.h" + +static asn_TYPE_member_t asn_MBR_CountingRequestInfo_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CountingRequestInfo_r10, tmgi_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TMGI_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tmgi-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_CountingRequestInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CountingRequestInfo_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* tmgi-r10 at 364 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CountingRequestInfo_r10_specs_1 = { + sizeof(struct CountingRequestInfo_r10), + offsetof(struct CountingRequestInfo_r10, _asn_ctx), + asn_MAP_CountingRequestInfo_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CountingRequestInfo_r10 = { + "CountingRequestInfo-r10", + "CountingRequestInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CountingRequestInfo_r10_tags_1, + sizeof(asn_DEF_CountingRequestInfo_r10_tags_1) + /sizeof(asn_DEF_CountingRequestInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_CountingRequestInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CountingRequestInfo_r10_tags_1) + /sizeof(asn_DEF_CountingRequestInfo_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CountingRequestInfo_r10_1, + 1, /* Elements count */ + &asn_SPC_CountingRequestInfo_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CountingRequestInfo-r10.h b/lte/rrc/asn/CountingRequestInfo-r10.h new file mode 100644 index 000000000..7447f19d3 --- /dev/null +++ b/lte/rrc/asn/CountingRequestInfo-r10.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CountingRequestInfo_r10_H_ +#define _CountingRequestInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include "TMGI-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CountingRequestInfo-r10 */ +typedef struct CountingRequestInfo_r10 { + TMGI_r9_t tmgi_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CountingRequestInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CountingRequestInfo_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CountingRequestInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/CountingRequestList-r10.c b/lte/rrc/asn/CountingRequestList-r10.c new file mode 100644 index 000000000..2e045ad02 --- /dev/null +++ b/lte/rrc/asn/CountingRequestList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CountingRequestList-r10.h" + +static asn_per_constraints_t asn_PER_type_CountingRequestList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CountingRequestList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CountingRequestInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CountingRequestList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CountingRequestList_r10_specs_1 = { + sizeof(struct CountingRequestList_r10), + offsetof(struct CountingRequestList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CountingRequestList_r10 = { + "CountingRequestList-r10", + "CountingRequestList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CountingRequestList_r10_tags_1, + sizeof(asn_DEF_CountingRequestList_r10_tags_1) + /sizeof(asn_DEF_CountingRequestList_r10_tags_1[0]), /* 1 */ + asn_DEF_CountingRequestList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CountingRequestList_r10_tags_1) + /sizeof(asn_DEF_CountingRequestList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_CountingRequestList_r10_constr_1, + asn_MBR_CountingRequestList_r10_1, + 1, /* Single element */ + &asn_SPC_CountingRequestList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CountingRequestList-r10.h b/lte/rrc/asn/CountingRequestList-r10.h new file mode 100644 index 000000000..8ee221654 --- /dev/null +++ b/lte/rrc/asn/CountingRequestList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CountingRequestList_r10_H_ +#define _CountingRequestList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CountingRequestInfo_r10; + +/* CountingRequestList-r10 */ +typedef struct CountingRequestList_r10 { + A_SEQUENCE_OF(struct CountingRequestInfo_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CountingRequestList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CountingRequestList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CountingRequestInfo-r10.h" + +#endif /* _CountingRequestList_r10_H_ */ +#include diff --git a/lte/rrc/asn/CountingResponseInfo-r10.c b/lte/rrc/asn/CountingResponseInfo-r10.c new file mode 100644 index 000000000..319264b00 --- /dev/null +++ b/lte/rrc/asn/CountingResponseInfo-r10.c @@ -0,0 +1,90 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CountingResponseInfo-r10.h" + +static int +memb_countingResponseService_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_countingResponseService_r10_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CountingResponseInfo_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CountingResponseInfo_r10, countingResponseService_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_countingResponseService_r10_constraint_1, + &asn_PER_memb_countingResponseService_r10_constr_2, + 0, + "countingResponseService-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_CountingResponseInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CountingResponseInfo_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* countingResponseService-r10 at 389 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CountingResponseInfo_r10_specs_1 = { + sizeof(struct CountingResponseInfo_r10), + offsetof(struct CountingResponseInfo_r10, _asn_ctx), + asn_MAP_CountingResponseInfo_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CountingResponseInfo_r10 = { + "CountingResponseInfo-r10", + "CountingResponseInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CountingResponseInfo_r10_tags_1, + sizeof(asn_DEF_CountingResponseInfo_r10_tags_1) + /sizeof(asn_DEF_CountingResponseInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_CountingResponseInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CountingResponseInfo_r10_tags_1) + /sizeof(asn_DEF_CountingResponseInfo_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CountingResponseInfo_r10_1, + 1, /* Elements count */ + &asn_SPC_CountingResponseInfo_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CountingResponseInfo-r10.h b/lte/rrc/asn/CountingResponseInfo-r10.h new file mode 100644 index 000000000..b5f1b5263 --- /dev/null +++ b/lte/rrc/asn/CountingResponseInfo-r10.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CountingResponseInfo_r10_H_ +#define _CountingResponseInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* CountingResponseInfo-r10 */ +typedef struct CountingResponseInfo_r10 { + long countingResponseService_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CountingResponseInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CountingResponseInfo_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CountingResponseInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/CountingResponseList-r10.c b/lte/rrc/asn/CountingResponseList-r10.c new file mode 100644 index 000000000..59d6c89fe --- /dev/null +++ b/lte/rrc/asn/CountingResponseList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CountingResponseList-r10.h" + +static asn_per_constraints_t asn_PER_type_CountingResponseList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_CountingResponseList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_CountingResponseInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_CountingResponseList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_CountingResponseList_r10_specs_1 = { + sizeof(struct CountingResponseList_r10), + offsetof(struct CountingResponseList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_CountingResponseList_r10 = { + "CountingResponseList-r10", + "CountingResponseList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CountingResponseList_r10_tags_1, + sizeof(asn_DEF_CountingResponseList_r10_tags_1) + /sizeof(asn_DEF_CountingResponseList_r10_tags_1[0]), /* 1 */ + asn_DEF_CountingResponseList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CountingResponseList_r10_tags_1) + /sizeof(asn_DEF_CountingResponseList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_CountingResponseList_r10_constr_1, + asn_MBR_CountingResponseList_r10_1, + 1, /* Single element */ + &asn_SPC_CountingResponseList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CountingResponseList-r10.h b/lte/rrc/asn/CountingResponseList-r10.h new file mode 100644 index 000000000..eb97fc4ed --- /dev/null +++ b/lte/rrc/asn/CountingResponseList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CountingResponseList_r10_H_ +#define _CountingResponseList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CountingResponseInfo_r10; + +/* CountingResponseList-r10 */ +typedef struct CountingResponseList_r10 { + A_SEQUENCE_OF(struct CountingResponseInfo_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CountingResponseList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CountingResponseList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CountingResponseInfo-r10.h" + +#endif /* _CountingResponseList_r10_H_ */ +#include diff --git a/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.c b/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.c new file mode 100644 index 000000000..cfdd30495 --- /dev/null +++ b/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.c @@ -0,0 +1,269 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "CrossCarrierSchedulingConfig-r10.h" + +static int +memb_pdsch_Start_r10_constraint_5(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_pdsch_Start_r10_constr_7 = { + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (1..4) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_schedulingCellInfo_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_own_r10_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__own_r10, cif_Presence_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cif-Presence-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_own_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_own_r10_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* cif-Presence-r10 at 1948 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_own_r10_specs_3 = { + sizeof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__own_r10), + offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__own_r10, _asn_ctx), + asn_MAP_own_r10_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_own_r10_3 = { + "own-r10", + "own-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_own_r10_tags_3, + sizeof(asn_DEF_own_r10_tags_3) + /sizeof(asn_DEF_own_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_own_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_own_r10_tags_3) + /sizeof(asn_DEF_own_r10_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_own_r10_3, + 1, /* Elements count */ + &asn_SPC_own_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_other_r10_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__other_r10, schedulingCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServCellIndex_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "schedulingCellId-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__other_r10, pdsch_Start_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pdsch_Start_r10_constraint_5, + &asn_PER_memb_pdsch_Start_r10_constr_7, + 0, + "pdsch-Start-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_other_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_other_r10_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* schedulingCellId-r10 at 1951 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pdsch-Start-r10 at 1952 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_other_r10_specs_5 = { + sizeof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__other_r10), + offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__other_r10, _asn_ctx), + asn_MAP_other_r10_tag2el_5, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_other_r10_5 = { + "other-r10", + "other-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_other_r10_tags_5, + sizeof(asn_DEF_other_r10_tags_5) + /sizeof(asn_DEF_other_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_other_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_other_r10_tags_5) + /sizeof(asn_DEF_other_r10_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_other_r10_5, + 2, /* Elements count */ + &asn_SPC_other_r10_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_schedulingCellInfo_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10, choice.own_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_own_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "own-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10, choice.other_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_other_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "other-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_schedulingCellInfo_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* own-r10 at 1949 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* other-r10 at 1951 */ +}; +static asn_CHOICE_specifics_t asn_SPC_schedulingCellInfo_r10_specs_2 = { + sizeof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10), + offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10, _asn_ctx), + offsetof(struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10, present), + sizeof(((struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10 *)0)->present), + asn_MAP_schedulingCellInfo_r10_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_schedulingCellInfo_r10_2 = { + "schedulingCellInfo-r10", + "schedulingCellInfo-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_schedulingCellInfo_r10_constr_2, + asn_MBR_schedulingCellInfo_r10_2, + 2, /* Elements count */ + &asn_SPC_schedulingCellInfo_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_CrossCarrierSchedulingConfig_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct CrossCarrierSchedulingConfig_r10, schedulingCellInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_schedulingCellInfo_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "schedulingCellInfo-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_CrossCarrierSchedulingConfig_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* schedulingCellInfo-r10 at 1949 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_CrossCarrierSchedulingConfig_r10_specs_1 = { + sizeof(struct CrossCarrierSchedulingConfig_r10), + offsetof(struct CrossCarrierSchedulingConfig_r10, _asn_ctx), + asn_MAP_CrossCarrierSchedulingConfig_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_CrossCarrierSchedulingConfig_r10 = { + "CrossCarrierSchedulingConfig-r10", + "CrossCarrierSchedulingConfig-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1, + sizeof(asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1) + /sizeof(asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1[0]), /* 1 */ + asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1) + /sizeof(asn_DEF_CrossCarrierSchedulingConfig_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_CrossCarrierSchedulingConfig_r10_1, + 1, /* Elements count */ + &asn_SPC_CrossCarrierSchedulingConfig_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.h b/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.h new file mode 100644 index 000000000..0b3154343 --- /dev/null +++ b/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _CrossCarrierSchedulingConfig_r10_H_ +#define _CrossCarrierSchedulingConfig_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "ServCellIndex-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_PR { + CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_PR_NOTHING, /* No components present */ + CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_PR_own_r10, + CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_PR_other_r10 +} CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_PR; + +/* CrossCarrierSchedulingConfig-r10 */ +typedef struct CrossCarrierSchedulingConfig_r10 { + struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10 { + CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_PR present; + union CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10_u { + struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__own_r10 { + BOOLEAN_t cif_Presence_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } own_r10; + struct CrossCarrierSchedulingConfig_r10__schedulingCellInfo_r10__other_r10 { + ServCellIndex_r10_t schedulingCellId_r10; + long pdsch_Start_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } other_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } schedulingCellInfo_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} CrossCarrierSchedulingConfig_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_CrossCarrierSchedulingConfig_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _CrossCarrierSchedulingConfig_r10_H_ */ +#include diff --git a/lte/rrc/asn/DL-AM-RLC.c b/lte/rrc/asn/DL-AM-RLC.c new file mode 100644 index 000000000..f49220272 --- /dev/null +++ b/lte/rrc/asn/DL-AM-RLC.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DL-AM-RLC.h" + +static asn_TYPE_member_t asn_MBR_DL_AM_RLC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_AM_RLC, t_Reordering), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reordering, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-Reordering" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_AM_RLC, t_StatusProhibit), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_StatusProhibit, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-StatusProhibit" + }, +}; +static ber_tlv_tag_t asn_DEF_DL_AM_RLC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DL_AM_RLC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t-Reordering at 2538 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* t-StatusProhibit at 2540 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DL_AM_RLC_specs_1 = { + sizeof(struct DL_AM_RLC), + offsetof(struct DL_AM_RLC, _asn_ctx), + asn_MAP_DL_AM_RLC_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DL_AM_RLC = { + "DL-AM-RLC", + "DL-AM-RLC", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DL_AM_RLC_tags_1, + sizeof(asn_DEF_DL_AM_RLC_tags_1) + /sizeof(asn_DEF_DL_AM_RLC_tags_1[0]), /* 1 */ + asn_DEF_DL_AM_RLC_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_AM_RLC_tags_1) + /sizeof(asn_DEF_DL_AM_RLC_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DL_AM_RLC_1, + 2, /* Elements count */ + &asn_SPC_DL_AM_RLC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DL-AM-RLC.h b/lte/rrc/asn/DL-AM-RLC.h new file mode 100644 index 000000000..c4bf494a2 --- /dev/null +++ b/lte/rrc/asn/DL-AM-RLC.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DL_AM_RLC_H_ +#define _DL_AM_RLC_H_ + + +#include + +/* Including external dependencies */ +#include "T-Reordering.h" +#include "T-StatusProhibit.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-AM-RLC */ +typedef struct DL_AM_RLC { + T_Reordering_t t_Reordering; + T_StatusProhibit_t t_StatusProhibit; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DL_AM_RLC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DL_AM_RLC; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_AM_RLC_H_ */ +#include diff --git a/lte/rrc/asn/DL-CCCH-Message.c b/lte/rrc/asn/DL-CCCH-Message.c new file mode 100644 index 000000000..e4e26bfd3 --- /dev/null +++ b/lte/rrc/asn/DL-CCCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DL-CCCH-Message.h" + +static asn_TYPE_member_t asn_MBR_DL_CCCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_DL_CCCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_DL_CCCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DL_CCCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 57 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DL_CCCH_Message_specs_1 = { + sizeof(struct DL_CCCH_Message), + offsetof(struct DL_CCCH_Message, _asn_ctx), + asn_MAP_DL_CCCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DL_CCCH_Message = { + "DL-CCCH-Message", + "DL-CCCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DL_CCCH_Message_tags_1, + sizeof(asn_DEF_DL_CCCH_Message_tags_1) + /sizeof(asn_DEF_DL_CCCH_Message_tags_1[0]), /* 1 */ + asn_DEF_DL_CCCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_CCCH_Message_tags_1) + /sizeof(asn_DEF_DL_CCCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DL_CCCH_Message_1, + 1, /* Elements count */ + &asn_SPC_DL_CCCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DL-CCCH-Message.h b/lte/rrc/asn/DL-CCCH-Message.h new file mode 100644 index 000000000..76ae1a3b5 --- /dev/null +++ b/lte/rrc/asn/DL-CCCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DL_CCCH_Message_H_ +#define _DL_CCCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "DL-CCCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-CCCH-Message */ +typedef struct DL_CCCH_Message { + DL_CCCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DL_CCCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DL_CCCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_CCCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/DL-CCCH-MessageType.c b/lte/rrc/asn/DL-CCCH-MessageType.c new file mode 100644 index 000000000..8c733aaa5 --- /dev/null +++ b/lte/rrc/asn/DL-CCCH-MessageType.c @@ -0,0 +1,192 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DL-CCCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_DL_CCCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_MessageType__c1, choice.rrcConnectionReestablishment), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishment, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishment" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_MessageType__c1, choice.rrcConnectionReestablishmentReject), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentReject, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishmentReject" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_MessageType__c1, choice.rrcConnectionReject), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReject, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReject" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_MessageType__c1, choice.rrcConnectionSetup), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetup, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionSetup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReestablishment at 61 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rrcConnectionReestablishmentReject at 62 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rrcConnectionReject at 63 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* rrcConnectionSetup at 65 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct DL_CCCH_MessageType__c1), + offsetof(struct DL_CCCH_MessageType__c1, _asn_ctx), + offsetof(struct DL_CCCH_MessageType__c1, present), + sizeof(((struct DL_CCCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 4, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_7 = { + sizeof(struct DL_CCCH_MessageType__messageClassExtension), + offsetof(struct DL_CCCH_MessageType__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_7 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_7, + sizeof(asn_DEF_messageClassExtension_tags_7) + /sizeof(asn_DEF_messageClassExtension_tags_7[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_7, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_7) + /sizeof(asn_DEF_messageClassExtension_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DL_CCCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_CCCH_MessageType, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_DL_CCCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 61 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 66 */ +}; +static asn_CHOICE_specifics_t asn_SPC_DL_CCCH_MessageType_specs_1 = { + sizeof(struct DL_CCCH_MessageType), + offsetof(struct DL_CCCH_MessageType, _asn_ctx), + offsetof(struct DL_CCCH_MessageType, present), + sizeof(((struct DL_CCCH_MessageType *)0)->present), + asn_MAP_DL_CCCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_DL_CCCH_MessageType = { + "DL-CCCH-MessageType", + "DL-CCCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_DL_CCCH_MessageType_constr_1, + asn_MBR_DL_CCCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_DL_CCCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DL-CCCH-MessageType.h b/lte/rrc/asn/DL-CCCH-MessageType.h new file mode 100644 index 000000000..c7100251a --- /dev/null +++ b/lte/rrc/asn/DL-CCCH-MessageType.h @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DL_CCCH_MessageType_H_ +#define _DL_CCCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "RRCConnectionReestablishment.h" +#include "RRCConnectionReestablishmentReject.h" +#include "RRCConnectionReject.h" +#include "RRCConnectionSetup.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DL_CCCH_MessageType_PR { + DL_CCCH_MessageType_PR_NOTHING, /* No components present */ + DL_CCCH_MessageType_PR_c1, + DL_CCCH_MessageType_PR_messageClassExtension +} DL_CCCH_MessageType_PR; +typedef enum DL_CCCH_MessageType__c1_PR { + DL_CCCH_MessageType__c1_PR_NOTHING, /* No components present */ + DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishment, + DL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentReject, + DL_CCCH_MessageType__c1_PR_rrcConnectionReject, + DL_CCCH_MessageType__c1_PR_rrcConnectionSetup +} DL_CCCH_MessageType__c1_PR; + +/* DL-CCCH-MessageType */ +typedef struct DL_CCCH_MessageType { + DL_CCCH_MessageType_PR present; + union DL_CCCH_MessageType_u { + struct DL_CCCH_MessageType__c1 { + DL_CCCH_MessageType__c1_PR present; + union DL_CCCH_MessageType__c1_u { + RRCConnectionReestablishment_t rrcConnectionReestablishment; + RRCConnectionReestablishmentReject_t rrcConnectionReestablishmentReject; + RRCConnectionReject_t rrcConnectionReject; + RRCConnectionSetup_t rrcConnectionSetup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct DL_CCCH_MessageType__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DL_CCCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DL_CCCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_CCCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/DL-DCCH-Message.c b/lte/rrc/asn/DL-DCCH-Message.c new file mode 100644 index 000000000..6230e856d --- /dev/null +++ b/lte/rrc/asn/DL-DCCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DL-DCCH-Message.h" + +static asn_TYPE_member_t asn_MBR_DL_DCCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_DL_DCCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_DL_DCCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DL_DCCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 72 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DL_DCCH_Message_specs_1 = { + sizeof(struct DL_DCCH_Message), + offsetof(struct DL_DCCH_Message, _asn_ctx), + asn_MAP_DL_DCCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DL_DCCH_Message = { + "DL-DCCH-Message", + "DL-DCCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DL_DCCH_Message_tags_1, + sizeof(asn_DEF_DL_DCCH_Message_tags_1) + /sizeof(asn_DEF_DL_DCCH_Message_tags_1[0]), /* 1 */ + asn_DEF_DL_DCCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_DCCH_Message_tags_1) + /sizeof(asn_DEF_DL_DCCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DL_DCCH_Message_1, + 1, /* Elements count */ + &asn_SPC_DL_DCCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DL-DCCH-Message.h b/lte/rrc/asn/DL-DCCH-Message.h new file mode 100644 index 000000000..0d779e62d --- /dev/null +++ b/lte/rrc/asn/DL-DCCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DL_DCCH_Message_H_ +#define _DL_DCCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "DL-DCCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-DCCH-Message */ +typedef struct DL_DCCH_Message { + DL_DCCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DL_DCCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DL_DCCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_DCCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/DL-DCCH-MessageType.c b/lte/rrc/asn/DL-DCCH-MessageType.c new file mode 100644 index 000000000..58cd257b7 --- /dev/null +++ b/lte/rrc/asn/DL-DCCH-MessageType.c @@ -0,0 +1,312 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DL-DCCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_DL_DCCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.csfbParametersResponseCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFBParametersResponseCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfbParametersResponseCDMA2000" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.dlInformationTransfer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DLInformationTransfer, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dlInformationTransfer" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.handoverFromEUTRAPreparationRequest), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverFromEUTRAPreparationRequest, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handoverFromEUTRAPreparationRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.mobilityFromEUTRACommand), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityFromEUTRACommand" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.rrcConnectionReconfiguration), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfiguration, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReconfiguration" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.rrcConnectionRelease), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRelease, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionRelease" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.securityModeCommand), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeCommand, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityModeCommand" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.ueCapabilityEnquiry), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UECapabilityEnquiry, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueCapabilityEnquiry" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.counterCheck), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CounterCheck, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "counterCheck" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.ueInformationRequest_r9), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationRequest_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueInformationRequest-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.loggedMeasurementConfiguration_r10), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoggedMeasurementConfiguration_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "loggedMeasurementConfiguration-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.rnReconfiguration_r10), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RNReconfiguration_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rnReconfiguration-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (13 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (14 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csfbParametersResponseCDMA2000 at 76 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dlInformationTransfer at 77 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* handoverFromEUTRAPreparationRequest at 78 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* mobilityFromEUTRACommand at 79 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* rrcConnectionReconfiguration at 80 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* rrcConnectionRelease at 81 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* securityModeCommand at 82 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ueCapabilityEnquiry at 83 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* counterCheck at 84 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* ueInformationRequest-r9 at 85 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* loggedMeasurementConfiguration-r10 at 86 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* rnReconfiguration-r10 at 87 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* spare4 at 88 */ + { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* spare3 at 89 */ + { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* spare2 at 89 */ + { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 } /* spare1 at 89 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct DL_DCCH_MessageType__c1), + offsetof(struct DL_DCCH_MessageType__c1, _asn_ctx), + offsetof(struct DL_DCCH_MessageType__c1, present), + sizeof(((struct DL_DCCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 16, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 16, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_19 = { + sizeof(struct DL_DCCH_MessageType__messageClassExtension), + offsetof(struct DL_DCCH_MessageType__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_19 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_19, + sizeof(asn_DEF_messageClassExtension_tags_19) + /sizeof(asn_DEF_messageClassExtension_tags_19[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_19, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_19) + /sizeof(asn_DEF_messageClassExtension_tags_19[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DL_DCCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_DCCH_MessageType, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_DL_DCCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 76 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 91 */ +}; +static asn_CHOICE_specifics_t asn_SPC_DL_DCCH_MessageType_specs_1 = { + sizeof(struct DL_DCCH_MessageType), + offsetof(struct DL_DCCH_MessageType, _asn_ctx), + offsetof(struct DL_DCCH_MessageType, present), + sizeof(((struct DL_DCCH_MessageType *)0)->present), + asn_MAP_DL_DCCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_DL_DCCH_MessageType = { + "DL-DCCH-MessageType", + "DL-DCCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_DL_DCCH_MessageType_constr_1, + asn_MBR_DL_DCCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_DL_DCCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DL-DCCH-MessageType.h b/lte/rrc/asn/DL-DCCH-MessageType.h new file mode 100644 index 000000000..9709785c9 --- /dev/null +++ b/lte/rrc/asn/DL-DCCH-MessageType.h @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DL_DCCH_MessageType_H_ +#define _DL_DCCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "CSFBParametersResponseCDMA2000.h" +#include "DLInformationTransfer.h" +#include "HandoverFromEUTRAPreparationRequest.h" +#include "MobilityFromEUTRACommand.h" +#include "RRCConnectionReconfiguration.h" +#include "RRCConnectionRelease.h" +#include "SecurityModeCommand.h" +#include "UECapabilityEnquiry.h" +#include "CounterCheck.h" +#include "UEInformationRequest-r9.h" +#include "LoggedMeasurementConfiguration-r10.h" +#include "RNReconfiguration-r10.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DL_DCCH_MessageType_PR { + DL_DCCH_MessageType_PR_NOTHING, /* No components present */ + DL_DCCH_MessageType_PR_c1, + DL_DCCH_MessageType_PR_messageClassExtension +} DL_DCCH_MessageType_PR; +typedef enum DL_DCCH_MessageType__c1_PR { + DL_DCCH_MessageType__c1_PR_NOTHING, /* No components present */ + DL_DCCH_MessageType__c1_PR_csfbParametersResponseCDMA2000, + DL_DCCH_MessageType__c1_PR_dlInformationTransfer, + DL_DCCH_MessageType__c1_PR_handoverFromEUTRAPreparationRequest, + DL_DCCH_MessageType__c1_PR_mobilityFromEUTRACommand, + DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration, + DL_DCCH_MessageType__c1_PR_rrcConnectionRelease, + DL_DCCH_MessageType__c1_PR_securityModeCommand, + DL_DCCH_MessageType__c1_PR_ueCapabilityEnquiry, + DL_DCCH_MessageType__c1_PR_counterCheck, + DL_DCCH_MessageType__c1_PR_ueInformationRequest_r9, + DL_DCCH_MessageType__c1_PR_loggedMeasurementConfiguration_r10, + DL_DCCH_MessageType__c1_PR_rnReconfiguration_r10, + DL_DCCH_MessageType__c1_PR_spare4, + DL_DCCH_MessageType__c1_PR_spare3, + DL_DCCH_MessageType__c1_PR_spare2, + DL_DCCH_MessageType__c1_PR_spare1 +} DL_DCCH_MessageType__c1_PR; + +/* DL-DCCH-MessageType */ +typedef struct DL_DCCH_MessageType { + DL_DCCH_MessageType_PR present; + union DL_DCCH_MessageType_u { + struct DL_DCCH_MessageType__c1 { + DL_DCCH_MessageType__c1_PR present; + union DL_DCCH_MessageType__c1_u { + CSFBParametersResponseCDMA2000_t csfbParametersResponseCDMA2000; + DLInformationTransfer_t dlInformationTransfer; + HandoverFromEUTRAPreparationRequest_t handoverFromEUTRAPreparationRequest; + MobilityFromEUTRACommand_t mobilityFromEUTRACommand; + RRCConnectionReconfiguration_t rrcConnectionReconfiguration; + RRCConnectionRelease_t rrcConnectionRelease; + SecurityModeCommand_t securityModeCommand; + UECapabilityEnquiry_t ueCapabilityEnquiry; + CounterCheck_t counterCheck; + UEInformationRequest_r9_t ueInformationRequest_r9; + LoggedMeasurementConfiguration_r10_t loggedMeasurementConfiguration_r10; + RNReconfiguration_r10_t rnReconfiguration_r10; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct DL_DCCH_MessageType__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DL_DCCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DL_DCCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_DCCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/DL-UM-RLC.c b/lte/rrc/asn/DL-UM-RLC.c new file mode 100644 index 000000000..591b45d38 --- /dev/null +++ b/lte/rrc/asn/DL-UM-RLC.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DL-UM-RLC.h" + +static asn_TYPE_member_t asn_MBR_DL_UM_RLC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DL_UM_RLC, sn_FieldLength), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SN_FieldLength, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sn-FieldLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct DL_UM_RLC, t_Reordering), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reordering, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-Reordering" + }, +}; +static ber_tlv_tag_t asn_DEF_DL_UM_RLC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DL_UM_RLC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sn-FieldLength at 2547 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* t-Reordering at 2549 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DL_UM_RLC_specs_1 = { + sizeof(struct DL_UM_RLC), + offsetof(struct DL_UM_RLC, _asn_ctx), + asn_MAP_DL_UM_RLC_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DL_UM_RLC = { + "DL-UM-RLC", + "DL-UM-RLC", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DL_UM_RLC_tags_1, + sizeof(asn_DEF_DL_UM_RLC_tags_1) + /sizeof(asn_DEF_DL_UM_RLC_tags_1[0]), /* 1 */ + asn_DEF_DL_UM_RLC_tags_1, /* Same as above */ + sizeof(asn_DEF_DL_UM_RLC_tags_1) + /sizeof(asn_DEF_DL_UM_RLC_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DL_UM_RLC_1, + 2, /* Elements count */ + &asn_SPC_DL_UM_RLC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DL-UM-RLC.h b/lte/rrc/asn/DL-UM-RLC.h new file mode 100644 index 000000000..73d0b73bf --- /dev/null +++ b/lte/rrc/asn/DL-UM-RLC.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DL_UM_RLC_H_ +#define _DL_UM_RLC_H_ + + +#include + +/* Including external dependencies */ +#include "SN-FieldLength.h" +#include "T-Reordering.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DL-UM-RLC */ +typedef struct DL_UM_RLC { + SN_FieldLength_t sn_FieldLength; + T_Reordering_t t_Reordering; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DL_UM_RLC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DL_UM_RLC; + +#ifdef __cplusplus +} +#endif + +#endif /* _DL_UM_RLC_H_ */ +#include diff --git a/lte/rrc/asn/DLInformationTransfer-r8-IEs.c b/lte/rrc/asn/DLInformationTransfer-r8-IEs.c new file mode 100644 index 000000000..4a3d52b21 --- /dev/null +++ b/lte/rrc/asn/DLInformationTransfer-r8-IEs.c @@ -0,0 +1,145 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DLInformationTransfer-r8-IEs.h" + +static asn_per_constraints_t asn_PER_type_dedicatedInfoType_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_dedicatedInfoType_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer_r8_IEs__dedicatedInfoType, choice.dedicatedInfoNAS), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoNAS, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoNAS" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer_r8_IEs__dedicatedInfoType, choice.dedicatedInfoCDMA2000_1XRTT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoCDMA2000-1XRTT" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer_r8_IEs__dedicatedInfoType, choice.dedicatedInfoCDMA2000_HRPD), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoCDMA2000-HRPD" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_dedicatedInfoType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dedicatedInfoNAS at 242 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dedicatedInfoCDMA2000-1XRTT at 243 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* dedicatedInfoCDMA2000-HRPD at 245 */ +}; +static asn_CHOICE_specifics_t asn_SPC_dedicatedInfoType_specs_2 = { + sizeof(struct DLInformationTransfer_r8_IEs__dedicatedInfoType), + offsetof(struct DLInformationTransfer_r8_IEs__dedicatedInfoType, _asn_ctx), + offsetof(struct DLInformationTransfer_r8_IEs__dedicatedInfoType, present), + sizeof(((struct DLInformationTransfer_r8_IEs__dedicatedInfoType *)0)->present), + asn_MAP_dedicatedInfoType_tag2el_2, + 3, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dedicatedInfoType_2 = { + "dedicatedInfoType", + "dedicatedInfoType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_dedicatedInfoType_constr_2, + asn_MBR_dedicatedInfoType_2, + 3, /* Elements count */ + &asn_SPC_dedicatedInfoType_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DLInformationTransfer_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer_r8_IEs, dedicatedInfoType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_dedicatedInfoType_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoType" + }, + { ATF_POINTER, 1, offsetof(struct DLInformationTransfer_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DLInformationTransfer_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_DLInformationTransfer_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_DLInformationTransfer_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DLInformationTransfer_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dedicatedInfoType at 242 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 246 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DLInformationTransfer_r8_IEs_specs_1 = { + sizeof(struct DLInformationTransfer_r8_IEs), + offsetof(struct DLInformationTransfer_r8_IEs, _asn_ctx), + asn_MAP_DLInformationTransfer_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_DLInformationTransfer_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DLInformationTransfer_r8_IEs = { + "DLInformationTransfer-r8-IEs", + "DLInformationTransfer-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DLInformationTransfer_r8_IEs_tags_1, + sizeof(asn_DEF_DLInformationTransfer_r8_IEs_tags_1) + /sizeof(asn_DEF_DLInformationTransfer_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_DLInformationTransfer_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_DLInformationTransfer_r8_IEs_tags_1) + /sizeof(asn_DEF_DLInformationTransfer_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DLInformationTransfer_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_DLInformationTransfer_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DLInformationTransfer-r8-IEs.h b/lte/rrc/asn/DLInformationTransfer-r8-IEs.h new file mode 100644 index 000000000..6b7204b49 --- /dev/null +++ b/lte/rrc/asn/DLInformationTransfer-r8-IEs.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DLInformationTransfer_r8_IEs_H_ +#define _DLInformationTransfer_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "DedicatedInfoNAS.h" +#include "DedicatedInfoCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DLInformationTransfer_r8_IEs__dedicatedInfoType_PR { + DLInformationTransfer_r8_IEs__dedicatedInfoType_PR_NOTHING, /* No components present */ + DLInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoNAS, + DLInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoCDMA2000_1XRTT, + DLInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoCDMA2000_HRPD +} DLInformationTransfer_r8_IEs__dedicatedInfoType_PR; + +/* Forward declarations */ +struct DLInformationTransfer_v8a0_IEs; + +/* DLInformationTransfer-r8-IEs */ +typedef struct DLInformationTransfer_r8_IEs { + struct DLInformationTransfer_r8_IEs__dedicatedInfoType { + DLInformationTransfer_r8_IEs__dedicatedInfoType_PR present; + union DLInformationTransfer_r8_IEs__dedicatedInfoType_u { + DedicatedInfoNAS_t dedicatedInfoNAS; + DedicatedInfoCDMA2000_t dedicatedInfoCDMA2000_1XRTT; + DedicatedInfoCDMA2000_t dedicatedInfoCDMA2000_HRPD; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } dedicatedInfoType; + struct DLInformationTransfer_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DLInformationTransfer_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DLInformationTransfer_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DLInformationTransfer-v8a0-IEs.h" + +#endif /* _DLInformationTransfer_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c b/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c new file mode 100644 index 000000000..e07eb4257 --- /dev/null +++ b/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DLInformationTransfer-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct DLInformationTransfer_v8a0_IEs__nonCriticalExtension), + offsetof(struct DLInformationTransfer_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DLInformationTransfer_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct DLInformationTransfer_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct DLInformationTransfer_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_DLInformationTransfer_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DLInformationTransfer_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 250 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 251 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DLInformationTransfer_v8a0_IEs_specs_1 = { + sizeof(struct DLInformationTransfer_v8a0_IEs), + offsetof(struct DLInformationTransfer_v8a0_IEs, _asn_ctx), + asn_MAP_DLInformationTransfer_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_DLInformationTransfer_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DLInformationTransfer_v8a0_IEs = { + "DLInformationTransfer-v8a0-IEs", + "DLInformationTransfer-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1, + sizeof(asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1) + /sizeof(asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1) + /sizeof(asn_DEF_DLInformationTransfer_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DLInformationTransfer_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_DLInformationTransfer_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h b/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h new file mode 100644 index 000000000..0dcc67c0f --- /dev/null +++ b/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DLInformationTransfer_v8a0_IEs_H_ +#define _DLInformationTransfer_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DLInformationTransfer-v8a0-IEs */ +typedef struct DLInformationTransfer_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct DLInformationTransfer_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DLInformationTransfer_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DLInformationTransfer_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _DLInformationTransfer_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/DLInformationTransfer.c b/lte/rrc/asn/DLInformationTransfer.c new file mode 100644 index 000000000..efeea8be8 --- /dev/null +++ b/lte/rrc/asn/DLInformationTransfer.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DLInformationTransfer.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer__criticalExtensions__c1, choice.dlInformationTransfer_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DLInformationTransfer_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dlInformationTransfer-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dlInformationTransfer-r8 at 233 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 234 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 234 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 234 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct DLInformationTransfer__criticalExtensions__c1), + offsetof(struct DLInformationTransfer__criticalExtensions__c1, _asn_ctx), + offsetof(struct DLInformationTransfer__criticalExtensions__c1, present), + sizeof(((struct DLInformationTransfer__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct DLInformationTransfer__criticalExtensions__criticalExtensionsFuture), + offsetof(struct DLInformationTransfer__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 233 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 236 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct DLInformationTransfer__criticalExtensions), + offsetof(struct DLInformationTransfer__criticalExtensions, _asn_ctx), + offsetof(struct DLInformationTransfer__criticalExtensions, present), + sizeof(((struct DLInformationTransfer__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DLInformationTransfer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct DLInformationTransfer, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_DLInformationTransfer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DLInformationTransfer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 230 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 235 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DLInformationTransfer_specs_1 = { + sizeof(struct DLInformationTransfer), + offsetof(struct DLInformationTransfer, _asn_ctx), + asn_MAP_DLInformationTransfer_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DLInformationTransfer = { + "DLInformationTransfer", + "DLInformationTransfer", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DLInformationTransfer_tags_1, + sizeof(asn_DEF_DLInformationTransfer_tags_1) + /sizeof(asn_DEF_DLInformationTransfer_tags_1[0]), /* 1 */ + asn_DEF_DLInformationTransfer_tags_1, /* Same as above */ + sizeof(asn_DEF_DLInformationTransfer_tags_1) + /sizeof(asn_DEF_DLInformationTransfer_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DLInformationTransfer_1, + 2, /* Elements count */ + &asn_SPC_DLInformationTransfer_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DLInformationTransfer.h b/lte/rrc/asn/DLInformationTransfer.h new file mode 100644 index 000000000..9174dd23a --- /dev/null +++ b/lte/rrc/asn/DLInformationTransfer.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DLInformationTransfer_H_ +#define _DLInformationTransfer_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "DLInformationTransfer-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DLInformationTransfer__criticalExtensions_PR { + DLInformationTransfer__criticalExtensions_PR_NOTHING, /* No components present */ + DLInformationTransfer__criticalExtensions_PR_c1, + DLInformationTransfer__criticalExtensions_PR_criticalExtensionsFuture +} DLInformationTransfer__criticalExtensions_PR; +typedef enum DLInformationTransfer__criticalExtensions__c1_PR { + DLInformationTransfer__criticalExtensions__c1_PR_NOTHING, /* No components present */ + DLInformationTransfer__criticalExtensions__c1_PR_dlInformationTransfer_r8, + DLInformationTransfer__criticalExtensions__c1_PR_spare3, + DLInformationTransfer__criticalExtensions__c1_PR_spare2, + DLInformationTransfer__criticalExtensions__c1_PR_spare1 +} DLInformationTransfer__criticalExtensions__c1_PR; + +/* DLInformationTransfer */ +typedef struct DLInformationTransfer { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct DLInformationTransfer__criticalExtensions { + DLInformationTransfer__criticalExtensions_PR present; + union DLInformationTransfer__criticalExtensions_u { + struct DLInformationTransfer__criticalExtensions__c1 { + DLInformationTransfer__criticalExtensions__c1_PR present; + union DLInformationTransfer__criticalExtensions__c1_u { + DLInformationTransfer_r8_IEs_t dlInformationTransfer_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct DLInformationTransfer__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DLInformationTransfer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DLInformationTransfer; + +#ifdef __cplusplus +} +#endif + +#endif /* _DLInformationTransfer_H_ */ +#include diff --git a/lte/rrc/asn/DRB-CountInfo.c b/lte/rrc/asn/DRB-CountInfo.c new file mode 100644 index 000000000..094510ad2 --- /dev/null +++ b/lte/rrc/asn/DRB-CountInfo.c @@ -0,0 +1,400 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-CountInfo.h" + +static int +count_Uplink_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + unsigned long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const unsigned long *)sptr; + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +count_Uplink_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */ +} + +static void +count_Uplink_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + count_Uplink_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +count_Uplink_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +count_Uplink_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +count_Uplink_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +count_Uplink_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +count_Uplink_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +count_Uplink_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +count_Uplink_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + count_Uplink_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +count_Downlink_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + unsigned long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const unsigned long *)sptr; + + /* Constraint check succeeded */ + return 0; +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +count_Downlink_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + /* td->specifics = asn_DEF_NativeInteger.specifics; // Defined explicitly */ +} + +static void +count_Downlink_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + count_Downlink_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +count_Downlink_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +count_Downlink_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +count_Downlink_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +count_Downlink_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +count_Downlink_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +count_Downlink_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +count_Downlink_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + count_Downlink_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_count_Uplink_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + unsigned long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const unsigned long *)sptr; + + /* Constraint check succeeded */ + return 0; +} + +static int +memb_count_Downlink_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + unsigned long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const unsigned long *)sptr; + + /* Constraint check succeeded */ + return 0; +} + +static asn_per_constraints_t asn_PER_type_count_Uplink_constr_3 = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_count_Downlink_constr_4 = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_count_Uplink_constr_3 = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_count_Downlink_constr_4 = { + { APC_CONSTRAINED, 32, -1, 0, 4294967295 } /* (0..4294967295) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_specifics_t asn_SPC_count_Uplink_specs_3 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static ber_tlv_tag_t asn_DEF_count_Uplink_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_count_Uplink_3 = { + "count-Uplink", + "count-Uplink", + count_Uplink_3_free, + count_Uplink_3_print, + count_Uplink_3_constraint, + count_Uplink_3_decode_ber, + count_Uplink_3_encode_der, + count_Uplink_3_decode_xer, + count_Uplink_3_encode_xer, + count_Uplink_3_decode_uper, + count_Uplink_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_count_Uplink_tags_3, + sizeof(asn_DEF_count_Uplink_tags_3) + /sizeof(asn_DEF_count_Uplink_tags_3[0]) - 1, /* 1 */ + asn_DEF_count_Uplink_tags_3, /* Same as above */ + sizeof(asn_DEF_count_Uplink_tags_3) + /sizeof(asn_DEF_count_Uplink_tags_3[0]), /* 2 */ + &asn_PER_type_count_Uplink_constr_3, + 0, 0, /* No members */ + &asn_SPC_count_Uplink_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_specifics_t asn_SPC_count_Downlink_specs_4 = { + 0, 0, 0, 0, 0, + 0, /* Native long size */ + 1 /* Unsigned representation */ +}; +static ber_tlv_tag_t asn_DEF_count_Downlink_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_count_Downlink_4 = { + "count-Downlink", + "count-Downlink", + count_Downlink_4_free, + count_Downlink_4_print, + count_Downlink_4_constraint, + count_Downlink_4_decode_ber, + count_Downlink_4_encode_der, + count_Downlink_4_decode_xer, + count_Downlink_4_encode_xer, + count_Downlink_4_decode_uper, + count_Downlink_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_count_Downlink_tags_4, + sizeof(asn_DEF_count_Downlink_tags_4) + /sizeof(asn_DEF_count_Downlink_tags_4[0]) - 1, /* 1 */ + asn_DEF_count_Downlink_tags_4, /* Same as above */ + sizeof(asn_DEF_count_Downlink_tags_4) + /sizeof(asn_DEF_count_Downlink_tags_4[0]), /* 2 */ + &asn_PER_type_count_Downlink_constr_4, + 0, 0, /* No members */ + &asn_SPC_count_Downlink_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DRB_CountInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DRB_CountInfo, drb_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRB_CountInfo, count_Uplink), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_count_Uplink_3, + memb_count_Uplink_constraint_1, + &asn_PER_memb_count_Uplink_constr_3, + 0, + "count-Uplink" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRB_CountInfo, count_Downlink), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_count_Downlink_4, + memb_count_Downlink_constraint_1, + &asn_PER_memb_count_Downlink_constr_4, + 0, + "count-Downlink" + }, +}; +static ber_tlv_tag_t asn_DEF_DRB_CountInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DRB_CountInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* drb-Identity at 186 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* count-Uplink at 187 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* count-Downlink at 188 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DRB_CountInfo_specs_1 = { + sizeof(struct DRB_CountInfo), + offsetof(struct DRB_CountInfo, _asn_ctx), + asn_MAP_DRB_CountInfo_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_CountInfo = { + "DRB-CountInfo", + "DRB-CountInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_CountInfo_tags_1, + sizeof(asn_DEF_DRB_CountInfo_tags_1) + /sizeof(asn_DEF_DRB_CountInfo_tags_1[0]), /* 1 */ + asn_DEF_DRB_CountInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_CountInfo_tags_1) + /sizeof(asn_DEF_DRB_CountInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DRB_CountInfo_1, + 3, /* Elements count */ + &asn_SPC_DRB_CountInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-CountInfo.h b/lte/rrc/asn/DRB-CountInfo.h new file mode 100644 index 000000000..8a25db10f --- /dev/null +++ b/lte/rrc/asn/DRB-CountInfo.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_CountInfo_H_ +#define _DRB_CountInfo_H_ + + +#include + +/* Including external dependencies */ +#include "DRB-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DRB-CountInfo */ +typedef struct DRB_CountInfo { + DRB_Identity_t drb_Identity; + unsigned long count_Uplink; + unsigned long count_Downlink; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_CountInfo_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_count_Uplink_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_count_Downlink_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_CountInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _DRB_CountInfo_H_ */ +#include diff --git a/lte/rrc/asn/DRB-CountInfoList.c b/lte/rrc/asn/DRB-CountInfoList.c new file mode 100644 index 000000000..2b5edfb67 --- /dev/null +++ b/lte/rrc/asn/DRB-CountInfoList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-CountInfoList.h" + +static asn_per_constraints_t asn_PER_type_DRB_CountInfoList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 0, 11 } /* (SIZE(0..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_DRB_CountInfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DRB_CountInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_DRB_CountInfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_DRB_CountInfoList_specs_1 = { + sizeof(struct DRB_CountInfoList), + offsetof(struct DRB_CountInfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_CountInfoList = { + "DRB-CountInfoList", + "DRB-CountInfoList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_CountInfoList_tags_1, + sizeof(asn_DEF_DRB_CountInfoList_tags_1) + /sizeof(asn_DEF_DRB_CountInfoList_tags_1[0]), /* 1 */ + asn_DEF_DRB_CountInfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_CountInfoList_tags_1) + /sizeof(asn_DEF_DRB_CountInfoList_tags_1[0]), /* 1 */ + &asn_PER_type_DRB_CountInfoList_constr_1, + asn_MBR_DRB_CountInfoList_1, + 1, /* Single element */ + &asn_SPC_DRB_CountInfoList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-CountInfoList.h b/lte/rrc/asn/DRB-CountInfoList.h new file mode 100644 index 000000000..c6d2a6dda --- /dev/null +++ b/lte/rrc/asn/DRB-CountInfoList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_CountInfoList_H_ +#define _DRB_CountInfoList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DRB_CountInfo; + +/* DRB-CountInfoList */ +typedef struct DRB_CountInfoList { + A_SEQUENCE_OF(struct DRB_CountInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_CountInfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_CountInfoList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DRB-CountInfo.h" + +#endif /* _DRB_CountInfoList_H_ */ +#include diff --git a/lte/rrc/asn/DRB-CountMSB-Info.c b/lte/rrc/asn/DRB-CountMSB-Info.c new file mode 100644 index 000000000..29fc23060 --- /dev/null +++ b/lte/rrc/asn/DRB-CountMSB-Info.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-CountMSB-Info.h" + +static int +memb_countMSB_Uplink_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 33554431)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_countMSB_Downlink_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 33554431)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_countMSB_Uplink_constr_3 = { + { APC_CONSTRAINED, 25, -1, 0, 33554431 } /* (0..33554431) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_countMSB_Downlink_constr_4 = { + { APC_CONSTRAINED, 25, -1, 0, 33554431 } /* (0..33554431) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_DRB_CountMSB_Info_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DRB_CountMSB_Info, drb_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRB_CountMSB_Info, countMSB_Uplink), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_countMSB_Uplink_constraint_1, + &asn_PER_memb_countMSB_Uplink_constr_3, + 0, + "countMSB-Uplink" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRB_CountMSB_Info, countMSB_Downlink), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_countMSB_Downlink_constraint_1, + &asn_PER_memb_countMSB_Downlink_constr_4, + 0, + "countMSB-Downlink" + }, +}; +static ber_tlv_tag_t asn_DEF_DRB_CountMSB_Info_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DRB_CountMSB_Info_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* drb-Identity at 159 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* countMSB-Uplink at 160 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* countMSB-Downlink at 161 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DRB_CountMSB_Info_specs_1 = { + sizeof(struct DRB_CountMSB_Info), + offsetof(struct DRB_CountMSB_Info, _asn_ctx), + asn_MAP_DRB_CountMSB_Info_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_CountMSB_Info = { + "DRB-CountMSB-Info", + "DRB-CountMSB-Info", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_CountMSB_Info_tags_1, + sizeof(asn_DEF_DRB_CountMSB_Info_tags_1) + /sizeof(asn_DEF_DRB_CountMSB_Info_tags_1[0]), /* 1 */ + asn_DEF_DRB_CountMSB_Info_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_CountMSB_Info_tags_1) + /sizeof(asn_DEF_DRB_CountMSB_Info_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DRB_CountMSB_Info_1, + 3, /* Elements count */ + &asn_SPC_DRB_CountMSB_Info_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-CountMSB-Info.h b/lte/rrc/asn/DRB-CountMSB-Info.h new file mode 100644 index 000000000..8919ba29d --- /dev/null +++ b/lte/rrc/asn/DRB-CountMSB-Info.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_CountMSB_Info_H_ +#define _DRB_CountMSB_Info_H_ + + +#include + +/* Including external dependencies */ +#include "DRB-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DRB-CountMSB-Info */ +typedef struct DRB_CountMSB_Info { + DRB_Identity_t drb_Identity; + long countMSB_Uplink; + long countMSB_Downlink; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_CountMSB_Info_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_CountMSB_Info; + +#ifdef __cplusplus +} +#endif + +#endif /* _DRB_CountMSB_Info_H_ */ +#include diff --git a/lte/rrc/asn/DRB-CountMSB-InfoList.c b/lte/rrc/asn/DRB-CountMSB-InfoList.c new file mode 100644 index 000000000..a6428e700 --- /dev/null +++ b/lte/rrc/asn/DRB-CountMSB-InfoList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-CountMSB-InfoList.h" + +static asn_per_constraints_t asn_PER_type_DRB_CountMSB_InfoList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 11 } /* (SIZE(1..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_DRB_CountMSB_InfoList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DRB_CountMSB_Info, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_DRB_CountMSB_InfoList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_DRB_CountMSB_InfoList_specs_1 = { + sizeof(struct DRB_CountMSB_InfoList), + offsetof(struct DRB_CountMSB_InfoList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_CountMSB_InfoList = { + "DRB-CountMSB-InfoList", + "DRB-CountMSB-InfoList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_CountMSB_InfoList_tags_1, + sizeof(asn_DEF_DRB_CountMSB_InfoList_tags_1) + /sizeof(asn_DEF_DRB_CountMSB_InfoList_tags_1[0]), /* 1 */ + asn_DEF_DRB_CountMSB_InfoList_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_CountMSB_InfoList_tags_1) + /sizeof(asn_DEF_DRB_CountMSB_InfoList_tags_1[0]), /* 1 */ + &asn_PER_type_DRB_CountMSB_InfoList_constr_1, + asn_MBR_DRB_CountMSB_InfoList_1, + 1, /* Single element */ + &asn_SPC_DRB_CountMSB_InfoList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-CountMSB-InfoList.h b/lte/rrc/asn/DRB-CountMSB-InfoList.h new file mode 100644 index 000000000..48998b618 --- /dev/null +++ b/lte/rrc/asn/DRB-CountMSB-InfoList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_CountMSB_InfoList_H_ +#define _DRB_CountMSB_InfoList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DRB_CountMSB_Info; + +/* DRB-CountMSB-InfoList */ +typedef struct DRB_CountMSB_InfoList { + A_SEQUENCE_OF(struct DRB_CountMSB_Info) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_CountMSB_InfoList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_CountMSB_InfoList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DRB-CountMSB-Info.h" + +#endif /* _DRB_CountMSB_InfoList_H_ */ +#include diff --git a/lte/rrc/asn/DRB-Identity.c b/lte/rrc/asn/DRB-Identity.c new file mode 100644 index 000000000..79d9c2921 --- /dev/null +++ b/lte/rrc/asn/DRB-Identity.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-Identity.h" + +int +DRB_Identity_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +DRB_Identity_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +DRB_Identity_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +DRB_Identity_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +DRB_Identity_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +DRB_Identity_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +DRB_Identity_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +DRB_Identity_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +DRB_Identity_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +DRB_Identity_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + DRB_Identity_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_DRB_Identity_constr_1 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_DRB_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DRB_Identity = { + "DRB-Identity", + "DRB-Identity", + DRB_Identity_free, + DRB_Identity_print, + DRB_Identity_constraint, + DRB_Identity_decode_ber, + DRB_Identity_encode_der, + DRB_Identity_decode_xer, + DRB_Identity_encode_xer, + DRB_Identity_decode_uper, + DRB_Identity_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_Identity_tags_1, + sizeof(asn_DEF_DRB_Identity_tags_1) + /sizeof(asn_DEF_DRB_Identity_tags_1[0]), /* 1 */ + asn_DEF_DRB_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_Identity_tags_1) + /sizeof(asn_DEF_DRB_Identity_tags_1[0]), /* 1 */ + &asn_PER_type_DRB_Identity_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/DRB-Identity.h b/lte/rrc/asn/DRB-Identity.h new file mode 100644 index 000000000..23a70c1e0 --- /dev/null +++ b/lte/rrc/asn/DRB-Identity.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_Identity_H_ +#define _DRB_Identity_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DRB-Identity */ +typedef long DRB_Identity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_Identity; +asn_struct_free_f DRB_Identity_free; +asn_struct_print_f DRB_Identity_print; +asn_constr_check_f DRB_Identity_constraint; +ber_type_decoder_f DRB_Identity_decode_ber; +der_type_encoder_f DRB_Identity_encode_der; +xer_type_decoder_f DRB_Identity_decode_xer; +xer_type_encoder_f DRB_Identity_encode_xer; +per_type_decoder_f DRB_Identity_decode_uper; +per_type_encoder_f DRB_Identity_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DRB_Identity_H_ */ +#include diff --git a/lte/rrc/asn/DRB-ToAddMod.c b/lte/rrc/asn/DRB-ToAddMod.c new file mode 100644 index 000000000..ea752cd35 --- /dev/null +++ b/lte/rrc/asn/DRB-ToAddMod.c @@ -0,0 +1,172 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-ToAddMod.h" + +static int +memb_eps_BearerIdentity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_logicalChannelIdentity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 3 && value <= 10)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_eps_BearerIdentity_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_logicalChannelIdentity_constr_6 = { + { APC_CONSTRAINED, 3, 3, 3, 10 } /* (3..10) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_DRB_ToAddMod_1[] = { + { ATF_POINTER, 1, offsetof(struct DRB_ToAddMod, eps_BearerIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_eps_BearerIdentity_constraint_1, + &asn_PER_memb_eps_BearerIdentity_constr_2, + 0, + "eps-BearerIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRB_ToAddMod, drb_Identity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-Identity" + }, + { ATF_POINTER, 4, offsetof(struct DRB_ToAddMod, pdcp_Config), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDCP_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdcp-Config" + }, + { ATF_POINTER, 3, offsetof(struct DRB_ToAddMod, rlc_Config), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_RLC_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlc-Config" + }, + { ATF_POINTER, 2, offsetof(struct DRB_ToAddMod, logicalChannelIdentity), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_logicalChannelIdentity_constraint_1, + &asn_PER_memb_logicalChannelIdentity_constr_6, + 0, + "logicalChannelIdentity" + }, + { ATF_POINTER, 1, offsetof(struct DRB_ToAddMod, logicalChannelConfig), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LogicalChannelConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logicalChannelConfig" + }, +}; +static int asn_MAP_DRB_ToAddMod_oms_1[] = { 0, 2, 3, 4, 5 }; +static ber_tlv_tag_t asn_DEF_DRB_ToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DRB_ToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eps-BearerIdentity at 2482 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drb-Identity at 2483 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pdcp-Config at 2484 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rlc-Config at 2485 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* logicalChannelIdentity at 2486 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* logicalChannelConfig at 2487 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DRB_ToAddMod_specs_1 = { + sizeof(struct DRB_ToAddMod), + offsetof(struct DRB_ToAddMod, _asn_ctx), + asn_MAP_DRB_ToAddMod_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_DRB_ToAddMod_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 5, /* Start extensions */ + 7 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_ToAddMod = { + "DRB-ToAddMod", + "DRB-ToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_ToAddMod_tags_1, + sizeof(asn_DEF_DRB_ToAddMod_tags_1) + /sizeof(asn_DEF_DRB_ToAddMod_tags_1[0]), /* 1 */ + asn_DEF_DRB_ToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_ToAddMod_tags_1) + /sizeof(asn_DEF_DRB_ToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DRB_ToAddMod_1, + 6, /* Elements count */ + &asn_SPC_DRB_ToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-ToAddMod.h b/lte/rrc/asn/DRB-ToAddMod.h new file mode 100644 index 000000000..4d4dc997b --- /dev/null +++ b/lte/rrc/asn/DRB-ToAddMod.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_ToAddMod_H_ +#define _DRB_ToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include +#include "DRB-Identity.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PDCP_Config; +struct RLC_Config; +struct LogicalChannelConfig; + +/* DRB-ToAddMod */ +typedef struct DRB_ToAddMod { + long *eps_BearerIdentity /* OPTIONAL */; + DRB_Identity_t drb_Identity; + struct PDCP_Config *pdcp_Config /* OPTIONAL */; + struct RLC_Config *rlc_Config /* OPTIONAL */; + long *logicalChannelIdentity /* OPTIONAL */; + struct LogicalChannelConfig *logicalChannelConfig /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_ToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_ToAddMod; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PDCP-Config.h" +#include "RLC-Config.h" +#include "LogicalChannelConfig.h" + +#endif /* _DRB_ToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/DRB-ToAddModList.c b/lte/rrc/asn/DRB-ToAddModList.c new file mode 100644 index 000000000..2dcbd6c08 --- /dev/null +++ b/lte/rrc/asn/DRB-ToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-ToAddModList.h" + +static asn_per_constraints_t asn_PER_type_DRB_ToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 11 } /* (SIZE(1..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_DRB_ToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_DRB_ToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_DRB_ToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_DRB_ToAddModList_specs_1 = { + sizeof(struct DRB_ToAddModList), + offsetof(struct DRB_ToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_ToAddModList = { + "DRB-ToAddModList", + "DRB-ToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_ToAddModList_tags_1, + sizeof(asn_DEF_DRB_ToAddModList_tags_1) + /sizeof(asn_DEF_DRB_ToAddModList_tags_1[0]), /* 1 */ + asn_DEF_DRB_ToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_ToAddModList_tags_1) + /sizeof(asn_DEF_DRB_ToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_DRB_ToAddModList_constr_1, + asn_MBR_DRB_ToAddModList_1, + 1, /* Single element */ + &asn_SPC_DRB_ToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-ToAddModList.h b/lte/rrc/asn/DRB-ToAddModList.h new file mode 100644 index 000000000..b7a775278 --- /dev/null +++ b/lte/rrc/asn/DRB-ToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_ToAddModList_H_ +#define _DRB_ToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DRB_ToAddMod; + +/* DRB-ToAddModList */ +typedef struct DRB_ToAddModList { + A_SEQUENCE_OF(struct DRB_ToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_ToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_ToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DRB-ToAddMod.h" + +#endif /* _DRB_ToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/DRB-ToReleaseList.c b/lte/rrc/asn/DRB-ToReleaseList.c new file mode 100644 index 000000000..1bc1453b5 --- /dev/null +++ b/lte/rrc/asn/DRB-ToReleaseList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRB-ToReleaseList.h" + +static asn_per_constraints_t asn_PER_type_DRB_ToReleaseList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 11 } /* (SIZE(1..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_DRB_ToReleaseList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_DRB_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_DRB_ToReleaseList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_DRB_ToReleaseList_specs_1 = { + sizeof(struct DRB_ToReleaseList), + offsetof(struct DRB_ToReleaseList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_DRB_ToReleaseList = { + "DRB-ToReleaseList", + "DRB-ToReleaseList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DRB_ToReleaseList_tags_1, + sizeof(asn_DEF_DRB_ToReleaseList_tags_1) + /sizeof(asn_DEF_DRB_ToReleaseList_tags_1[0]), /* 1 */ + asn_DEF_DRB_ToReleaseList_tags_1, /* Same as above */ + sizeof(asn_DEF_DRB_ToReleaseList_tags_1) + /sizeof(asn_DEF_DRB_ToReleaseList_tags_1[0]), /* 1 */ + &asn_PER_type_DRB_ToReleaseList_constr_1, + asn_MBR_DRB_ToReleaseList_1, + 1, /* Single element */ + &asn_SPC_DRB_ToReleaseList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRB-ToReleaseList.h b/lte/rrc/asn/DRB-ToReleaseList.h new file mode 100644 index 000000000..12f9e0121 --- /dev/null +++ b/lte/rrc/asn/DRB-ToReleaseList.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRB_ToReleaseList_H_ +#define _DRB_ToReleaseList_H_ + + +#include + +/* Including external dependencies */ +#include "DRB-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DRB-ToReleaseList */ +typedef struct DRB_ToReleaseList { + A_SEQUENCE_OF(DRB_Identity_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRB_ToReleaseList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DRB_ToReleaseList; + +#ifdef __cplusplus +} +#endif + +#endif /* _DRB_ToReleaseList_H_ */ +#include diff --git a/lte/rrc/asn/DRX-Config.c b/lte/rrc/asn/DRX-Config.c new file mode 100644 index 000000000..05e528743 --- /dev/null +++ b/lte/rrc/asn/DRX-Config.c @@ -0,0 +1,1626 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DRX-Config.h" + +static int +onDurationTimer_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +onDurationTimer_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +onDurationTimer_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +onDurationTimer_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +onDurationTimer_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +onDurationTimer_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +onDurationTimer_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +onDurationTimer_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +onDurationTimer_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +onDurationTimer_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + onDurationTimer_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +drx_InactivityTimer_21_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +drx_InactivityTimer_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +drx_InactivityTimer_21_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +drx_InactivityTimer_21_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +drx_InactivityTimer_21_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +drx_InactivityTimer_21_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +drx_InactivityTimer_21_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +drx_InactivityTimer_21_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +drx_InactivityTimer_21_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +drx_InactivityTimer_21_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + drx_InactivityTimer_21_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +drx_RetransmissionTimer_54_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +drx_RetransmissionTimer_54_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +drx_RetransmissionTimer_54_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +drx_RetransmissionTimer_54_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +drx_RetransmissionTimer_54_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +drx_RetransmissionTimer_54_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +drx_RetransmissionTimer_54_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +drx_RetransmissionTimer_54_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +drx_RetransmissionTimer_54_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +drx_RetransmissionTimer_54_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + drx_RetransmissionTimer_54_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_sf10_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 9)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf20_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 19)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf32_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf40_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 39)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf64_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf80_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 79)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf128_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 127)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf160_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 159)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf256_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf320_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 319)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf512_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 511)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf640_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 639)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf1024_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf1280_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1279)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf2048_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf2560_constraint_63(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2559)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +shortDRX_Cycle_81_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +shortDRX_Cycle_81_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +shortDRX_Cycle_81_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +shortDRX_Cycle_81_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +shortDRX_Cycle_81_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +shortDRX_Cycle_81_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +shortDRX_Cycle_81_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +shortDRX_Cycle_81_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +shortDRX_Cycle_81_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +shortDRX_Cycle_81_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + shortDRX_Cycle_81_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_drxShortCycleTimer_constraint_80(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_onDurationTimer_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_drx_InactivityTimer_constr_21 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_drx_RetransmissionTimer_constr_54 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf10_constr_64 = { + { APC_CONSTRAINED, 4, 4, 0, 9 } /* (0..9) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf20_constr_65 = { + { APC_CONSTRAINED, 5, 5, 0, 19 } /* (0..19) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf32_constr_66 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf40_constr_67 = { + { APC_CONSTRAINED, 6, 6, 0, 39 } /* (0..39) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf64_constr_68 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf80_constr_69 = { + { APC_CONSTRAINED, 7, 7, 0, 79 } /* (0..79) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf128_constr_70 = { + { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf160_constr_71 = { + { APC_CONSTRAINED, 8, 8, 0, 159 } /* (0..159) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf256_constr_72 = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf320_constr_73 = { + { APC_CONSTRAINED, 9, 9, 0, 319 } /* (0..319) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf512_constr_74 = { + { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf640_constr_75 = { + { APC_CONSTRAINED, 10, 10, 0, 639 } /* (0..639) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf1024_constr_76 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf1280_constr_77 = { + { APC_CONSTRAINED, 11, 11, 0, 1279 } /* (0..1279) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf2048_constr_78 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf2560_constr_79 = { + { APC_CONSTRAINED, 12, 12, 0, 2559 } /* (0..2559) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_longDRX_CycleStartOffset_constr_63 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_shortDRX_Cycle_constr_81 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_drxShortCycleTimer_constr_98 = { + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (1..16) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_DRX_Config_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_onDurationTimer_value2enum_4[] = { + { 0, 4, "psf1" }, + { 1, 4, "psf2" }, + { 2, 4, "psf3" }, + { 3, 4, "psf4" }, + { 4, 4, "psf5" }, + { 5, 4, "psf6" }, + { 6, 4, "psf8" }, + { 7, 5, "psf10" }, + { 8, 5, "psf20" }, + { 9, 5, "psf30" }, + { 10, 5, "psf40" }, + { 11, 5, "psf50" }, + { 12, 5, "psf60" }, + { 13, 5, "psf80" }, + { 14, 6, "psf100" }, + { 15, 6, "psf200" } +}; +static unsigned int asn_MAP_onDurationTimer_enum2value_4[] = { + 0, /* psf1(0) */ + 7, /* psf10(7) */ + 14, /* psf100(14) */ + 1, /* psf2(1) */ + 8, /* psf20(8) */ + 15, /* psf200(15) */ + 2, /* psf3(2) */ + 9, /* psf30(9) */ + 3, /* psf4(3) */ + 10, /* psf40(10) */ + 4, /* psf5(4) */ + 11, /* psf50(11) */ + 5, /* psf6(5) */ + 12, /* psf60(12) */ + 6, /* psf8(6) */ + 13 /* psf80(13) */ +}; +static asn_INTEGER_specifics_t asn_SPC_onDurationTimer_specs_4 = { + asn_MAP_onDurationTimer_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_onDurationTimer_enum2value_4, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_onDurationTimer_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_onDurationTimer_4 = { + "onDurationTimer", + "onDurationTimer", + onDurationTimer_4_free, + onDurationTimer_4_print, + onDurationTimer_4_constraint, + onDurationTimer_4_decode_ber, + onDurationTimer_4_encode_der, + onDurationTimer_4_decode_xer, + onDurationTimer_4_encode_xer, + onDurationTimer_4_decode_uper, + onDurationTimer_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_onDurationTimer_tags_4, + sizeof(asn_DEF_onDurationTimer_tags_4) + /sizeof(asn_DEF_onDurationTimer_tags_4[0]) - 1, /* 1 */ + asn_DEF_onDurationTimer_tags_4, /* Same as above */ + sizeof(asn_DEF_onDurationTimer_tags_4) + /sizeof(asn_DEF_onDurationTimer_tags_4[0]), /* 2 */ + &asn_PER_type_onDurationTimer_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_onDurationTimer_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_drx_InactivityTimer_value2enum_21[] = { + { 0, 4, "psf1" }, + { 1, 4, "psf2" }, + { 2, 4, "psf3" }, + { 3, 4, "psf4" }, + { 4, 4, "psf5" }, + { 5, 4, "psf6" }, + { 6, 4, "psf8" }, + { 7, 5, "psf10" }, + { 8, 5, "psf20" }, + { 9, 5, "psf30" }, + { 10, 5, "psf40" }, + { 11, 5, "psf50" }, + { 12, 5, "psf60" }, + { 13, 5, "psf80" }, + { 14, 6, "psf100" }, + { 15, 6, "psf200" }, + { 16, 6, "psf300" }, + { 17, 6, "psf500" }, + { 18, 6, "psf750" }, + { 19, 7, "psf1280" }, + { 20, 7, "psf1920" }, + { 21, 7, "psf2560" }, + { 22, 10, "psf0-v1020" }, + { 23, 6, "spare9" }, + { 24, 6, "spare8" }, + { 25, 6, "spare7" }, + { 26, 6, "spare6" }, + { 27, 6, "spare5" }, + { 28, 6, "spare4" }, + { 29, 6, "spare3" }, + { 30, 6, "spare2" }, + { 31, 6, "spare1" } +}; +static unsigned int asn_MAP_drx_InactivityTimer_enum2value_21[] = { + 22, /* psf0-v1020(22) */ + 0, /* psf1(0) */ + 7, /* psf10(7) */ + 14, /* psf100(14) */ + 19, /* psf1280(19) */ + 20, /* psf1920(20) */ + 1, /* psf2(1) */ + 8, /* psf20(8) */ + 15, /* psf200(15) */ + 21, /* psf2560(21) */ + 2, /* psf3(2) */ + 9, /* psf30(9) */ + 16, /* psf300(16) */ + 3, /* psf4(3) */ + 10, /* psf40(10) */ + 4, /* psf5(4) */ + 11, /* psf50(11) */ + 17, /* psf500(17) */ + 5, /* psf6(5) */ + 12, /* psf60(12) */ + 18, /* psf750(18) */ + 6, /* psf8(6) */ + 13, /* psf80(13) */ + 31, /* spare1(31) */ + 30, /* spare2(30) */ + 29, /* spare3(29) */ + 28, /* spare4(28) */ + 27, /* spare5(27) */ + 26, /* spare6(26) */ + 25, /* spare7(25) */ + 24, /* spare8(24) */ + 23 /* spare9(23) */ +}; +static asn_INTEGER_specifics_t asn_SPC_drx_InactivityTimer_specs_21 = { + asn_MAP_drx_InactivityTimer_value2enum_21, /* "tag" => N; sorted by tag */ + asn_MAP_drx_InactivityTimer_enum2value_21, /* N => "tag"; sorted by N */ + 32, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_drx_InactivityTimer_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_drx_InactivityTimer_21 = { + "drx-InactivityTimer", + "drx-InactivityTimer", + drx_InactivityTimer_21_free, + drx_InactivityTimer_21_print, + drx_InactivityTimer_21_constraint, + drx_InactivityTimer_21_decode_ber, + drx_InactivityTimer_21_encode_der, + drx_InactivityTimer_21_decode_xer, + drx_InactivityTimer_21_encode_xer, + drx_InactivityTimer_21_decode_uper, + drx_InactivityTimer_21_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_drx_InactivityTimer_tags_21, + sizeof(asn_DEF_drx_InactivityTimer_tags_21) + /sizeof(asn_DEF_drx_InactivityTimer_tags_21[0]) - 1, /* 1 */ + asn_DEF_drx_InactivityTimer_tags_21, /* Same as above */ + sizeof(asn_DEF_drx_InactivityTimer_tags_21) + /sizeof(asn_DEF_drx_InactivityTimer_tags_21[0]), /* 2 */ + &asn_PER_type_drx_InactivityTimer_constr_21, + 0, 0, /* Defined elsewhere */ + &asn_SPC_drx_InactivityTimer_specs_21 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_drx_RetransmissionTimer_value2enum_54[] = { + { 0, 4, "psf1" }, + { 1, 4, "psf2" }, + { 2, 4, "psf4" }, + { 3, 4, "psf6" }, + { 4, 4, "psf8" }, + { 5, 5, "psf16" }, + { 6, 5, "psf24" }, + { 7, 5, "psf33" } +}; +static unsigned int asn_MAP_drx_RetransmissionTimer_enum2value_54[] = { + 0, /* psf1(0) */ + 5, /* psf16(5) */ + 1, /* psf2(1) */ + 6, /* psf24(6) */ + 7, /* psf33(7) */ + 2, /* psf4(2) */ + 3, /* psf6(3) */ + 4 /* psf8(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_drx_RetransmissionTimer_specs_54 = { + asn_MAP_drx_RetransmissionTimer_value2enum_54, /* "tag" => N; sorted by tag */ + asn_MAP_drx_RetransmissionTimer_enum2value_54, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_drx_RetransmissionTimer_tags_54[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_drx_RetransmissionTimer_54 = { + "drx-RetransmissionTimer", + "drx-RetransmissionTimer", + drx_RetransmissionTimer_54_free, + drx_RetransmissionTimer_54_print, + drx_RetransmissionTimer_54_constraint, + drx_RetransmissionTimer_54_decode_ber, + drx_RetransmissionTimer_54_encode_der, + drx_RetransmissionTimer_54_decode_xer, + drx_RetransmissionTimer_54_encode_xer, + drx_RetransmissionTimer_54_decode_uper, + drx_RetransmissionTimer_54_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_drx_RetransmissionTimer_tags_54, + sizeof(asn_DEF_drx_RetransmissionTimer_tags_54) + /sizeof(asn_DEF_drx_RetransmissionTimer_tags_54[0]) - 1, /* 1 */ + asn_DEF_drx_RetransmissionTimer_tags_54, /* Same as above */ + sizeof(asn_DEF_drx_RetransmissionTimer_tags_54) + /sizeof(asn_DEF_drx_RetransmissionTimer_tags_54[0]), /* 2 */ + &asn_PER_type_drx_RetransmissionTimer_constr_54, + 0, 0, /* Defined elsewhere */ + &asn_SPC_drx_RetransmissionTimer_specs_54 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_longDRX_CycleStartOffset_63[] = { + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf10_constraint_63, + &asn_PER_memb_sf10_constr_64, + 0, + "sf10" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf20), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf20_constraint_63, + &asn_PER_memb_sf20_constr_65, + 0, + "sf20" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf32), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf32_constraint_63, + &asn_PER_memb_sf32_constr_66, + 0, + "sf32" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf40), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf40_constraint_63, + &asn_PER_memb_sf40_constr_67, + 0, + "sf40" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf64), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf64_constraint_63, + &asn_PER_memb_sf64_constr_68, + 0, + "sf64" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf80), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf80_constraint_63, + &asn_PER_memb_sf80_constr_69, + 0, + "sf80" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf128), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf128_constraint_63, + &asn_PER_memb_sf128_constr_70, + 0, + "sf128" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf160), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf160_constraint_63, + &asn_PER_memb_sf160_constr_71, + 0, + "sf160" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf256), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf256_constraint_63, + &asn_PER_memb_sf256_constr_72, + 0, + "sf256" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf320), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf320_constraint_63, + &asn_PER_memb_sf320_constr_73, + 0, + "sf320" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf512), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf512_constraint_63, + &asn_PER_memb_sf512_constr_74, + 0, + "sf512" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf640), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf640_constraint_63, + &asn_PER_memb_sf640_constr_75, + 0, + "sf640" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf1024), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf1024_constraint_63, + &asn_PER_memb_sf1024_constr_76, + 0, + "sf1024" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf1280), + (ASN_TAG_CLASS_CONTEXT | (13 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf1280_constraint_63, + &asn_PER_memb_sf1280_constr_77, + 0, + "sf1280" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf2048), + (ASN_TAG_CLASS_CONTEXT | (14 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf2048_constraint_63, + &asn_PER_memb_sf2048_constr_78, + 0, + "sf2048" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, choice.sf2560), + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf2560_constraint_63, + &asn_PER_memb_sf2560_constr_79, + 0, + "sf2560" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_longDRX_CycleStartOffset_tag2el_63[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sf10 at 2056 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sf20 at 2057 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sf32 at 2058 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sf40 at 2059 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sf64 at 2060 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* sf80 at 2061 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* sf128 at 2062 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* sf160 at 2063 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* sf256 at 2064 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* sf320 at 2065 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* sf512 at 2066 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* sf640 at 2067 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* sf1024 at 2068 */ + { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* sf1280 at 2069 */ + { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* sf2048 at 2070 */ + { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 } /* sf2560 at 2071 */ +}; +static asn_CHOICE_specifics_t asn_SPC_longDRX_CycleStartOffset_specs_63 = { + sizeof(struct DRX_Config__setup__longDRX_CycleStartOffset), + offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, _asn_ctx), + offsetof(struct DRX_Config__setup__longDRX_CycleStartOffset, present), + sizeof(((struct DRX_Config__setup__longDRX_CycleStartOffset *)0)->present), + asn_MAP_longDRX_CycleStartOffset_tag2el_63, + 16, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_longDRX_CycleStartOffset_63 = { + "longDRX-CycleStartOffset", + "longDRX-CycleStartOffset", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_longDRX_CycleStartOffset_constr_63, + asn_MBR_longDRX_CycleStartOffset_63, + 16, /* Elements count */ + &asn_SPC_longDRX_CycleStartOffset_specs_63 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_shortDRX_Cycle_value2enum_81[] = { + { 0, 3, "sf2" }, + { 1, 3, "sf5" }, + { 2, 3, "sf8" }, + { 3, 4, "sf10" }, + { 4, 4, "sf16" }, + { 5, 4, "sf20" }, + { 6, 4, "sf32" }, + { 7, 4, "sf40" }, + { 8, 4, "sf64" }, + { 9, 4, "sf80" }, + { 10, 5, "sf128" }, + { 11, 5, "sf160" }, + { 12, 5, "sf256" }, + { 13, 5, "sf320" }, + { 14, 5, "sf512" }, + { 15, 5, "sf640" } +}; +static unsigned int asn_MAP_shortDRX_Cycle_enum2value_81[] = { + 3, /* sf10(3) */ + 10, /* sf128(10) */ + 4, /* sf16(4) */ + 11, /* sf160(11) */ + 0, /* sf2(0) */ + 5, /* sf20(5) */ + 12, /* sf256(12) */ + 6, /* sf32(6) */ + 13, /* sf320(13) */ + 7, /* sf40(7) */ + 1, /* sf5(1) */ + 14, /* sf512(14) */ + 8, /* sf64(8) */ + 15, /* sf640(15) */ + 2, /* sf8(2) */ + 9 /* sf80(9) */ +}; +static asn_INTEGER_specifics_t asn_SPC_shortDRX_Cycle_specs_81 = { + asn_MAP_shortDRX_Cycle_value2enum_81, /* "tag" => N; sorted by tag */ + asn_MAP_shortDRX_Cycle_enum2value_81, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_shortDRX_Cycle_tags_81[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_shortDRX_Cycle_81 = { + "shortDRX-Cycle", + "shortDRX-Cycle", + shortDRX_Cycle_81_free, + shortDRX_Cycle_81_print, + shortDRX_Cycle_81_constraint, + shortDRX_Cycle_81_decode_ber, + shortDRX_Cycle_81_encode_der, + shortDRX_Cycle_81_decode_xer, + shortDRX_Cycle_81_encode_xer, + shortDRX_Cycle_81_decode_uper, + shortDRX_Cycle_81_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_shortDRX_Cycle_tags_81, + sizeof(asn_DEF_shortDRX_Cycle_tags_81) + /sizeof(asn_DEF_shortDRX_Cycle_tags_81[0]) - 1, /* 1 */ + asn_DEF_shortDRX_Cycle_tags_81, /* Same as above */ + sizeof(asn_DEF_shortDRX_Cycle_tags_81) + /sizeof(asn_DEF_shortDRX_Cycle_tags_81[0]), /* 2 */ + &asn_PER_type_shortDRX_Cycle_constr_81, + 0, 0, /* Defined elsewhere */ + &asn_SPC_shortDRX_Cycle_specs_81 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_shortDRX_80[] = { + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__shortDRX, shortDRX_Cycle), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_shortDRX_Cycle_81, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "shortDRX-Cycle" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup__shortDRX, drxShortCycleTimer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_drxShortCycleTimer_constraint_80, + &asn_PER_memb_drxShortCycleTimer_constr_98, + 0, + "drxShortCycleTimer" + }, +}; +static ber_tlv_tag_t asn_DEF_shortDRX_tags_80[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_shortDRX_tag2el_80[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* shortDRX-Cycle at 2075 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* drxShortCycleTimer at 2078 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_shortDRX_specs_80 = { + sizeof(struct DRX_Config__setup__shortDRX), + offsetof(struct DRX_Config__setup__shortDRX, _asn_ctx), + asn_MAP_shortDRX_tag2el_80, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_shortDRX_80 = { + "shortDRX", + "shortDRX", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_shortDRX_tags_80, + sizeof(asn_DEF_shortDRX_tags_80) + /sizeof(asn_DEF_shortDRX_tags_80[0]) - 1, /* 1 */ + asn_DEF_shortDRX_tags_80, /* Same as above */ + sizeof(asn_DEF_shortDRX_tags_80) + /sizeof(asn_DEF_shortDRX_tags_80[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_shortDRX_80, + 2, /* Elements count */ + &asn_SPC_shortDRX_specs_80 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup, onDurationTimer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_onDurationTimer_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "onDurationTimer" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup, drx_InactivityTimer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_drx_InactivityTimer_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drx-InactivityTimer" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup, drx_RetransmissionTimer), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_drx_RetransmissionTimer_54, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drx-RetransmissionTimer" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config__setup, longDRX_CycleStartOffset), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_longDRX_CycleStartOffset_63, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "longDRX-CycleStartOffset" + }, + { ATF_POINTER, 1, offsetof(struct DRX_Config__setup, shortDRX), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + 0, + &asn_DEF_shortDRX_80, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "shortDRX" + }, +}; +static int asn_MAP_setup_oms_3[] = { 4 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* onDurationTimer at 2039 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drx-InactivityTimer at 2044 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* drx-RetransmissionTimer at 2053 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* longDRX-CycleStartOffset at 2056 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* shortDRX at 2077 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct DRX_Config__setup), + offsetof(struct DRX_Config__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 5, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 5, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DRX_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct DRX_Config, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_DRX_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2036 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2042 */ +}; +static asn_CHOICE_specifics_t asn_SPC_DRX_Config_specs_1 = { + sizeof(struct DRX_Config), + offsetof(struct DRX_Config, _asn_ctx), + offsetof(struct DRX_Config, present), + sizeof(((struct DRX_Config *)0)->present), + asn_MAP_DRX_Config_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_DRX_Config = { + "DRX-Config", + "DRX-Config", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_DRX_Config_constr_1, + asn_MBR_DRX_Config_1, + 2, /* Elements count */ + &asn_SPC_DRX_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DRX-Config.h b/lte/rrc/asn/DRX-Config.h new file mode 100644 index 000000000..57d7ba407 --- /dev/null +++ b/lte/rrc/asn/DRX-Config.h @@ -0,0 +1,193 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DRX_Config_H_ +#define _DRX_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DRX_Config_PR { + DRX_Config_PR_NOTHING, /* No components present */ + DRX_Config_PR_release, + DRX_Config_PR_setup +} DRX_Config_PR; +typedef enum DRX_Config__setup__onDurationTimer { + DRX_Config__setup__onDurationTimer_psf1 = 0, + DRX_Config__setup__onDurationTimer_psf2 = 1, + DRX_Config__setup__onDurationTimer_psf3 = 2, + DRX_Config__setup__onDurationTimer_psf4 = 3, + DRX_Config__setup__onDurationTimer_psf5 = 4, + DRX_Config__setup__onDurationTimer_psf6 = 5, + DRX_Config__setup__onDurationTimer_psf8 = 6, + DRX_Config__setup__onDurationTimer_psf10 = 7, + DRX_Config__setup__onDurationTimer_psf20 = 8, + DRX_Config__setup__onDurationTimer_psf30 = 9, + DRX_Config__setup__onDurationTimer_psf40 = 10, + DRX_Config__setup__onDurationTimer_psf50 = 11, + DRX_Config__setup__onDurationTimer_psf60 = 12, + DRX_Config__setup__onDurationTimer_psf80 = 13, + DRX_Config__setup__onDurationTimer_psf100 = 14, + DRX_Config__setup__onDurationTimer_psf200 = 15 +} e_DRX_Config__setup__onDurationTimer; +typedef enum DRX_Config__setup__drx_InactivityTimer { + DRX_Config__setup__drx_InactivityTimer_psf1 = 0, + DRX_Config__setup__drx_InactivityTimer_psf2 = 1, + DRX_Config__setup__drx_InactivityTimer_psf3 = 2, + DRX_Config__setup__drx_InactivityTimer_psf4 = 3, + DRX_Config__setup__drx_InactivityTimer_psf5 = 4, + DRX_Config__setup__drx_InactivityTimer_psf6 = 5, + DRX_Config__setup__drx_InactivityTimer_psf8 = 6, + DRX_Config__setup__drx_InactivityTimer_psf10 = 7, + DRX_Config__setup__drx_InactivityTimer_psf20 = 8, + DRX_Config__setup__drx_InactivityTimer_psf30 = 9, + DRX_Config__setup__drx_InactivityTimer_psf40 = 10, + DRX_Config__setup__drx_InactivityTimer_psf50 = 11, + DRX_Config__setup__drx_InactivityTimer_psf60 = 12, + DRX_Config__setup__drx_InactivityTimer_psf80 = 13, + DRX_Config__setup__drx_InactivityTimer_psf100 = 14, + DRX_Config__setup__drx_InactivityTimer_psf200 = 15, + DRX_Config__setup__drx_InactivityTimer_psf300 = 16, + DRX_Config__setup__drx_InactivityTimer_psf500 = 17, + DRX_Config__setup__drx_InactivityTimer_psf750 = 18, + DRX_Config__setup__drx_InactivityTimer_psf1280 = 19, + DRX_Config__setup__drx_InactivityTimer_psf1920 = 20, + DRX_Config__setup__drx_InactivityTimer_psf2560 = 21, + DRX_Config__setup__drx_InactivityTimer_psf0_v1020 = 22, + DRX_Config__setup__drx_InactivityTimer_spare9 = 23, + DRX_Config__setup__drx_InactivityTimer_spare8 = 24, + DRX_Config__setup__drx_InactivityTimer_spare7 = 25, + DRX_Config__setup__drx_InactivityTimer_spare6 = 26, + DRX_Config__setup__drx_InactivityTimer_spare5 = 27, + DRX_Config__setup__drx_InactivityTimer_spare4 = 28, + DRX_Config__setup__drx_InactivityTimer_spare3 = 29, + DRX_Config__setup__drx_InactivityTimer_spare2 = 30, + DRX_Config__setup__drx_InactivityTimer_spare1 = 31 +} e_DRX_Config__setup__drx_InactivityTimer; +typedef enum DRX_Config__setup__drx_RetransmissionTimer { + DRX_Config__setup__drx_RetransmissionTimer_psf1 = 0, + DRX_Config__setup__drx_RetransmissionTimer_psf2 = 1, + DRX_Config__setup__drx_RetransmissionTimer_psf4 = 2, + DRX_Config__setup__drx_RetransmissionTimer_psf6 = 3, + DRX_Config__setup__drx_RetransmissionTimer_psf8 = 4, + DRX_Config__setup__drx_RetransmissionTimer_psf16 = 5, + DRX_Config__setup__drx_RetransmissionTimer_psf24 = 6, + DRX_Config__setup__drx_RetransmissionTimer_psf33 = 7 +} e_DRX_Config__setup__drx_RetransmissionTimer; +typedef enum DRX_Config__setup__longDRX_CycleStartOffset_PR { + DRX_Config__setup__longDRX_CycleStartOffset_PR_NOTHING, /* No components present */ + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf10, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf20, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf32, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf40, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf64, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf80, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf128, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf160, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf256, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf320, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf512, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf640, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1024, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf1280, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2048, + DRX_Config__setup__longDRX_CycleStartOffset_PR_sf2560 +} DRX_Config__setup__longDRX_CycleStartOffset_PR; +typedef enum DRX_Config__setup__shortDRX__shortDRX_Cycle { + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf2 = 0, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf5 = 1, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf8 = 2, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf10 = 3, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf16 = 4, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf20 = 5, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf32 = 6, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf40 = 7, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf64 = 8, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf80 = 9, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf128 = 10, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf160 = 11, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf256 = 12, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf320 = 13, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf512 = 14, + DRX_Config__setup__shortDRX__shortDRX_Cycle_sf640 = 15 +} e_DRX_Config__setup__shortDRX__shortDRX_Cycle; + +/* DRX-Config */ +typedef struct DRX_Config { + DRX_Config_PR present; + union DRX_Config_u { + NULL_t release; + struct DRX_Config__setup { + long onDurationTimer; + long drx_InactivityTimer; + long drx_RetransmissionTimer; + struct DRX_Config__setup__longDRX_CycleStartOffset { + DRX_Config__setup__longDRX_CycleStartOffset_PR present; + union DRX_Config__setup__longDRX_CycleStartOffset_u { + long sf10; + long sf20; + long sf32; + long sf40; + long sf64; + long sf80; + long sf128; + long sf160; + long sf256; + long sf320; + long sf512; + long sf640; + long sf1024; + long sf1280; + long sf2048; + long sf2560; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } longDRX_CycleStartOffset; + struct DRX_Config__setup__shortDRX { + long shortDRX_Cycle; + long drxShortCycleTimer; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *shortDRX; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DRX_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_onDurationTimer_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_drx_InactivityTimer_21; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_drx_RetransmissionTimer_54; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_shortDRX_Cycle_81; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_DRX_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _DRX_Config_H_ */ +#include diff --git a/lte/rrc/asn/DedicatedInfoCDMA2000.c b/lte/rrc/asn/DedicatedInfoCDMA2000.c new file mode 100644 index 000000000..0ed8d8f5d --- /dev/null +++ b/lte/rrc/asn/DedicatedInfoCDMA2000.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DedicatedInfoCDMA2000.h" + +int +DedicatedInfoCDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_OCTET_STRING.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static void +DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_OCTET_STRING.free_struct; + td->print_struct = asn_DEF_OCTET_STRING.print_struct; + td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; + td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; + td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; + td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; + td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; + td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; + td->elements = asn_DEF_OCTET_STRING.elements; + td->elements_count = asn_DEF_OCTET_STRING.elements_count; + td->specifics = asn_DEF_OCTET_STRING.specifics; +} + +void +DedicatedInfoCDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +DedicatedInfoCDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +DedicatedInfoCDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +DedicatedInfoCDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +DedicatedInfoCDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +DedicatedInfoCDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +DedicatedInfoCDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +DedicatedInfoCDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + DedicatedInfoCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_DedicatedInfoCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DedicatedInfoCDMA2000 = { + "DedicatedInfoCDMA2000", + "DedicatedInfoCDMA2000", + DedicatedInfoCDMA2000_free, + DedicatedInfoCDMA2000_print, + DedicatedInfoCDMA2000_constraint, + DedicatedInfoCDMA2000_decode_ber, + DedicatedInfoCDMA2000_encode_der, + DedicatedInfoCDMA2000_decode_xer, + DedicatedInfoCDMA2000_encode_xer, + DedicatedInfoCDMA2000_decode_uper, + DedicatedInfoCDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DedicatedInfoCDMA2000_tags_1, + sizeof(asn_DEF_DedicatedInfoCDMA2000_tags_1) + /sizeof(asn_DEF_DedicatedInfoCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_DedicatedInfoCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_DedicatedInfoCDMA2000_tags_1) + /sizeof(asn_DEF_DedicatedInfoCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/DedicatedInfoCDMA2000.h b/lte/rrc/asn/DedicatedInfoCDMA2000.h new file mode 100644 index 000000000..746962136 --- /dev/null +++ b/lte/rrc/asn/DedicatedInfoCDMA2000.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DedicatedInfoCDMA2000_H_ +#define _DedicatedInfoCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DedicatedInfoCDMA2000 */ +typedef OCTET_STRING_t DedicatedInfoCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DedicatedInfoCDMA2000; +asn_struct_free_f DedicatedInfoCDMA2000_free; +asn_struct_print_f DedicatedInfoCDMA2000_print; +asn_constr_check_f DedicatedInfoCDMA2000_constraint; +ber_type_decoder_f DedicatedInfoCDMA2000_decode_ber; +der_type_encoder_f DedicatedInfoCDMA2000_encode_der; +xer_type_decoder_f DedicatedInfoCDMA2000_decode_xer; +xer_type_encoder_f DedicatedInfoCDMA2000_encode_xer; +per_type_decoder_f DedicatedInfoCDMA2000_decode_uper; +per_type_encoder_f DedicatedInfoCDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DedicatedInfoCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/DedicatedInfoNAS.c b/lte/rrc/asn/DedicatedInfoNAS.c new file mode 100644 index 000000000..0fff8c6c9 --- /dev/null +++ b/lte/rrc/asn/DedicatedInfoNAS.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DedicatedInfoNAS.h" + +int +DedicatedInfoNAS_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_OCTET_STRING.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static void +DedicatedInfoNAS_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_OCTET_STRING.free_struct; + td->print_struct = asn_DEF_OCTET_STRING.print_struct; + td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; + td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; + td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; + td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; + td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; + td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; + td->elements = asn_DEF_OCTET_STRING.elements; + td->elements_count = asn_DEF_OCTET_STRING.elements_count; + td->specifics = asn_DEF_OCTET_STRING.specifics; +} + +void +DedicatedInfoNAS_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +DedicatedInfoNAS_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +DedicatedInfoNAS_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +DedicatedInfoNAS_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +DedicatedInfoNAS_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +DedicatedInfoNAS_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +DedicatedInfoNAS_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +DedicatedInfoNAS_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + DedicatedInfoNAS_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_DedicatedInfoNAS_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_DedicatedInfoNAS = { + "DedicatedInfoNAS", + "DedicatedInfoNAS", + DedicatedInfoNAS_free, + DedicatedInfoNAS_print, + DedicatedInfoNAS_constraint, + DedicatedInfoNAS_decode_ber, + DedicatedInfoNAS_encode_der, + DedicatedInfoNAS_decode_xer, + DedicatedInfoNAS_encode_xer, + DedicatedInfoNAS_decode_uper, + DedicatedInfoNAS_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DedicatedInfoNAS_tags_1, + sizeof(asn_DEF_DedicatedInfoNAS_tags_1) + /sizeof(asn_DEF_DedicatedInfoNAS_tags_1[0]), /* 1 */ + asn_DEF_DedicatedInfoNAS_tags_1, /* Same as above */ + sizeof(asn_DEF_DedicatedInfoNAS_tags_1) + /sizeof(asn_DEF_DedicatedInfoNAS_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/DedicatedInfoNAS.h b/lte/rrc/asn/DedicatedInfoNAS.h new file mode 100644 index 000000000..c29c6812e --- /dev/null +++ b/lte/rrc/asn/DedicatedInfoNAS.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DedicatedInfoNAS_H_ +#define _DedicatedInfoNAS_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* DedicatedInfoNAS */ +typedef OCTET_STRING_t DedicatedInfoNAS_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_DedicatedInfoNAS; +asn_struct_free_f DedicatedInfoNAS_free; +asn_struct_print_f DedicatedInfoNAS_print; +asn_constr_check_f DedicatedInfoNAS_constraint; +ber_type_decoder_f DedicatedInfoNAS_decode_ber; +der_type_encoder_f DedicatedInfoNAS_encode_der; +xer_type_decoder_f DedicatedInfoNAS_decode_xer; +xer_type_encoder_f DedicatedInfoNAS_encode_xer; +per_type_decoder_f DedicatedInfoNAS_decode_uper; +per_type_encoder_f DedicatedInfoNAS_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _DedicatedInfoNAS_H_ */ +#include diff --git a/lte/rrc/asn/DeltaFList-PUCCH.c b/lte/rrc/asn/DeltaFList-PUCCH.c new file mode 100644 index 000000000..05632528f --- /dev/null +++ b/lte/rrc/asn/DeltaFList-PUCCH.c @@ -0,0 +1,807 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DeltaFList-PUCCH.h" + +static int +deltaF_PUCCH_Format1_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format1_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format1_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format1_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaF_PUCCH_Format1b_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format1b_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format1b_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1b_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1b_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1b_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1b_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1b_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1b_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format1b_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaF_PUCCH_Format2_10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format2_10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format2_10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2_10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2_10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2_10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2_10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2_10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2_10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format2_10_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaF_PUCCH_Format2a_15_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format2a_15_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format2a_15_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2a_15_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2a_15_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2a_15_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2a_15_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2a_15_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2a_15_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format2a_15_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaF_PUCCH_Format2b_19_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format2b_19_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format2b_19_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2b_19_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2b_19_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2b_19_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2b_19_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format2b_19_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format2b_19_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format2b_19_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format1_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format1b_constr_6 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format2_constr_10 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format2a_constr_15 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format2b_constr_19 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format1_value2enum_2[] = { + { 0, 8, "deltaF-2" }, + { 1, 7, "deltaF0" }, + { 2, 7, "deltaF2" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format1_enum2value_2[] = { + 0, /* deltaF-2(0) */ + 1, /* deltaF0(1) */ + 2 /* deltaF2(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format1_specs_2 = { + asn_MAP_deltaF_PUCCH_Format1_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format1_enum2value_2, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format1_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format1_2 = { + "deltaF-PUCCH-Format1", + "deltaF-PUCCH-Format1", + deltaF_PUCCH_Format1_2_free, + deltaF_PUCCH_Format1_2_print, + deltaF_PUCCH_Format1_2_constraint, + deltaF_PUCCH_Format1_2_decode_ber, + deltaF_PUCCH_Format1_2_encode_der, + deltaF_PUCCH_Format1_2_decode_xer, + deltaF_PUCCH_Format1_2_encode_xer, + deltaF_PUCCH_Format1_2_decode_uper, + deltaF_PUCCH_Format1_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format1_tags_2, + sizeof(asn_DEF_deltaF_PUCCH_Format1_tags_2) + /sizeof(asn_DEF_deltaF_PUCCH_Format1_tags_2[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format1_tags_2, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format1_tags_2) + /sizeof(asn_DEF_deltaF_PUCCH_Format1_tags_2[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format1_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format1_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format1b_value2enum_6[] = { + { 0, 7, "deltaF1" }, + { 1, 7, "deltaF3" }, + { 2, 7, "deltaF5" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format1b_enum2value_6[] = { + 0, /* deltaF1(0) */ + 1, /* deltaF3(1) */ + 2 /* deltaF5(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format1b_specs_6 = { + asn_MAP_deltaF_PUCCH_Format1b_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format1b_enum2value_6, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format1b_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format1b_6 = { + "deltaF-PUCCH-Format1b", + "deltaF-PUCCH-Format1b", + deltaF_PUCCH_Format1b_6_free, + deltaF_PUCCH_Format1b_6_print, + deltaF_PUCCH_Format1b_6_constraint, + deltaF_PUCCH_Format1b_6_decode_ber, + deltaF_PUCCH_Format1b_6_encode_der, + deltaF_PUCCH_Format1b_6_decode_xer, + deltaF_PUCCH_Format1b_6_encode_xer, + deltaF_PUCCH_Format1b_6_decode_uper, + deltaF_PUCCH_Format1b_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format1b_tags_6, + sizeof(asn_DEF_deltaF_PUCCH_Format1b_tags_6) + /sizeof(asn_DEF_deltaF_PUCCH_Format1b_tags_6[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format1b_tags_6, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format1b_tags_6) + /sizeof(asn_DEF_deltaF_PUCCH_Format1b_tags_6[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format1b_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format1b_specs_6 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format2_value2enum_10[] = { + { 0, 8, "deltaF-2" }, + { 1, 7, "deltaF0" }, + { 2, 7, "deltaF1" }, + { 3, 7, "deltaF2" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format2_enum2value_10[] = { + 0, /* deltaF-2(0) */ + 1, /* deltaF0(1) */ + 2, /* deltaF1(2) */ + 3 /* deltaF2(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format2_specs_10 = { + asn_MAP_deltaF_PUCCH_Format2_value2enum_10, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format2_enum2value_10, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format2_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format2_10 = { + "deltaF-PUCCH-Format2", + "deltaF-PUCCH-Format2", + deltaF_PUCCH_Format2_10_free, + deltaF_PUCCH_Format2_10_print, + deltaF_PUCCH_Format2_10_constraint, + deltaF_PUCCH_Format2_10_decode_ber, + deltaF_PUCCH_Format2_10_encode_der, + deltaF_PUCCH_Format2_10_decode_xer, + deltaF_PUCCH_Format2_10_encode_xer, + deltaF_PUCCH_Format2_10_decode_uper, + deltaF_PUCCH_Format2_10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format2_tags_10, + sizeof(asn_DEF_deltaF_PUCCH_Format2_tags_10) + /sizeof(asn_DEF_deltaF_PUCCH_Format2_tags_10[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format2_tags_10, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format2_tags_10) + /sizeof(asn_DEF_deltaF_PUCCH_Format2_tags_10[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format2_constr_10, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format2_specs_10 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format2a_value2enum_15[] = { + { 0, 8, "deltaF-2" }, + { 1, 7, "deltaF0" }, + { 2, 7, "deltaF2" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format2a_enum2value_15[] = { + 0, /* deltaF-2(0) */ + 1, /* deltaF0(1) */ + 2 /* deltaF2(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format2a_specs_15 = { + asn_MAP_deltaF_PUCCH_Format2a_value2enum_15, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format2a_enum2value_15, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format2a_tags_15[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format2a_15 = { + "deltaF-PUCCH-Format2a", + "deltaF-PUCCH-Format2a", + deltaF_PUCCH_Format2a_15_free, + deltaF_PUCCH_Format2a_15_print, + deltaF_PUCCH_Format2a_15_constraint, + deltaF_PUCCH_Format2a_15_decode_ber, + deltaF_PUCCH_Format2a_15_encode_der, + deltaF_PUCCH_Format2a_15_decode_xer, + deltaF_PUCCH_Format2a_15_encode_xer, + deltaF_PUCCH_Format2a_15_decode_uper, + deltaF_PUCCH_Format2a_15_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format2a_tags_15, + sizeof(asn_DEF_deltaF_PUCCH_Format2a_tags_15) + /sizeof(asn_DEF_deltaF_PUCCH_Format2a_tags_15[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format2a_tags_15, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format2a_tags_15) + /sizeof(asn_DEF_deltaF_PUCCH_Format2a_tags_15[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format2a_constr_15, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format2a_specs_15 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format2b_value2enum_19[] = { + { 0, 8, "deltaF-2" }, + { 1, 7, "deltaF0" }, + { 2, 7, "deltaF2" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format2b_enum2value_19[] = { + 0, /* deltaF-2(0) */ + 1, /* deltaF0(1) */ + 2 /* deltaF2(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format2b_specs_19 = { + asn_MAP_deltaF_PUCCH_Format2b_value2enum_19, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format2b_enum2value_19, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format2b_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format2b_19 = { + "deltaF-PUCCH-Format2b", + "deltaF-PUCCH-Format2b", + deltaF_PUCCH_Format2b_19_free, + deltaF_PUCCH_Format2b_19_print, + deltaF_PUCCH_Format2b_19_constraint, + deltaF_PUCCH_Format2b_19_decode_ber, + deltaF_PUCCH_Format2b_19_encode_der, + deltaF_PUCCH_Format2b_19_decode_xer, + deltaF_PUCCH_Format2b_19_encode_xer, + deltaF_PUCCH_Format2b_19_decode_uper, + deltaF_PUCCH_Format2b_19_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format2b_tags_19, + sizeof(asn_DEF_deltaF_PUCCH_Format2b_tags_19) + /sizeof(asn_DEF_deltaF_PUCCH_Format2b_tags_19[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format2b_tags_19, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format2b_tags_19) + /sizeof(asn_DEF_deltaF_PUCCH_Format2b_tags_19[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format2b_constr_19, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format2b_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DeltaFList_PUCCH_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DeltaFList_PUCCH, deltaF_PUCCH_Format1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format1" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaFList_PUCCH, deltaF_PUCCH_Format1b), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format1b_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format1b" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaFList_PUCCH, deltaF_PUCCH_Format2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format2_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format2" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaFList_PUCCH, deltaF_PUCCH_Format2a), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format2a_15, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format2a" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaFList_PUCCH, deltaF_PUCCH_Format2b), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format2b_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format2b" + }, +}; +static ber_tlv_tag_t asn_DEF_DeltaFList_PUCCH_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DeltaFList_PUCCH_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* deltaF-PUCCH-Format1 at 2843 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* deltaF-PUCCH-Format1b at 2844 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deltaF-PUCCH-Format2 at 2845 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* deltaF-PUCCH-Format2a at 2846 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* deltaF-PUCCH-Format2b at 2847 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DeltaFList_PUCCH_specs_1 = { + sizeof(struct DeltaFList_PUCCH), + offsetof(struct DeltaFList_PUCCH, _asn_ctx), + asn_MAP_DeltaFList_PUCCH_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DeltaFList_PUCCH = { + "DeltaFList-PUCCH", + "DeltaFList-PUCCH", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DeltaFList_PUCCH_tags_1, + sizeof(asn_DEF_DeltaFList_PUCCH_tags_1) + /sizeof(asn_DEF_DeltaFList_PUCCH_tags_1[0]), /* 1 */ + asn_DEF_DeltaFList_PUCCH_tags_1, /* Same as above */ + sizeof(asn_DEF_DeltaFList_PUCCH_tags_1) + /sizeof(asn_DEF_DeltaFList_PUCCH_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DeltaFList_PUCCH_1, + 5, /* Elements count */ + &asn_SPC_DeltaFList_PUCCH_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DeltaFList-PUCCH.h b/lte/rrc/asn/DeltaFList-PUCCH.h new file mode 100644 index 000000000..9990d2f12 --- /dev/null +++ b/lte/rrc/asn/DeltaFList-PUCCH.h @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DeltaFList_PUCCH_H_ +#define _DeltaFList_PUCCH_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DeltaFList_PUCCH__deltaF_PUCCH_Format1 { + DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF_2 = 0, + DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF0 = 1, + DeltaFList_PUCCH__deltaF_PUCCH_Format1_deltaF2 = 2 +} e_DeltaFList_PUCCH__deltaF_PUCCH_Format1; +typedef enum DeltaFList_PUCCH__deltaF_PUCCH_Format1b { + DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF1 = 0, + DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF3 = 1, + DeltaFList_PUCCH__deltaF_PUCCH_Format1b_deltaF5 = 2 +} e_DeltaFList_PUCCH__deltaF_PUCCH_Format1b; +typedef enum DeltaFList_PUCCH__deltaF_PUCCH_Format2 { + DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF_2 = 0, + DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF0 = 1, + DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF1 = 2, + DeltaFList_PUCCH__deltaF_PUCCH_Format2_deltaF2 = 3 +} e_DeltaFList_PUCCH__deltaF_PUCCH_Format2; +typedef enum DeltaFList_PUCCH__deltaF_PUCCH_Format2a { + DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF_2 = 0, + DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF0 = 1, + DeltaFList_PUCCH__deltaF_PUCCH_Format2a_deltaF2 = 2 +} e_DeltaFList_PUCCH__deltaF_PUCCH_Format2a; +typedef enum DeltaFList_PUCCH__deltaF_PUCCH_Format2b { + DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF_2 = 0, + DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF0 = 1, + DeltaFList_PUCCH__deltaF_PUCCH_Format2b_deltaF2 = 2 +} e_DeltaFList_PUCCH__deltaF_PUCCH_Format2b; + +/* DeltaFList-PUCCH */ +typedef struct DeltaFList_PUCCH { + long deltaF_PUCCH_Format1; + long deltaF_PUCCH_Format1b; + long deltaF_PUCCH_Format2; + long deltaF_PUCCH_Format2a; + long deltaF_PUCCH_Format2b; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DeltaFList_PUCCH_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format1_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format1b_6; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format2_10; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format2a_15; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format2b_19; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_DeltaFList_PUCCH; + +#ifdef __cplusplus +} +#endif + +#endif /* _DeltaFList_PUCCH_H_ */ +#include diff --git a/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c b/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c new file mode 100644 index 000000000..4548dafd4 --- /dev/null +++ b/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c @@ -0,0 +1,646 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "DeltaTxD-OffsetListPUCCH-r10.h" + +static int +deltaTxD_OffsetPUCCH_Format1_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaTxD_OffsetPUCCH_Format1_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaTxD_OffsetPUCCH_Format1_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format1_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format1_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format1_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format1_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format1_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format1_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaTxD_OffsetPUCCH_Format1_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format1a1b_r10_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format22a2b_r10_8_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaTxD_OffsetPUCCH_Format3_r10_11_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaTxD_OffsetPUCCH_Format3_r10_11_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaTxD_OffsetPUCCH_Format3_r10_11_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format3_r10_11_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format3_r10_11_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format3_r10_11_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format3_r10_11_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaTxD_OffsetPUCCH_Format3_r10_11_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaTxD_OffsetPUCCH_Format3_r10_11_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaTxD_OffsetPUCCH_Format3_r10_11_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_deltaTxD_OffsetPUCCH_Format1_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaTxD_OffsetPUCCH_Format1a1b_r10_constr_5 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaTxD_OffsetPUCCH_Format22a2b_r10_constr_8 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaTxD_OffsetPUCCH_Format3_r10_constr_11 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deltaTxD_OffsetPUCCH_Format1_r10_value2enum_2[] = { + { 0, 3, "dB0" }, + { 1, 4, "dB-2" } +}; +static unsigned int asn_MAP_deltaTxD_OffsetPUCCH_Format1_r10_enum2value_2[] = { + 1, /* dB-2(1) */ + 0 /* dB0(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaTxD_OffsetPUCCH_Format1_r10_specs_2 = { + asn_MAP_deltaTxD_OffsetPUCCH_Format1_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_deltaTxD_OffsetPUCCH_Format1_r10_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_2 = { + "deltaTxD-OffsetPUCCH-Format1-r10", + "deltaTxD-OffsetPUCCH-Format1-r10", + deltaTxD_OffsetPUCCH_Format1_r10_2_free, + deltaTxD_OffsetPUCCH_Format1_r10_2_print, + deltaTxD_OffsetPUCCH_Format1_r10_2_constraint, + deltaTxD_OffsetPUCCH_Format1_r10_2_decode_ber, + deltaTxD_OffsetPUCCH_Format1_r10_2_encode_der, + deltaTxD_OffsetPUCCH_Format1_r10_2_decode_xer, + deltaTxD_OffsetPUCCH_Format1_r10_2_encode_xer, + deltaTxD_OffsetPUCCH_Format1_r10_2_decode_uper, + deltaTxD_OffsetPUCCH_Format1_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2, + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_tags_2[0]), /* 2 */ + &asn_PER_type_deltaTxD_OffsetPUCCH_Format1_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaTxD_OffsetPUCCH_Format1_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaTxD_OffsetPUCCH_Format1a1b_r10_value2enum_5[] = { + { 0, 3, "dB0" }, + { 1, 4, "dB-2" } +}; +static unsigned int asn_MAP_deltaTxD_OffsetPUCCH_Format1a1b_r10_enum2value_5[] = { + 1, /* dB-2(1) */ + 0 /* dB0(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaTxD_OffsetPUCCH_Format1a1b_r10_specs_5 = { + asn_MAP_deltaTxD_OffsetPUCCH_Format1a1b_r10_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_deltaTxD_OffsetPUCCH_Format1a1b_r10_enum2value_5, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_5 = { + "deltaTxD-OffsetPUCCH-Format1a1b-r10", + "deltaTxD-OffsetPUCCH-Format1a1b-r10", + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_free, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_print, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_constraint, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_decode_ber, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_encode_der, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_decode_xer, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_encode_xer, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_decode_uper, + deltaTxD_OffsetPUCCH_Format1a1b_r10_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5, + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_tags_5[0]), /* 2 */ + &asn_PER_type_deltaTxD_OffsetPUCCH_Format1a1b_r10_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaTxD_OffsetPUCCH_Format1a1b_r10_specs_5 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaTxD_OffsetPUCCH_Format22a2b_r10_value2enum_8[] = { + { 0, 3, "dB0" }, + { 1, 4, "dB-2" } +}; +static unsigned int asn_MAP_deltaTxD_OffsetPUCCH_Format22a2b_r10_enum2value_8[] = { + 1, /* dB-2(1) */ + 0 /* dB0(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaTxD_OffsetPUCCH_Format22a2b_r10_specs_8 = { + asn_MAP_deltaTxD_OffsetPUCCH_Format22a2b_r10_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_deltaTxD_OffsetPUCCH_Format22a2b_r10_enum2value_8, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_8 = { + "deltaTxD-OffsetPUCCH-Format22a2b-r10", + "deltaTxD-OffsetPUCCH-Format22a2b-r10", + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_free, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_print, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_constraint, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_decode_ber, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_encode_der, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_decode_xer, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_encode_xer, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_decode_uper, + deltaTxD_OffsetPUCCH_Format22a2b_r10_8_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8, + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8[0]) - 1, /* 1 */ + asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8, /* Same as above */ + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_tags_8[0]), /* 2 */ + &asn_PER_type_deltaTxD_OffsetPUCCH_Format22a2b_r10_constr_8, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaTxD_OffsetPUCCH_Format22a2b_r10_specs_8 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaTxD_OffsetPUCCH_Format3_r10_value2enum_11[] = { + { 0, 3, "dB0" }, + { 1, 4, "dB-2" } +}; +static unsigned int asn_MAP_deltaTxD_OffsetPUCCH_Format3_r10_enum2value_11[] = { + 1, /* dB-2(1) */ + 0 /* dB0(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaTxD_OffsetPUCCH_Format3_r10_specs_11 = { + asn_MAP_deltaTxD_OffsetPUCCH_Format3_r10_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_deltaTxD_OffsetPUCCH_Format3_r10_enum2value_11, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_11 = { + "deltaTxD-OffsetPUCCH-Format3-r10", + "deltaTxD-OffsetPUCCH-Format3-r10", + deltaTxD_OffsetPUCCH_Format3_r10_11_free, + deltaTxD_OffsetPUCCH_Format3_r10_11_print, + deltaTxD_OffsetPUCCH_Format3_r10_11_constraint, + deltaTxD_OffsetPUCCH_Format3_r10_11_decode_ber, + deltaTxD_OffsetPUCCH_Format3_r10_11_encode_der, + deltaTxD_OffsetPUCCH_Format3_r10_11_decode_xer, + deltaTxD_OffsetPUCCH_Format3_r10_11_encode_xer, + deltaTxD_OffsetPUCCH_Format3_r10_11_decode_uper, + deltaTxD_OffsetPUCCH_Format3_r10_11_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11, + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11[0]) - 1, /* 1 */ + asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11, /* Same as above */ + sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11) + /sizeof(asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_tags_11[0]), /* 2 */ + &asn_PER_type_deltaTxD_OffsetPUCCH_Format3_r10_constr_11, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaTxD_OffsetPUCCH_Format3_r10_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_DeltaTxD_OffsetListPUCCH_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct DeltaTxD_OffsetListPUCCH_r10, deltaTxD_OffsetPUCCH_Format1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaTxD-OffsetPUCCH-Format1-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaTxD_OffsetListPUCCH_r10, deltaTxD_OffsetPUCCH_Format1a1b_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaTxD-OffsetPUCCH-Format1a1b-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaTxD_OffsetListPUCCH_r10, deltaTxD_OffsetPUCCH_Format22a2b_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaTxD-OffsetPUCCH-Format22a2b-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct DeltaTxD_OffsetListPUCCH_r10, deltaTxD_OffsetPUCCH_Format3_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaTxD-OffsetPUCCH-Format3-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_DeltaTxD_OffsetListPUCCH_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* deltaTxD-OffsetPUCCH-Format1-r10 at 2851 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* deltaTxD-OffsetPUCCH-Format1a1b-r10 at 2852 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* deltaTxD-OffsetPUCCH-Format22a2b-r10 at 2853 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* deltaTxD-OffsetPUCCH-Format3-r10 at 2854 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_DeltaTxD_OffsetListPUCCH_r10_specs_1 = { + sizeof(struct DeltaTxD_OffsetListPUCCH_r10), + offsetof(struct DeltaTxD_OffsetListPUCCH_r10, _asn_ctx), + asn_MAP_DeltaTxD_OffsetListPUCCH_r10_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_DeltaTxD_OffsetListPUCCH_r10 = { + "DeltaTxD-OffsetListPUCCH-r10", + "DeltaTxD-OffsetListPUCCH-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1, + sizeof(asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1) + /sizeof(asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1[0]), /* 1 */ + asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1) + /sizeof(asn_DEF_DeltaTxD_OffsetListPUCCH_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_DeltaTxD_OffsetListPUCCH_r10_1, + 4, /* Elements count */ + &asn_SPC_DeltaTxD_OffsetListPUCCH_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h b/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h new file mode 100644 index 000000000..ad1ef5782 --- /dev/null +++ b/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _DeltaTxD_OffsetListPUCCH_r10_H_ +#define _DeltaTxD_OffsetListPUCCH_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1_r10 { + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1_r10_dB0 = 0, + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1_r10_dB_2 = 1 +} e_DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1_r10; +typedef enum DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1a1b_r10 { + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1a1b_r10_dB0 = 0, + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1a1b_r10_dB_2 = 1 +} e_DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format1a1b_r10; +typedef enum DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format22a2b_r10 { + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format22a2b_r10_dB0 = 0, + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format22a2b_r10_dB_2 = 1 +} e_DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format22a2b_r10; +typedef enum DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format3_r10 { + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format3_r10_dB0 = 0, + DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format3_r10_dB_2 = 1 +} e_DeltaTxD_OffsetListPUCCH_r10__deltaTxD_OffsetPUCCH_Format3_r10; + +/* DeltaTxD-OffsetListPUCCH-r10 */ +typedef struct DeltaTxD_OffsetListPUCCH_r10 { + long deltaTxD_OffsetPUCCH_Format1_r10; + long deltaTxD_OffsetPUCCH_Format1a1b_r10; + long deltaTxD_OffsetPUCCH_Format22a2b_r10; + long deltaTxD_OffsetPUCCH_Format3_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} DeltaTxD_OffsetListPUCCH_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format1_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format1a1b_r10_5; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format22a2b_r10_8; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaTxD_OffsetPUCCH_Format3_r10_11; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_DeltaTxD_OffsetListPUCCH_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _DeltaTxD_OffsetListPUCCH_r10_H_ */ +#include diff --git a/lte/rrc/asn/E-CSFB-r9.c b/lte/rrc/asn/E-CSFB-r9.c new file mode 100644 index 000000000..93ea176ff --- /dev/null +++ b/lte/rrc/asn/E-CSFB-r9.c @@ -0,0 +1,231 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "E-CSFB-r9.h" + +static int +mobilityCDMA2000_HRPD_r9_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +mobilityCDMA2000_HRPD_r9_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +mobilityCDMA2000_HRPD_r9_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +mobilityCDMA2000_HRPD_r9_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +mobilityCDMA2000_HRPD_r9_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +mobilityCDMA2000_HRPD_r9_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +mobilityCDMA2000_HRPD_r9_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +mobilityCDMA2000_HRPD_r9_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +mobilityCDMA2000_HRPD_r9_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + mobilityCDMA2000_HRPD_r9_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_mobilityCDMA2000_HRPD_r9_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_mobilityCDMA2000_HRPD_r9_value2enum_3[] = { + { 0, 8, "handover" }, + { 1, 11, "redirection" } +}; +static unsigned int asn_MAP_mobilityCDMA2000_HRPD_r9_enum2value_3[] = { + 0, /* handover(0) */ + 1 /* redirection(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_mobilityCDMA2000_HRPD_r9_specs_3 = { + asn_MAP_mobilityCDMA2000_HRPD_r9_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_mobilityCDMA2000_HRPD_r9_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mobilityCDMA2000_HRPD_r9_3 = { + "mobilityCDMA2000-HRPD-r9", + "mobilityCDMA2000-HRPD-r9", + mobilityCDMA2000_HRPD_r9_3_free, + mobilityCDMA2000_HRPD_r9_3_print, + mobilityCDMA2000_HRPD_r9_3_constraint, + mobilityCDMA2000_HRPD_r9_3_decode_ber, + mobilityCDMA2000_HRPD_r9_3_encode_der, + mobilityCDMA2000_HRPD_r9_3_decode_xer, + mobilityCDMA2000_HRPD_r9_3_encode_xer, + mobilityCDMA2000_HRPD_r9_3_decode_uper, + mobilityCDMA2000_HRPD_r9_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3, + sizeof(asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3) + /sizeof(asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3[0]) - 1, /* 1 */ + asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3, /* Same as above */ + sizeof(asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3) + /sizeof(asn_DEF_mobilityCDMA2000_HRPD_r9_tags_3[0]), /* 2 */ + &asn_PER_type_mobilityCDMA2000_HRPD_r9_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_mobilityCDMA2000_HRPD_r9_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_E_CSFB_r9_1[] = { + { ATF_POINTER, 4, offsetof(struct E_CSFB_r9, messageContCDMA2000_1XRTT_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageContCDMA2000-1XRTT-r9" + }, + { ATF_POINTER, 3, offsetof(struct E_CSFB_r9, mobilityCDMA2000_HRPD_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_mobilityCDMA2000_HRPD_r9_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityCDMA2000-HRPD-r9" + }, + { ATF_POINTER, 2, offsetof(struct E_CSFB_r9, messageContCDMA2000_HRPD_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageContCDMA2000-HRPD-r9" + }, + { ATF_POINTER, 1, offsetof(struct E_CSFB_r9, redirectCarrierCDMA2000_HRPD_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "redirectCarrierCDMA2000-HRPD-r9" + }, +}; +static int asn_MAP_E_CSFB_r9_oms_1[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_E_CSFB_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_E_CSFB_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* messageContCDMA2000-1XRTT-r9 at 515 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mobilityCDMA2000-HRPD-r9 at 517 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* messageContCDMA2000-HRPD-r9 at 519 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* redirectCarrierCDMA2000-HRPD-r9 at 520 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_E_CSFB_r9_specs_1 = { + sizeof(struct E_CSFB_r9), + offsetof(struct E_CSFB_r9, _asn_ctx), + asn_MAP_E_CSFB_r9_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_E_CSFB_r9_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_E_CSFB_r9 = { + "E-CSFB-r9", + "E-CSFB-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_E_CSFB_r9_tags_1, + sizeof(asn_DEF_E_CSFB_r9_tags_1) + /sizeof(asn_DEF_E_CSFB_r9_tags_1[0]), /* 1 */ + asn_DEF_E_CSFB_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_E_CSFB_r9_tags_1) + /sizeof(asn_DEF_E_CSFB_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_E_CSFB_r9_1, + 4, /* Elements count */ + &asn_SPC_E_CSFB_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/E-CSFB-r9.h b/lte/rrc/asn/E-CSFB-r9.h new file mode 100644 index 000000000..352b1fa55 --- /dev/null +++ b/lte/rrc/asn/E-CSFB-r9.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _E_CSFB_r9_H_ +#define _E_CSFB_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum E_CSFB_r9__mobilityCDMA2000_HRPD_r9 { + E_CSFB_r9__mobilityCDMA2000_HRPD_r9_handover = 0, + E_CSFB_r9__mobilityCDMA2000_HRPD_r9_redirection = 1 +} e_E_CSFB_r9__mobilityCDMA2000_HRPD_r9; + +/* Forward declarations */ +struct CarrierFreqCDMA2000; + +/* E-CSFB-r9 */ +typedef struct E_CSFB_r9 { + OCTET_STRING_t *messageContCDMA2000_1XRTT_r9 /* OPTIONAL */; + long *mobilityCDMA2000_HRPD_r9 /* OPTIONAL */; + OCTET_STRING_t *messageContCDMA2000_HRPD_r9 /* OPTIONAL */; + struct CarrierFreqCDMA2000 *redirectCarrierCDMA2000_HRPD_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} E_CSFB_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_mobilityCDMA2000_HRPD_r9_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_E_CSFB_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqCDMA2000.h" + +#endif /* _E_CSFB_r9_H_ */ +#include diff --git a/lte/rrc/asn/EstablishmentCause.c b/lte/rrc/asn/EstablishmentCause.c index de6554146..ced44d5ef 100644 --- a/lte/rrc/asn/EstablishmentCause.c +++ b/lte/rrc/asn/EstablishmentCause.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "EstablishmentCause.h" @@ -22,7 +23,6 @@ static void EstablishmentCause_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -95,32 +95,32 @@ EstablishmentCause_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_EstablishmentCause_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_EstablishmentCause_constr_1 = { { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_EstablishmentCause_value2enum_1[] = { +static asn_INTEGER_enum_map_t asn_MAP_EstablishmentCause_value2enum_1[] = { { 0, 9, "emergency" }, { 1, 18, "highPriorityAccess" }, { 2, 9, "mt-Access" }, { 3, 13, "mo-Signalling" }, { 4, 7, "mo-Data" }, - { 5, 6, "spare3" }, + { 5, 25, "delayTolerantAccess-v1020" }, { 6, 6, "spare2" }, { 7, 6, "spare1" } }; -static const unsigned int asn_MAP_EstablishmentCause_enum2value_1[] = { +static unsigned int asn_MAP_EstablishmentCause_enum2value_1[] = { + 5, /* delayTolerantAccess-v1020(5) */ 0, /* emergency(0) */ 1, /* highPriorityAccess(1) */ 4, /* mo-Data(4) */ 3, /* mo-Signalling(3) */ 2, /* mt-Access(2) */ 7, /* spare1(7) */ - 6, /* spare2(6) */ - 5 /* spare3(5) */ + 6 /* spare2(6) */ }; -static const asn_INTEGER_specifics_t asn_SPC_EstablishmentCause_specs_1 = { +static asn_INTEGER_specifics_t asn_SPC_EstablishmentCause_specs_1 = { asn_MAP_EstablishmentCause_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_EstablishmentCause_enum2value_1, /* N => "tag"; sorted by N */ 8, /* Number of elements in the maps */ @@ -129,7 +129,7 @@ static const asn_INTEGER_specifics_t asn_SPC_EstablishmentCause_specs_1 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_EstablishmentCause_tags_1[] = { +static ber_tlv_tag_t asn_DEF_EstablishmentCause_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_EstablishmentCause = { diff --git a/lte/rrc/asn/EstablishmentCause.h b/lte/rrc/asn/EstablishmentCause.h index aef49d0c4..cafddafa8 100644 --- a/lte/rrc/asn/EstablishmentCause.h +++ b/lte/rrc/asn/EstablishmentCause.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _EstablishmentCause_H_ @@ -24,7 +25,7 @@ typedef enum EstablishmentCause { EstablishmentCause_mt_Access = 2, EstablishmentCause_mo_Signalling = 3, EstablishmentCause_mo_Data = 4, - EstablishmentCause_spare3 = 5, + EstablishmentCause_delayTolerantAccess_v1020 = 5, EstablishmentCause_spare2 = 6, EstablishmentCause_spare1 = 7 } e_EstablishmentCause; diff --git a/lte/rrc/asn/ExplicitListOfARFCNs.c b/lte/rrc/asn/ExplicitListOfARFCNs.c new file mode 100644 index 000000000..6e0f61994 --- /dev/null +++ b/lte/rrc/asn/ExplicitListOfARFCNs.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ExplicitListOfARFCNs.h" + +static asn_per_constraints_t asn_PER_type_ExplicitListOfARFCNs_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (SIZE(0..31)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ExplicitListOfARFCNs_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ARFCN_ValueGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_ExplicitListOfARFCNs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ExplicitListOfARFCNs_specs_1 = { + sizeof(struct ExplicitListOfARFCNs), + offsetof(struct ExplicitListOfARFCNs, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ExplicitListOfARFCNs = { + "ExplicitListOfARFCNs", + "ExplicitListOfARFCNs", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ExplicitListOfARFCNs_tags_1, + sizeof(asn_DEF_ExplicitListOfARFCNs_tags_1) + /sizeof(asn_DEF_ExplicitListOfARFCNs_tags_1[0]), /* 1 */ + asn_DEF_ExplicitListOfARFCNs_tags_1, /* Same as above */ + sizeof(asn_DEF_ExplicitListOfARFCNs_tags_1) + /sizeof(asn_DEF_ExplicitListOfARFCNs_tags_1[0]), /* 1 */ + &asn_PER_type_ExplicitListOfARFCNs_constr_1, + asn_MBR_ExplicitListOfARFCNs_1, + 1, /* Single element */ + &asn_SPC_ExplicitListOfARFCNs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ExplicitListOfARFCNs.h b/lte/rrc/asn/ExplicitListOfARFCNs.h new file mode 100644 index 000000000..2d9172db7 --- /dev/null +++ b/lte/rrc/asn/ExplicitListOfARFCNs.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ExplicitListOfARFCNs_H_ +#define _ExplicitListOfARFCNs_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueGERAN.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ExplicitListOfARFCNs */ +typedef struct ExplicitListOfARFCNs { + A_SEQUENCE_OF(ARFCN_ValueGERAN_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ExplicitListOfARFCNs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ExplicitListOfARFCNs; + +#ifdef __cplusplus +} +#endif + +#endif /* _ExplicitListOfARFCNs_H_ */ +#include diff --git a/lte/rrc/asn/FilterCoefficient.c b/lte/rrc/asn/FilterCoefficient.c new file mode 100644 index 000000000..321d39545 --- /dev/null +++ b/lte/rrc/asn/FilterCoefficient.c @@ -0,0 +1,176 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FilterCoefficient.h" + +int +FilterCoefficient_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +FilterCoefficient_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +FilterCoefficient_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +FilterCoefficient_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +FilterCoefficient_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +FilterCoefficient_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +FilterCoefficient_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +FilterCoefficient_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +FilterCoefficient_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +FilterCoefficient_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + FilterCoefficient_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_FilterCoefficient_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_FilterCoefficient_value2enum_1[] = { + { 0, 3, "fc0" }, + { 1, 3, "fc1" }, + { 2, 3, "fc2" }, + { 3, 3, "fc3" }, + { 4, 3, "fc4" }, + { 5, 3, "fc5" }, + { 6, 3, "fc6" }, + { 7, 3, "fc7" }, + { 8, 3, "fc8" }, + { 9, 3, "fc9" }, + { 10, 4, "fc11" }, + { 11, 4, "fc13" }, + { 12, 4, "fc15" }, + { 13, 4, "fc17" }, + { 14, 4, "fc19" }, + { 15, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_FilterCoefficient_enum2value_1[] = { + 0, /* fc0(0) */ + 1, /* fc1(1) */ + 10, /* fc11(10) */ + 11, /* fc13(11) */ + 12, /* fc15(12) */ + 13, /* fc17(13) */ + 14, /* fc19(14) */ + 2, /* fc2(2) */ + 3, /* fc3(3) */ + 4, /* fc4(4) */ + 5, /* fc5(5) */ + 6, /* fc6(6) */ + 7, /* fc7(7) */ + 8, /* fc8(8) */ + 9, /* fc9(9) */ + 15 /* spare1(15) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_FilterCoefficient_specs_1 = { + asn_MAP_FilterCoefficient_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_FilterCoefficient_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_FilterCoefficient_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_FilterCoefficient = { + "FilterCoefficient", + "FilterCoefficient", + FilterCoefficient_free, + FilterCoefficient_print, + FilterCoefficient_constraint, + FilterCoefficient_decode_ber, + FilterCoefficient_encode_der, + FilterCoefficient_decode_xer, + FilterCoefficient_encode_xer, + FilterCoefficient_decode_uper, + FilterCoefficient_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FilterCoefficient_tags_1, + sizeof(asn_DEF_FilterCoefficient_tags_1) + /sizeof(asn_DEF_FilterCoefficient_tags_1[0]), /* 1 */ + asn_DEF_FilterCoefficient_tags_1, /* Same as above */ + sizeof(asn_DEF_FilterCoefficient_tags_1) + /sizeof(asn_DEF_FilterCoefficient_tags_1[0]), /* 1 */ + &asn_PER_type_FilterCoefficient_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_FilterCoefficient_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FilterCoefficient.h b/lte/rrc/asn/FilterCoefficient.h new file mode 100644 index 000000000..47c6de028 --- /dev/null +++ b/lte/rrc/asn/FilterCoefficient.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FilterCoefficient_H_ +#define _FilterCoefficient_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum FilterCoefficient { + FilterCoefficient_fc0 = 0, + FilterCoefficient_fc1 = 1, + FilterCoefficient_fc2 = 2, + FilterCoefficient_fc3 = 3, + FilterCoefficient_fc4 = 4, + FilterCoefficient_fc5 = 5, + FilterCoefficient_fc6 = 6, + FilterCoefficient_fc7 = 7, + FilterCoefficient_fc8 = 8, + FilterCoefficient_fc9 = 9, + FilterCoefficient_fc11 = 10, + FilterCoefficient_fc13 = 11, + FilterCoefficient_fc15 = 12, + FilterCoefficient_fc17 = 13, + FilterCoefficient_fc19 = 14, + FilterCoefficient_spare1 = 15 + /* + * Enumeration is extensible + */ +} e_FilterCoefficient; + +/* FilterCoefficient */ +typedef long FilterCoefficient_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FilterCoefficient; +asn_struct_free_f FilterCoefficient_free; +asn_struct_print_f FilterCoefficient_print; +asn_constr_check_f FilterCoefficient_constraint; +ber_type_decoder_f FilterCoefficient_decode_ber; +der_type_encoder_f FilterCoefficient_encode_der; +xer_type_decoder_f FilterCoefficient_decode_xer; +xer_type_encoder_f FilterCoefficient_encode_xer; +per_type_decoder_f FilterCoefficient_decode_uper; +per_type_encoder_f FilterCoefficient_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _FilterCoefficient_H_ */ +#include diff --git a/lte/rrc/asn/FreqPriorityEUTRA.c b/lte/rrc/asn/FreqPriorityEUTRA.c new file mode 100644 index 000000000..7984ce284 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityEUTRA.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqPriorityEUTRA.h" + +static asn_TYPE_member_t asn_MBR_FreqPriorityEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqPriorityEUTRA, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct FreqPriorityEUTRA, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqPriorityEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_FreqPriorityEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 919 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionPriority at 921 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_FreqPriorityEUTRA_specs_1 = { + sizeof(struct FreqPriorityEUTRA), + offsetof(struct FreqPriorityEUTRA, _asn_ctx), + asn_MAP_FreqPriorityEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqPriorityEUTRA = { + "FreqPriorityEUTRA", + "FreqPriorityEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqPriorityEUTRA_tags_1, + sizeof(asn_DEF_FreqPriorityEUTRA_tags_1) + /sizeof(asn_DEF_FreqPriorityEUTRA_tags_1[0]), /* 1 */ + asn_DEF_FreqPriorityEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqPriorityEUTRA_tags_1) + /sizeof(asn_DEF_FreqPriorityEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_FreqPriorityEUTRA_1, + 2, /* Elements count */ + &asn_SPC_FreqPriorityEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqPriorityEUTRA.h b/lte/rrc/asn/FreqPriorityEUTRA.h new file mode 100644 index 000000000..73dcf421d --- /dev/null +++ b/lte/rrc/asn/FreqPriorityEUTRA.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqPriorityEUTRA_H_ +#define _FreqPriorityEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include "CellReselectionPriority.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FreqPriorityEUTRA */ +typedef struct FreqPriorityEUTRA { + ARFCN_ValueEUTRA_t carrierFreq; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqPriorityEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqPriorityEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqPriorityEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/FreqPriorityListEUTRA.c b/lte/rrc/asn/FreqPriorityListEUTRA.c new file mode 100644 index 000000000..a6655a239 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityListEUTRA.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqPriorityListEUTRA.h" + +static asn_per_constraints_t asn_PER_type_FreqPriorityListEUTRA_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_FreqPriorityListEUTRA_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FreqPriorityEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqPriorityListEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_FreqPriorityListEUTRA_specs_1 = { + sizeof(struct FreqPriorityListEUTRA), + offsetof(struct FreqPriorityListEUTRA, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqPriorityListEUTRA = { + "FreqPriorityListEUTRA", + "FreqPriorityListEUTRA", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqPriorityListEUTRA_tags_1, + sizeof(asn_DEF_FreqPriorityListEUTRA_tags_1) + /sizeof(asn_DEF_FreqPriorityListEUTRA_tags_1[0]), /* 1 */ + asn_DEF_FreqPriorityListEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqPriorityListEUTRA_tags_1) + /sizeof(asn_DEF_FreqPriorityListEUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_FreqPriorityListEUTRA_constr_1, + asn_MBR_FreqPriorityListEUTRA_1, + 1, /* Single element */ + &asn_SPC_FreqPriorityListEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqPriorityListEUTRA.h b/lte/rrc/asn/FreqPriorityListEUTRA.h new file mode 100644 index 000000000..2d0547e22 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityListEUTRA.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqPriorityListEUTRA_H_ +#define _FreqPriorityListEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FreqPriorityEUTRA; + +/* FreqPriorityListEUTRA */ +typedef struct FreqPriorityListEUTRA { + A_SEQUENCE_OF(struct FreqPriorityEUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqPriorityListEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqPriorityListEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FreqPriorityEUTRA.h" + +#endif /* _FreqPriorityListEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/FreqPriorityListUTRA-FDD.c b/lte/rrc/asn/FreqPriorityListUTRA-FDD.c new file mode 100644 index 000000000..80cbf2b18 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityListUTRA-FDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqPriorityListUTRA-FDD.h" + +static asn_per_constraints_t asn_PER_type_FreqPriorityListUTRA_FDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_FreqPriorityListUTRA_FDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FreqPriorityUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqPriorityListUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_FreqPriorityListUTRA_FDD_specs_1 = { + sizeof(struct FreqPriorityListUTRA_FDD), + offsetof(struct FreqPriorityListUTRA_FDD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqPriorityListUTRA_FDD = { + "FreqPriorityListUTRA-FDD", + "FreqPriorityListUTRA-FDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqPriorityListUTRA_FDD_tags_1, + sizeof(asn_DEF_FreqPriorityListUTRA_FDD_tags_1) + /sizeof(asn_DEF_FreqPriorityListUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_FreqPriorityListUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqPriorityListUTRA_FDD_tags_1) + /sizeof(asn_DEF_FreqPriorityListUTRA_FDD_tags_1[0]), /* 1 */ + &asn_PER_type_FreqPriorityListUTRA_FDD_constr_1, + asn_MBR_FreqPriorityListUTRA_FDD_1, + 1, /* Single element */ + &asn_SPC_FreqPriorityListUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqPriorityListUTRA-FDD.h b/lte/rrc/asn/FreqPriorityListUTRA-FDD.h new file mode 100644 index 000000000..cbd370406 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityListUTRA-FDD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqPriorityListUTRA_FDD_H_ +#define _FreqPriorityListUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FreqPriorityUTRA_FDD; + +/* FreqPriorityListUTRA-FDD */ +typedef struct FreqPriorityListUTRA_FDD { + A_SEQUENCE_OF(struct FreqPriorityUTRA_FDD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqPriorityListUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqPriorityListUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FreqPriorityUTRA-FDD.h" + +#endif /* _FreqPriorityListUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/FreqPriorityListUTRA-TDD.c b/lte/rrc/asn/FreqPriorityListUTRA-TDD.c new file mode 100644 index 000000000..c2ce6515f --- /dev/null +++ b/lte/rrc/asn/FreqPriorityListUTRA-TDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqPriorityListUTRA-TDD.h" + +static asn_per_constraints_t asn_PER_type_FreqPriorityListUTRA_TDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_FreqPriorityListUTRA_TDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FreqPriorityUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqPriorityListUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_FreqPriorityListUTRA_TDD_specs_1 = { + sizeof(struct FreqPriorityListUTRA_TDD), + offsetof(struct FreqPriorityListUTRA_TDD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqPriorityListUTRA_TDD = { + "FreqPriorityListUTRA-TDD", + "FreqPriorityListUTRA-TDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqPriorityListUTRA_TDD_tags_1, + sizeof(asn_DEF_FreqPriorityListUTRA_TDD_tags_1) + /sizeof(asn_DEF_FreqPriorityListUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_FreqPriorityListUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqPriorityListUTRA_TDD_tags_1) + /sizeof(asn_DEF_FreqPriorityListUTRA_TDD_tags_1[0]), /* 1 */ + &asn_PER_type_FreqPriorityListUTRA_TDD_constr_1, + asn_MBR_FreqPriorityListUTRA_TDD_1, + 1, /* Single element */ + &asn_SPC_FreqPriorityListUTRA_TDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqPriorityListUTRA-TDD.h b/lte/rrc/asn/FreqPriorityListUTRA-TDD.h new file mode 100644 index 000000000..0627b221b --- /dev/null +++ b/lte/rrc/asn/FreqPriorityListUTRA-TDD.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqPriorityListUTRA_TDD_H_ +#define _FreqPriorityListUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FreqPriorityUTRA_TDD; + +/* FreqPriorityListUTRA-TDD */ +typedef struct FreqPriorityListUTRA_TDD { + A_SEQUENCE_OF(struct FreqPriorityUTRA_TDD) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqPriorityListUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqPriorityListUTRA_TDD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FreqPriorityUTRA-TDD.h" + +#endif /* _FreqPriorityListUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/FreqPriorityUTRA-FDD.c b/lte/rrc/asn/FreqPriorityUTRA-FDD.c new file mode 100644 index 000000000..46e2146c9 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityUTRA-FDD.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqPriorityUTRA-FDD.h" + +static asn_TYPE_member_t asn_MBR_FreqPriorityUTRA_FDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqPriorityUTRA_FDD, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct FreqPriorityUTRA_FDD, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqPriorityUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_FreqPriorityUTRA_FDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 933 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionPriority at 935 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_FreqPriorityUTRA_FDD_specs_1 = { + sizeof(struct FreqPriorityUTRA_FDD), + offsetof(struct FreqPriorityUTRA_FDD, _asn_ctx), + asn_MAP_FreqPriorityUTRA_FDD_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqPriorityUTRA_FDD = { + "FreqPriorityUTRA-FDD", + "FreqPriorityUTRA-FDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqPriorityUTRA_FDD_tags_1, + sizeof(asn_DEF_FreqPriorityUTRA_FDD_tags_1) + /sizeof(asn_DEF_FreqPriorityUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_FreqPriorityUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqPriorityUTRA_FDD_tags_1) + /sizeof(asn_DEF_FreqPriorityUTRA_FDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_FreqPriorityUTRA_FDD_1, + 2, /* Elements count */ + &asn_SPC_FreqPriorityUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqPriorityUTRA-FDD.h b/lte/rrc/asn/FreqPriorityUTRA-FDD.h new file mode 100644 index 000000000..2bc67cd88 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityUTRA-FDD.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqPriorityUTRA_FDD_H_ +#define _FreqPriorityUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include "CellReselectionPriority.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FreqPriorityUTRA-FDD */ +typedef struct FreqPriorityUTRA_FDD { + ARFCN_ValueUTRA_t carrierFreq; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqPriorityUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqPriorityUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqPriorityUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/FreqPriorityUTRA-TDD.c b/lte/rrc/asn/FreqPriorityUTRA-TDD.c new file mode 100644 index 000000000..63fb68ebb --- /dev/null +++ b/lte/rrc/asn/FreqPriorityUTRA-TDD.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqPriorityUTRA-TDD.h" + +static asn_TYPE_member_t asn_MBR_FreqPriorityUTRA_TDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqPriorityUTRA_TDD, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct FreqPriorityUTRA_TDD, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqPriorityUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_FreqPriorityUTRA_TDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 940 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionPriority at 942 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_FreqPriorityUTRA_TDD_specs_1 = { + sizeof(struct FreqPriorityUTRA_TDD), + offsetof(struct FreqPriorityUTRA_TDD, _asn_ctx), + asn_MAP_FreqPriorityUTRA_TDD_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqPriorityUTRA_TDD = { + "FreqPriorityUTRA-TDD", + "FreqPriorityUTRA-TDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqPriorityUTRA_TDD_tags_1, + sizeof(asn_DEF_FreqPriorityUTRA_TDD_tags_1) + /sizeof(asn_DEF_FreqPriorityUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_FreqPriorityUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqPriorityUTRA_TDD_tags_1) + /sizeof(asn_DEF_FreqPriorityUTRA_TDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_FreqPriorityUTRA_TDD_1, + 2, /* Elements count */ + &asn_SPC_FreqPriorityUTRA_TDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqPriorityUTRA-TDD.h b/lte/rrc/asn/FreqPriorityUTRA-TDD.h new file mode 100644 index 000000000..d78670191 --- /dev/null +++ b/lte/rrc/asn/FreqPriorityUTRA-TDD.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqPriorityUTRA_TDD_H_ +#define _FreqPriorityUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include "CellReselectionPriority.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FreqPriorityUTRA-TDD */ +typedef struct FreqPriorityUTRA_TDD { + ARFCN_ValueUTRA_t carrierFreq; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqPriorityUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqPriorityUTRA_TDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqPriorityUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/FreqsPriorityGERAN.c b/lte/rrc/asn/FreqsPriorityGERAN.c new file mode 100644 index 000000000..65c07b247 --- /dev/null +++ b/lte/rrc/asn/FreqsPriorityGERAN.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqsPriorityGERAN.h" + +static asn_TYPE_member_t asn_MBR_FreqsPriorityGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct FreqsPriorityGERAN, carrierFreqs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqsGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreqs" + }, + { ATF_NOFLAGS, 0, offsetof(struct FreqsPriorityGERAN, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqsPriorityGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_FreqsPriorityGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreqs at 926 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionPriority at 928 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_FreqsPriorityGERAN_specs_1 = { + sizeof(struct FreqsPriorityGERAN), + offsetof(struct FreqsPriorityGERAN, _asn_ctx), + asn_MAP_FreqsPriorityGERAN_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqsPriorityGERAN = { + "FreqsPriorityGERAN", + "FreqsPriorityGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqsPriorityGERAN_tags_1, + sizeof(asn_DEF_FreqsPriorityGERAN_tags_1) + /sizeof(asn_DEF_FreqsPriorityGERAN_tags_1[0]), /* 1 */ + asn_DEF_FreqsPriorityGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqsPriorityGERAN_tags_1) + /sizeof(asn_DEF_FreqsPriorityGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_FreqsPriorityGERAN_1, + 2, /* Elements count */ + &asn_SPC_FreqsPriorityGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqsPriorityGERAN.h b/lte/rrc/asn/FreqsPriorityGERAN.h new file mode 100644 index 000000000..5d9d8f23a --- /dev/null +++ b/lte/rrc/asn/FreqsPriorityGERAN.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqsPriorityGERAN_H_ +#define _FreqsPriorityGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "CarrierFreqsGERAN.h" +#include "CellReselectionPriority.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* FreqsPriorityGERAN */ +typedef struct FreqsPriorityGERAN { + CarrierFreqsGERAN_t carrierFreqs; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqsPriorityGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqsPriorityGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _FreqsPriorityGERAN_H_ */ +#include diff --git a/lte/rrc/asn/FreqsPriorityListGERAN.c b/lte/rrc/asn/FreqsPriorityListGERAN.c new file mode 100644 index 000000000..ccbe386c0 --- /dev/null +++ b/lte/rrc/asn/FreqsPriorityListGERAN.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "FreqsPriorityListGERAN.h" + +static asn_per_constraints_t asn_PER_type_FreqsPriorityListGERAN_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_FreqsPriorityListGERAN_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_FreqsPriorityGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_FreqsPriorityListGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_FreqsPriorityListGERAN_specs_1 = { + sizeof(struct FreqsPriorityListGERAN), + offsetof(struct FreqsPriorityListGERAN, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_FreqsPriorityListGERAN = { + "FreqsPriorityListGERAN", + "FreqsPriorityListGERAN", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_FreqsPriorityListGERAN_tags_1, + sizeof(asn_DEF_FreqsPriorityListGERAN_tags_1) + /sizeof(asn_DEF_FreqsPriorityListGERAN_tags_1[0]), /* 1 */ + asn_DEF_FreqsPriorityListGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_FreqsPriorityListGERAN_tags_1) + /sizeof(asn_DEF_FreqsPriorityListGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_FreqsPriorityListGERAN_constr_1, + asn_MBR_FreqsPriorityListGERAN_1, + 1, /* Single element */ + &asn_SPC_FreqsPriorityListGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/FreqsPriorityListGERAN.h b/lte/rrc/asn/FreqsPriorityListGERAN.h new file mode 100644 index 000000000..5690401c8 --- /dev/null +++ b/lte/rrc/asn/FreqsPriorityListGERAN.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _FreqsPriorityListGERAN_H_ +#define _FreqsPriorityListGERAN_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct FreqsPriorityGERAN; + +/* FreqsPriorityListGERAN */ +typedef struct FreqsPriorityListGERAN { + A_SEQUENCE_OF(struct FreqsPriorityGERAN) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} FreqsPriorityListGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_FreqsPriorityListGERAN; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FreqsPriorityGERAN.h" + +#endif /* _FreqsPriorityListGERAN_H_ */ +#include diff --git a/lte/rrc/asn/Handover.c b/lte/rrc/asn/Handover.c new file mode 100644 index 000000000..02b0e607d --- /dev/null +++ b/lte/rrc/asn/Handover.c @@ -0,0 +1,276 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Handover.h" + +static int +targetRAT_Type_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +targetRAT_Type_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +targetRAT_Type_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +targetRAT_Type_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +targetRAT_Type_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +targetRAT_Type_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +targetRAT_Type_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +targetRAT_Type_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +targetRAT_Type_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +targetRAT_Type_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + targetRAT_Type_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_nas_SecurityParamFromEUTRA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_targetRAT_Type_constr_2 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nas_SecurityParamFromEUTRA_constr_13 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_targetRAT_Type_value2enum_2[] = { + { 0, 4, "utra" }, + { 1, 5, "geran" }, + { 2, 14, "cdma2000-1XRTT" }, + { 3, 13, "cdma2000-HRPD" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_targetRAT_Type_enum2value_2[] = { + 2, /* cdma2000-1XRTT(2) */ + 3, /* cdma2000-HRPD(3) */ + 1, /* geran(1) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 0 /* utra(0) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_targetRAT_Type_specs_2 = { + asn_MAP_targetRAT_Type_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_targetRAT_Type_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_targetRAT_Type_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_targetRAT_Type_2 = { + "targetRAT-Type", + "targetRAT-Type", + targetRAT_Type_2_free, + targetRAT_Type_2_print, + targetRAT_Type_2_constraint, + targetRAT_Type_2_decode_ber, + targetRAT_Type_2_encode_der, + targetRAT_Type_2_decode_xer, + targetRAT_Type_2_encode_xer, + targetRAT_Type_2_decode_uper, + targetRAT_Type_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_targetRAT_Type_tags_2, + sizeof(asn_DEF_targetRAT_Type_tags_2) + /sizeof(asn_DEF_targetRAT_Type_tags_2[0]) - 1, /* 1 */ + asn_DEF_targetRAT_Type_tags_2, /* Same as above */ + sizeof(asn_DEF_targetRAT_Type_tags_2) + /sizeof(asn_DEF_targetRAT_Type_tags_2[0]), /* 2 */ + &asn_PER_type_targetRAT_Type_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_targetRAT_Type_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_Handover_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct Handover, targetRAT_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_targetRAT_Type_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "targetRAT-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct Handover, targetRAT_MessageContainer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "targetRAT-MessageContainer" + }, + { ATF_POINTER, 2, offsetof(struct Handover, nas_SecurityParamFromEUTRA), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_nas_SecurityParamFromEUTRA_constraint_1, + &asn_PER_memb_nas_SecurityParamFromEUTRA_constr_13, + 0, + "nas-SecurityParamFromEUTRA" + }, + { ATF_POINTER, 1, offsetof(struct Handover, systemInformation), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SI_OrPSI_GERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformation" + }, +}; +static int asn_MAP_Handover_oms_1[] = { 2, 3 }; +static ber_tlv_tag_t asn_DEF_Handover_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_Handover_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* targetRAT-Type at 487 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* targetRAT-MessageContainer at 489 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nas-SecurityParamFromEUTRA at 490 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* systemInformation at 491 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Handover_specs_1 = { + sizeof(struct Handover), + offsetof(struct Handover, _asn_ctx), + asn_MAP_Handover_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_Handover_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_Handover = { + "Handover", + "Handover", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Handover_tags_1, + sizeof(asn_DEF_Handover_tags_1) + /sizeof(asn_DEF_Handover_tags_1[0]), /* 1 */ + asn_DEF_Handover_tags_1, /* Same as above */ + sizeof(asn_DEF_Handover_tags_1) + /sizeof(asn_DEF_Handover_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_Handover_1, + 4, /* Elements count */ + &asn_SPC_Handover_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/Handover.h b/lte/rrc/asn/Handover.h new file mode 100644 index 000000000..533f137d3 --- /dev/null +++ b/lte/rrc/asn/Handover.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Handover_H_ +#define _Handover_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Handover__targetRAT_Type { + Handover__targetRAT_Type_utra = 0, + Handover__targetRAT_Type_geran = 1, + Handover__targetRAT_Type_cdma2000_1XRTT = 2, + Handover__targetRAT_Type_cdma2000_HRPD = 3, + Handover__targetRAT_Type_spare4 = 4, + Handover__targetRAT_Type_spare3 = 5, + Handover__targetRAT_Type_spare2 = 6, + Handover__targetRAT_Type_spare1 = 7 + /* + * Enumeration is extensible + */ +} e_Handover__targetRAT_Type; + +/* Forward declarations */ +struct SI_OrPSI_GERAN; + +/* Handover */ +typedef struct Handover { + long targetRAT_Type; + OCTET_STRING_t targetRAT_MessageContainer; + OCTET_STRING_t *nas_SecurityParamFromEUTRA /* OPTIONAL */; + struct SI_OrPSI_GERAN *systemInformation /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Handover_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_targetRAT_Type_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_Handover; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SI-OrPSI-GERAN.h" + +#endif /* _Handover_H_ */ +#include diff --git a/lte/rrc/asn/HandoverCommand-r8-IEs.c b/lte/rrc/asn/HandoverCommand-r8-IEs.c new file mode 100644 index 000000000..07cf8aa10 --- /dev/null +++ b/lte/rrc/asn/HandoverCommand-r8-IEs.c @@ -0,0 +1,134 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "HandoverCommand-r8-IEs.h" + +static int +memb_handoverCommandMessage_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_handoverCommandMessage_constr_2 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 } /* (SIZE(0..MAX)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct nonCriticalExtension), + offsetof(struct nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_HandoverCommand_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverCommand_r8_IEs, handoverCommandMessage), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_handoverCommandMessage_constraint_1, + &asn_PER_memb_handoverCommandMessage_constr_2, + 0, + "handoverCommandMessage" + }, + { ATF_POINTER, 1, offsetof(struct HandoverCommand_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_HandoverCommand_r8_IEs_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_HandoverCommand_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverCommand_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handoverCommandMessage */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverCommand_r8_IEs_specs_1 = { + sizeof(struct HandoverCommand_r8_IEs), + offsetof(struct HandoverCommand_r8_IEs, _asn_ctx), + asn_MAP_HandoverCommand_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_HandoverCommand_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverCommand_r8_IEs = { + "HandoverCommand-r8-IEs", + "HandoverCommand-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverCommand_r8_IEs_tags_1, + sizeof(asn_DEF_HandoverCommand_r8_IEs_tags_1) + /sizeof(asn_DEF_HandoverCommand_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverCommand_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverCommand_r8_IEs_tags_1) + /sizeof(asn_DEF_HandoverCommand_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverCommand_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_HandoverCommand_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverCommand-r8-IEs.h b/lte/rrc/asn/HandoverCommand-r8-IEs.h new file mode 100644 index 000000000..bfd4995c6 --- /dev/null +++ b/lte/rrc/asn/HandoverCommand-r8-IEs.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _HandoverCommand_r8_IEs_H_ +#define _HandoverCommand_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* HandoverCommand-r8-IEs */ +typedef struct HandoverCommand_r8_IEs { + OCTET_STRING_t handoverCommandMessage; + struct nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverCommand_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverCommand_r8_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverCommand_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverCommand.c b/lte/rrc/asn/HandoverCommand.c new file mode 100644 index 000000000..95158d572 --- /dev/null +++ b/lte/rrc/asn/HandoverCommand.c @@ -0,0 +1,283 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "HandoverCommand.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.handoverCommand_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverCommand_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handoverCommand-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handoverCommand-r8 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct c1), + offsetof(struct c1, _asn_ctx), + offsetof(struct c1, present), + sizeof(((struct c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 8, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_12 = { + sizeof(struct criticalExtensionsFuture), + offsetof(struct criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_12 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_12, + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_12, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct criticalExtensions), + offsetof(struct criticalExtensions, _asn_ctx), + offsetof(struct criticalExtensions, present), + sizeof(((struct criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_HandoverCommand_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverCommand, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverCommand_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverCommand_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverCommand_specs_1 = { + sizeof(struct HandoverCommand), + offsetof(struct HandoverCommand, _asn_ctx), + asn_MAP_HandoverCommand_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverCommand = { + "HandoverCommand", + "HandoverCommand", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverCommand_tags_1, + sizeof(asn_DEF_HandoverCommand_tags_1) + /sizeof(asn_DEF_HandoverCommand_tags_1[0]), /* 1 */ + asn_DEF_HandoverCommand_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverCommand_tags_1) + /sizeof(asn_DEF_HandoverCommand_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverCommand_1, + 1, /* Elements count */ + &asn_SPC_HandoverCommand_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverCommand.h b/lte/rrc/asn/HandoverCommand.h new file mode 100644 index 000000000..9f294d746 --- /dev/null +++ b/lte/rrc/asn/HandoverCommand.h @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _HandoverCommand_H_ +#define _HandoverCommand_H_ + + +#include + +/* Including external dependencies */ +#include "HandoverCommand-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum criticalExtensions_PR { + criticalExtensions_PR_NOTHING, /* No components present */ + criticalExtensions_PR_c1, + criticalExtensions_PR_criticalExtensionsFuture +} criticalExtensions_PR; +typedef enum c1_PR { + c1_PR_NOTHING, /* No components present */ + c1_PR_handoverCommand_r8, + c1_PR_spare7, + c1_PR_spare6, + c1_PR_spare5, + c1_PR_spare4, + c1_PR_spare3, + c1_PR_spare2, + c1_PR_spare1 +} c1_PR; + +/* HandoverCommand */ +typedef struct HandoverCommand { + struct criticalExtensions { + criticalExtensions_PR present; + union HandoverCommand__criticalExtensions_u { + struct c1 { + c1_PR present; + union HandoverCommand__criticalExtensions__c1_u { + HandoverCommand_r8_IEs_t handoverCommand_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverCommand_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverCommand; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverCommand_H_ */ +#include diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.c b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.c new file mode 100644 index 000000000..5e1bb4d8e --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "HandoverFromEUTRAPreparationRequest-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_HandoverFromEUTRAPreparationRequest_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest_r8_IEs, cdma2000_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CDMA2000_Type, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-Type" + }, + { ATF_POINTER, 3, offsetof(struct HandoverFromEUTRAPreparationRequest_r8_IEs, rand), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAND_CDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rand" + }, + { ATF_POINTER, 2, offsetof(struct HandoverFromEUTRAPreparationRequest_r8_IEs, mobilityParameters), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityParametersCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityParameters" + }, + { ATF_POINTER, 1, offsetof(struct HandoverFromEUTRAPreparationRequest_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_HandoverFromEUTRAPreparationRequest_r8_IEs_oms_1[] = { 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_HandoverFromEUTRAPreparationRequest_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cdma2000-Type at 268 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rand at 269 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mobilityParameters at 270 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 271 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverFromEUTRAPreparationRequest_r8_IEs_specs_1 = { + sizeof(struct HandoverFromEUTRAPreparationRequest_r8_IEs), + offsetof(struct HandoverFromEUTRAPreparationRequest_r8_IEs, _asn_ctx), + asn_MAP_HandoverFromEUTRAPreparationRequest_r8_IEs_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_HandoverFromEUTRAPreparationRequest_r8_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs = { + "HandoverFromEUTRAPreparationRequest-r8-IEs", + "HandoverFromEUTRAPreparationRequest-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1, + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverFromEUTRAPreparationRequest_r8_IEs_1, + 4, /* Elements count */ + &asn_SPC_HandoverFromEUTRAPreparationRequest_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h new file mode 100644 index 000000000..87587cad7 --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _HandoverFromEUTRAPreparationRequest_r8_IEs_H_ +#define _HandoverFromEUTRAPreparationRequest_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "CDMA2000-Type.h" +#include "RAND-CDMA2000.h" +#include "MobilityParametersCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct HandoverFromEUTRAPreparationRequest_v890_IEs; + +/* HandoverFromEUTRAPreparationRequest-r8-IEs */ +typedef struct HandoverFromEUTRAPreparationRequest_r8_IEs { + CDMA2000_Type_t cdma2000_Type; + RAND_CDMA2000_t *rand /* OPTIONAL */; + MobilityParametersCDMA2000_t *mobilityParameters /* OPTIONAL */; + struct HandoverFromEUTRAPreparationRequest_v890_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverFromEUTRAPreparationRequest_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "HandoverFromEUTRAPreparationRequest-v890-IEs.h" + +#endif /* _HandoverFromEUTRAPreparationRequest_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.c b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.c new file mode 100644 index 000000000..1c50fd74e --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.c @@ -0,0 +1,257 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "HandoverFromEUTRAPreparationRequest-v1020-IEs.h" + +static int +dualRxTxRedirectIndicator_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dualRxTxRedirectIndicator_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dualRxTxRedirectIndicator_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dualRxTxRedirectIndicator_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dualRxTxRedirectIndicator_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dualRxTxRedirectIndicator_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dualRxTxRedirectIndicator_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dualRxTxRedirectIndicator_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dualRxTxRedirectIndicator_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dualRxTxRedirectIndicator_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_dualRxTxRedirectIndicator_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_dualRxTxRedirectIndicator_r10_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_dualRxTxRedirectIndicator_r10_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dualRxTxRedirectIndicator_r10_specs_2 = { + asn_MAP_dualRxTxRedirectIndicator_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_dualRxTxRedirectIndicator_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dualRxTxRedirectIndicator_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dualRxTxRedirectIndicator_r10_2 = { + "dualRxTxRedirectIndicator-r10", + "dualRxTxRedirectIndicator-r10", + dualRxTxRedirectIndicator_r10_2_free, + dualRxTxRedirectIndicator_r10_2_print, + dualRxTxRedirectIndicator_r10_2_constraint, + dualRxTxRedirectIndicator_r10_2_decode_ber, + dualRxTxRedirectIndicator_r10_2_encode_der, + dualRxTxRedirectIndicator_r10_2_decode_xer, + dualRxTxRedirectIndicator_r10_2_encode_xer, + dualRxTxRedirectIndicator_r10_2_decode_uper, + dualRxTxRedirectIndicator_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dualRxTxRedirectIndicator_r10_tags_2, + sizeof(asn_DEF_dualRxTxRedirectIndicator_r10_tags_2) + /sizeof(asn_DEF_dualRxTxRedirectIndicator_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_dualRxTxRedirectIndicator_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_dualRxTxRedirectIndicator_r10_tags_2) + /sizeof(asn_DEF_dualRxTxRedirectIndicator_r10_tags_2[0]), /* 2 */ + &asn_PER_type_dualRxTxRedirectIndicator_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dualRxTxRedirectIndicator_r10_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_5 = { + sizeof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs__nonCriticalExtension), + offsetof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_5 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_5, + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_5, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_HandoverFromEUTRAPreparationRequest_v1020_IEs_1[] = { + { ATF_POINTER, 3, offsetof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs, dualRxTxRedirectIndicator_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dualRxTxRedirectIndicator_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dualRxTxRedirectIndicator-r10" + }, + { ATF_POINTER, 2, offsetof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs, redirectCarrierCDMA2000_1XRTT_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "redirectCarrierCDMA2000-1XRTT-r10" + }, + { ATF_POINTER, 1, offsetof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_nonCriticalExtension_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_HandoverFromEUTRAPreparationRequest_v1020_IEs_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_HandoverFromEUTRAPreparationRequest_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dualRxTxRedirectIndicator-r10 at 285 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* redirectCarrierCDMA2000-1XRTT-r10 at 286 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 287 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverFromEUTRAPreparationRequest_v1020_IEs_specs_1 = { + sizeof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs), + offsetof(struct HandoverFromEUTRAPreparationRequest_v1020_IEs, _asn_ctx), + asn_MAP_HandoverFromEUTRAPreparationRequest_v1020_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_HandoverFromEUTRAPreparationRequest_v1020_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs = { + "HandoverFromEUTRAPreparationRequest-v1020-IEs", + "HandoverFromEUTRAPreparationRequest-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1, + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverFromEUTRAPreparationRequest_v1020_IEs_1, + 3, /* Elements count */ + &asn_SPC_HandoverFromEUTRAPreparationRequest_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h new file mode 100644 index 000000000..e29dee3e5 --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _HandoverFromEUTRAPreparationRequest_v1020_IEs_H_ +#define _HandoverFromEUTRAPreparationRequest_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum HandoverFromEUTRAPreparationRequest_v1020_IEs__dualRxTxRedirectIndicator_r10 { + HandoverFromEUTRAPreparationRequest_v1020_IEs__dualRxTxRedirectIndicator_r10_true = 0 +} e_HandoverFromEUTRAPreparationRequest_v1020_IEs__dualRxTxRedirectIndicator_r10; + +/* Forward declarations */ +struct CarrierFreqCDMA2000; + +/* HandoverFromEUTRAPreparationRequest-v1020-IEs */ +typedef struct HandoverFromEUTRAPreparationRequest_v1020_IEs { + long *dualRxTxRedirectIndicator_r10 /* OPTIONAL */; + struct CarrierFreqCDMA2000 *redirectCarrierCDMA2000_1XRTT_r10 /* OPTIONAL */; + struct HandoverFromEUTRAPreparationRequest_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverFromEUTRAPreparationRequest_v1020_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_dualRxTxRedirectIndicator_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqCDMA2000.h" + +#endif /* _HandoverFromEUTRAPreparationRequest_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.c b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.c new file mode 100644 index 000000000..a84626393 --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "HandoverFromEUTRAPreparationRequest-v890-IEs.h" + +static asn_TYPE_member_t asn_MBR_HandoverFromEUTRAPreparationRequest_v890_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct HandoverFromEUTRAPreparationRequest_v890_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct HandoverFromEUTRAPreparationRequest_v890_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_HandoverFromEUTRAPreparationRequest_v890_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_HandoverFromEUTRAPreparationRequest_v890_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 275 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 276 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverFromEUTRAPreparationRequest_v890_IEs_specs_1 = { + sizeof(struct HandoverFromEUTRAPreparationRequest_v890_IEs), + offsetof(struct HandoverFromEUTRAPreparationRequest_v890_IEs, _asn_ctx), + asn_MAP_HandoverFromEUTRAPreparationRequest_v890_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_HandoverFromEUTRAPreparationRequest_v890_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs = { + "HandoverFromEUTRAPreparationRequest-v890-IEs", + "HandoverFromEUTRAPreparationRequest-v890-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1, + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverFromEUTRAPreparationRequest_v890_IEs_1, + 2, /* Elements count */ + &asn_SPC_HandoverFromEUTRAPreparationRequest_v890_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h new file mode 100644 index 000000000..ca8cd415f --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _HandoverFromEUTRAPreparationRequest_v890_IEs_H_ +#define _HandoverFromEUTRAPreparationRequest_v890_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct HandoverFromEUTRAPreparationRequest_v920_IEs; + +/* HandoverFromEUTRAPreparationRequest-v890-IEs */ +typedef struct HandoverFromEUTRAPreparationRequest_v890_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct HandoverFromEUTRAPreparationRequest_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverFromEUTRAPreparationRequest_v890_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_v890_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "HandoverFromEUTRAPreparationRequest-v920-IEs.h" + +#endif /* _HandoverFromEUTRAPreparationRequest_v890_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.c b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.c new file mode 100644 index 000000000..83f86911e --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "HandoverFromEUTRAPreparationRequest-v920-IEs.h" + +static asn_TYPE_member_t asn_MBR_HandoverFromEUTRAPreparationRequest_v920_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct HandoverFromEUTRAPreparationRequest_v920_IEs, concurrPrepCDMA2000_HRPD_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "concurrPrepCDMA2000-HRPD-r9" + }, + { ATF_POINTER, 1, offsetof(struct HandoverFromEUTRAPreparationRequest_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverFromEUTRAPreparationRequest_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_HandoverFromEUTRAPreparationRequest_v920_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_HandoverFromEUTRAPreparationRequest_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* concurrPrepCDMA2000-HRPD-r9 at 280 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 281 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverFromEUTRAPreparationRequest_v920_IEs_specs_1 = { + sizeof(struct HandoverFromEUTRAPreparationRequest_v920_IEs), + offsetof(struct HandoverFromEUTRAPreparationRequest_v920_IEs, _asn_ctx), + asn_MAP_HandoverFromEUTRAPreparationRequest_v920_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_HandoverFromEUTRAPreparationRequest_v920_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs = { + "HandoverFromEUTRAPreparationRequest-v920-IEs", + "HandoverFromEUTRAPreparationRequest-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1, + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverFromEUTRAPreparationRequest_v920_IEs_1, + 2, /* Elements count */ + &asn_SPC_HandoverFromEUTRAPreparationRequest_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h new file mode 100644 index 000000000..3e6aa3837 --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _HandoverFromEUTRAPreparationRequest_v920_IEs_H_ +#define _HandoverFromEUTRAPreparationRequest_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct HandoverFromEUTRAPreparationRequest_v1020_IEs; + +/* HandoverFromEUTRAPreparationRequest-v920-IEs */ +typedef struct HandoverFromEUTRAPreparationRequest_v920_IEs { + BOOLEAN_t *concurrPrepCDMA2000_HRPD_r9 /* OPTIONAL */; + struct HandoverFromEUTRAPreparationRequest_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverFromEUTRAPreparationRequest_v920_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest_v920_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "HandoverFromEUTRAPreparationRequest-v1020-IEs.h" + +#endif /* _HandoverFromEUTRAPreparationRequest_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.c b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.c new file mode 100644 index 000000000..a232ece48 --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "HandoverFromEUTRAPreparationRequest.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1, choice.handoverFromEUTRAPreparationRequest_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverFromEUTRAPreparationRequest_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handoverFromEUTRAPreparationRequest-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handoverFromEUTRAPreparationRequest-r8 at 260 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 261 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 261 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 261 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1), + offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1, _asn_ctx), + offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1, present), + sizeof(((struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__criticalExtensionsFuture), + offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 260 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 263 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions), + offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions, _asn_ctx), + offsetof(struct HandoverFromEUTRAPreparationRequest__criticalExtensions, present), + sizeof(((struct HandoverFromEUTRAPreparationRequest__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_HandoverFromEUTRAPreparationRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct HandoverFromEUTRAPreparationRequest, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_HandoverFromEUTRAPreparationRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 256 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 262 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverFromEUTRAPreparationRequest_specs_1 = { + sizeof(struct HandoverFromEUTRAPreparationRequest), + offsetof(struct HandoverFromEUTRAPreparationRequest, _asn_ctx), + asn_MAP_HandoverFromEUTRAPreparationRequest_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest = { + "HandoverFromEUTRAPreparationRequest", + "HandoverFromEUTRAPreparationRequest", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1, + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1[0]), /* 1 */ + asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1) + /sizeof(asn_DEF_HandoverFromEUTRAPreparationRequest_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverFromEUTRAPreparationRequest_1, + 2, /* Elements count */ + &asn_SPC_HandoverFromEUTRAPreparationRequest_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.h b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.h new file mode 100644 index 000000000..c50772a5a --- /dev/null +++ b/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _HandoverFromEUTRAPreparationRequest_H_ +#define _HandoverFromEUTRAPreparationRequest_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "HandoverFromEUTRAPreparationRequest-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum HandoverFromEUTRAPreparationRequest__criticalExtensions_PR { + HandoverFromEUTRAPreparationRequest__criticalExtensions_PR_NOTHING, /* No components present */ + HandoverFromEUTRAPreparationRequest__criticalExtensions_PR_c1, + HandoverFromEUTRAPreparationRequest__criticalExtensions_PR_criticalExtensionsFuture +} HandoverFromEUTRAPreparationRequest__criticalExtensions_PR; +typedef enum HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR { + HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR_NOTHING, /* No components present */ + HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR_handoverFromEUTRAPreparationRequest_r8, + HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR_spare3, + HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR_spare2, + HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR_spare1 +} HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR; + +/* HandoverFromEUTRAPreparationRequest */ +typedef struct HandoverFromEUTRAPreparationRequest { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct HandoverFromEUTRAPreparationRequest__criticalExtensions { + HandoverFromEUTRAPreparationRequest__criticalExtensions_PR present; + union HandoverFromEUTRAPreparationRequest__criticalExtensions_u { + struct HandoverFromEUTRAPreparationRequest__criticalExtensions__c1 { + HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_PR present; + union HandoverFromEUTRAPreparationRequest__criticalExtensions__c1_u { + HandoverFromEUTRAPreparationRequest_r8_IEs_t handoverFromEUTRAPreparationRequest_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct HandoverFromEUTRAPreparationRequest__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverFromEUTRAPreparationRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverFromEUTRAPreparationRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverFromEUTRAPreparationRequest_H_ */ +#include diff --git a/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.c b/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.c new file mode 100644 index 000000000..4f8fc9761 --- /dev/null +++ b/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.c @@ -0,0 +1,101 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "HandoverPreparationInformation-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_HandoverPreparationInformation_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationInformation_r8_IEs, ue_RadioAccessCapabilityInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_CapabilityRAT_ContainerList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-RadioAccessCapabilityInfo" + }, + { ATF_POINTER, 4, offsetof(struct HandoverPreparationInformation_r8_IEs, as_Config), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AS_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "as-Config" + }, + { ATF_POINTER, 3, offsetof(struct HandoverPreparationInformation_r8_IEs, rrm_Config), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRM_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrm-Config" + }, + { ATF_POINTER, 2, offsetof(struct HandoverPreparationInformation_r8_IEs, as_Context), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AS_Context, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "as-Context" + }, + { ATF_POINTER, 1, offsetof(struct HandoverPreparationInformation_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverPreparationInformation_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_HandoverPreparationInformation_r8_IEs_oms_1[] = { 1, 2, 3, 4 }; +static const ber_tlv_tag_t asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverPreparationInformation_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-RadioAccessCapabilityInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* as-Config */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rrm-Config */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* as-Context */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverPreparationInformation_r8_IEs_specs_1 = { + sizeof(struct HandoverPreparationInformation_r8_IEs), + offsetof(struct HandoverPreparationInformation_r8_IEs, _asn_ctx), + asn_MAP_HandoverPreparationInformation_r8_IEs_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_HandoverPreparationInformation_r8_IEs_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverPreparationInformation_r8_IEs = { + "HandoverPreparationInformation-r8-IEs", + "HandoverPreparationInformation-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1, + sizeof(asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_HandoverPreparationInformation_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverPreparationInformation_r8_IEs_1, + 5, /* Elements count */ + &asn_SPC_HandoverPreparationInformation_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.h b/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.h new file mode 100644 index 000000000..e8ec3bd84 --- /dev/null +++ b/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _HandoverPreparationInformation_r8_IEs_H_ +#define _HandoverPreparationInformation_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "UE-CapabilityRAT-ContainerList.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct AS_Config; +struct RRM_Config; +struct AS_Context; +struct HandoverPreparationInformation_v920_IEs; + +/* HandoverPreparationInformation-r8-IEs */ +typedef struct HandoverPreparationInformation_r8_IEs { + UE_CapabilityRAT_ContainerList_t ue_RadioAccessCapabilityInfo; + struct AS_Config *as_Config /* OPTIONAL */; + struct RRM_Config *rrm_Config /* OPTIONAL */; + struct AS_Context *as_Context /* OPTIONAL */; + struct HandoverPreparationInformation_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverPreparationInformation_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverPreparationInformation_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "AS-Config.h" +#include "RRM-Config.h" +#include "AS-Context.h" +#include "HandoverPreparationInformation-v920-IEs.h" + +#endif /* _HandoverPreparationInformation_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.c b/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.c new file mode 100644 index 000000000..f4c31eaae --- /dev/null +++ b/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.c @@ -0,0 +1,263 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "HandoverPreparationInformation-v920-IEs.h" + +static int +ue_ConfigRelease_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ue_ConfigRelease_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ue_ConfigRelease_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ue_ConfigRelease_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ue_ConfigRelease_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ue_ConfigRelease_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ue_ConfigRelease_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ue_ConfigRelease_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ue_ConfigRelease_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ue_ConfigRelease_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ue_ConfigRelease_r9_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ue_ConfigRelease_r9_value2enum_2[] = { + { 0, 4, "rel9" }, + { 1, 6, "spare7" }, + { 2, 6, "spare6" }, + { 3, 6, "spare5" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } + /* This list is extensible */ +}; +static const unsigned int asn_MAP_ue_ConfigRelease_r9_enum2value_2[] = { + 0, /* rel9(0) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 3, /* spare5(3) */ + 2, /* spare6(2) */ + 1 /* spare7(1) */ + /* This list is extensible */ +}; +static const asn_INTEGER_specifics_t asn_SPC_ue_ConfigRelease_r9_specs_2 = { + asn_MAP_ue_ConfigRelease_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_ue_ConfigRelease_r9_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ue_ConfigRelease_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ue_ConfigRelease_r9_2 = { + "ue-ConfigRelease-r9", + "ue-ConfigRelease-r9", + ue_ConfigRelease_r9_2_free, + ue_ConfigRelease_r9_2_print, + ue_ConfigRelease_r9_2_constraint, + ue_ConfigRelease_r9_2_decode_ber, + ue_ConfigRelease_r9_2_encode_der, + ue_ConfigRelease_r9_2_decode_xer, + ue_ConfigRelease_r9_2_encode_xer, + ue_ConfigRelease_r9_2_decode_uper, + ue_ConfigRelease_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ue_ConfigRelease_r9_tags_2, + sizeof(asn_DEF_ue_ConfigRelease_r9_tags_2) + /sizeof(asn_DEF_ue_ConfigRelease_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_ue_ConfigRelease_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_ue_ConfigRelease_r9_tags_2) + /sizeof(asn_DEF_ue_ConfigRelease_r9_tags_2[0]), /* 2 */ + &asn_PER_type_ue_ConfigRelease_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ue_ConfigRelease_r9_specs_2 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_12 = { + sizeof(struct nonCriticalExtension), + offsetof(struct nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_12 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_12, + sizeof(asn_DEF_nonCriticalExtension_tags_12) + /sizeof(asn_DEF_nonCriticalExtension_tags_12[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_12, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_12) + /sizeof(asn_DEF_nonCriticalExtension_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_HandoverPreparationInformation_v920_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct HandoverPreparationInformation_v920_IEs, ue_ConfigRelease_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ue_ConfigRelease_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-ConfigRelease-r9" + }, + { ATF_POINTER, 1, offsetof(struct HandoverPreparationInformation_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_HandoverPreparationInformation_v920_IEs_oms_1[] = { 0, 1 }; +static const ber_tlv_tag_t asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverPreparationInformation_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-ConfigRelease-r9 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverPreparationInformation_v920_IEs_specs_1 = { + sizeof(struct HandoverPreparationInformation_v920_IEs), + offsetof(struct HandoverPreparationInformation_v920_IEs, _asn_ctx), + asn_MAP_HandoverPreparationInformation_v920_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_HandoverPreparationInformation_v920_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverPreparationInformation_v920_IEs = { + "HandoverPreparationInformation-v920-IEs", + "HandoverPreparationInformation-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1, + sizeof(asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1) + /sizeof(asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1) + /sizeof(asn_DEF_HandoverPreparationInformation_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverPreparationInformation_v920_IEs_1, + 2, /* Elements count */ + &asn_SPC_HandoverPreparationInformation_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.h b/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.h new file mode 100644 index 000000000..8a7977d79 --- /dev/null +++ b/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _HandoverPreparationInformation_v920_IEs_H_ +#define _HandoverPreparationInformation_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ue_ConfigRelease_r9 { + ue_ConfigRelease_r9_rel9 = 0, + ue_ConfigRelease_r9_spare7 = 1, + ue_ConfigRelease_r9_spare6 = 2, + ue_ConfigRelease_r9_spare5 = 3, + ue_ConfigRelease_r9_spare4 = 4, + ue_ConfigRelease_r9_spare3 = 5, + ue_ConfigRelease_r9_spare2 = 6, + ue_ConfigRelease_r9_spare1 = 7 + /* + * Enumeration is extensible + */ +} e_ue_ConfigRelease_r9; + +/* HandoverPreparationInformation-v920-IEs */ +typedef struct HandoverPreparationInformation_v920_IEs { + long *ue_ConfigRelease_r9 /* OPTIONAL */; + struct nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverPreparationInformation_v920_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_ue_ConfigRelease_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverPreparationInformation_v920_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverPreparationInformation_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/HandoverPreparationInformation.c b/lte/rrc/asn/HandoverPreparationInformation.c new file mode 100644 index 000000000..249076853 --- /dev/null +++ b/lte/rrc/asn/HandoverPreparationInformation.c @@ -0,0 +1,283 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "HandoverPreparationInformation.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.handoverPreparationInformation_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_HandoverPreparationInformation_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handoverPreparationInformation-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handoverPreparationInformation-r8 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct c1), + offsetof(struct c1, _asn_ctx), + offsetof(struct c1, present), + sizeof(((struct c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 8, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_12 = { + sizeof(struct criticalExtensionsFuture), + offsetof(struct criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_12 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_12, + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_12, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct criticalExtensions), + offsetof(struct criticalExtensions, _asn_ctx), + offsetof(struct criticalExtensions, present), + sizeof(((struct criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_HandoverPreparationInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct HandoverPreparationInformation, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static const ber_tlv_tag_t asn_DEF_HandoverPreparationInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_HandoverPreparationInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_HandoverPreparationInformation_specs_1 = { + sizeof(struct HandoverPreparationInformation), + offsetof(struct HandoverPreparationInformation, _asn_ctx), + asn_MAP_HandoverPreparationInformation_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_HandoverPreparationInformation = { + "HandoverPreparationInformation", + "HandoverPreparationInformation", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_HandoverPreparationInformation_tags_1, + sizeof(asn_DEF_HandoverPreparationInformation_tags_1) + /sizeof(asn_DEF_HandoverPreparationInformation_tags_1[0]), /* 1 */ + asn_DEF_HandoverPreparationInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_HandoverPreparationInformation_tags_1) + /sizeof(asn_DEF_HandoverPreparationInformation_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_HandoverPreparationInformation_1, + 1, /* Elements count */ + &asn_SPC_HandoverPreparationInformation_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/HandoverPreparationInformation.h b/lte/rrc/asn/HandoverPreparationInformation.h new file mode 100644 index 000000000..89319f9a7 --- /dev/null +++ b/lte/rrc/asn/HandoverPreparationInformation.h @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _HandoverPreparationInformation_H_ +#define _HandoverPreparationInformation_H_ + + +#include + +/* Including external dependencies */ +#include "HandoverPreparationInformation-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum criticalExtensions_PR { + criticalExtensions_PR_NOTHING, /* No components present */ + criticalExtensions_PR_c1, + criticalExtensions_PR_criticalExtensionsFuture +} criticalExtensions_PR; +typedef enum c1_PR { + c1_PR_NOTHING, /* No components present */ + c1_PR_handoverPreparationInformation_r8, + c1_PR_spare7, + c1_PR_spare6, + c1_PR_spare5, + c1_PR_spare4, + c1_PR_spare3, + c1_PR_spare2, + c1_PR_spare1 +} c1_PR; + +/* HandoverPreparationInformation */ +typedef struct HandoverPreparationInformation { + struct criticalExtensions { + criticalExtensions_PR present; + union HandoverPreparationInformation__criticalExtensions_u { + struct c1 { + c1_PR present; + union HandoverPreparationInformation__criticalExtensions__c1_u { + HandoverPreparationInformation_r8_IEs_t handoverPreparationInformation_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} HandoverPreparationInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_HandoverPreparationInformation; + +#ifdef __cplusplus +} +#endif + +#endif /* _HandoverPreparationInformation_H_ */ +#include diff --git a/lte/rrc/asn/Hysteresis.c b/lte/rrc/asn/Hysteresis.c new file mode 100644 index 000000000..50ce457d1 --- /dev/null +++ b/lte/rrc/asn/Hysteresis.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Hysteresis.h" + +int +Hysteresis_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 30)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +Hysteresis_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +Hysteresis_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + Hysteresis_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +Hysteresis_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +Hysteresis_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +Hysteresis_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +Hysteresis_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +Hysteresis_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +Hysteresis_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +Hysteresis_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + Hysteresis_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_Hysteresis_constr_1 = { + { APC_CONSTRAINED, 5, 5, 0, 30 } /* (0..30) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_Hysteresis_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Hysteresis = { + "Hysteresis", + "Hysteresis", + Hysteresis_free, + Hysteresis_print, + Hysteresis_constraint, + Hysteresis_decode_ber, + Hysteresis_encode_der, + Hysteresis_decode_xer, + Hysteresis_encode_xer, + Hysteresis_decode_uper, + Hysteresis_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Hysteresis_tags_1, + sizeof(asn_DEF_Hysteresis_tags_1) + /sizeof(asn_DEF_Hysteresis_tags_1[0]), /* 1 */ + asn_DEF_Hysteresis_tags_1, /* Same as above */ + sizeof(asn_DEF_Hysteresis_tags_1) + /sizeof(asn_DEF_Hysteresis_tags_1[0]), /* 1 */ + &asn_PER_type_Hysteresis_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/Hysteresis.h b/lte/rrc/asn/Hysteresis.h new file mode 100644 index 000000000..79f7804c8 --- /dev/null +++ b/lte/rrc/asn/Hysteresis.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Hysteresis_H_ +#define _Hysteresis_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Hysteresis */ +typedef long Hysteresis_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Hysteresis; +asn_struct_free_f Hysteresis_free; +asn_struct_print_f Hysteresis_print; +asn_constr_check_f Hysteresis_constraint; +ber_type_decoder_f Hysteresis_decode_ber; +der_type_encoder_f Hysteresis_encode_der; +xer_type_decoder_f Hysteresis_decode_xer; +xer_type_encoder_f Hysteresis_encode_xer; +per_type_decoder_f Hysteresis_decode_uper; +per_type_encoder_f Hysteresis_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Hysteresis_H_ */ +#include diff --git a/lte/rrc/asn/IMSI-Digit.c b/lte/rrc/asn/IMSI-Digit.c new file mode 100644 index 000000000..bc307b0b8 --- /dev/null +++ b/lte/rrc/asn/IMSI-Digit.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IMSI-Digit.h" + +int +IMSI_Digit_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 9)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +IMSI_Digit_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +IMSI_Digit_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +IMSI_Digit_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +IMSI_Digit_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +IMSI_Digit_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +IMSI_Digit_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +IMSI_Digit_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +IMSI_Digit_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +IMSI_Digit_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + IMSI_Digit_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_IMSI_Digit_constr_1 = { + { APC_CONSTRAINED, 4, 4, 0, 9 } /* (0..9) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_IMSI_Digit_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_IMSI_Digit = { + "IMSI-Digit", + "IMSI-Digit", + IMSI_Digit_free, + IMSI_Digit_print, + IMSI_Digit_constraint, + IMSI_Digit_decode_ber, + IMSI_Digit_encode_der, + IMSI_Digit_decode_xer, + IMSI_Digit_encode_xer, + IMSI_Digit_decode_uper, + IMSI_Digit_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IMSI_Digit_tags_1, + sizeof(asn_DEF_IMSI_Digit_tags_1) + /sizeof(asn_DEF_IMSI_Digit_tags_1[0]), /* 1 */ + asn_DEF_IMSI_Digit_tags_1, /* Same as above */ + sizeof(asn_DEF_IMSI_Digit_tags_1) + /sizeof(asn_DEF_IMSI_Digit_tags_1[0]), /* 1 */ + &asn_PER_type_IMSI_Digit_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/IMSI-Digit.h b/lte/rrc/asn/IMSI-Digit.h new file mode 100644 index 000000000..64a4f82f6 --- /dev/null +++ b/lte/rrc/asn/IMSI-Digit.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IMSI_Digit_H_ +#define _IMSI_Digit_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IMSI-Digit */ +typedef long IMSI_Digit_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IMSI_Digit; +asn_struct_free_f IMSI_Digit_free; +asn_struct_print_f IMSI_Digit_print; +asn_constr_check_f IMSI_Digit_constraint; +ber_type_decoder_f IMSI_Digit_decode_ber; +der_type_encoder_f IMSI_Digit_encode_der; +xer_type_decoder_f IMSI_Digit_decode_xer; +xer_type_encoder_f IMSI_Digit_encode_xer; +per_type_decoder_f IMSI_Digit_decode_uper; +per_type_encoder_f IMSI_Digit_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _IMSI_Digit_H_ */ +#include diff --git a/lte/rrc/asn/IMSI.c b/lte/rrc/asn/IMSI.c new file mode 100644 index 000000000..77e09afc5 --- /dev/null +++ b/lte/rrc/asn/IMSI.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IMSI.h" + +static asn_per_constraints_t asn_PER_type_IMSI_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 6, 21 } /* (SIZE(6..21)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_IMSI_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_IMSI_Digit, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_IMSI_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_IMSI_specs_1 = { + sizeof(struct IMSI), + offsetof(struct IMSI, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_IMSI = { + "IMSI", + "IMSI", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IMSI_tags_1, + sizeof(asn_DEF_IMSI_tags_1) + /sizeof(asn_DEF_IMSI_tags_1[0]), /* 1 */ + asn_DEF_IMSI_tags_1, /* Same as above */ + sizeof(asn_DEF_IMSI_tags_1) + /sizeof(asn_DEF_IMSI_tags_1[0]), /* 1 */ + &asn_PER_type_IMSI_constr_1, + asn_MBR_IMSI_1, + 1, /* Single element */ + &asn_SPC_IMSI_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IMSI.h b/lte/rrc/asn/IMSI.h new file mode 100644 index 000000000..9fc1b7486 --- /dev/null +++ b/lte/rrc/asn/IMSI.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IMSI_H_ +#define _IMSI_H_ + + +#include + +/* Including external dependencies */ +#include "IMSI-Digit.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IMSI */ +typedef struct IMSI { + A_SEQUENCE_OF(IMSI_Digit_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IMSI_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IMSI; + +#ifdef __cplusplus +} +#endif + +#endif /* _IMSI_H_ */ +#include diff --git a/lte/rrc/asn/INTEGER.c b/lte/rrc/asn/INTEGER.c index 54feb00e9..3417c5d44 100644 --- a/lte/rrc/asn/INTEGER.c +++ b/lte/rrc/asn/INTEGER.c @@ -1,17 +1,16 @@ /*- - * Copyright (c) 2003-2014 Lev Walkin . + * Copyright (c) 2003, 2004, 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #include #include #include /* Encoder and decoder of a primitive type */ -#include /* * INTEGER basic type description. */ -static const ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { +static ber_tlv_tag_t asn_DEF_INTEGER_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_INTEGER = { @@ -24,13 +23,8 @@ asn_TYPE_descriptor_t asn_DEF_INTEGER = { INTEGER_encode_der, INTEGER_decode_xer, INTEGER_encode_xer, -#ifdef ASN_DISABLE_PER_SUPPORT - 0, - 0, -#else INTEGER_decode_uper, /* Unaligned PER decoder */ INTEGER_encode_uper, /* Unaligned PER encoder */ -#endif /* ASN_DISABLE_PER_SUPPORT */ 0, /* Use generic outmost tag fetcher */ asn_DEF_INTEGER_tags, sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), @@ -106,35 +100,56 @@ static const asn_INTEGER_enum_map_t *INTEGER_map_enum2value(asn_INTEGER_specific * INTEGER specific human-readable output. */ static ssize_t -INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { +INTEGER__dump(asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_consume_bytes_f *cb, void *app_key, int plainOrXER) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; - char scratch[32]; /* Enough for 64-bit integer */ + char scratch[128]; uint8_t *buf = st->buf; uint8_t *buf_end = st->buf + st->size; - signed long value; + signed long accum; ssize_t wrote = 0; char *p; int ret; - if(specs && specs->field_unsigned) - ret = asn_INTEGER2ulong(st, (unsigned long *)&value); - else - ret = asn_INTEGER2long(st, &value); + /* + * Advance buf pointer until the start of the value's body. + * This will make us able to process large integers using simple case, + * when the actual value is small + * (0x0000000000abcdef would yield a fine 0x00abcdef) + */ + /* Skip the insignificant leading bytes */ + for(; buf < buf_end-1; buf++) { + switch(*buf) { + case 0x00: if((buf[1] & 0x80) == 0) continue; break; + case 0xff: if((buf[1] & 0x80) != 0) continue; break; + } + break; + } /* Simple case: the integer size is small */ - if(ret == 0) { + if((size_t)(buf_end - buf) <= sizeof(accum)) { const asn_INTEGER_enum_map_t *el; size_t scrsize; char *scr; - el = (value >= 0 || !specs || !specs->field_unsigned) - ? INTEGER_map_value2enum(specs, value) : 0; + if(buf == buf_end) { + accum = 0; + } else { + accum = (*buf & 0x80) ? -1 : 0; + for(; buf < buf_end; buf++) + accum = (accum << 8) | *buf; + } + + el = INTEGER_map_value2enum(specs, accum); if(el) { + scrsize = sizeof(scratch); + scr = scratch; + /* cannot use alloca in kernel scrsize = el->enum_len + 32; scr = (char *)alloca(scrsize); + */ if(plainOrXER == 0) ret = snprintf(scr, scrsize, - "%ld (%s)", value, el->enum_name); + "%ld (%s)", accum, el->enum_name); else ret = snprintf(scr, scrsize, "<%s/>", el->enum_name); @@ -148,7 +163,7 @@ INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_cons scr = scratch; ret = snprintf(scr, scrsize, (specs && specs->field_unsigned) - ?"%lu":"%ld", value); + ?"%lu":"%ld", accum); } assert(ret > 0 && (size_t)ret < scrsize); return (cb(scr, ret, app_key) < 0) ? -1 : ret; @@ -166,7 +181,7 @@ INTEGER__dump(const asn_TYPE_descriptor_t *td, const INTEGER_t *st, asn_app_cons /* Output in the long xx:yy:zz... format */ /* TODO: replace with generic algorithm (Knuth TAOCP Vol 2, 4.3.1) */ for(p = scratch; buf < buf_end; buf++) { - const char * const h2c = "0123456789ABCDEF"; + static const char *h2c = "0123456789ABCDEF"; if((p - scratch) >= (ssize_t)(sizeof(scratch) - 4)) { /* Flush buffer */ if(cb(scratch, p - scratch, app_key) < 0) @@ -208,8 +223,8 @@ INTEGER_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, struct e2v_key { const char *start; const char *stop; - const asn_INTEGER_enum_map_t *vemap; - const unsigned int *evmap; + asn_INTEGER_enum_map_t *vemap; + unsigned int *evmap; }; static int INTEGER__compar_enum2value(const void *kp, const void *am) { @@ -232,7 +247,7 @@ INTEGER__compar_enum2value(const void *kp, const void *am) { static const asn_INTEGER_enum_map_t * INTEGER_map_enum2value(asn_INTEGER_specifics_t *specs, const char *lstart, const char *lstop) { - const asn_INTEGER_enum_map_t *el_found; + asn_INTEGER_enum_map_t *el_found; int count = specs ? specs->map_count : 0; struct e2v_key key; const char *lp; @@ -307,71 +322,57 @@ INTEGER_st_prealloc(INTEGER_t *st, int min_size) { static enum xer_pbd_rval INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { INTEGER_t *st = (INTEGER_t *)sptr; - long dec_value=0; - long hex_value = 0; + long sign = 1; + long value; const char *lp; const char *lstart = (const char *)chunk_buf; const char *lstop = lstart + chunk_size; enum { - ST_LEADSPACE, + ST_SKIPSPACE, ST_SKIPSPHEX, ST_WAITDIGITS, ST_DIGITS, - ST_DIGITS_TRAILSPACE, ST_HEXDIGIT1, ST_HEXDIGIT2, - ST_HEXDIGITS_TRAILSPACE, ST_HEXCOLON, - ST_END_ENUM, - ST_UNEXPECTED - } state = ST_LEADSPACE; - const char *dec_value_start = 0; /* INVARIANT: always !0 in ST_DIGITS */ - const char *dec_value_end = 0; + ST_EXTRASTUFF + } state = ST_SKIPSPACE; if(chunk_size) ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", (long)chunk_size, *lstart, lstop[-1]); - if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) - return XPBD_SYSTEM_FAILURE; - /* * We may have received a tag here. It will be processed inline. * Use strtoul()-like code and serialize the result. */ - for(lp = lstart; lp < lstop; lp++) { + for(value = 0, lp = lstart; lp < lstop; lp++) { int lv = *lp; switch(lv) { case 0x09: case 0x0a: case 0x0d: case 0x20: switch(state) { - case ST_LEADSPACE: - case ST_DIGITS_TRAILSPACE: - case ST_HEXDIGITS_TRAILSPACE: + case ST_SKIPSPACE: case ST_SKIPSPHEX: continue; - case ST_DIGITS: - dec_value_end = lp; - state = ST_DIGITS_TRAILSPACE; - continue; case ST_HEXCOLON: - state = ST_HEXDIGITS_TRAILSPACE; - continue; + if(xer_is_whitespace(lp, lstop - lp)) { + lp = lstop - 1; + continue; + } + break; default: break; } break; case 0x2d: /* '-' */ - if(state == ST_LEADSPACE) { - dec_value = 0; - dec_value_start = lp; + if(state == ST_SKIPSPACE) { + sign = -1; state = ST_WAITDIGITS; continue; } break; case 0x2b: /* '+' */ - if(state == ST_LEADSPACE) { - dec_value = 0; - dec_value_start = lp; + if(state == ST_SKIPSPACE) { state = ST_WAITDIGITS; continue; } @@ -379,32 +380,48 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: switch(state) { - case ST_DIGITS: continue; + case ST_DIGITS: break; case ST_SKIPSPHEX: /* Fall through */ case ST_HEXDIGIT1: - hex_value = (lv - 0x30) << 4; + value = (lv - 0x30) << 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: - hex_value += (lv - 0x30); + value += (lv - 0x30); state = ST_HEXCOLON; - st->buf[st->size++] = (uint8_t)hex_value; + st->buf[st->size++] = (uint8_t)value; continue; case ST_HEXCOLON: return XPBD_BROKEN_ENCODING; - case ST_LEADSPACE: - dec_value = 0; - dec_value_start = lp; - /* FALL THROUGH */ - case ST_WAITDIGITS: - state = ST_DIGITS; - continue; default: + state = ST_DIGITS; break; } - break; - case 0x3c: /* '<', start of XML encoded enumeration */ - if(state == ST_LEADSPACE) { + + { + long new_value = value * 10; + + if(new_value / 10 != value) + /* Overflow */ + return XPBD_DECODER_LIMIT; + + value = new_value + (lv - 0x30); + /* Check for two's complement overflow */ + if(value < 0) { + /* Check whether it is a LONG_MIN */ + if(sign == -1 + && (unsigned long)value + == ~((unsigned long)-1 >> 1)) { + sign = 1; + } else { + /* Overflow */ + return XPBD_DECODER_LIMIT; + } + } + } + continue; + case 0x3c: /* '<' */ + if(state == ST_SKIPSPACE) { const asn_INTEGER_enum_map_t *el; el = INTEGER_map_enum2value( (asn_INTEGER_specifics_t *) @@ -412,8 +429,8 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun if(el) { ASN_DEBUG("Found \"%s\" => %ld", el->enum_name, el->nat_value); - dec_value = el->nat_value; - state = ST_END_ENUM; + state = ST_DIGITS; + value = el->nat_value; lp = lstop - 1; continue; } @@ -431,12 +448,13 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun * places as a decimal value. * Switch decoding mode. */ ASN_DEBUG("INTEGER re-evaluate as hex form"); + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; - dec_value_start = 0; lp = lstart - 1; continue; } else { - ASN_DEBUG("state %d at %ld", state, (long)(lp - lstart)); + ASN_DEBUG("state %d at %d", state, lp - lstart); break; } /* [A-Fa-f] */ @@ -444,23 +462,24 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun case 0x61:case 0x62:case 0x63:case 0x64:case 0x65:case 0x66: switch(state) { case ST_SKIPSPHEX: - case ST_LEADSPACE: /* Fall through */ + case ST_SKIPSPACE: /* Fall through */ case ST_HEXDIGIT1: - hex_value = lv - ((lv < 0x61) ? 0x41 : 0x61); - hex_value += 10; - hex_value <<= 4; + value = lv - ((lv < 0x61) ? 0x41 : 0x61); + value += 10; + value <<= 4; state = ST_HEXDIGIT2; continue; case ST_HEXDIGIT2: - hex_value += lv - ((lv < 0x61) ? 0x41 : 0x61); - hex_value += 10; - st->buf[st->size++] = (uint8_t)hex_value; + value += lv - ((lv < 0x61) ? 0x41 : 0x61); + value += 10; + st->buf[st->size++] = (uint8_t)value; state = ST_HEXCOLON; continue; case ST_DIGITS: ASN_DEBUG("INTEGER re-evaluate as hex form"); + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; - dec_value_start = 0; lp = lstart - 1; continue; default: @@ -470,54 +489,39 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun } /* Found extra non-numeric stuff */ - ASN_DEBUG("INTEGER :: Found non-numeric 0x%2x at %ld", - lv, (long)(lp - lstart)); - state = ST_UNEXPECTED; + ASN_DEBUG("Found non-numeric 0x%2x at %d", + lv, lp - lstart); + state = ST_EXTRASTUFF; break; } switch(state) { - case ST_END_ENUM: - /* Got a complete and valid enumeration encoded as a tag. */ - break; case ST_DIGITS: - dec_value_end = lstop; - /* FALL THROUGH */ - case ST_DIGITS_TRAILSPACE: - /* The last symbol encountered was a digit. */ - switch(asn_strtol_lim(dec_value_start, &dec_value_end, &dec_value)) { - case ASN_STRTOL_OK: - break; - case ASN_STRTOL_ERROR_RANGE: - return XPBD_DECODER_LIMIT; - case ASN_STRTOL_ERROR_INVAL: - case ASN_STRTOL_EXPECT_MORE: - case ASN_STRTOL_EXTRA_DATA: - return XPBD_BROKEN_ENCODING; - } + /* Everything is cool */ break; case ST_HEXCOLON: - case ST_HEXDIGITS_TRAILSPACE: st->buf[st->size] = 0; /* Just in case termination */ return XPBD_BODY_CONSUMED; case ST_HEXDIGIT1: case ST_HEXDIGIT2: case ST_SKIPSPHEX: return XPBD_BROKEN_ENCODING; - case ST_LEADSPACE: - /* Content not found */ - return XPBD_NOT_BODY_IGNORE; - case ST_WAITDIGITS: - case ST_UNEXPECTED: - ASN_DEBUG("INTEGER: No useful digits (state %d)", state); - return XPBD_BROKEN_ENCODING; /* No digits */ + default: + if(xer_is_whitespace(lp, lstop - lp)) { + if(state != ST_EXTRASTUFF) + return XPBD_NOT_BODY_IGNORE; + break; + } else { + ASN_DEBUG("INTEGER: No useful digits (state %d)", + state); + return XPBD_BROKEN_ENCODING; /* No digits */ + } + break; } - /* - * Convert the result of parsing of enumeration or a straight - * decimal value into a BER representation. - */ - if(asn_long2INTEGER(st, dec_value)) + value *= sign; /* Change sign, if needed */ + + if(asn_long2INTEGER(st, value)) return XPBD_SYSTEM_FAILURE; return XPBD_BODY_CONSUMED; @@ -552,8 +556,6 @@ INTEGER_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, _ASN_ENCODED_OK(er); } -#ifndef ASN_DISABLE_PER_SUPPORT - asn_dec_rval_t INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { @@ -595,35 +597,30 @@ INTEGER_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, } } - /* X.691-2008/11, #13.2.2, constrained whole number */ + /* X.691, #12.2.2 */ if(ct && ct->flags != APC_UNCONSTRAINED) { - /* #11.5.6 */ + /* #10.5.6 */ ASN_DEBUG("Integer with range %d bits", ct->range_bits); if(ct->range_bits >= 0) { - if((size_t)ct->range_bits > 8 * sizeof(unsigned long)) - _ASN_DECODE_FAILED; - - if(specs && specs->field_unsigned) { - unsigned long uvalue; - if(uper_get_constrained_whole_number(pd, - &uvalue, ct->range_bits)) - _ASN_DECODE_STARVED; - ASN_DEBUG("Got value %lu + low %ld", - uvalue, ct->lower_bound); - uvalue += ct->lower_bound; - if(asn_ulong2INTEGER(st, uvalue)) - _ASN_DECODE_FAILED; + long value; + if(ct->range_bits == 32) { + long lhalf; + value = per_get_few_bits(pd, 16); + if(value < 0) _ASN_DECODE_STARVED; + lhalf = per_get_few_bits(pd, 16); + if(lhalf < 0) _ASN_DECODE_STARVED; + value = (value << 16) | lhalf; } else { - unsigned long svalue; - if(uper_get_constrained_whole_number(pd, - &svalue, ct->range_bits)) - _ASN_DECODE_STARVED; - ASN_DEBUG("Got value %ld + low %ld", - svalue, ct->lower_bound); - svalue += ct->lower_bound; - if(asn_long2INTEGER(st, svalue)) - _ASN_DECODE_FAILED; + value = per_get_few_bits(pd, ct->range_bits); + if(value < 0) _ASN_DECODE_STARVED; } + ASN_DEBUG("Got value %ld + low %ld", + value, ct->lower_bound); + value += ct->lower_bound; + if((specs && specs->field_unsigned) + ? asn_ulong2INTEGER(st, value) + : asn_long2INTEGER(st, value)) + _ASN_DECODE_FAILED; return rval; } } else { @@ -730,14 +727,22 @@ INTEGER_encode_uper(asn_TYPE_descriptor_t *td, } - /* X.691-11/2008, #13.2.2, test if constrained whole number */ + /* X.691, #12.2.2 */ if(ct && ct->range_bits >= 0) { - /* #11.5.6 -> #11.3 */ - ASN_DEBUG("Encoding integer %ld (%lu) with range %d bits", - value, value - ct->lower_bound, ct->range_bits); - unsigned long v = value - ct->lower_bound; - if(uper_put_constrained_whole_number_u(po, v, ct->range_bits)) - _ASN_ENCODE_FAILED; + /* #10.5.6 */ + ASN_DEBUG("Encoding integer with range %d bits", + ct->range_bits); + if(ct->range_bits == 32) { + /* TODO: extend to >32 bits */ + long v = value - ct->lower_bound; + if(per_put_few_bits(po, v >> 1, 31) + || per_put_few_bits(po, v, 1)) + _ASN_ENCODE_FAILED; + } else { + if(per_put_few_bits(po, value - ct->lower_bound, + ct->range_bits)) + _ASN_ENCODE_FAILED; + } _ASN_ENCODED_OK(er); } @@ -759,8 +764,6 @@ INTEGER_encode_uper(asn_TYPE_descriptor_t *td, _ASN_ENCODED_OK(er); } -#endif /* ASN_DISABLE_PER_SUPPORT */ - int asn_INTEGER2long(const INTEGER_t *iptr, long *lptr) { uint8_t *b, *end; @@ -932,92 +935,3 @@ asn_long2INTEGER(INTEGER_t *st, long value) { return 0; } - -/* - * This function is going to be DEPRECATED soon. - */ -enum asn_strtol_result_e -asn_strtol(const char *str, const char *end, long *lp) { - const char *endp = end; - - switch(asn_strtol_lim(str, &endp, lp)) { - case ASN_STRTOL_ERROR_RANGE: - return ASN_STRTOL_ERROR_RANGE; - case ASN_STRTOL_ERROR_INVAL: - return ASN_STRTOL_ERROR_INVAL; - case ASN_STRTOL_EXPECT_MORE: - return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ - case ASN_STRTOL_OK: - return ASN_STRTOL_OK; - case ASN_STRTOL_EXTRA_DATA: - return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ - } - - return ASN_STRTOL_ERROR_INVAL; /* Retain old behavior */ -} - -/* - * Parse the number in the given string until the given *end position, - * returning the position after the last parsed character back using the - * same (*end) pointer. - * WARNING: This behavior is different from the standard strtol(3). - */ -enum asn_strtol_result_e -asn_strtol_lim(const char *str, const char **end, long *lp) { - int sign = 1; - long l; - - const long upper_boundary = LONG_MAX / 10; - long last_digit_max = LONG_MAX % 10; - - if(str >= *end) return ASN_STRTOL_ERROR_INVAL; - - switch(*str) { - case '-': - last_digit_max++; - sign = -1; - case '+': - str++; - if(str >= *end) { - *end = str; - return ASN_STRTOL_EXPECT_MORE; - } - } - - for(l = 0; str < (*end); str++) { - switch(*str) { - case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: - case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: { - int d = *str - '0'; - if(l < upper_boundary) { - l = l * 10 + d; - } else if(l == upper_boundary) { - if(d <= last_digit_max) { - if(sign > 0) { - l = l * 10 + d; - } else { - sign = 1; - l = -l * 10 - d; - } - } else { - *end = str; - return ASN_STRTOL_ERROR_RANGE; - } - } else { - *end = str; - return ASN_STRTOL_ERROR_RANGE; - } - } - continue; - default: - *end = str; - *lp = sign * l; - return ASN_STRTOL_EXTRA_DATA; - } - } - - *end = str; - *lp = sign * l; - return ASN_STRTOL_OK; -} - diff --git a/lte/rrc/asn/INTEGER.h b/lte/rrc/asn/INTEGER.h index 2813f0cb5..8411bfcdd 100644 --- a/lte/rrc/asn/INTEGER.h +++ b/lte/rrc/asn/INTEGER.h @@ -24,9 +24,9 @@ typedef struct asn_INTEGER_enum_map_s { } asn_INTEGER_enum_map_t; /* This type describes an enumeration for INTEGER and ENUMERATED types */ -typedef const struct asn_INTEGER_specifics_s { - const asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ - const unsigned int *enum2value; /* "tag" => N; sorted by tag */ +typedef struct asn_INTEGER_specifics_s { + asn_INTEGER_enum_map_t *value2enum; /* N -> "tag"; sorted by N */ + unsigned int *enum2value; /* "tag" => N; sorted by tag */ int map_count; /* Elements in either map */ int extension; /* This map is extensible */ int strict_enumeration; /* Enumeration set is fixed */ @@ -57,19 +57,6 @@ int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); int asn_long2INTEGER(INTEGER_t *i, long l); int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); -/* A a reified version of strtol(3) with nicer error reporting. */ -enum asn_strtol_result_e { - ASN_STRTOL_ERROR_RANGE = -3, /* Input outside of numeric range for long type */ - ASN_STRTOL_ERROR_INVAL = -2, /* Invalid data encountered (e.g., "+-") */ - ASN_STRTOL_EXPECT_MORE = -1, /* More data expected (e.g. "+") */ - ASN_STRTOL_OK = 0, /* Conversion succeded, number ends at (*end) */ - ASN_STRTOL_EXTRA_DATA = 1, /* Conversion succeded, but the string has extra stuff */ -}; -enum asn_strtol_result_e asn_strtol_lim(const char *str, const char **end, long *l); - -/* The asn_strtol is going to be DEPRECATED soon */ -enum asn_strtol_result_e asn_strtol(const char *str, const char *end, long *l); - /* * Convert the integer value into the corresponding enumeration map entry. */ diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c new file mode 100644 index 000000000..b4cd6ded0 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c @@ -0,0 +1,197 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersCDMA2000-1XRTT-v1020.h" + +static int +e_CSFB_dual_1XRTT_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +e_CSFB_dual_1XRTT_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +e_CSFB_dual_1XRTT_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_dual_1XRTT_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +e_CSFB_dual_1XRTT_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_dual_1XRTT_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +e_CSFB_dual_1XRTT_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_dual_1XRTT_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +e_CSFB_dual_1XRTT_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + e_CSFB_dual_1XRTT_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_e_CSFB_dual_1XRTT_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_e_CSFB_dual_1XRTT_r10_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_e_CSFB_dual_1XRTT_r10_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_e_CSFB_dual_1XRTT_r10_specs_2 = { + asn_MAP_e_CSFB_dual_1XRTT_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_e_CSFB_dual_1XRTT_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e_CSFB_dual_1XRTT_r10_2 = { + "e-CSFB-dual-1XRTT-r10", + "e-CSFB-dual-1XRTT-r10", + e_CSFB_dual_1XRTT_r10_2_free, + e_CSFB_dual_1XRTT_r10_2_print, + e_CSFB_dual_1XRTT_r10_2_constraint, + e_CSFB_dual_1XRTT_r10_2_decode_ber, + e_CSFB_dual_1XRTT_r10_2_encode_der, + e_CSFB_dual_1XRTT_r10_2_decode_xer, + e_CSFB_dual_1XRTT_r10_2_encode_xer, + e_CSFB_dual_1XRTT_r10_2_decode_uper, + e_CSFB_dual_1XRTT_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2, + sizeof(asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2) + /sizeof(asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2) + /sizeof(asn_DEF_e_CSFB_dual_1XRTT_r10_tags_2[0]), /* 2 */ + &asn_PER_type_e_CSFB_dual_1XRTT_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_e_CSFB_dual_1XRTT_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersCDMA2000_1XRTT_v1020_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_1XRTT_v1020, e_CSFB_dual_1XRTT_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_e_CSFB_dual_1XRTT_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-CSFB-dual-1XRTT-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersCDMA2000_1XRTT_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* e-CSFB-dual-1XRTT-r10 at 3987 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersCDMA2000_1XRTT_v1020_specs_1 = { + sizeof(struct IRAT_ParametersCDMA2000_1XRTT_v1020), + offsetof(struct IRAT_ParametersCDMA2000_1XRTT_v1020, _asn_ctx), + asn_MAP_IRAT_ParametersCDMA2000_1XRTT_v1020_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020 = { + "IRAT-ParametersCDMA2000-1XRTT-v1020", + "IRAT-ParametersCDMA2000-1XRTT-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1, + sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersCDMA2000_1XRTT_v1020_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersCDMA2000_1XRTT_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h new file mode 100644 index 000000000..107e3e712 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersCDMA2000_1XRTT_v1020_H_ +#define _IRAT_ParametersCDMA2000_1XRTT_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersCDMA2000_1XRTT_v1020__e_CSFB_dual_1XRTT_r10 { + IRAT_ParametersCDMA2000_1XRTT_v1020__e_CSFB_dual_1XRTT_r10_supported = 0 +} e_IRAT_ParametersCDMA2000_1XRTT_v1020__e_CSFB_dual_1XRTT_r10; + +/* IRAT-ParametersCDMA2000-1XRTT-v1020 */ +typedef struct IRAT_ParametersCDMA2000_1XRTT_v1020 { + long e_CSFB_dual_1XRTT_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersCDMA2000_1XRTT_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_e_CSFB_dual_1XRTT_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersCDMA2000_1XRTT_v1020_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.c b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.c new file mode 100644 index 000000000..d606d6460 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersCDMA2000-1XRTT-v920.h" + +static int +e_CSFB_1XRTT_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +e_CSFB_1XRTT_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +e_CSFB_1XRTT_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_1XRTT_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +e_CSFB_1XRTT_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_1XRTT_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +e_CSFB_1XRTT_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_1XRTT_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +e_CSFB_1XRTT_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + e_CSFB_1XRTT_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +e_CSFB_ConcPS_Mob1XRTT_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +e_CSFB_ConcPS_Mob1XRTT_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +e_CSFB_ConcPS_Mob1XRTT_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_ConcPS_Mob1XRTT_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +e_CSFB_ConcPS_Mob1XRTT_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_ConcPS_Mob1XRTT_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +e_CSFB_ConcPS_Mob1XRTT_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +e_CSFB_ConcPS_Mob1XRTT_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +e_CSFB_ConcPS_Mob1XRTT_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + e_CSFB_ConcPS_Mob1XRTT_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_e_CSFB_1XRTT_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_e_CSFB_ConcPS_Mob1XRTT_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_e_CSFB_1XRTT_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_e_CSFB_1XRTT_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_e_CSFB_1XRTT_r9_specs_2 = { + asn_MAP_e_CSFB_1XRTT_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_e_CSFB_1XRTT_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_e_CSFB_1XRTT_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e_CSFB_1XRTT_r9_2 = { + "e-CSFB-1XRTT-r9", + "e-CSFB-1XRTT-r9", + e_CSFB_1XRTT_r9_2_free, + e_CSFB_1XRTT_r9_2_print, + e_CSFB_1XRTT_r9_2_constraint, + e_CSFB_1XRTT_r9_2_decode_ber, + e_CSFB_1XRTT_r9_2_encode_der, + e_CSFB_1XRTT_r9_2_decode_xer, + e_CSFB_1XRTT_r9_2_encode_xer, + e_CSFB_1XRTT_r9_2_decode_uper, + e_CSFB_1XRTT_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_e_CSFB_1XRTT_r9_tags_2, + sizeof(asn_DEF_e_CSFB_1XRTT_r9_tags_2) + /sizeof(asn_DEF_e_CSFB_1XRTT_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_e_CSFB_1XRTT_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_e_CSFB_1XRTT_r9_tags_2) + /sizeof(asn_DEF_e_CSFB_1XRTT_r9_tags_2[0]), /* 2 */ + &asn_PER_type_e_CSFB_1XRTT_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_e_CSFB_1XRTT_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_e_CSFB_ConcPS_Mob1XRTT_r9_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_e_CSFB_ConcPS_Mob1XRTT_r9_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_e_CSFB_ConcPS_Mob1XRTT_r9_specs_4 = { + asn_MAP_e_CSFB_ConcPS_Mob1XRTT_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_e_CSFB_ConcPS_Mob1XRTT_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_4 = { + "e-CSFB-ConcPS-Mob1XRTT-r9", + "e-CSFB-ConcPS-Mob1XRTT-r9", + e_CSFB_ConcPS_Mob1XRTT_r9_4_free, + e_CSFB_ConcPS_Mob1XRTT_r9_4_print, + e_CSFB_ConcPS_Mob1XRTT_r9_4_constraint, + e_CSFB_ConcPS_Mob1XRTT_r9_4_decode_ber, + e_CSFB_ConcPS_Mob1XRTT_r9_4_encode_der, + e_CSFB_ConcPS_Mob1XRTT_r9_4_decode_xer, + e_CSFB_ConcPS_Mob1XRTT_r9_4_encode_xer, + e_CSFB_ConcPS_Mob1XRTT_r9_4_decode_uper, + e_CSFB_ConcPS_Mob1XRTT_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4, + sizeof(asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4) + /sizeof(asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4) + /sizeof(asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_tags_4[0]), /* 2 */ + &asn_PER_type_e_CSFB_ConcPS_Mob1XRTT_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_e_CSFB_ConcPS_Mob1XRTT_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersCDMA2000_1XRTT_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_1XRTT_v920, e_CSFB_1XRTT_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_e_CSFB_1XRTT_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-CSFB-1XRTT-r9" + }, + { ATF_POINTER, 1, offsetof(struct IRAT_ParametersCDMA2000_1XRTT_v920, e_CSFB_ConcPS_Mob1XRTT_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-CSFB-ConcPS-Mob1XRTT-r9" + }, +}; +static int asn_MAP_IRAT_ParametersCDMA2000_1XRTT_v920_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersCDMA2000_1XRTT_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* e-CSFB-1XRTT-r9 at 3982 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e-CSFB-ConcPS-Mob1XRTT-r9 at 3983 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersCDMA2000_1XRTT_v920_specs_1 = { + sizeof(struct IRAT_ParametersCDMA2000_1XRTT_v920), + offsetof(struct IRAT_ParametersCDMA2000_1XRTT_v920, _asn_ctx), + asn_MAP_IRAT_ParametersCDMA2000_1XRTT_v920_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_IRAT_ParametersCDMA2000_1XRTT_v920_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920 = { + "IRAT-ParametersCDMA2000-1XRTT-v920", + "IRAT-ParametersCDMA2000-1XRTT-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1, + sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersCDMA2000_1XRTT_v920_1, + 2, /* Elements count */ + &asn_SPC_IRAT_ParametersCDMA2000_1XRTT_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h new file mode 100644 index 000000000..a2cbb2302 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersCDMA2000_1XRTT_v920_H_ +#define _IRAT_ParametersCDMA2000_1XRTT_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersCDMA2000_1XRTT_v920__e_CSFB_1XRTT_r9 { + IRAT_ParametersCDMA2000_1XRTT_v920__e_CSFB_1XRTT_r9_supported = 0 +} e_IRAT_ParametersCDMA2000_1XRTT_v920__e_CSFB_1XRTT_r9; +typedef enum IRAT_ParametersCDMA2000_1XRTT_v920__e_CSFB_ConcPS_Mob1XRTT_r9 { + IRAT_ParametersCDMA2000_1XRTT_v920__e_CSFB_ConcPS_Mob1XRTT_r9_supported = 0 +} e_IRAT_ParametersCDMA2000_1XRTT_v920__e_CSFB_ConcPS_Mob1XRTT_r9; + +/* IRAT-ParametersCDMA2000-1XRTT-v920 */ +typedef struct IRAT_ParametersCDMA2000_1XRTT_v920 { + long e_CSFB_1XRTT_r9; + long *e_CSFB_ConcPS_Mob1XRTT_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersCDMA2000_1XRTT_v920_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_e_CSFB_1XRTT_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_e_CSFB_ConcPS_Mob1XRTT_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersCDMA2000_1XRTT_v920_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c new file mode 100644 index 000000000..e35776213 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c @@ -0,0 +1,358 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersCDMA2000-1XRTT.h" + +static int +tx_Config1XRTT_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +tx_Config1XRTT_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +tx_Config1XRTT_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +tx_Config1XRTT_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +tx_Config1XRTT_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +tx_Config1XRTT_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +tx_Config1XRTT_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +tx_Config1XRTT_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +tx_Config1XRTT_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +tx_Config1XRTT_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + tx_Config1XRTT_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +rx_Config1XRTT_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rx_Config1XRTT_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rx_Config1XRTT_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rx_Config1XRTT_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rx_Config1XRTT_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rx_Config1XRTT_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rx_Config1XRTT_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rx_Config1XRTT_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rx_Config1XRTT_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rx_Config1XRTT_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rx_Config1XRTT_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_tx_Config1XRTT_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_rx_Config1XRTT_constr_6 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_tx_Config1XRTT_value2enum_3[] = { + { 0, 6, "single" }, + { 1, 4, "dual" } +}; +static unsigned int asn_MAP_tx_Config1XRTT_enum2value_3[] = { + 1, /* dual(1) */ + 0 /* single(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_tx_Config1XRTT_specs_3 = { + asn_MAP_tx_Config1XRTT_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_tx_Config1XRTT_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_tx_Config1XRTT_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_tx_Config1XRTT_3 = { + "tx-Config1XRTT", + "tx-Config1XRTT", + tx_Config1XRTT_3_free, + tx_Config1XRTT_3_print, + tx_Config1XRTT_3_constraint, + tx_Config1XRTT_3_decode_ber, + tx_Config1XRTT_3_encode_der, + tx_Config1XRTT_3_decode_xer, + tx_Config1XRTT_3_encode_xer, + tx_Config1XRTT_3_decode_uper, + tx_Config1XRTT_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_tx_Config1XRTT_tags_3, + sizeof(asn_DEF_tx_Config1XRTT_tags_3) + /sizeof(asn_DEF_tx_Config1XRTT_tags_3[0]) - 1, /* 1 */ + asn_DEF_tx_Config1XRTT_tags_3, /* Same as above */ + sizeof(asn_DEF_tx_Config1XRTT_tags_3) + /sizeof(asn_DEF_tx_Config1XRTT_tags_3[0]), /* 2 */ + &asn_PER_type_tx_Config1XRTT_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_tx_Config1XRTT_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_rx_Config1XRTT_value2enum_6[] = { + { 0, 6, "single" }, + { 1, 4, "dual" } +}; +static unsigned int asn_MAP_rx_Config1XRTT_enum2value_6[] = { + 1, /* dual(1) */ + 0 /* single(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rx_Config1XRTT_specs_6 = { + asn_MAP_rx_Config1XRTT_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_rx_Config1XRTT_enum2value_6, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rx_Config1XRTT_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rx_Config1XRTT_6 = { + "rx-Config1XRTT", + "rx-Config1XRTT", + rx_Config1XRTT_6_free, + rx_Config1XRTT_6_print, + rx_Config1XRTT_6_constraint, + rx_Config1XRTT_6_decode_ber, + rx_Config1XRTT_6_encode_der, + rx_Config1XRTT_6_decode_xer, + rx_Config1XRTT_6_encode_xer, + rx_Config1XRTT_6_decode_uper, + rx_Config1XRTT_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rx_Config1XRTT_tags_6, + sizeof(asn_DEF_rx_Config1XRTT_tags_6) + /sizeof(asn_DEF_rx_Config1XRTT_tags_6[0]) - 1, /* 1 */ + asn_DEF_rx_Config1XRTT_tags_6, /* Same as above */ + sizeof(asn_DEF_rx_Config1XRTT_tags_6) + /sizeof(asn_DEF_rx_Config1XRTT_tags_6[0]), /* 2 */ + &asn_PER_type_rx_Config1XRTT_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rx_Config1XRTT_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersCDMA2000_1XRTT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_1XRTT, supportedBandList1XRTT), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandList1XRTT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandList1XRTT" + }, + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_1XRTT, tx_Config1XRTT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_tx_Config1XRTT_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tx-Config1XRTT" + }, + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_1XRTT, rx_Config1XRTT), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rx_Config1XRTT_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rx-Config1XRTT" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersCDMA2000_1XRTT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* supportedBandList1XRTT at 3976 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tx-Config1XRTT at 3977 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rx-Config1XRTT at 3978 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersCDMA2000_1XRTT_specs_1 = { + sizeof(struct IRAT_ParametersCDMA2000_1XRTT), + offsetof(struct IRAT_ParametersCDMA2000_1XRTT, _asn_ctx), + asn_MAP_IRAT_ParametersCDMA2000_1XRTT_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT = { + "IRAT-ParametersCDMA2000-1XRTT", + "IRAT-ParametersCDMA2000-1XRTT", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1, + sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_1XRTT_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersCDMA2000_1XRTT_1, + 3, /* Elements count */ + &asn_SPC_IRAT_ParametersCDMA2000_1XRTT_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h new file mode 100644 index 000000000..d68841ff5 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersCDMA2000_1XRTT_H_ +#define _IRAT_ParametersCDMA2000_1XRTT_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandList1XRTT.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersCDMA2000_1XRTT__tx_Config1XRTT { + IRAT_ParametersCDMA2000_1XRTT__tx_Config1XRTT_single = 0, + IRAT_ParametersCDMA2000_1XRTT__tx_Config1XRTT_dual = 1 +} e_IRAT_ParametersCDMA2000_1XRTT__tx_Config1XRTT; +typedef enum IRAT_ParametersCDMA2000_1XRTT__rx_Config1XRTT { + IRAT_ParametersCDMA2000_1XRTT__rx_Config1XRTT_single = 0, + IRAT_ParametersCDMA2000_1XRTT__rx_Config1XRTT_dual = 1 +} e_IRAT_ParametersCDMA2000_1XRTT__rx_Config1XRTT; + +/* IRAT-ParametersCDMA2000-1XRTT */ +typedef struct IRAT_ParametersCDMA2000_1XRTT { + SupportedBandList1XRTT_t supportedBandList1XRTT; + long tx_Config1XRTT; + long rx_Config1XRTT; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersCDMA2000_1XRTT_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_tx_Config1XRTT_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rx_Config1XRTT_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_1XRTT; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersCDMA2000_1XRTT_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c b/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c new file mode 100644 index 000000000..658638744 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c @@ -0,0 +1,358 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersCDMA2000-HRPD.h" + +static int +tx_ConfigHRPD_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +tx_ConfigHRPD_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +tx_ConfigHRPD_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +tx_ConfigHRPD_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +tx_ConfigHRPD_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +tx_ConfigHRPD_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +tx_ConfigHRPD_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +tx_ConfigHRPD_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +tx_ConfigHRPD_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +tx_ConfigHRPD_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + tx_ConfigHRPD_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +rx_ConfigHRPD_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rx_ConfigHRPD_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rx_ConfigHRPD_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rx_ConfigHRPD_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rx_ConfigHRPD_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rx_ConfigHRPD_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rx_ConfigHRPD_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rx_ConfigHRPD_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rx_ConfigHRPD_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rx_ConfigHRPD_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rx_ConfigHRPD_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_tx_ConfigHRPD_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_rx_ConfigHRPD_constr_6 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_tx_ConfigHRPD_value2enum_3[] = { + { 0, 6, "single" }, + { 1, 4, "dual" } +}; +static unsigned int asn_MAP_tx_ConfigHRPD_enum2value_3[] = { + 1, /* dual(1) */ + 0 /* single(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_tx_ConfigHRPD_specs_3 = { + asn_MAP_tx_ConfigHRPD_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_tx_ConfigHRPD_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_tx_ConfigHRPD_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_tx_ConfigHRPD_3 = { + "tx-ConfigHRPD", + "tx-ConfigHRPD", + tx_ConfigHRPD_3_free, + tx_ConfigHRPD_3_print, + tx_ConfigHRPD_3_constraint, + tx_ConfigHRPD_3_decode_ber, + tx_ConfigHRPD_3_encode_der, + tx_ConfigHRPD_3_decode_xer, + tx_ConfigHRPD_3_encode_xer, + tx_ConfigHRPD_3_decode_uper, + tx_ConfigHRPD_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_tx_ConfigHRPD_tags_3, + sizeof(asn_DEF_tx_ConfigHRPD_tags_3) + /sizeof(asn_DEF_tx_ConfigHRPD_tags_3[0]) - 1, /* 1 */ + asn_DEF_tx_ConfigHRPD_tags_3, /* Same as above */ + sizeof(asn_DEF_tx_ConfigHRPD_tags_3) + /sizeof(asn_DEF_tx_ConfigHRPD_tags_3[0]), /* 2 */ + &asn_PER_type_tx_ConfigHRPD_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_tx_ConfigHRPD_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_rx_ConfigHRPD_value2enum_6[] = { + { 0, 6, "single" }, + { 1, 4, "dual" } +}; +static unsigned int asn_MAP_rx_ConfigHRPD_enum2value_6[] = { + 1, /* dual(1) */ + 0 /* single(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rx_ConfigHRPD_specs_6 = { + asn_MAP_rx_ConfigHRPD_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_rx_ConfigHRPD_enum2value_6, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rx_ConfigHRPD_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rx_ConfigHRPD_6 = { + "rx-ConfigHRPD", + "rx-ConfigHRPD", + rx_ConfigHRPD_6_free, + rx_ConfigHRPD_6_print, + rx_ConfigHRPD_6_constraint, + rx_ConfigHRPD_6_decode_ber, + rx_ConfigHRPD_6_encode_der, + rx_ConfigHRPD_6_decode_xer, + rx_ConfigHRPD_6_encode_xer, + rx_ConfigHRPD_6_decode_uper, + rx_ConfigHRPD_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rx_ConfigHRPD_tags_6, + sizeof(asn_DEF_rx_ConfigHRPD_tags_6) + /sizeof(asn_DEF_rx_ConfigHRPD_tags_6[0]) - 1, /* 1 */ + asn_DEF_rx_ConfigHRPD_tags_6, /* Same as above */ + sizeof(asn_DEF_rx_ConfigHRPD_tags_6) + /sizeof(asn_DEF_rx_ConfigHRPD_tags_6[0]), /* 2 */ + &asn_PER_type_rx_ConfigHRPD_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rx_ConfigHRPD_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersCDMA2000_HRPD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_HRPD, supportedBandListHRPD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListHRPD" + }, + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_HRPD, tx_ConfigHRPD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_tx_ConfigHRPD_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tx-ConfigHRPD" + }, + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersCDMA2000_HRPD, rx_ConfigHRPD), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rx_ConfigHRPD_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rx-ConfigHRPD" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersCDMA2000_HRPD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* supportedBandListHRPD at 3968 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tx-ConfigHRPD at 3969 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rx-ConfigHRPD at 3970 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersCDMA2000_HRPD_specs_1 = { + sizeof(struct IRAT_ParametersCDMA2000_HRPD), + offsetof(struct IRAT_ParametersCDMA2000_HRPD, _asn_ctx), + asn_MAP_IRAT_ParametersCDMA2000_HRPD_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_HRPD = { + "IRAT-ParametersCDMA2000-HRPD", + "IRAT-ParametersCDMA2000-HRPD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1, + sizeof(asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1) + /sizeof(asn_DEF_IRAT_ParametersCDMA2000_HRPD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersCDMA2000_HRPD_1, + 3, /* Elements count */ + &asn_SPC_IRAT_ParametersCDMA2000_HRPD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h b/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h new file mode 100644 index 000000000..31f0fb756 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersCDMA2000_HRPD_H_ +#define _IRAT_ParametersCDMA2000_HRPD_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListHRPD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersCDMA2000_HRPD__tx_ConfigHRPD { + IRAT_ParametersCDMA2000_HRPD__tx_ConfigHRPD_single = 0, + IRAT_ParametersCDMA2000_HRPD__tx_ConfigHRPD_dual = 1 +} e_IRAT_ParametersCDMA2000_HRPD__tx_ConfigHRPD; +typedef enum IRAT_ParametersCDMA2000_HRPD__rx_ConfigHRPD { + IRAT_ParametersCDMA2000_HRPD__rx_ConfigHRPD_single = 0, + IRAT_ParametersCDMA2000_HRPD__rx_ConfigHRPD_dual = 1 +} e_IRAT_ParametersCDMA2000_HRPD__rx_ConfigHRPD; + +/* IRAT-ParametersCDMA2000-HRPD */ +typedef struct IRAT_ParametersCDMA2000_HRPD { + SupportedBandListHRPD_t supportedBandListHRPD; + long tx_ConfigHRPD; + long rx_ConfigHRPD; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersCDMA2000_HRPD_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_tx_ConfigHRPD_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rx_ConfigHRPD_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersCDMA2000_HRPD; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersCDMA2000_HRPD_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersGERAN-v920.c b/lte/rrc/asn/IRAT-ParametersGERAN-v920.c new file mode 100644 index 000000000..9fbc30826 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersGERAN-v920.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersGERAN-v920.h" + +static int +dtm_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dtm_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dtm_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dtm_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dtm_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dtm_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dtm_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dtm_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dtm_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dtm_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dtm_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dtm_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +e_RedirectionGERAN_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +e_RedirectionGERAN_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +e_RedirectionGERAN_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionGERAN_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +e_RedirectionGERAN_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionGERAN_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +e_RedirectionGERAN_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionGERAN_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +e_RedirectionGERAN_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + e_RedirectionGERAN_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_dtm_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_e_RedirectionGERAN_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_dtm_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_dtm_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dtm_r9_specs_2 = { + asn_MAP_dtm_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_dtm_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dtm_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dtm_r9_2 = { + "dtm-r9", + "dtm-r9", + dtm_r9_2_free, + dtm_r9_2_print, + dtm_r9_2_constraint, + dtm_r9_2_decode_ber, + dtm_r9_2_encode_der, + dtm_r9_2_decode_xer, + dtm_r9_2_encode_xer, + dtm_r9_2_decode_uper, + dtm_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dtm_r9_tags_2, + sizeof(asn_DEF_dtm_r9_tags_2) + /sizeof(asn_DEF_dtm_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_dtm_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_dtm_r9_tags_2) + /sizeof(asn_DEF_dtm_r9_tags_2[0]), /* 2 */ + &asn_PER_type_dtm_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dtm_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_e_RedirectionGERAN_r9_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_e_RedirectionGERAN_r9_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_e_RedirectionGERAN_r9_specs_4 = { + asn_MAP_e_RedirectionGERAN_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_e_RedirectionGERAN_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_e_RedirectionGERAN_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e_RedirectionGERAN_r9_4 = { + "e-RedirectionGERAN-r9", + "e-RedirectionGERAN-r9", + e_RedirectionGERAN_r9_4_free, + e_RedirectionGERAN_r9_4_print, + e_RedirectionGERAN_r9_4_constraint, + e_RedirectionGERAN_r9_4_decode_ber, + e_RedirectionGERAN_r9_4_encode_der, + e_RedirectionGERAN_r9_4_decode_xer, + e_RedirectionGERAN_r9_4_encode_xer, + e_RedirectionGERAN_r9_4_decode_uper, + e_RedirectionGERAN_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_e_RedirectionGERAN_r9_tags_4, + sizeof(asn_DEF_e_RedirectionGERAN_r9_tags_4) + /sizeof(asn_DEF_e_RedirectionGERAN_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_e_RedirectionGERAN_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_e_RedirectionGERAN_r9_tags_4) + /sizeof(asn_DEF_e_RedirectionGERAN_r9_tags_4[0]), /* 2 */ + &asn_PER_type_e_RedirectionGERAN_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_e_RedirectionGERAN_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersGERAN_v920_1[] = { + { ATF_POINTER, 2, offsetof(struct IRAT_ParametersGERAN_v920, dtm_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dtm_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dtm-r9" + }, + { ATF_POINTER, 1, offsetof(struct IRAT_ParametersGERAN_v920, e_RedirectionGERAN_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_e_RedirectionGERAN_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-RedirectionGERAN-r9" + }, +}; +static int asn_MAP_IRAT_ParametersGERAN_v920_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersGERAN_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersGERAN_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dtm-r9 at 3956 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* e-RedirectionGERAN-r9 at 3957 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersGERAN_v920_specs_1 = { + sizeof(struct IRAT_ParametersGERAN_v920), + offsetof(struct IRAT_ParametersGERAN_v920, _asn_ctx), + asn_MAP_IRAT_ParametersGERAN_v920_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_IRAT_ParametersGERAN_v920_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersGERAN_v920 = { + "IRAT-ParametersGERAN-v920", + "IRAT-ParametersGERAN-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersGERAN_v920_tags_1, + sizeof(asn_DEF_IRAT_ParametersGERAN_v920_tags_1) + /sizeof(asn_DEF_IRAT_ParametersGERAN_v920_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersGERAN_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersGERAN_v920_tags_1) + /sizeof(asn_DEF_IRAT_ParametersGERAN_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersGERAN_v920_1, + 2, /* Elements count */ + &asn_SPC_IRAT_ParametersGERAN_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersGERAN-v920.h b/lte/rrc/asn/IRAT-ParametersGERAN-v920.h new file mode 100644 index 000000000..910c47b18 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersGERAN-v920.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersGERAN_v920_H_ +#define _IRAT_ParametersGERAN_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersGERAN_v920__dtm_r9 { + IRAT_ParametersGERAN_v920__dtm_r9_supported = 0 +} e_IRAT_ParametersGERAN_v920__dtm_r9; +typedef enum IRAT_ParametersGERAN_v920__e_RedirectionGERAN_r9 { + IRAT_ParametersGERAN_v920__e_RedirectionGERAN_r9_supported = 0 +} e_IRAT_ParametersGERAN_v920__e_RedirectionGERAN_r9; + +/* IRAT-ParametersGERAN-v920 */ +typedef struct IRAT_ParametersGERAN_v920 { + long *dtm_r9 /* OPTIONAL */; + long *e_RedirectionGERAN_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersGERAN_v920_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_dtm_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_e_RedirectionGERAN_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersGERAN_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersGERAN_v920_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersGERAN.c b/lte/rrc/asn/IRAT-ParametersGERAN.c new file mode 100644 index 000000000..e722c1e0d --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersGERAN.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersGERAN.h" + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersGERAN, supportedBandListGERAN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListGERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersGERAN, interRAT_PS_HO_ToGERAN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-PS-HO-ToGERAN" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* supportedBandListGERAN at 3951 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* interRAT-PS-HO-ToGERAN at 3952 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersGERAN_specs_1 = { + sizeof(struct IRAT_ParametersGERAN), + offsetof(struct IRAT_ParametersGERAN, _asn_ctx), + asn_MAP_IRAT_ParametersGERAN_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersGERAN = { + "IRAT-ParametersGERAN", + "IRAT-ParametersGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersGERAN_tags_1, + sizeof(asn_DEF_IRAT_ParametersGERAN_tags_1) + /sizeof(asn_DEF_IRAT_ParametersGERAN_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersGERAN_tags_1) + /sizeof(asn_DEF_IRAT_ParametersGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersGERAN_1, + 2, /* Elements count */ + &asn_SPC_IRAT_ParametersGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersGERAN.h b/lte/rrc/asn/IRAT-ParametersGERAN.h new file mode 100644 index 000000000..8f2b315bb --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersGERAN.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersGERAN_H_ +#define _IRAT_ParametersGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListGERAN.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IRAT-ParametersGERAN */ +typedef struct IRAT_ParametersGERAN { + SupportedBandListGERAN_t supportedBandListGERAN; + BOOLEAN_t interRAT_PS_HO_ToGERAN; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersGERAN_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-FDD.c b/lte/rrc/asn/IRAT-ParametersUTRA-FDD.c new file mode 100644 index 000000000..bcb46a248 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-FDD.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersUTRA-FDD.h" + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersUTRA_FDD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersUTRA_FDD, supportedBandListUTRA_FDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListUTRA-FDD" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersUTRA_FDD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* supportedBandListUTRA-FDD at 3899 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersUTRA_FDD_specs_1 = { + sizeof(struct IRAT_ParametersUTRA_FDD), + offsetof(struct IRAT_ParametersUTRA_FDD, _asn_ctx), + asn_MAP_IRAT_ParametersUTRA_FDD_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_FDD = { + "IRAT-ParametersUTRA-FDD", + "IRAT-ParametersUTRA-FDD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersUTRA_FDD_tags_1, + sizeof(asn_DEF_IRAT_ParametersUTRA_FDD_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersUTRA_FDD_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_FDD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersUTRA_FDD_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-FDD.h b/lte/rrc/asn/IRAT-ParametersUTRA-FDD.h new file mode 100644 index 000000000..d74f4bc0b --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-FDD.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersUTRA_FDD_H_ +#define _IRAT_ParametersUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListUTRA-FDD.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IRAT-ParametersUTRA-FDD */ +typedef struct IRAT_ParametersUTRA_FDD { + SupportedBandListUTRA_FDD_t supportedBandListUTRA_FDD; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c b/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c new file mode 100644 index 000000000..a5e64680c --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c @@ -0,0 +1,197 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersUTRA-TDD-v1020.h" + +static int +e_RedirectionUTRA_TDD_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +e_RedirectionUTRA_TDD_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +e_RedirectionUTRA_TDD_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionUTRA_TDD_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +e_RedirectionUTRA_TDD_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionUTRA_TDD_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +e_RedirectionUTRA_TDD_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionUTRA_TDD_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +e_RedirectionUTRA_TDD_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + e_RedirectionUTRA_TDD_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_e_RedirectionUTRA_TDD_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_e_RedirectionUTRA_TDD_r10_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_e_RedirectionUTRA_TDD_r10_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_e_RedirectionUTRA_TDD_r10_specs_2 = { + asn_MAP_e_RedirectionUTRA_TDD_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_e_RedirectionUTRA_TDD_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e_RedirectionUTRA_TDD_r10_2 = { + "e-RedirectionUTRA-TDD-r10", + "e-RedirectionUTRA-TDD-r10", + e_RedirectionUTRA_TDD_r10_2_free, + e_RedirectionUTRA_TDD_r10_2_print, + e_RedirectionUTRA_TDD_r10_2_constraint, + e_RedirectionUTRA_TDD_r10_2_decode_ber, + e_RedirectionUTRA_TDD_r10_2_encode_der, + e_RedirectionUTRA_TDD_r10_2_decode_xer, + e_RedirectionUTRA_TDD_r10_2_encode_xer, + e_RedirectionUTRA_TDD_r10_2_decode_uper, + e_RedirectionUTRA_TDD_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2, + sizeof(asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2) + /sizeof(asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2) + /sizeof(asn_DEF_e_RedirectionUTRA_TDD_r10_tags_2[0]), /* 2 */ + &asn_PER_type_e_RedirectionUTRA_TDD_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_e_RedirectionUTRA_TDD_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersUTRA_TDD_v1020_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersUTRA_TDD_v1020, e_RedirectionUTRA_TDD_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_e_RedirectionUTRA_TDD_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-RedirectionUTRA-TDD-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersUTRA_TDD_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* e-RedirectionUTRA-TDD-r10 at 3947 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersUTRA_TDD_v1020_specs_1 = { + sizeof(struct IRAT_ParametersUTRA_TDD_v1020), + offsetof(struct IRAT_ParametersUTRA_TDD_v1020, _asn_ctx), + asn_MAP_IRAT_ParametersUTRA_TDD_v1020_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD_v1020 = { + "IRAT-ParametersUTRA-TDD-v1020", + "IRAT-ParametersUTRA-TDD-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1, + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersUTRA_TDD_v1020_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersUTRA_TDD_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h b/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h new file mode 100644 index 000000000..d0c2f8893 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersUTRA_TDD_v1020_H_ +#define _IRAT_ParametersUTRA_TDD_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersUTRA_TDD_v1020__e_RedirectionUTRA_TDD_r10 { + IRAT_ParametersUTRA_TDD_v1020__e_RedirectionUTRA_TDD_r10_supported = 0 +} e_IRAT_ParametersUTRA_TDD_v1020__e_RedirectionUTRA_TDD_r10; + +/* IRAT-ParametersUTRA-TDD-v1020 */ +typedef struct IRAT_ParametersUTRA_TDD_v1020 { + long e_RedirectionUTRA_TDD_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersUTRA_TDD_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_e_RedirectionUTRA_TDD_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersUTRA_TDD_v1020_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c b/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c new file mode 100644 index 000000000..34b231c90 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersUTRA-TDD128.h" + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersUTRA_TDD128_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersUTRA_TDD128, supportedBandListUTRA_TDD128), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListUTRA_TDD128, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListUTRA-TDD128" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersUTRA_TDD128_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* supportedBandListUTRA-TDD128 at 3918 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersUTRA_TDD128_specs_1 = { + sizeof(struct IRAT_ParametersUTRA_TDD128), + offsetof(struct IRAT_ParametersUTRA_TDD128, _asn_ctx), + asn_MAP_IRAT_ParametersUTRA_TDD128_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD128 = { + "IRAT-ParametersUTRA-TDD128", + "IRAT-ParametersUTRA-TDD128", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1, + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD128_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersUTRA_TDD128_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersUTRA_TDD128_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h b/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h new file mode 100644 index 000000000..60dd31582 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersUTRA_TDD128_H_ +#define _IRAT_ParametersUTRA_TDD128_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListUTRA-TDD128.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IRAT-ParametersUTRA-TDD128 */ +typedef struct IRAT_ParametersUTRA_TDD128 { + SupportedBandListUTRA_TDD128_t supportedBandListUTRA_TDD128; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersUTRA_TDD128_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD128; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersUTRA_TDD128_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c b/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c new file mode 100644 index 000000000..9155df2ab --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersUTRA-TDD384.h" + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersUTRA_TDD384_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersUTRA_TDD384, supportedBandListUTRA_TDD384), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListUTRA_TDD384, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListUTRA-TDD384" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersUTRA_TDD384_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* supportedBandListUTRA-TDD384 at 3928 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersUTRA_TDD384_specs_1 = { + sizeof(struct IRAT_ParametersUTRA_TDD384), + offsetof(struct IRAT_ParametersUTRA_TDD384, _asn_ctx), + asn_MAP_IRAT_ParametersUTRA_TDD384_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD384 = { + "IRAT-ParametersUTRA-TDD384", + "IRAT-ParametersUTRA-TDD384", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1, + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD384_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersUTRA_TDD384_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersUTRA_TDD384_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h b/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h new file mode 100644 index 000000000..1e372b7d8 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersUTRA_TDD384_H_ +#define _IRAT_ParametersUTRA_TDD384_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListUTRA-TDD384.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IRAT-ParametersUTRA-TDD384 */ +typedef struct IRAT_ParametersUTRA_TDD384 { + SupportedBandListUTRA_TDD384_t supportedBandListUTRA_TDD384; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersUTRA_TDD384_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD384; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersUTRA_TDD384_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c b/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c new file mode 100644 index 000000000..357e208e5 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersUTRA-TDD768.h" + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersUTRA_TDD768_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersUTRA_TDD768, supportedBandListUTRA_TDD768), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListUTRA_TDD768, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListUTRA-TDD768" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersUTRA_TDD768_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* supportedBandListUTRA-TDD768 at 3938 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersUTRA_TDD768_specs_1 = { + sizeof(struct IRAT_ParametersUTRA_TDD768), + offsetof(struct IRAT_ParametersUTRA_TDD768, _asn_ctx), + asn_MAP_IRAT_ParametersUTRA_TDD768_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD768 = { + "IRAT-ParametersUTRA-TDD768", + "IRAT-ParametersUTRA-TDD768", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1, + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_TDD768_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersUTRA_TDD768_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersUTRA_TDD768_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h b/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h new file mode 100644 index 000000000..18b3a3532 --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersUTRA_TDD768_H_ +#define _IRAT_ParametersUTRA_TDD768_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListUTRA-TDD768.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IRAT-ParametersUTRA-TDD768 */ +typedef struct IRAT_ParametersUTRA_TDD768 { + SupportedBandListUTRA_TDD768_t supportedBandListUTRA_TDD768; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersUTRA_TDD768_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_TDD768; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersUTRA_TDD768_H_ */ +#include diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-v920.c b/lte/rrc/asn/IRAT-ParametersUTRA-v920.c new file mode 100644 index 000000000..bd30412ff --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-v920.c @@ -0,0 +1,197 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IRAT-ParametersUTRA-v920.h" + +static int +e_RedirectionUTRA_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +e_RedirectionUTRA_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +e_RedirectionUTRA_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionUTRA_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +e_RedirectionUTRA_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionUTRA_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +e_RedirectionUTRA_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +e_RedirectionUTRA_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +e_RedirectionUTRA_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + e_RedirectionUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_e_RedirectionUTRA_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_e_RedirectionUTRA_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_e_RedirectionUTRA_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_e_RedirectionUTRA_r9_specs_2 = { + asn_MAP_e_RedirectionUTRA_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_e_RedirectionUTRA_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_e_RedirectionUTRA_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_e_RedirectionUTRA_r9_2 = { + "e-RedirectionUTRA-r9", + "e-RedirectionUTRA-r9", + e_RedirectionUTRA_r9_2_free, + e_RedirectionUTRA_r9_2_print, + e_RedirectionUTRA_r9_2_constraint, + e_RedirectionUTRA_r9_2_decode_ber, + e_RedirectionUTRA_r9_2_encode_der, + e_RedirectionUTRA_r9_2_decode_xer, + e_RedirectionUTRA_r9_2_encode_xer, + e_RedirectionUTRA_r9_2_decode_uper, + e_RedirectionUTRA_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_e_RedirectionUTRA_r9_tags_2, + sizeof(asn_DEF_e_RedirectionUTRA_r9_tags_2) + /sizeof(asn_DEF_e_RedirectionUTRA_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_e_RedirectionUTRA_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_e_RedirectionUTRA_r9_tags_2) + /sizeof(asn_DEF_e_RedirectionUTRA_r9_tags_2[0]), /* 2 */ + &asn_PER_type_e_RedirectionUTRA_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_e_RedirectionUTRA_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IRAT_ParametersUTRA_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IRAT_ParametersUTRA_v920, e_RedirectionUTRA_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_e_RedirectionUTRA_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-RedirectionUTRA-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_IRAT_ParametersUTRA_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IRAT_ParametersUTRA_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* e-RedirectionUTRA-r9 at 3902 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IRAT_ParametersUTRA_v920_specs_1 = { + sizeof(struct IRAT_ParametersUTRA_v920), + offsetof(struct IRAT_ParametersUTRA_v920, _asn_ctx), + asn_MAP_IRAT_ParametersUTRA_v920_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_v920 = { + "IRAT-ParametersUTRA-v920", + "IRAT-ParametersUTRA-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IRAT_ParametersUTRA_v920_tags_1, + sizeof(asn_DEF_IRAT_ParametersUTRA_v920_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_v920_tags_1[0]), /* 1 */ + asn_DEF_IRAT_ParametersUTRA_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_IRAT_ParametersUTRA_v920_tags_1) + /sizeof(asn_DEF_IRAT_ParametersUTRA_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IRAT_ParametersUTRA_v920_1, + 1, /* Elements count */ + &asn_SPC_IRAT_ParametersUTRA_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-v920.h b/lte/rrc/asn/IRAT-ParametersUTRA-v920.h new file mode 100644 index 000000000..6e780d16c --- /dev/null +++ b/lte/rrc/asn/IRAT-ParametersUTRA-v920.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IRAT_ParametersUTRA_v920_H_ +#define _IRAT_ParametersUTRA_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IRAT_ParametersUTRA_v920__e_RedirectionUTRA_r9 { + IRAT_ParametersUTRA_v920__e_RedirectionUTRA_r9_supported = 0 +} e_IRAT_ParametersUTRA_v920__e_RedirectionUTRA_r9; + +/* IRAT-ParametersUTRA-v920 */ +typedef struct IRAT_ParametersUTRA_v920 { + long e_RedirectionUTRA_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IRAT_ParametersUTRA_v920_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_e_RedirectionUTRA_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IRAT_ParametersUTRA_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _IRAT_ParametersUTRA_v920_H_ */ +#include diff --git a/lte/rrc/asn/IdleModeMobilityControlInfo.c b/lte/rrc/asn/IdleModeMobilityControlInfo.c new file mode 100644 index 000000000..9a5ea9a2d --- /dev/null +++ b/lte/rrc/asn/IdleModeMobilityControlInfo.c @@ -0,0 +1,273 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IdleModeMobilityControlInfo.h" + +static int +t320_8_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t320_8_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t320_8_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t320_8_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t320_8_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t320_8_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t320_8_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t320_8_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t320_8_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t320_8_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t320_8_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t320_8_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t320_8_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t320_8_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t320_8_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t320_8_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t320_8_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t320_8_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_t320_constr_8 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_t320_value2enum_8[] = { + { 0, 4, "min5" }, + { 1, 5, "min10" }, + { 2, 5, "min20" }, + { 3, 5, "min30" }, + { 4, 5, "min60" }, + { 5, 6, "min120" }, + { 6, 6, "min180" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_t320_enum2value_8[] = { + 1, /* min10(1) */ + 5, /* min120(5) */ + 6, /* min180(6) */ + 2, /* min20(2) */ + 3, /* min30(3) */ + 0, /* min5(0) */ + 4, /* min60(4) */ + 7 /* spare1(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t320_specs_8 = { + asn_MAP_t320_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_t320_enum2value_8, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t320_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t320_8 = { + "t320", + "t320", + t320_8_free, + t320_8_print, + t320_8_constraint, + t320_8_decode_ber, + t320_8_encode_der, + t320_8_decode_xer, + t320_8_encode_xer, + t320_8_decode_uper, + t320_8_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t320_tags_8, + sizeof(asn_DEF_t320_tags_8) + /sizeof(asn_DEF_t320_tags_8[0]) - 1, /* 1 */ + asn_DEF_t320_tags_8, /* Same as above */ + sizeof(asn_DEF_t320_tags_8) + /sizeof(asn_DEF_t320_tags_8[0]), /* 2 */ + &asn_PER_type_t320_constr_8, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t320_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_IdleModeMobilityControlInfo_1[] = { + { ATF_POINTER, 7, offsetof(struct IdleModeMobilityControlInfo, freqPriorityListEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FreqPriorityListEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "freqPriorityListEUTRA" + }, + { ATF_POINTER, 6, offsetof(struct IdleModeMobilityControlInfo, freqPriorityListGERAN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FreqsPriorityListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "freqPriorityListGERAN" + }, + { ATF_POINTER, 5, offsetof(struct IdleModeMobilityControlInfo, freqPriorityListUTRA_FDD), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FreqPriorityListUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "freqPriorityListUTRA-FDD" + }, + { ATF_POINTER, 4, offsetof(struct IdleModeMobilityControlInfo, freqPriorityListUTRA_TDD), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FreqPriorityListUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "freqPriorityListUTRA-TDD" + }, + { ATF_POINTER, 3, offsetof(struct IdleModeMobilityControlInfo, bandClassPriorityListHRPD), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandClassPriorityListHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClassPriorityListHRPD" + }, + { ATF_POINTER, 2, offsetof(struct IdleModeMobilityControlInfo, bandClassPriorityList1XRTT), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandClassPriorityList1XRTT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClassPriorityList1XRTT" + }, + { ATF_POINTER, 1, offsetof(struct IdleModeMobilityControlInfo, t320), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t320_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t320" + }, +}; +static int asn_MAP_IdleModeMobilityControlInfo_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 }; +static ber_tlv_tag_t asn_DEF_IdleModeMobilityControlInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IdleModeMobilityControlInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* freqPriorityListEUTRA at 904 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* freqPriorityListGERAN at 905 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* freqPriorityListUTRA-FDD at 906 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* freqPriorityListUTRA-TDD at 907 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* bandClassPriorityListHRPD at 908 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* bandClassPriorityList1XRTT at 909 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* t320 at 911 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IdleModeMobilityControlInfo_specs_1 = { + sizeof(struct IdleModeMobilityControlInfo), + offsetof(struct IdleModeMobilityControlInfo, _asn_ctx), + asn_MAP_IdleModeMobilityControlInfo_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_IdleModeMobilityControlInfo_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + 6, /* Start extensions */ + 8 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IdleModeMobilityControlInfo = { + "IdleModeMobilityControlInfo", + "IdleModeMobilityControlInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IdleModeMobilityControlInfo_tags_1, + sizeof(asn_DEF_IdleModeMobilityControlInfo_tags_1) + /sizeof(asn_DEF_IdleModeMobilityControlInfo_tags_1[0]), /* 1 */ + asn_DEF_IdleModeMobilityControlInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_IdleModeMobilityControlInfo_tags_1) + /sizeof(asn_DEF_IdleModeMobilityControlInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IdleModeMobilityControlInfo_1, + 7, /* Elements count */ + &asn_SPC_IdleModeMobilityControlInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IdleModeMobilityControlInfo.h b/lte/rrc/asn/IdleModeMobilityControlInfo.h new file mode 100644 index 000000000..d20727e65 --- /dev/null +++ b/lte/rrc/asn/IdleModeMobilityControlInfo.h @@ -0,0 +1,77 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IdleModeMobilityControlInfo_H_ +#define _IdleModeMobilityControlInfo_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum IdleModeMobilityControlInfo__t320 { + IdleModeMobilityControlInfo__t320_min5 = 0, + IdleModeMobilityControlInfo__t320_min10 = 1, + IdleModeMobilityControlInfo__t320_min20 = 2, + IdleModeMobilityControlInfo__t320_min30 = 3, + IdleModeMobilityControlInfo__t320_min60 = 4, + IdleModeMobilityControlInfo__t320_min120 = 5, + IdleModeMobilityControlInfo__t320_min180 = 6, + IdleModeMobilityControlInfo__t320_spare1 = 7 +} e_IdleModeMobilityControlInfo__t320; + +/* Forward declarations */ +struct FreqPriorityListEUTRA; +struct FreqsPriorityListGERAN; +struct FreqPriorityListUTRA_FDD; +struct FreqPriorityListUTRA_TDD; +struct BandClassPriorityListHRPD; +struct BandClassPriorityList1XRTT; + +/* IdleModeMobilityControlInfo */ +typedef struct IdleModeMobilityControlInfo { + struct FreqPriorityListEUTRA *freqPriorityListEUTRA /* OPTIONAL */; + struct FreqsPriorityListGERAN *freqPriorityListGERAN /* OPTIONAL */; + struct FreqPriorityListUTRA_FDD *freqPriorityListUTRA_FDD /* OPTIONAL */; + struct FreqPriorityListUTRA_TDD *freqPriorityListUTRA_TDD /* OPTIONAL */; + struct BandClassPriorityListHRPD *bandClassPriorityListHRPD /* OPTIONAL */; + struct BandClassPriorityList1XRTT *bandClassPriorityList1XRTT /* OPTIONAL */; + long *t320 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IdleModeMobilityControlInfo_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_t320_8; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_IdleModeMobilityControlInfo; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "FreqPriorityListEUTRA.h" +#include "FreqsPriorityListGERAN.h" +#include "FreqPriorityListUTRA-FDD.h" +#include "FreqPriorityListUTRA-TDD.h" +#include "BandClassPriorityListHRPD.h" +#include "BandClassPriorityList1XRTT.h" + +#endif /* _IdleModeMobilityControlInfo_H_ */ +#include diff --git a/lte/rrc/asn/InitialUE-Identity.c b/lte/rrc/asn/InitialUE-Identity.c index 5de76fea5..967ab4657 100644 --- a/lte/rrc/asn/InitialUE-Identity.c +++ b/lte/rrc/asn/InitialUE-Identity.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "InitialUE-Identity.h" @@ -37,12 +38,12 @@ memb_randomValue_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, } } -static asn_per_constraints_t asn_PER_memb_randomValue_constr_3 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_randomValue_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_type_InitialUE_Identity_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_InitialUE_Identity_constr_1 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ @@ -67,9 +68,9 @@ static asn_TYPE_member_t asn_MBR_InitialUE_Identity_1[] = { "randomValue" }, }; -static const asn_TYPE_tag2member_t asn_MAP_InitialUE_Identity_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-TMSI */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* randomValue */ +static asn_TYPE_tag2member_t asn_MAP_InitialUE_Identity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-TMSI at 1003 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* randomValue at 1004 */ }; static asn_CHOICE_specifics_t asn_SPC_InitialUE_Identity_specs_1 = { sizeof(struct InitialUE_Identity), diff --git a/lte/rrc/asn/InitialUE-Identity.h b/lte/rrc/asn/InitialUE-Identity.h index 72470fdfc..5e4096e81 100644 --- a/lte/rrc/asn/InitialUE-Identity.h +++ b/lte/rrc/asn/InitialUE-Identity.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _InitialUE_Identity_H_ diff --git a/lte/rrc/asn/InterFreqBandInfo.c b/lte/rrc/asn/InterFreqBandInfo.c new file mode 100644 index 000000000..917d96407 --- /dev/null +++ b/lte/rrc/asn/InterFreqBandInfo.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqBandInfo.h" + +static asn_TYPE_member_t asn_MBR_InterFreqBandInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqBandInfo, interFreqNeedForGaps), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqNeedForGaps" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqBandInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_InterFreqBandInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* interFreqNeedForGaps at 3888 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_InterFreqBandInfo_specs_1 = { + sizeof(struct InterFreqBandInfo), + offsetof(struct InterFreqBandInfo, _asn_ctx), + asn_MAP_InterFreqBandInfo_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqBandInfo = { + "InterFreqBandInfo", + "InterFreqBandInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqBandInfo_tags_1, + sizeof(asn_DEF_InterFreqBandInfo_tags_1) + /sizeof(asn_DEF_InterFreqBandInfo_tags_1[0]), /* 1 */ + asn_DEF_InterFreqBandInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqBandInfo_tags_1) + /sizeof(asn_DEF_InterFreqBandInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_InterFreqBandInfo_1, + 1, /* Elements count */ + &asn_SPC_InterFreqBandInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqBandInfo.h b/lte/rrc/asn/InterFreqBandInfo.h new file mode 100644 index 000000000..9c5207e31 --- /dev/null +++ b/lte/rrc/asn/InterFreqBandInfo.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqBandInfo_H_ +#define _InterFreqBandInfo_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterFreqBandInfo */ +typedef struct InterFreqBandInfo { + BOOLEAN_t interFreqNeedForGaps; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqBandInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqBandInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterFreqBandInfo_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqBandList.c b/lte/rrc/asn/InterFreqBandList.c new file mode 100644 index 000000000..254a0dc08 --- /dev/null +++ b/lte/rrc/asn/InterFreqBandList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqBandList.h" + +static asn_per_constraints_t asn_PER_type_InterFreqBandList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InterFreqBandList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_InterFreqBandInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqBandList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_InterFreqBandList_specs_1 = { + sizeof(struct InterFreqBandList), + offsetof(struct InterFreqBandList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqBandList = { + "InterFreqBandList", + "InterFreqBandList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqBandList_tags_1, + sizeof(asn_DEF_InterFreqBandList_tags_1) + /sizeof(asn_DEF_InterFreqBandList_tags_1[0]), /* 1 */ + asn_DEF_InterFreqBandList_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqBandList_tags_1) + /sizeof(asn_DEF_InterFreqBandList_tags_1[0]), /* 1 */ + &asn_PER_type_InterFreqBandList_constr_1, + asn_MBR_InterFreqBandList_1, + 1, /* Single element */ + &asn_SPC_InterFreqBandList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqBandList.h b/lte/rrc/asn/InterFreqBandList.h new file mode 100644 index 000000000..43d421109 --- /dev/null +++ b/lte/rrc/asn/InterFreqBandList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqBandList_H_ +#define _InterFreqBandList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct InterFreqBandInfo; + +/* InterFreqBandList */ +typedef struct InterFreqBandList { + A_SEQUENCE_OF(struct InterFreqBandInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqBandList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqBandList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "InterFreqBandInfo.h" + +#endif /* _InterFreqBandList_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqBlackCellList.c b/lte/rrc/asn/InterFreqBlackCellList.c new file mode 100644 index 000000000..b16953e13 --- /dev/null +++ b/lte/rrc/asn/InterFreqBlackCellList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqBlackCellList.h" + +static asn_per_constraints_t asn_PER_type_InterFreqBlackCellList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InterFreqBlackCellList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PhysCellIdRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqBlackCellList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_InterFreqBlackCellList_specs_1 = { + sizeof(struct InterFreqBlackCellList), + offsetof(struct InterFreqBlackCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqBlackCellList = { + "InterFreqBlackCellList", + "InterFreqBlackCellList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqBlackCellList_tags_1, + sizeof(asn_DEF_InterFreqBlackCellList_tags_1) + /sizeof(asn_DEF_InterFreqBlackCellList_tags_1[0]), /* 1 */ + asn_DEF_InterFreqBlackCellList_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqBlackCellList_tags_1) + /sizeof(asn_DEF_InterFreqBlackCellList_tags_1[0]), /* 1 */ + &asn_PER_type_InterFreqBlackCellList_constr_1, + asn_MBR_InterFreqBlackCellList_1, + 1, /* Single element */ + &asn_SPC_InterFreqBlackCellList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqBlackCellList.h b/lte/rrc/asn/InterFreqBlackCellList.h new file mode 100644 index 000000000..8ad622093 --- /dev/null +++ b/lte/rrc/asn/InterFreqBlackCellList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqBlackCellList_H_ +#define _InterFreqBlackCellList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysCellIdRange; + +/* InterFreqBlackCellList */ +typedef struct InterFreqBlackCellList { + A_SEQUENCE_OF(struct PhysCellIdRange) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqBlackCellList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqBlackCellList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysCellIdRange.h" + +#endif /* _InterFreqBlackCellList_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqCarrierFreqInfo.c b/lte/rrc/asn/InterFreqCarrierFreqInfo.c new file mode 100644 index 000000000..3b298f8fc --- /dev/null +++ b/lte/rrc/asn/InterFreqCarrierFreqInfo.c @@ -0,0 +1,293 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqCarrierFreqInfo.h" + +static int asn_DFL_13_set_15(int set_value, void **sptr) { + Q_OffsetRange_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 15 */ + *st = 15; + return 0; + } else { + /* Test default value 15 */ + return (*st == 15); + } +} +static asn_TYPE_member_t asn_MBR_threshX_Q_r9_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo__threshX_Q_r9, threshX_HighQ_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-HighQ-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo__threshX_Q_r9, threshX_LowQ_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-LowQ-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_threshX_Q_r9_tags_17[] = { + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_threshX_Q_r9_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* threshX-HighQ-r9 at 1586 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* threshX-LowQ-r9 at 1588 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_threshX_Q_r9_specs_17 = { + sizeof(struct InterFreqCarrierFreqInfo__threshX_Q_r9), + offsetof(struct InterFreqCarrierFreqInfo__threshX_Q_r9, _asn_ctx), + asn_MAP_threshX_Q_r9_tag2el_17, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_threshX_Q_r9_17 = { + "threshX-Q-r9", + "threshX-Q-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_threshX_Q_r9_tags_17, + sizeof(asn_DEF_threshX_Q_r9_tags_17) + /sizeof(asn_DEF_threshX_Q_r9_tags_17[0]) - 1, /* 1 */ + asn_DEF_threshX_Q_r9_tags_17, /* Same as above */ + sizeof(asn_DEF_threshX_Q_r9_tags_17) + /sizeof(asn_DEF_threshX_Q_r9_tags_17[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_threshX_Q_r9_17, + 2, /* Elements count */ + &asn_SPC_threshX_Q_r9_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_InterFreqCarrierFreqInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, dl_CarrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-CarrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, q_RxLevMin), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_RxLevMin, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-RxLevMin" + }, + { ATF_POINTER, 1, offsetof(struct InterFreqCarrierFreqInfo, p_Max), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_P_Max, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p-Max" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, t_ReselectionEUTRA), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reselection, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionEUTRA" + }, + { ATF_POINTER, 1, offsetof(struct InterFreqCarrierFreqInfo, t_ReselectionEUTRA_SF), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionEUTRA-SF" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, threshX_High), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-High" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, threshX_Low), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-Low" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, allowedMeasBandwidth), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AllowedMeasBandwidth, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "allowedMeasBandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, presenceAntennaPort1), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PresenceAntennaPort1, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "presenceAntennaPort1" + }, + { ATF_POINTER, 1, offsetof(struct InterFreqCarrierFreqInfo, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqCarrierFreqInfo, neighCellConfig), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellConfig" + }, + { ATF_POINTER, 5, offsetof(struct InterFreqCarrierFreqInfo, q_OffsetFreq), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_13_set_15, /* DEFAULT 15 */ + "q-OffsetFreq" + }, + { ATF_POINTER, 4, offsetof(struct InterFreqCarrierFreqInfo, interFreqNeighCellList), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterFreqNeighCellList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqNeighCellList" + }, + { ATF_POINTER, 3, offsetof(struct InterFreqCarrierFreqInfo, interFreqBlackCellList), + (ASN_TAG_CLASS_CONTEXT | (13 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterFreqBlackCellList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqBlackCellList" + }, + { ATF_POINTER, 2, offsetof(struct InterFreqCarrierFreqInfo, q_QualMin_r9), + (ASN_TAG_CLASS_CONTEXT | (14 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_QualMin_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-QualMin-r9" + }, + { ATF_POINTER, 1, offsetof(struct InterFreqCarrierFreqInfo, threshX_Q_r9), + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + 0, + &asn_DEF_threshX_Q_r9_17, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshX-Q-r9" + }, +}; +static int asn_MAP_InterFreqCarrierFreqInfo_oms_1[] = { 2, 4, 9, 11, 12, 13, 14, 15 }; +static ber_tlv_tag_t asn_DEF_InterFreqCarrierFreqInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_InterFreqCarrierFreqInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-CarrierFreq at 1570 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* q-RxLevMin at 1571 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* p-Max at 1572 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* t-ReselectionEUTRA at 1573 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* t-ReselectionEUTRA-SF at 1574 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* threshX-High at 1575 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* threshX-Low at 1576 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* allowedMeasBandwidth at 1577 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* presenceAntennaPort1 at 1578 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* cellReselectionPriority at 1579 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* neighCellConfig at 1580 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* q-OffsetFreq at 1581 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* interFreqNeighCellList at 1582 */ + { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* interFreqBlackCellList at 1583 */ + { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* q-QualMin-r9 at 1584 */ + { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 } /* threshX-Q-r9 at 1586 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_InterFreqCarrierFreqInfo_specs_1 = { + sizeof(struct InterFreqCarrierFreqInfo), + offsetof(struct InterFreqCarrierFreqInfo, _asn_ctx), + asn_MAP_InterFreqCarrierFreqInfo_tag2el_1, + 16, /* Count of tags in the map */ + asn_MAP_InterFreqCarrierFreqInfo_oms_1, /* Optional members */ + 8, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqCarrierFreqInfo = { + "InterFreqCarrierFreqInfo", + "InterFreqCarrierFreqInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqCarrierFreqInfo_tags_1, + sizeof(asn_DEF_InterFreqCarrierFreqInfo_tags_1) + /sizeof(asn_DEF_InterFreqCarrierFreqInfo_tags_1[0]), /* 1 */ + asn_DEF_InterFreqCarrierFreqInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqCarrierFreqInfo_tags_1) + /sizeof(asn_DEF_InterFreqCarrierFreqInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_InterFreqCarrierFreqInfo_1, + 16, /* Elements count */ + &asn_SPC_InterFreqCarrierFreqInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqCarrierFreqInfo.h b/lte/rrc/asn/InterFreqCarrierFreqInfo.h new file mode 100644 index 000000000..1c25ae41c --- /dev/null +++ b/lte/rrc/asn/InterFreqCarrierFreqInfo.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqCarrierFreqInfo_H_ +#define _InterFreqCarrierFreqInfo_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include "Q-RxLevMin.h" +#include "P-Max.h" +#include "T-Reselection.h" +#include "ReselectionThreshold.h" +#include "AllowedMeasBandwidth.h" +#include "PresenceAntennaPort1.h" +#include "CellReselectionPriority.h" +#include "NeighCellConfig.h" +#include "Q-OffsetRange.h" +#include "Q-QualMin-r9.h" +#include "ReselectionThresholdQ-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SpeedStateScaleFactors; +struct InterFreqNeighCellList; +struct InterFreqBlackCellList; + +/* InterFreqCarrierFreqInfo */ +typedef struct InterFreqCarrierFreqInfo { + ARFCN_ValueEUTRA_t dl_CarrierFreq; + Q_RxLevMin_t q_RxLevMin; + P_Max_t *p_Max /* OPTIONAL */; + T_Reselection_t t_ReselectionEUTRA; + struct SpeedStateScaleFactors *t_ReselectionEUTRA_SF /* OPTIONAL */; + ReselectionThreshold_t threshX_High; + ReselectionThreshold_t threshX_Low; + AllowedMeasBandwidth_t allowedMeasBandwidth; + PresenceAntennaPort1_t presenceAntennaPort1; + CellReselectionPriority_t *cellReselectionPriority /* OPTIONAL */; + NeighCellConfig_t neighCellConfig; + Q_OffsetRange_t *q_OffsetFreq /* DEFAULT 15 */; + struct InterFreqNeighCellList *interFreqNeighCellList /* OPTIONAL */; + struct InterFreqBlackCellList *interFreqBlackCellList /* OPTIONAL */; + Q_QualMin_r9_t *q_QualMin_r9 /* OPTIONAL */; + struct InterFreqCarrierFreqInfo__threshX_Q_r9 { + ReselectionThresholdQ_r9_t threshX_HighQ_r9; + ReselectionThresholdQ_r9_t threshX_LowQ_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *threshX_Q_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqCarrierFreqInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqCarrierFreqInfo; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SpeedStateScaleFactors.h" +#include "InterFreqNeighCellList.h" +#include "InterFreqBlackCellList.h" + +#endif /* _InterFreqCarrierFreqInfo_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqCarrierFreqList.c b/lte/rrc/asn/InterFreqCarrierFreqList.c new file mode 100644 index 000000000..219e11f73 --- /dev/null +++ b/lte/rrc/asn/InterFreqCarrierFreqList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqCarrierFreqList.h" + +static asn_per_constraints_t asn_PER_type_InterFreqCarrierFreqList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InterFreqCarrierFreqList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_InterFreqCarrierFreqInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqCarrierFreqList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_InterFreqCarrierFreqList_specs_1 = { + sizeof(struct InterFreqCarrierFreqList), + offsetof(struct InterFreqCarrierFreqList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqCarrierFreqList = { + "InterFreqCarrierFreqList", + "InterFreqCarrierFreqList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqCarrierFreqList_tags_1, + sizeof(asn_DEF_InterFreqCarrierFreqList_tags_1) + /sizeof(asn_DEF_InterFreqCarrierFreqList_tags_1[0]), /* 1 */ + asn_DEF_InterFreqCarrierFreqList_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqCarrierFreqList_tags_1) + /sizeof(asn_DEF_InterFreqCarrierFreqList_tags_1[0]), /* 1 */ + &asn_PER_type_InterFreqCarrierFreqList_constr_1, + asn_MBR_InterFreqCarrierFreqList_1, + 1, /* Single element */ + &asn_SPC_InterFreqCarrierFreqList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqCarrierFreqList.h b/lte/rrc/asn/InterFreqCarrierFreqList.h new file mode 100644 index 000000000..4c93a3667 --- /dev/null +++ b/lte/rrc/asn/InterFreqCarrierFreqList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqCarrierFreqList_H_ +#define _InterFreqCarrierFreqList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct InterFreqCarrierFreqInfo; + +/* InterFreqCarrierFreqList */ +typedef struct InterFreqCarrierFreqList { + A_SEQUENCE_OF(struct InterFreqCarrierFreqInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqCarrierFreqList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqCarrierFreqList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "InterFreqCarrierFreqInfo.h" + +#endif /* _InterFreqCarrierFreqList_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqNeighCellInfo.c b/lte/rrc/asn/InterFreqNeighCellInfo.c new file mode 100644 index 000000000..01eea8325 --- /dev/null +++ b/lte/rrc/asn/InterFreqNeighCellInfo.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqNeighCellInfo.h" + +static asn_TYPE_member_t asn_MBR_InterFreqNeighCellInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqNeighCellInfo, physCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqNeighCellInfo, q_OffsetCell), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-OffsetCell" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqNeighCellInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_InterFreqNeighCellInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId at 1594 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-OffsetCell at 1596 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_InterFreqNeighCellInfo_specs_1 = { + sizeof(struct InterFreqNeighCellInfo), + offsetof(struct InterFreqNeighCellInfo, _asn_ctx), + asn_MAP_InterFreqNeighCellInfo_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqNeighCellInfo = { + "InterFreqNeighCellInfo", + "InterFreqNeighCellInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqNeighCellInfo_tags_1, + sizeof(asn_DEF_InterFreqNeighCellInfo_tags_1) + /sizeof(asn_DEF_InterFreqNeighCellInfo_tags_1[0]), /* 1 */ + asn_DEF_InterFreqNeighCellInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqNeighCellInfo_tags_1) + /sizeof(asn_DEF_InterFreqNeighCellInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_InterFreqNeighCellInfo_1, + 2, /* Elements count */ + &asn_SPC_InterFreqNeighCellInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqNeighCellInfo.h b/lte/rrc/asn/InterFreqNeighCellInfo.h new file mode 100644 index 000000000..841846ebc --- /dev/null +++ b/lte/rrc/asn/InterFreqNeighCellInfo.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqNeighCellInfo_H_ +#define _InterFreqNeighCellInfo_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellId.h" +#include "Q-OffsetRange.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterFreqNeighCellInfo */ +typedef struct InterFreqNeighCellInfo { + PhysCellId_t physCellId; + Q_OffsetRange_t q_OffsetCell; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqNeighCellInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqNeighCellInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterFreqNeighCellInfo_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqNeighCellList.c b/lte/rrc/asn/InterFreqNeighCellList.c new file mode 100644 index 000000000..883273ca1 --- /dev/null +++ b/lte/rrc/asn/InterFreqNeighCellList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqNeighCellList.h" + +static asn_per_constraints_t asn_PER_type_InterFreqNeighCellList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InterFreqNeighCellList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_InterFreqNeighCellInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqNeighCellList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_InterFreqNeighCellList_specs_1 = { + sizeof(struct InterFreqNeighCellList), + offsetof(struct InterFreqNeighCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqNeighCellList = { + "InterFreqNeighCellList", + "InterFreqNeighCellList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqNeighCellList_tags_1, + sizeof(asn_DEF_InterFreqNeighCellList_tags_1) + /sizeof(asn_DEF_InterFreqNeighCellList_tags_1[0]), /* 1 */ + asn_DEF_InterFreqNeighCellList_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqNeighCellList_tags_1) + /sizeof(asn_DEF_InterFreqNeighCellList_tags_1[0]), /* 1 */ + &asn_PER_type_InterFreqNeighCellList_constr_1, + asn_MBR_InterFreqNeighCellList_1, + 1, /* Single element */ + &asn_SPC_InterFreqNeighCellList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqNeighCellList.h b/lte/rrc/asn/InterFreqNeighCellList.h new file mode 100644 index 000000000..7e22d4dd6 --- /dev/null +++ b/lte/rrc/asn/InterFreqNeighCellList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqNeighCellList_H_ +#define _InterFreqNeighCellList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct InterFreqNeighCellInfo; + +/* InterFreqNeighCellList */ +typedef struct InterFreqNeighCellList { + A_SEQUENCE_OF(struct InterFreqNeighCellInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqNeighCellList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqNeighCellList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "InterFreqNeighCellInfo.h" + +#endif /* _InterFreqNeighCellList_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.c b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.c new file mode 100644 index 000000000..380974a3d --- /dev/null +++ b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.c @@ -0,0 +1,236 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqRSTDMeasurementIndication-r10-IEs.h" + +static asn_per_constraints_t asn_PER_type_rstd_InterFreqIndication_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_start_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10__start, rstd_InterFreqInfoList_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSTD_InterFreqInfoList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rstd-InterFreqInfoList-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_start_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_start_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rstd-InterFreqInfoList-r10 at 305 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_start_specs_3 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10__start), + offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10__start, _asn_ctx), + asn_MAP_start_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_start_3 = { + "start", + "start", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_start_tags_3, + sizeof(asn_DEF_start_tags_3) + /sizeof(asn_DEF_start_tags_3[0]) - 1, /* 1 */ + asn_DEF_start_tags_3, /* Same as above */ + sizeof(asn_DEF_start_tags_3) + /sizeof(asn_DEF_start_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_start_3, + 1, /* Elements count */ + &asn_SPC_start_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_rstd_InterFreqIndication_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10, choice.start), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_start_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "start" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10, choice.stop), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "stop" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_rstd_InterFreqIndication_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* start at 305 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* stop at 306 */ +}; +static asn_CHOICE_specifics_t asn_SPC_rstd_InterFreqIndication_r10_specs_2 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10), + offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10, _asn_ctx), + offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10, present), + sizeof(((struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10 *)0)->present), + asn_MAP_rstd_InterFreqIndication_r10_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rstd_InterFreqIndication_r10_2 = { + "rstd-InterFreqIndication-r10", + "rstd-InterFreqIndication-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_rstd_InterFreqIndication_r10_constr_2, + asn_MBR_rstd_InterFreqIndication_r10_2, + 2, /* Elements count */ + &asn_SPC_rstd_InterFreqIndication_r10_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_7 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10_IEs__nonCriticalExtension), + offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_7 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_7, + sizeof(asn_DEF_nonCriticalExtension_tags_7) + /sizeof(asn_DEF_nonCriticalExtension_tags_7[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_7, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_7) + /sizeof(asn_DEF_nonCriticalExtension_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_InterFreqRSTDMeasurementIndication_r10_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs, rstd_InterFreqIndication_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_rstd_InterFreqIndication_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rstd-InterFreqIndication-r10" + }, + { ATF_POINTER, 2, offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_nonCriticalExtension_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_InterFreqRSTDMeasurementIndication_r10_IEs_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_InterFreqRSTDMeasurementIndication_r10_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rstd-InterFreqIndication-r10 at 305 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* lateNonCriticalExtension at 308 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 309 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_InterFreqRSTDMeasurementIndication_r10_IEs_specs_1 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10_IEs), + offsetof(struct InterFreqRSTDMeasurementIndication_r10_IEs, _asn_ctx), + asn_MAP_InterFreqRSTDMeasurementIndication_r10_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_InterFreqRSTDMeasurementIndication_r10_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs = { + "InterFreqRSTDMeasurementIndication-r10-IEs", + "InterFreqRSTDMeasurementIndication-r10-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1, + sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1) + /sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1[0]), /* 1 */ + asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1) + /sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_InterFreqRSTDMeasurementIndication_r10_IEs_1, + 3, /* Elements count */ + &asn_SPC_InterFreqRSTDMeasurementIndication_r10_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h new file mode 100644 index 000000000..77ca59966 --- /dev/null +++ b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqRSTDMeasurementIndication_r10_IEs_H_ +#define _InterFreqRSTDMeasurementIndication_r10_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "RSTD-InterFreqInfoList-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_PR { + InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_PR_NOTHING, /* No components present */ + InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_PR_start, + InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_PR_stop +} InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_PR; + +/* InterFreqRSTDMeasurementIndication-r10-IEs */ +typedef struct InterFreqRSTDMeasurementIndication_r10_IEs { + struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10 { + InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_PR present; + union InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10_u { + struct InterFreqRSTDMeasurementIndication_r10_IEs__rstd_InterFreqIndication_r10__start { + RSTD_InterFreqInfoList_r10_t rstd_InterFreqInfoList_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } start; + NULL_t stop; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } rstd_InterFreqIndication_r10; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct InterFreqRSTDMeasurementIndication_r10_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqRSTDMeasurementIndication_r10_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterFreqRSTDMeasurementIndication_r10_IEs_H_ */ +#include diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.c b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.c new file mode 100644 index 000000000..cb460f724 --- /dev/null +++ b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterFreqRSTDMeasurementIndication-r10.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1, choice.interFreqRSTDMeasurementIndication_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterFreqRSTDMeasurementIndication_r10_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqRSTDMeasurementIndication-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interFreqRSTDMeasurementIndication-r10 at 294 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 295 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 295 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 295 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1), + offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1, _asn_ctx), + offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1, present), + sizeof(((struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__criticalExtensionsFuture), + offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 294 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 297 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions), + offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions, _asn_ctx), + offsetof(struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions, present), + sizeof(((struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_InterFreqRSTDMeasurementIndication_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterFreqRSTDMeasurementIndication_r10, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_InterFreqRSTDMeasurementIndication_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 296 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_InterFreqRSTDMeasurementIndication_r10_specs_1 = { + sizeof(struct InterFreqRSTDMeasurementIndication_r10), + offsetof(struct InterFreqRSTDMeasurementIndication_r10, _asn_ctx), + asn_MAP_InterFreqRSTDMeasurementIndication_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_InterFreqRSTDMeasurementIndication_r10 = { + "InterFreqRSTDMeasurementIndication-r10", + "InterFreqRSTDMeasurementIndication-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1, + sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1) + /sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1[0]), /* 1 */ + asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1) + /sizeof(asn_DEF_InterFreqRSTDMeasurementIndication_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_InterFreqRSTDMeasurementIndication_r10_1, + 1, /* Elements count */ + &asn_SPC_InterFreqRSTDMeasurementIndication_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h new file mode 100644 index 000000000..e5d31d7a7 --- /dev/null +++ b/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterFreqRSTDMeasurementIndication_r10_H_ +#define _InterFreqRSTDMeasurementIndication_r10_H_ + + +#include + +/* Including external dependencies */ +#include "InterFreqRSTDMeasurementIndication-r10-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum InterFreqRSTDMeasurementIndication_r10__criticalExtensions_PR { + InterFreqRSTDMeasurementIndication_r10__criticalExtensions_PR_NOTHING, /* No components present */ + InterFreqRSTDMeasurementIndication_r10__criticalExtensions_PR_c1, + InterFreqRSTDMeasurementIndication_r10__criticalExtensions_PR_criticalExtensionsFuture +} InterFreqRSTDMeasurementIndication_r10__criticalExtensions_PR; +typedef enum InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR { + InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR_NOTHING, /* No components present */ + InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR_interFreqRSTDMeasurementIndication_r10, + InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR_spare3, + InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR_spare2, + InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR_spare1 +} InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR; + +/* InterFreqRSTDMeasurementIndication-r10 */ +typedef struct InterFreqRSTDMeasurementIndication_r10 { + struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions { + InterFreqRSTDMeasurementIndication_r10__criticalExtensions_PR present; + union InterFreqRSTDMeasurementIndication_r10__criticalExtensions_u { + struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1 { + InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_PR present; + union InterFreqRSTDMeasurementIndication_r10__criticalExtensions__c1_u { + InterFreqRSTDMeasurementIndication_r10_IEs_t interFreqRSTDMeasurementIndication_r10; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct InterFreqRSTDMeasurementIndication_r10__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterFreqRSTDMeasurementIndication_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterFreqRSTDMeasurementIndication_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterFreqRSTDMeasurementIndication_r10_H_ */ +#include diff --git a/lte/rrc/asn/InterRAT-BandInfo.c b/lte/rrc/asn/InterRAT-BandInfo.c new file mode 100644 index 000000000..750630a9c --- /dev/null +++ b/lte/rrc/asn/InterRAT-BandInfo.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterRAT-BandInfo.h" + +static asn_TYPE_member_t asn_MBR_InterRAT_BandInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct InterRAT_BandInfo, interRAT_NeedForGaps), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-NeedForGaps" + }, +}; +static ber_tlv_tag_t asn_DEF_InterRAT_BandInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_InterRAT_BandInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* interRAT-NeedForGaps at 3894 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_InterRAT_BandInfo_specs_1 = { + sizeof(struct InterRAT_BandInfo), + offsetof(struct InterRAT_BandInfo, _asn_ctx), + asn_MAP_InterRAT_BandInfo_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_InterRAT_BandInfo = { + "InterRAT-BandInfo", + "InterRAT-BandInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterRAT_BandInfo_tags_1, + sizeof(asn_DEF_InterRAT_BandInfo_tags_1) + /sizeof(asn_DEF_InterRAT_BandInfo_tags_1[0]), /* 1 */ + asn_DEF_InterRAT_BandInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_InterRAT_BandInfo_tags_1) + /sizeof(asn_DEF_InterRAT_BandInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_InterRAT_BandInfo_1, + 1, /* Elements count */ + &asn_SPC_InterRAT_BandInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterRAT-BandInfo.h b/lte/rrc/asn/InterRAT-BandInfo.h new file mode 100644 index 000000000..eeead7194 --- /dev/null +++ b/lte/rrc/asn/InterRAT-BandInfo.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterRAT_BandInfo_H_ +#define _InterRAT_BandInfo_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* InterRAT-BandInfo */ +typedef struct InterRAT_BandInfo { + BOOLEAN_t interRAT_NeedForGaps; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterRAT_BandInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterRAT_BandInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _InterRAT_BandInfo_H_ */ +#include diff --git a/lte/rrc/asn/InterRAT-BandList.c b/lte/rrc/asn/InterRAT-BandList.c new file mode 100644 index 000000000..e6db24d0d --- /dev/null +++ b/lte/rrc/asn/InterRAT-BandList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "InterRAT-BandList.h" + +static asn_per_constraints_t asn_PER_type_InterRAT_BandList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_InterRAT_BandList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_InterRAT_BandInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_InterRAT_BandList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_InterRAT_BandList_specs_1 = { + sizeof(struct InterRAT_BandList), + offsetof(struct InterRAT_BandList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_InterRAT_BandList = { + "InterRAT-BandList", + "InterRAT-BandList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_InterRAT_BandList_tags_1, + sizeof(asn_DEF_InterRAT_BandList_tags_1) + /sizeof(asn_DEF_InterRAT_BandList_tags_1[0]), /* 1 */ + asn_DEF_InterRAT_BandList_tags_1, /* Same as above */ + sizeof(asn_DEF_InterRAT_BandList_tags_1) + /sizeof(asn_DEF_InterRAT_BandList_tags_1[0]), /* 1 */ + &asn_PER_type_InterRAT_BandList_constr_1, + asn_MBR_InterRAT_BandList_1, + 1, /* Single element */ + &asn_SPC_InterRAT_BandList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/InterRAT-BandList.h b/lte/rrc/asn/InterRAT-BandList.h new file mode 100644 index 000000000..0751dd7ad --- /dev/null +++ b/lte/rrc/asn/InterRAT-BandList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _InterRAT_BandList_H_ +#define _InterRAT_BandList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct InterRAT_BandInfo; + +/* InterRAT-BandList */ +typedef struct InterRAT_BandList { + A_SEQUENCE_OF(struct InterRAT_BandInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} InterRAT_BandList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_InterRAT_BandList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "InterRAT-BandInfo.h" + +#endif /* _InterRAT_BandList_H_ */ +#include diff --git a/lte/rrc/asn/IntraFreqBlackCellList.c b/lte/rrc/asn/IntraFreqBlackCellList.c new file mode 100644 index 000000000..cbd0f6449 --- /dev/null +++ b/lte/rrc/asn/IntraFreqBlackCellList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IntraFreqBlackCellList.h" + +static asn_per_constraints_t asn_PER_type_IntraFreqBlackCellList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_IntraFreqBlackCellList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PhysCellIdRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_IntraFreqBlackCellList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_IntraFreqBlackCellList_specs_1 = { + sizeof(struct IntraFreqBlackCellList), + offsetof(struct IntraFreqBlackCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_IntraFreqBlackCellList = { + "IntraFreqBlackCellList", + "IntraFreqBlackCellList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IntraFreqBlackCellList_tags_1, + sizeof(asn_DEF_IntraFreqBlackCellList_tags_1) + /sizeof(asn_DEF_IntraFreqBlackCellList_tags_1[0]), /* 1 */ + asn_DEF_IntraFreqBlackCellList_tags_1, /* Same as above */ + sizeof(asn_DEF_IntraFreqBlackCellList_tags_1) + /sizeof(asn_DEF_IntraFreqBlackCellList_tags_1[0]), /* 1 */ + &asn_PER_type_IntraFreqBlackCellList_constr_1, + asn_MBR_IntraFreqBlackCellList_1, + 1, /* Single element */ + &asn_SPC_IntraFreqBlackCellList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IntraFreqBlackCellList.h b/lte/rrc/asn/IntraFreqBlackCellList.h new file mode 100644 index 000000000..f74ed0d35 --- /dev/null +++ b/lte/rrc/asn/IntraFreqBlackCellList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IntraFreqBlackCellList_H_ +#define _IntraFreqBlackCellList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysCellIdRange; + +/* IntraFreqBlackCellList */ +typedef struct IntraFreqBlackCellList { + A_SEQUENCE_OF(struct PhysCellIdRange) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IntraFreqBlackCellList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IntraFreqBlackCellList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysCellIdRange.h" + +#endif /* _IntraFreqBlackCellList_H_ */ +#include diff --git a/lte/rrc/asn/IntraFreqNeighCellInfo.c b/lte/rrc/asn/IntraFreqNeighCellInfo.c new file mode 100644 index 000000000..97dfd13c5 --- /dev/null +++ b/lte/rrc/asn/IntraFreqNeighCellInfo.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IntraFreqNeighCellInfo.h" + +static asn_TYPE_member_t asn_MBR_IntraFreqNeighCellInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct IntraFreqNeighCellInfo, physCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct IntraFreqNeighCellInfo, q_OffsetCell), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-OffsetCell" + }, +}; +static ber_tlv_tag_t asn_DEF_IntraFreqNeighCellInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_IntraFreqNeighCellInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId at 1553 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-OffsetCell at 1554 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_IntraFreqNeighCellInfo_specs_1 = { + sizeof(struct IntraFreqNeighCellInfo), + offsetof(struct IntraFreqNeighCellInfo, _asn_ctx), + asn_MAP_IntraFreqNeighCellInfo_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_IntraFreqNeighCellInfo = { + "IntraFreqNeighCellInfo", + "IntraFreqNeighCellInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IntraFreqNeighCellInfo_tags_1, + sizeof(asn_DEF_IntraFreqNeighCellInfo_tags_1) + /sizeof(asn_DEF_IntraFreqNeighCellInfo_tags_1[0]), /* 1 */ + asn_DEF_IntraFreqNeighCellInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_IntraFreqNeighCellInfo_tags_1) + /sizeof(asn_DEF_IntraFreqNeighCellInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_IntraFreqNeighCellInfo_1, + 2, /* Elements count */ + &asn_SPC_IntraFreqNeighCellInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IntraFreqNeighCellInfo.h b/lte/rrc/asn/IntraFreqNeighCellInfo.h new file mode 100644 index 000000000..35038d91d --- /dev/null +++ b/lte/rrc/asn/IntraFreqNeighCellInfo.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IntraFreqNeighCellInfo_H_ +#define _IntraFreqNeighCellInfo_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellId.h" +#include "Q-OffsetRange.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* IntraFreqNeighCellInfo */ +typedef struct IntraFreqNeighCellInfo { + PhysCellId_t physCellId; + Q_OffsetRange_t q_OffsetCell; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IntraFreqNeighCellInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IntraFreqNeighCellInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _IntraFreqNeighCellInfo_H_ */ +#include diff --git a/lte/rrc/asn/IntraFreqNeighCellList.c b/lte/rrc/asn/IntraFreqNeighCellList.c new file mode 100644 index 000000000..d611ccc2c --- /dev/null +++ b/lte/rrc/asn/IntraFreqNeighCellList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "IntraFreqNeighCellList.h" + +static asn_per_constraints_t asn_PER_type_IntraFreqNeighCellList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_IntraFreqNeighCellList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_IntraFreqNeighCellInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_IntraFreqNeighCellList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_IntraFreqNeighCellList_specs_1 = { + sizeof(struct IntraFreqNeighCellList), + offsetof(struct IntraFreqNeighCellList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_IntraFreqNeighCellList = { + "IntraFreqNeighCellList", + "IntraFreqNeighCellList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_IntraFreqNeighCellList_tags_1, + sizeof(asn_DEF_IntraFreqNeighCellList_tags_1) + /sizeof(asn_DEF_IntraFreqNeighCellList_tags_1[0]), /* 1 */ + asn_DEF_IntraFreqNeighCellList_tags_1, /* Same as above */ + sizeof(asn_DEF_IntraFreqNeighCellList_tags_1) + /sizeof(asn_DEF_IntraFreqNeighCellList_tags_1[0]), /* 1 */ + &asn_PER_type_IntraFreqNeighCellList_constr_1, + asn_MBR_IntraFreqNeighCellList_1, + 1, /* Single element */ + &asn_SPC_IntraFreqNeighCellList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/IntraFreqNeighCellList.h b/lte/rrc/asn/IntraFreqNeighCellList.h new file mode 100644 index 000000000..5fe63a950 --- /dev/null +++ b/lte/rrc/asn/IntraFreqNeighCellList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _IntraFreqNeighCellList_H_ +#define _IntraFreqNeighCellList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct IntraFreqNeighCellInfo; + +/* IntraFreqNeighCellList */ +typedef struct IntraFreqNeighCellList { + A_SEQUENCE_OF(struct IntraFreqNeighCellInfo) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} IntraFreqNeighCellList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_IntraFreqNeighCellList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "IntraFreqNeighCellInfo.h" + +#endif /* _IntraFreqNeighCellList_H_ */ +#include diff --git a/lte/rrc/asn/Key-eNodeB-Star.c b/lte/rrc/asn/Key-eNodeB-Star.c new file mode 100644 index 000000000..12e2af199 --- /dev/null +++ b/lte/rrc/asn/Key-eNodeB-Star.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "Key-eNodeB-Star.h" + +int +Key_eNodeB_Star_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 256)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +Key_eNodeB_Star_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->check_constraints = asn_DEF_BIT_STRING.check_constraints; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +Key_eNodeB_Star_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +Key_eNodeB_Star_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +Key_eNodeB_Star_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +Key_eNodeB_Star_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +Key_eNodeB_Star_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +Key_eNodeB_Star_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +Key_eNodeB_Star_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +Key_eNodeB_Star_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + Key_eNodeB_Star_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_Key_eNodeB_Star_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 256, 256 } /* (SIZE(256..256)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_Key_eNodeB_Star_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Key_eNodeB_Star = { + "Key-eNodeB-Star", + "Key-eNodeB-Star", + Key_eNodeB_Star_free, + Key_eNodeB_Star_print, + Key_eNodeB_Star_constraint, + Key_eNodeB_Star_decode_ber, + Key_eNodeB_Star_encode_der, + Key_eNodeB_Star_decode_xer, + Key_eNodeB_Star_encode_xer, + Key_eNodeB_Star_decode_uper, + Key_eNodeB_Star_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Key_eNodeB_Star_tags_1, + sizeof(asn_DEF_Key_eNodeB_Star_tags_1) + /sizeof(asn_DEF_Key_eNodeB_Star_tags_1[0]), /* 1 */ + asn_DEF_Key_eNodeB_Star_tags_1, /* Same as above */ + sizeof(asn_DEF_Key_eNodeB_Star_tags_1) + /sizeof(asn_DEF_Key_eNodeB_Star_tags_1[0]), /* 1 */ + &asn_PER_type_Key_eNodeB_Star_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/Key-eNodeB-Star.h b/lte/rrc/asn/Key-eNodeB-Star.h new file mode 100644 index 000000000..e20a2d0d7 --- /dev/null +++ b/lte/rrc/asn/Key-eNodeB-Star.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _Key_eNodeB_Star_H_ +#define _Key_eNodeB_Star_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Key-eNodeB-Star */ +typedef BIT_STRING_t Key_eNodeB_Star_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Key_eNodeB_Star; +asn_struct_free_f Key_eNodeB_Star_free; +asn_struct_print_f Key_eNodeB_Star_print; +asn_constr_check_f Key_eNodeB_Star_constraint; +ber_type_decoder_f Key_eNodeB_Star_decode_ber; +der_type_encoder_f Key_eNodeB_Star_encode_der; +xer_type_decoder_f Key_eNodeB_Star_decode_xer; +xer_type_encoder_f Key_eNodeB_Star_encode_xer; +per_type_decoder_f Key_eNodeB_Star_decode_uper; +per_type_encoder_f Key_eNodeB_Star_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Key_eNodeB_Star_H_ */ +#include diff --git a/lte/rrc/asn/LocationInfo-r10.c b/lte/rrc/asn/LocationInfo-r10.c new file mode 100644 index 000000000..f76e3a0e3 --- /dev/null +++ b/lte/rrc/asn/LocationInfo-r10.c @@ -0,0 +1,145 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LocationInfo-r10.h" + +static asn_per_constraints_t asn_PER_type_locationCoordinates_r10_constr_2 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_locationCoordinates_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct LocationInfo_r10__locationCoordinates_r10, choice.ellipsoid_Point_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ellipsoid-Point-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LocationInfo_r10__locationCoordinates_r10, choice.ellipsoidPointWithAltitude_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ellipsoidPointWithAltitude-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_locationCoordinates_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ellipsoid-Point-r10 at 3158 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ellipsoidPointWithAltitude-r10 at 3159 */ +}; +static asn_CHOICE_specifics_t asn_SPC_locationCoordinates_r10_specs_2 = { + sizeof(struct LocationInfo_r10__locationCoordinates_r10), + offsetof(struct LocationInfo_r10__locationCoordinates_r10, _asn_ctx), + offsetof(struct LocationInfo_r10__locationCoordinates_r10, present), + sizeof(((struct LocationInfo_r10__locationCoordinates_r10 *)0)->present), + asn_MAP_locationCoordinates_r10_tag2el_2, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_locationCoordinates_r10_2 = { + "locationCoordinates-r10", + "locationCoordinates-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_locationCoordinates_r10_constr_2, + asn_MBR_locationCoordinates_r10_2, + 2, /* Elements count */ + &asn_SPC_locationCoordinates_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_LocationInfo_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LocationInfo_r10, locationCoordinates_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_locationCoordinates_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "locationCoordinates-r10" + }, + { ATF_POINTER, 2, offsetof(struct LocationInfo_r10, horizontalVelocity_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "horizontalVelocity-r10" + }, + { ATF_POINTER, 1, offsetof(struct LocationInfo_r10, gnss_TOD_msec_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "gnss-TOD-msec-r10" + }, +}; +static int asn_MAP_LocationInfo_r10_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_LocationInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_LocationInfo_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* locationCoordinates-r10 at 3158 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* horizontalVelocity-r10 at 3162 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* gnss-TOD-msec-r10 at 3163 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_LocationInfo_r10_specs_1 = { + sizeof(struct LocationInfo_r10), + offsetof(struct LocationInfo_r10, _asn_ctx), + asn_MAP_LocationInfo_r10_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_LocationInfo_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_LocationInfo_r10 = { + "LocationInfo-r10", + "LocationInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LocationInfo_r10_tags_1, + sizeof(asn_DEF_LocationInfo_r10_tags_1) + /sizeof(asn_DEF_LocationInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_LocationInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LocationInfo_r10_tags_1) + /sizeof(asn_DEF_LocationInfo_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_LocationInfo_r10_1, + 3, /* Elements count */ + &asn_SPC_LocationInfo_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LocationInfo-r10.h b/lte/rrc/asn/LocationInfo-r10.h new file mode 100644 index 000000000..122606f29 --- /dev/null +++ b/lte/rrc/asn/LocationInfo-r10.h @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LocationInfo_r10_H_ +#define _LocationInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LocationInfo_r10__locationCoordinates_r10_PR { + LocationInfo_r10__locationCoordinates_r10_PR_NOTHING, /* No components present */ + LocationInfo_r10__locationCoordinates_r10_PR_ellipsoid_Point_r10, + LocationInfo_r10__locationCoordinates_r10_PR_ellipsoidPointWithAltitude_r10, + /* Extensions may appear below */ + +} LocationInfo_r10__locationCoordinates_r10_PR; + +/* LocationInfo-r10 */ +typedef struct LocationInfo_r10 { + struct LocationInfo_r10__locationCoordinates_r10 { + LocationInfo_r10__locationCoordinates_r10_PR present; + union LocationInfo_r10__locationCoordinates_r10_u { + OCTET_STRING_t ellipsoid_Point_r10; + OCTET_STRING_t ellipsoidPointWithAltitude_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } locationCoordinates_r10; + OCTET_STRING_t *horizontalVelocity_r10 /* OPTIONAL */; + OCTET_STRING_t *gnss_TOD_msec_r10 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LocationInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LocationInfo_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _LocationInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/LogMeasInfo-r10.c b/lte/rrc/asn/LogMeasInfo-r10.c new file mode 100644 index 000000000..c31cc18fd --- /dev/null +++ b/lte/rrc/asn/LogMeasInfo-r10.c @@ -0,0 +1,280 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LogMeasInfo-r10.h" + +static int +memb_relativeTimeStamp_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7200)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_relativeTimeStamp_r10_constr_3 = { + { APC_CONSTRAINED, 13, 13, 0, 7200 } /* (0..7200) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_measResultServCell_r10_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct LogMeasInfo_r10__measResultServCell_r10, rsrpResult_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrpResult-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasInfo_r10__measResultServCell_r10, rsrqResult_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrqResult-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_measResultServCell_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultServCell_r10_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrpResult-r10 at 1402 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rsrqResult-r10 at 1404 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultServCell_r10_specs_5 = { + sizeof(struct LogMeasInfo_r10__measResultServCell_r10), + offsetof(struct LogMeasInfo_r10__measResultServCell_r10, _asn_ctx), + asn_MAP_measResultServCell_r10_tag2el_5, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultServCell_r10_5 = { + "measResultServCell-r10", + "measResultServCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultServCell_r10_tags_5, + sizeof(asn_DEF_measResultServCell_r10_tags_5) + /sizeof(asn_DEF_measResultServCell_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_measResultServCell_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_measResultServCell_r10_tags_5) + /sizeof(asn_DEF_measResultServCell_r10_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultServCell_r10_5, + 2, /* Elements count */ + &asn_SPC_measResultServCell_r10_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResultNeighCells_r10_8[] = { + { ATF_POINTER, 4, offsetof(struct LogMeasInfo_r10__measResultNeighCells_r10, measResultListEUTRA_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2EUTRA_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListEUTRA-r10" + }, + { ATF_POINTER, 3, offsetof(struct LogMeasInfo_r10__measResultNeighCells_r10, measResultListUTRA_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2UTRA_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListUTRA-r10" + }, + { ATF_POINTER, 2, offsetof(struct LogMeasInfo_r10__measResultNeighCells_r10, measResultListGERAN_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2GERAN_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListGERAN-r10" + }, + { ATF_POINTER, 1, offsetof(struct LogMeasInfo_r10__measResultNeighCells_r10, measResultListCDMA2000_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2CDMA2000_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListCDMA2000-r10" + }, +}; +static int asn_MAP_measResultNeighCells_r10_oms_8[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_measResultNeighCells_r10_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultNeighCells_r10_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measResultListEUTRA-r10 at 1406 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultListUTRA-r10 at 1407 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measResultListGERAN-r10 at 1408 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* measResultListCDMA2000-r10 at 1409 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultNeighCells_r10_specs_8 = { + sizeof(struct LogMeasInfo_r10__measResultNeighCells_r10), + offsetof(struct LogMeasInfo_r10__measResultNeighCells_r10, _asn_ctx), + asn_MAP_measResultNeighCells_r10_tag2el_8, + 4, /* Count of tags in the map */ + asn_MAP_measResultNeighCells_r10_oms_8, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultNeighCells_r10_8 = { + "measResultNeighCells-r10", + "measResultNeighCells-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultNeighCells_r10_tags_8, + sizeof(asn_DEF_measResultNeighCells_r10_tags_8) + /sizeof(asn_DEF_measResultNeighCells_r10_tags_8[0]) - 1, /* 1 */ + asn_DEF_measResultNeighCells_r10_tags_8, /* Same as above */ + sizeof(asn_DEF_measResultNeighCells_r10_tags_8) + /sizeof(asn_DEF_measResultNeighCells_r10_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultNeighCells_r10_8, + 4, /* Elements count */ + &asn_SPC_measResultNeighCells_r10_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_LogMeasInfo_r10_1[] = { + { ATF_POINTER, 1, offsetof(struct LogMeasInfo_r10, locationInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LocationInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "locationInfo-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasInfo_r10, relativeTimeStamp_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_relativeTimeStamp_r10_constraint_1, + &asn_PER_memb_relativeTimeStamp_r10_constr_3, + 0, + "relativeTimeStamp-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasInfo_r10, servCellIdentity_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "servCellIdentity-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasInfo_r10, measResultServCell_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_measResultServCell_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultServCell-r10" + }, + { ATF_POINTER, 1, offsetof(struct LogMeasInfo_r10, measResultNeighCells_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + 0, + &asn_DEF_measResultNeighCells_r10_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultNeighCells-r10" + }, +}; +static int asn_MAP_LogMeasInfo_r10_oms_1[] = { 0, 4 }; +static ber_tlv_tag_t asn_DEF_LogMeasInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_LogMeasInfo_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* locationInfo-r10 at 1398 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* relativeTimeStamp-r10 at 1399 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* servCellIdentity-r10 at 1400 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* measResultServCell-r10 at 1402 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* measResultNeighCells-r10 at 1406 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_LogMeasInfo_r10_specs_1 = { + sizeof(struct LogMeasInfo_r10), + offsetof(struct LogMeasInfo_r10, _asn_ctx), + asn_MAP_LogMeasInfo_r10_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_LogMeasInfo_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 4, /* Start extensions */ + 6 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_LogMeasInfo_r10 = { + "LogMeasInfo-r10", + "LogMeasInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LogMeasInfo_r10_tags_1, + sizeof(asn_DEF_LogMeasInfo_r10_tags_1) + /sizeof(asn_DEF_LogMeasInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_LogMeasInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LogMeasInfo_r10_tags_1) + /sizeof(asn_DEF_LogMeasInfo_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_LogMeasInfo_r10_1, + 5, /* Elements count */ + &asn_SPC_LogMeasInfo_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LogMeasInfo-r10.h b/lte/rrc/asn/LogMeasInfo-r10.h new file mode 100644 index 000000000..48b4cf709 --- /dev/null +++ b/lte/rrc/asn/LogMeasInfo-r10.h @@ -0,0 +1,77 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LogMeasInfo_r10_H_ +#define _LogMeasInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include "CellGlobalIdEUTRA.h" +#include "RSRP-Range.h" +#include "RSRQ-Range.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct LocationInfo_r10; +struct MeasResultList2EUTRA_r9; +struct MeasResultList2UTRA_r9; +struct MeasResultList2GERAN_r10; +struct MeasResultList2CDMA2000_r9; + +/* LogMeasInfo-r10 */ +typedef struct LogMeasInfo_r10 { + struct LocationInfo_r10 *locationInfo_r10 /* OPTIONAL */; + long relativeTimeStamp_r10; + CellGlobalIdEUTRA_t servCellIdentity_r10; + struct LogMeasInfo_r10__measResultServCell_r10 { + RSRP_Range_t rsrpResult_r10; + RSRQ_Range_t rsrqResult_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResultServCell_r10; + struct LogMeasInfo_r10__measResultNeighCells_r10 { + struct MeasResultList2EUTRA_r9 *measResultListEUTRA_r10 /* OPTIONAL */; + struct MeasResultList2UTRA_r9 *measResultListUTRA_r10 /* OPTIONAL */; + struct MeasResultList2GERAN_r10 *measResultListGERAN_r10 /* OPTIONAL */; + struct MeasResultList2CDMA2000_r9 *measResultListCDMA2000_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *measResultNeighCells_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LogMeasInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LogMeasInfo_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "LocationInfo-r10.h" +#include "MeasResultList2EUTRA-r9.h" +#include "MeasResultList2UTRA-r9.h" +#include "MeasResultList2GERAN-r10.h" +#include "MeasResultList2CDMA2000-r9.h" + +#endif /* _LogMeasInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/LogMeasInfoList-r10.c b/lte/rrc/asn/LogMeasInfoList-r10.c new file mode 100644 index 000000000..d3b747538 --- /dev/null +++ b/lte/rrc/asn/LogMeasInfoList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LogMeasInfoList-r10.h" + +static asn_per_constraints_t asn_PER_type_LogMeasInfoList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 10, 10, 1, 520 } /* (SIZE(1..520)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_LogMeasInfoList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_LogMeasInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_LogMeasInfoList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_LogMeasInfoList_r10_specs_1 = { + sizeof(struct LogMeasInfoList_r10), + offsetof(struct LogMeasInfoList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_LogMeasInfoList_r10 = { + "LogMeasInfoList-r10", + "LogMeasInfoList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LogMeasInfoList_r10_tags_1, + sizeof(asn_DEF_LogMeasInfoList_r10_tags_1) + /sizeof(asn_DEF_LogMeasInfoList_r10_tags_1[0]), /* 1 */ + asn_DEF_LogMeasInfoList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LogMeasInfoList_r10_tags_1) + /sizeof(asn_DEF_LogMeasInfoList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_LogMeasInfoList_r10_constr_1, + asn_MBR_LogMeasInfoList_r10_1, + 1, /* Single element */ + &asn_SPC_LogMeasInfoList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LogMeasInfoList-r10.h b/lte/rrc/asn/LogMeasInfoList-r10.h new file mode 100644 index 000000000..568ffa72b --- /dev/null +++ b/lte/rrc/asn/LogMeasInfoList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LogMeasInfoList_r10_H_ +#define _LogMeasInfoList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct LogMeasInfo_r10; + +/* LogMeasInfoList-r10 */ +typedef struct LogMeasInfoList_r10 { + A_SEQUENCE_OF(struct LogMeasInfo_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LogMeasInfoList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LogMeasInfoList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "LogMeasInfo-r10.h" + +#endif /* _LogMeasInfoList_r10_H_ */ +#include diff --git a/lte/rrc/asn/LogMeasReport-r10.c b/lte/rrc/asn/LogMeasReport-r10.c new file mode 100644 index 000000000..50b36fd71 --- /dev/null +++ b/lte/rrc/asn/LogMeasReport-r10.c @@ -0,0 +1,311 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LogMeasReport-r10.h" + +static int +logMeasAvailable_r10_7_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +logMeasAvailable_r10_7_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +logMeasAvailable_r10_7_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +logMeasAvailable_r10_7_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_7_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +logMeasAvailable_r10_7_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_7_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +logMeasAvailable_r10_7_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_7_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +logMeasAvailable_r10_7_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_traceRecordingSessionRef_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_tce_Id_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_logMeasAvailable_r10_constr_7 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_traceRecordingSessionRef_r10_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_tce_Id_r10_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_logMeasAvailable_r10_value2enum_7[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_logMeasAvailable_r10_enum2value_7[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_logMeasAvailable_r10_specs_7 = { + asn_MAP_logMeasAvailable_r10_value2enum_7, /* "tag" => N; sorted by tag */ + asn_MAP_logMeasAvailable_r10_enum2value_7, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_logMeasAvailable_r10_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_7 = { + "logMeasAvailable-r10", + "logMeasAvailable-r10", + logMeasAvailable_r10_7_free, + logMeasAvailable_r10_7_print, + logMeasAvailable_r10_7_constraint, + logMeasAvailable_r10_7_decode_ber, + logMeasAvailable_r10_7_encode_der, + logMeasAvailable_r10_7_decode_xer, + logMeasAvailable_r10_7_encode_xer, + logMeasAvailable_r10_7_decode_uper, + logMeasAvailable_r10_7_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_logMeasAvailable_r10_tags_7, + sizeof(asn_DEF_logMeasAvailable_r10_tags_7) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_7[0]) - 1, /* 1 */ + asn_DEF_logMeasAvailable_r10_tags_7, /* Same as above */ + sizeof(asn_DEF_logMeasAvailable_r10_tags_7) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_7[0]), /* 2 */ + &asn_PER_type_logMeasAvailable_r10_constr_7, + 0, 0, /* Defined elsewhere */ + &asn_SPC_logMeasAvailable_r10_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_LogMeasReport_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LogMeasReport_r10, absoluteTimeStamp_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AbsoluteTimeInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "absoluteTimeStamp-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasReport_r10, traceReference_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TraceReference_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "traceReference-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasReport_r10, traceRecordingSessionRef_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_traceRecordingSessionRef_r10_constraint_1, + &asn_PER_memb_traceRecordingSessionRef_r10_constr_4, + 0, + "traceRecordingSessionRef-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasReport_r10, tce_Id_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_tce_Id_r10_constraint_1, + &asn_PER_memb_tce_Id_r10_constr_5, + 0, + "tce-Id-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogMeasReport_r10, logMeasInfoList_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LogMeasInfoList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasInfoList-r10" + }, + { ATF_POINTER, 1, offsetof(struct LogMeasReport_r10, logMeasAvailable_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_logMeasAvailable_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasAvailable-r10" + }, +}; +static int asn_MAP_LogMeasReport_r10_oms_1[] = { 5 }; +static ber_tlv_tag_t asn_DEF_LogMeasReport_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_LogMeasReport_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* absoluteTimeStamp-r10 at 1386 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* traceReference-r10 at 1387 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* traceRecordingSessionRef-r10 at 1388 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* tce-Id-r10 at 1389 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* logMeasInfoList-r10 at 1390 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* logMeasAvailable-r10 at 1391 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_LogMeasReport_r10_specs_1 = { + sizeof(struct LogMeasReport_r10), + offsetof(struct LogMeasReport_r10, _asn_ctx), + asn_MAP_LogMeasReport_r10_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_LogMeasReport_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 5, /* Start extensions */ + 7 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_LogMeasReport_r10 = { + "LogMeasReport-r10", + "LogMeasReport-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LogMeasReport_r10_tags_1, + sizeof(asn_DEF_LogMeasReport_r10_tags_1) + /sizeof(asn_DEF_LogMeasReport_r10_tags_1[0]), /* 1 */ + asn_DEF_LogMeasReport_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LogMeasReport_r10_tags_1) + /sizeof(asn_DEF_LogMeasReport_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_LogMeasReport_r10_1, + 6, /* Elements count */ + &asn_SPC_LogMeasReport_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LogMeasReport-r10.h b/lte/rrc/asn/LogMeasReport-r10.h new file mode 100644 index 000000000..cdb96c498 --- /dev/null +++ b/lte/rrc/asn/LogMeasReport-r10.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LogMeasReport_r10_H_ +#define _LogMeasReport_r10_H_ + + +#include + +/* Including external dependencies */ +#include "AbsoluteTimeInfo-r10.h" +#include "TraceReference-r10.h" +#include +#include "LogMeasInfoList-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LogMeasReport_r10__logMeasAvailable_r10 { + LogMeasReport_r10__logMeasAvailable_r10_true = 0 +} e_LogMeasReport_r10__logMeasAvailable_r10; + +/* LogMeasReport-r10 */ +typedef struct LogMeasReport_r10 { + AbsoluteTimeInfo_r10_t absoluteTimeStamp_r10; + TraceReference_r10_t traceReference_r10; + OCTET_STRING_t traceRecordingSessionRef_r10; + OCTET_STRING_t tce_Id_r10; + LogMeasInfoList_r10_t logMeasInfoList_r10; + long *logMeasAvailable_r10 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LogMeasReport_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_7; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_LogMeasReport_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _LogMeasReport_r10_H_ */ +#include diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.c b/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.c new file mode 100644 index 000000000..e893b19c6 --- /dev/null +++ b/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.c @@ -0,0 +1,232 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LoggedMeasurementConfiguration-r10-IEs.h" + +static int +memb_traceRecordingSessionRef_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_tce_Id_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_traceRecordingSessionRef_r10_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_tce_Id_r10_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_9 = { + sizeof(struct LoggedMeasurementConfiguration_r10_IEs__nonCriticalExtension), + offsetof(struct LoggedMeasurementConfiguration_r10_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_9 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_9, + sizeof(asn_DEF_nonCriticalExtension_tags_9) + /sizeof(asn_DEF_nonCriticalExtension_tags_9[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_9, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_9) + /sizeof(asn_DEF_nonCriticalExtension_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_LoggedMeasurementConfiguration_r10_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, traceReference_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TraceReference_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "traceReference-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, traceRecordingSessionRef_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_traceRecordingSessionRef_r10_constraint_1, + &asn_PER_memb_traceRecordingSessionRef_r10_constr_3, + 0, + "traceRecordingSessionRef-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, tce_Id_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_tce_Id_r10_constraint_1, + &asn_PER_memb_tce_Id_r10_constr_4, + 0, + "tce-Id-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, absoluteTimeInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AbsoluteTimeInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "absoluteTimeInfo-r10" + }, + { ATF_POINTER, 1, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, areaConfiguration_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_AreaConfiguration_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "areaConfiguration-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, loggingDuration_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoggingDuration_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "loggingDuration-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, loggingInterval_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoggingInterval_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "loggingInterval-r10" + }, + { ATF_POINTER, 1, offsetof(struct LoggedMeasurementConfiguration_r10_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + 0, + &asn_DEF_nonCriticalExtension_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_LoggedMeasurementConfiguration_r10_IEs_oms_1[] = { 4, 7 }; +static ber_tlv_tag_t asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_LoggedMeasurementConfiguration_r10_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* traceReference-r10 at 333 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* traceRecordingSessionRef-r10 at 334 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* tce-Id-r10 at 335 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* absoluteTimeInfo-r10 at 336 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* areaConfiguration-r10 at 337 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* loggingDuration-r10 at 338 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* loggingInterval-r10 at 339 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* nonCriticalExtension at 340 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_LoggedMeasurementConfiguration_r10_IEs_specs_1 = { + sizeof(struct LoggedMeasurementConfiguration_r10_IEs), + offsetof(struct LoggedMeasurementConfiguration_r10_IEs, _asn_ctx), + asn_MAP_LoggedMeasurementConfiguration_r10_IEs_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_LoggedMeasurementConfiguration_r10_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_LoggedMeasurementConfiguration_r10_IEs = { + "LoggedMeasurementConfiguration-r10-IEs", + "LoggedMeasurementConfiguration-r10-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1, + sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1) + /sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1[0]), /* 1 */ + asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1) + /sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_LoggedMeasurementConfiguration_r10_IEs_1, + 8, /* Elements count */ + &asn_SPC_LoggedMeasurementConfiguration_r10_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h b/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h new file mode 100644 index 000000000..e67104c25 --- /dev/null +++ b/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LoggedMeasurementConfiguration_r10_IEs_H_ +#define _LoggedMeasurementConfiguration_r10_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "TraceReference-r10.h" +#include +#include "AbsoluteTimeInfo-r10.h" +#include "LoggingDuration-r10.h" +#include "LoggingInterval-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct AreaConfiguration_r10; + +/* LoggedMeasurementConfiguration-r10-IEs */ +typedef struct LoggedMeasurementConfiguration_r10_IEs { + TraceReference_r10_t traceReference_r10; + OCTET_STRING_t traceRecordingSessionRef_r10; + OCTET_STRING_t tce_Id_r10; + AbsoluteTimeInfo_r10_t absoluteTimeInfo_r10; + struct AreaConfiguration_r10 *areaConfiguration_r10 /* OPTIONAL */; + LoggingDuration_r10_t loggingDuration_r10; + LoggingInterval_r10_t loggingInterval_r10; + struct LoggedMeasurementConfiguration_r10_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LoggedMeasurementConfiguration_r10_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LoggedMeasurementConfiguration_r10_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "AreaConfiguration-r10.h" + +#endif /* _LoggedMeasurementConfiguration_r10_IEs_H_ */ +#include diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10.c b/lte/rrc/asn/LoggedMeasurementConfiguration-r10.c new file mode 100644 index 000000000..f5ca0c161 --- /dev/null +++ b/lte/rrc/asn/LoggedMeasurementConfiguration-r10.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LoggedMeasurementConfiguration-r10.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1, choice.loggedMeasurementConfiguration_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LoggedMeasurementConfiguration_r10_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "loggedMeasurementConfiguration-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* loggedMeasurementConfiguration-r10 at 324 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 325 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 325 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 325 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1), + offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1, _asn_ctx), + offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1, present), + sizeof(((struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__criticalExtensionsFuture), + offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 324 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 327 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct LoggedMeasurementConfiguration_r10__criticalExtensions), + offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions, _asn_ctx), + offsetof(struct LoggedMeasurementConfiguration_r10__criticalExtensions, present), + sizeof(((struct LoggedMeasurementConfiguration_r10__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_LoggedMeasurementConfiguration_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct LoggedMeasurementConfiguration_r10, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_LoggedMeasurementConfiguration_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_LoggedMeasurementConfiguration_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 326 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_LoggedMeasurementConfiguration_r10_specs_1 = { + sizeof(struct LoggedMeasurementConfiguration_r10), + offsetof(struct LoggedMeasurementConfiguration_r10, _asn_ctx), + asn_MAP_LoggedMeasurementConfiguration_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_LoggedMeasurementConfiguration_r10 = { + "LoggedMeasurementConfiguration-r10", + "LoggedMeasurementConfiguration-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LoggedMeasurementConfiguration_r10_tags_1, + sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_tags_1) + /sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_tags_1[0]), /* 1 */ + asn_DEF_LoggedMeasurementConfiguration_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_tags_1) + /sizeof(asn_DEF_LoggedMeasurementConfiguration_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_LoggedMeasurementConfiguration_r10_1, + 1, /* Elements count */ + &asn_SPC_LoggedMeasurementConfiguration_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10.h b/lte/rrc/asn/LoggedMeasurementConfiguration-r10.h new file mode 100644 index 000000000..152fb649a --- /dev/null +++ b/lte/rrc/asn/LoggedMeasurementConfiguration-r10.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LoggedMeasurementConfiguration_r10_H_ +#define _LoggedMeasurementConfiguration_r10_H_ + + +#include + +/* Including external dependencies */ +#include "LoggedMeasurementConfiguration-r10-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LoggedMeasurementConfiguration_r10__criticalExtensions_PR { + LoggedMeasurementConfiguration_r10__criticalExtensions_PR_NOTHING, /* No components present */ + LoggedMeasurementConfiguration_r10__criticalExtensions_PR_c1, + LoggedMeasurementConfiguration_r10__criticalExtensions_PR_criticalExtensionsFuture +} LoggedMeasurementConfiguration_r10__criticalExtensions_PR; +typedef enum LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR { + LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR_NOTHING, /* No components present */ + LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR_loggedMeasurementConfiguration_r10, + LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR_spare3, + LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR_spare2, + LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR_spare1 +} LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR; + +/* LoggedMeasurementConfiguration-r10 */ +typedef struct LoggedMeasurementConfiguration_r10 { + struct LoggedMeasurementConfiguration_r10__criticalExtensions { + LoggedMeasurementConfiguration_r10__criticalExtensions_PR present; + union LoggedMeasurementConfiguration_r10__criticalExtensions_u { + struct LoggedMeasurementConfiguration_r10__criticalExtensions__c1 { + LoggedMeasurementConfiguration_r10__criticalExtensions__c1_PR present; + union LoggedMeasurementConfiguration_r10__criticalExtensions__c1_u { + LoggedMeasurementConfiguration_r10_IEs_t loggedMeasurementConfiguration_r10; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct LoggedMeasurementConfiguration_r10__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LoggedMeasurementConfiguration_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LoggedMeasurementConfiguration_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _LoggedMeasurementConfiguration_r10_H_ */ +#include diff --git a/lte/rrc/asn/LoggingDuration-r10.c b/lte/rrc/asn/LoggingDuration-r10.c new file mode 100644 index 000000000..0be2b00f7 --- /dev/null +++ b/lte/rrc/asn/LoggingDuration-r10.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LoggingDuration-r10.h" + +int +LoggingDuration_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +LoggingDuration_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +LoggingDuration_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +LoggingDuration_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +LoggingDuration_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +LoggingDuration_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +LoggingDuration_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +LoggingDuration_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +LoggingDuration_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +LoggingDuration_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + LoggingDuration_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_LoggingDuration_r10_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_LoggingDuration_r10_value2enum_1[] = { + { 0, 5, "min10" }, + { 1, 5, "min20" }, + { 2, 5, "min40" }, + { 3, 5, "min60" }, + { 4, 5, "min90" }, + { 5, 6, "min120" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_LoggingDuration_r10_enum2value_1[] = { + 0, /* min10(0) */ + 5, /* min120(5) */ + 1, /* min20(1) */ + 2, /* min40(2) */ + 3, /* min60(3) */ + 4, /* min90(4) */ + 7, /* spare1(7) */ + 6 /* spare2(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_LoggingDuration_r10_specs_1 = { + asn_MAP_LoggingDuration_r10_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_LoggingDuration_r10_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_LoggingDuration_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LoggingDuration_r10 = { + "LoggingDuration-r10", + "LoggingDuration-r10", + LoggingDuration_r10_free, + LoggingDuration_r10_print, + LoggingDuration_r10_constraint, + LoggingDuration_r10_decode_ber, + LoggingDuration_r10_encode_der, + LoggingDuration_r10_decode_xer, + LoggingDuration_r10_encode_xer, + LoggingDuration_r10_decode_uper, + LoggingDuration_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LoggingDuration_r10_tags_1, + sizeof(asn_DEF_LoggingDuration_r10_tags_1) + /sizeof(asn_DEF_LoggingDuration_r10_tags_1[0]), /* 1 */ + asn_DEF_LoggingDuration_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LoggingDuration_r10_tags_1) + /sizeof(asn_DEF_LoggingDuration_r10_tags_1[0]), /* 1 */ + &asn_PER_type_LoggingDuration_r10_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_LoggingDuration_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LoggingDuration-r10.h b/lte/rrc/asn/LoggingDuration-r10.h new file mode 100644 index 000000000..92aba6098 --- /dev/null +++ b/lte/rrc/asn/LoggingDuration-r10.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LoggingDuration_r10_H_ +#define _LoggingDuration_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LoggingDuration_r10 { + LoggingDuration_r10_min10 = 0, + LoggingDuration_r10_min20 = 1, + LoggingDuration_r10_min40 = 2, + LoggingDuration_r10_min60 = 3, + LoggingDuration_r10_min90 = 4, + LoggingDuration_r10_min120 = 5, + LoggingDuration_r10_spare2 = 6, + LoggingDuration_r10_spare1 = 7 +} e_LoggingDuration_r10; + +/* LoggingDuration-r10 */ +typedef long LoggingDuration_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LoggingDuration_r10; +asn_struct_free_f LoggingDuration_r10_free; +asn_struct_print_f LoggingDuration_r10_print; +asn_constr_check_f LoggingDuration_r10_constraint; +ber_type_decoder_f LoggingDuration_r10_decode_ber; +der_type_encoder_f LoggingDuration_r10_encode_der; +xer_type_decoder_f LoggingDuration_r10_decode_xer; +xer_type_encoder_f LoggingDuration_r10_encode_xer; +per_type_decoder_f LoggingDuration_r10_decode_uper; +per_type_encoder_f LoggingDuration_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LoggingDuration_r10_H_ */ +#include diff --git a/lte/rrc/asn/LoggingInterval-r10.c b/lte/rrc/asn/LoggingInterval-r10.c new file mode 100644 index 000000000..5b4c6253b --- /dev/null +++ b/lte/rrc/asn/LoggingInterval-r10.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LoggingInterval-r10.h" + +int +LoggingInterval_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +LoggingInterval_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +LoggingInterval_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +LoggingInterval_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +LoggingInterval_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +LoggingInterval_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +LoggingInterval_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +LoggingInterval_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +LoggingInterval_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +LoggingInterval_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + LoggingInterval_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_LoggingInterval_r10_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_LoggingInterval_r10_value2enum_1[] = { + { 0, 6, "ms1280" }, + { 1, 6, "ms2560" }, + { 2, 6, "ms5120" }, + { 3, 7, "ms10240" }, + { 4, 7, "ms20480" }, + { 5, 7, "ms30720" }, + { 6, 7, "ms40960" }, + { 7, 7, "ms61440" } +}; +static unsigned int asn_MAP_LoggingInterval_r10_enum2value_1[] = { + 3, /* ms10240(3) */ + 0, /* ms1280(0) */ + 4, /* ms20480(4) */ + 1, /* ms2560(1) */ + 5, /* ms30720(5) */ + 6, /* ms40960(6) */ + 2, /* ms5120(2) */ + 7 /* ms61440(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_LoggingInterval_r10_specs_1 = { + asn_MAP_LoggingInterval_r10_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_LoggingInterval_r10_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_LoggingInterval_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_LoggingInterval_r10 = { + "LoggingInterval-r10", + "LoggingInterval-r10", + LoggingInterval_r10_free, + LoggingInterval_r10_print, + LoggingInterval_r10_constraint, + LoggingInterval_r10_decode_ber, + LoggingInterval_r10_encode_der, + LoggingInterval_r10_decode_xer, + LoggingInterval_r10_encode_xer, + LoggingInterval_r10_decode_uper, + LoggingInterval_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LoggingInterval_r10_tags_1, + sizeof(asn_DEF_LoggingInterval_r10_tags_1) + /sizeof(asn_DEF_LoggingInterval_r10_tags_1[0]), /* 1 */ + asn_DEF_LoggingInterval_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_LoggingInterval_r10_tags_1) + /sizeof(asn_DEF_LoggingInterval_r10_tags_1[0]), /* 1 */ + &asn_PER_type_LoggingInterval_r10_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_LoggingInterval_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LoggingInterval-r10.h b/lte/rrc/asn/LoggingInterval-r10.h new file mode 100644 index 000000000..749586752 --- /dev/null +++ b/lte/rrc/asn/LoggingInterval-r10.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LoggingInterval_r10_H_ +#define _LoggingInterval_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LoggingInterval_r10 { + LoggingInterval_r10_ms1280 = 0, + LoggingInterval_r10_ms2560 = 1, + LoggingInterval_r10_ms5120 = 2, + LoggingInterval_r10_ms10240 = 3, + LoggingInterval_r10_ms20480 = 4, + LoggingInterval_r10_ms30720 = 5, + LoggingInterval_r10_ms40960 = 6, + LoggingInterval_r10_ms61440 = 7 +} e_LoggingInterval_r10; + +/* LoggingInterval-r10 */ +typedef long LoggingInterval_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_LoggingInterval_r10; +asn_struct_free_f LoggingInterval_r10_free; +asn_struct_print_f LoggingInterval_r10_print; +asn_constr_check_f LoggingInterval_r10_constraint; +ber_type_decoder_f LoggingInterval_r10_decode_ber; +der_type_encoder_f LoggingInterval_r10_encode_der; +xer_type_decoder_f LoggingInterval_r10_decode_xer; +xer_type_encoder_f LoggingInterval_r10_encode_xer; +per_type_decoder_f LoggingInterval_r10_decode_uper; +per_type_encoder_f LoggingInterval_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _LoggingInterval_r10_H_ */ +#include diff --git a/lte/rrc/asn/LogicalChannelConfig.c b/lte/rrc/asn/LogicalChannelConfig.c new file mode 100644 index 000000000..bedb5b2e8 --- /dev/null +++ b/lte/rrc/asn/LogicalChannelConfig.c @@ -0,0 +1,672 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "LogicalChannelConfig.h" + +static int +prioritisedBitRate_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +prioritisedBitRate_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +prioritisedBitRate_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +prioritisedBitRate_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +prioritisedBitRate_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +prioritisedBitRate_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +prioritisedBitRate_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +prioritisedBitRate_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +prioritisedBitRate_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +prioritisedBitRate_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + prioritisedBitRate_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +bucketSizeDuration_21_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +bucketSizeDuration_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +bucketSizeDuration_21_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +bucketSizeDuration_21_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +bucketSizeDuration_21_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +bucketSizeDuration_21_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +bucketSizeDuration_21_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +bucketSizeDuration_21_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +bucketSizeDuration_21_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +bucketSizeDuration_21_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + bucketSizeDuration_21_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_priority_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_logicalChannelGroup_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +logicalChannelSR_Mask_r9_31_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +logicalChannelSR_Mask_r9_31_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +logicalChannelSR_Mask_r9_31_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +logicalChannelSR_Mask_r9_31_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +logicalChannelSR_Mask_r9_31_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +logicalChannelSR_Mask_r9_31_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +logicalChannelSR_Mask_r9_31_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +logicalChannelSR_Mask_r9_31_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +logicalChannelSR_Mask_r9_31_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + logicalChannelSR_Mask_r9_31_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_prioritisedBitRate_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_bucketSizeDuration_constr_21 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_priority_constr_3 = { + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (1..16) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_logicalChannelGroup_constr_30 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_logicalChannelSR_Mask_r9_constr_31 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_prioritisedBitRate_value2enum_4[] = { + { 0, 5, "kBps0" }, + { 1, 5, "kBps8" }, + { 2, 6, "kBps16" }, + { 3, 6, "kBps32" }, + { 4, 6, "kBps64" }, + { 5, 7, "kBps128" }, + { 6, 7, "kBps256" }, + { 7, 8, "infinity" }, + { 8, 13, "kBps512-v1020" }, + { 9, 14, "kBps1024-v1020" }, + { 10, 14, "kBps2048-v1020" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_prioritisedBitRate_enum2value_4[] = { + 7, /* infinity(7) */ + 0, /* kBps0(0) */ + 9, /* kBps1024-v1020(9) */ + 5, /* kBps128(5) */ + 2, /* kBps16(2) */ + 10, /* kBps2048-v1020(10) */ + 6, /* kBps256(6) */ + 3, /* kBps32(3) */ + 8, /* kBps512-v1020(8) */ + 4, /* kBps64(4) */ + 1, /* kBps8(1) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11 /* spare5(11) */ +}; +static asn_INTEGER_specifics_t asn_SPC_prioritisedBitRate_specs_4 = { + asn_MAP_prioritisedBitRate_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_prioritisedBitRate_enum2value_4, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_prioritisedBitRate_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_prioritisedBitRate_4 = { + "prioritisedBitRate", + "prioritisedBitRate", + prioritisedBitRate_4_free, + prioritisedBitRate_4_print, + prioritisedBitRate_4_constraint, + prioritisedBitRate_4_decode_ber, + prioritisedBitRate_4_encode_der, + prioritisedBitRate_4_decode_xer, + prioritisedBitRate_4_encode_xer, + prioritisedBitRate_4_decode_uper, + prioritisedBitRate_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_prioritisedBitRate_tags_4, + sizeof(asn_DEF_prioritisedBitRate_tags_4) + /sizeof(asn_DEF_prioritisedBitRate_tags_4[0]) - 1, /* 1 */ + asn_DEF_prioritisedBitRate_tags_4, /* Same as above */ + sizeof(asn_DEF_prioritisedBitRate_tags_4) + /sizeof(asn_DEF_prioritisedBitRate_tags_4[0]), /* 2 */ + &asn_PER_type_prioritisedBitRate_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_prioritisedBitRate_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_bucketSizeDuration_value2enum_21[] = { + { 0, 4, "ms50" }, + { 1, 5, "ms100" }, + { 2, 5, "ms150" }, + { 3, 5, "ms300" }, + { 4, 5, "ms500" }, + { 5, 6, "ms1000" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_bucketSizeDuration_enum2value_21[] = { + 1, /* ms100(1) */ + 5, /* ms1000(5) */ + 2, /* ms150(2) */ + 3, /* ms300(3) */ + 0, /* ms50(0) */ + 4, /* ms500(4) */ + 7, /* spare1(7) */ + 6 /* spare2(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_bucketSizeDuration_specs_21 = { + asn_MAP_bucketSizeDuration_value2enum_21, /* "tag" => N; sorted by tag */ + asn_MAP_bucketSizeDuration_enum2value_21, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_bucketSizeDuration_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_bucketSizeDuration_21 = { + "bucketSizeDuration", + "bucketSizeDuration", + bucketSizeDuration_21_free, + bucketSizeDuration_21_print, + bucketSizeDuration_21_constraint, + bucketSizeDuration_21_decode_ber, + bucketSizeDuration_21_encode_der, + bucketSizeDuration_21_decode_xer, + bucketSizeDuration_21_encode_xer, + bucketSizeDuration_21_decode_uper, + bucketSizeDuration_21_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_bucketSizeDuration_tags_21, + sizeof(asn_DEF_bucketSizeDuration_tags_21) + /sizeof(asn_DEF_bucketSizeDuration_tags_21[0]) - 1, /* 1 */ + asn_DEF_bucketSizeDuration_tags_21, /* Same as above */ + sizeof(asn_DEF_bucketSizeDuration_tags_21) + /sizeof(asn_DEF_bucketSizeDuration_tags_21[0]), /* 2 */ + &asn_PER_type_bucketSizeDuration_constr_21, + 0, 0, /* Defined elsewhere */ + &asn_SPC_bucketSizeDuration_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ul_SpecificParameters_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct LogicalChannelConfig__ul_SpecificParameters, priority), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_priority_constraint_2, + &asn_PER_memb_priority_constr_3, + 0, + "priority" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogicalChannelConfig__ul_SpecificParameters, prioritisedBitRate), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_prioritisedBitRate_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prioritisedBitRate" + }, + { ATF_NOFLAGS, 0, offsetof(struct LogicalChannelConfig__ul_SpecificParameters, bucketSizeDuration), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_bucketSizeDuration_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bucketSizeDuration" + }, + { ATF_POINTER, 1, offsetof(struct LogicalChannelConfig__ul_SpecificParameters, logicalChannelGroup), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_logicalChannelGroup_constraint_2, + &asn_PER_memb_logicalChannelGroup_constr_30, + 0, + "logicalChannelGroup" + }, +}; +static int asn_MAP_ul_SpecificParameters_oms_2[] = { 3 }; +static ber_tlv_tag_t asn_DEF_ul_SpecificParameters_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ul_SpecificParameters_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* priority at 1983 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* prioritisedBitRate at 1985 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* bucketSizeDuration at 1990 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* logicalChannelGroup at 1992 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ul_SpecificParameters_specs_2 = { + sizeof(struct LogicalChannelConfig__ul_SpecificParameters), + offsetof(struct LogicalChannelConfig__ul_SpecificParameters, _asn_ctx), + asn_MAP_ul_SpecificParameters_tag2el_2, + 4, /* Count of tags in the map */ + asn_MAP_ul_SpecificParameters_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_SpecificParameters_2 = { + "ul-SpecificParameters", + "ul-SpecificParameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_SpecificParameters_tags_2, + sizeof(asn_DEF_ul_SpecificParameters_tags_2) + /sizeof(asn_DEF_ul_SpecificParameters_tags_2[0]) - 1, /* 1 */ + asn_DEF_ul_SpecificParameters_tags_2, /* Same as above */ + sizeof(asn_DEF_ul_SpecificParameters_tags_2) + /sizeof(asn_DEF_ul_SpecificParameters_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ul_SpecificParameters_2, + 4, /* Elements count */ + &asn_SPC_ul_SpecificParameters_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_logicalChannelSR_Mask_r9_value2enum_31[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_logicalChannelSR_Mask_r9_enum2value_31[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_logicalChannelSR_Mask_r9_specs_31 = { + asn_MAP_logicalChannelSR_Mask_r9_value2enum_31, /* "tag" => N; sorted by tag */ + asn_MAP_logicalChannelSR_Mask_r9_enum2value_31, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_logicalChannelSR_Mask_r9_tags_31[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logicalChannelSR_Mask_r9_31 = { + "logicalChannelSR-Mask-r9", + "logicalChannelSR-Mask-r9", + logicalChannelSR_Mask_r9_31_free, + logicalChannelSR_Mask_r9_31_print, + logicalChannelSR_Mask_r9_31_constraint, + logicalChannelSR_Mask_r9_31_decode_ber, + logicalChannelSR_Mask_r9_31_encode_der, + logicalChannelSR_Mask_r9_31_decode_xer, + logicalChannelSR_Mask_r9_31_encode_xer, + logicalChannelSR_Mask_r9_31_decode_uper, + logicalChannelSR_Mask_r9_31_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_logicalChannelSR_Mask_r9_tags_31, + sizeof(asn_DEF_logicalChannelSR_Mask_r9_tags_31) + /sizeof(asn_DEF_logicalChannelSR_Mask_r9_tags_31[0]) - 1, /* 1 */ + asn_DEF_logicalChannelSR_Mask_r9_tags_31, /* Same as above */ + sizeof(asn_DEF_logicalChannelSR_Mask_r9_tags_31) + /sizeof(asn_DEF_logicalChannelSR_Mask_r9_tags_31[0]), /* 2 */ + &asn_PER_type_logicalChannelSR_Mask_r9_constr_31, + 0, 0, /* Defined elsewhere */ + &asn_SPC_logicalChannelSR_Mask_r9_specs_31 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_LogicalChannelConfig_1[] = { + { ATF_POINTER, 2, offsetof(struct LogicalChannelConfig, ul_SpecificParameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ul_SpecificParameters_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-SpecificParameters" + }, + { ATF_POINTER, 1, offsetof(struct LogicalChannelConfig, logicalChannelSR_Mask_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_logicalChannelSR_Mask_r9_31, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logicalChannelSR-Mask-r9" + }, +}; +static int asn_MAP_LogicalChannelConfig_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_LogicalChannelConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_LogicalChannelConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-SpecificParameters at 1983 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* logicalChannelSR-Mask-r9 at 1994 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_LogicalChannelConfig_specs_1 = { + sizeof(struct LogicalChannelConfig), + offsetof(struct LogicalChannelConfig, _asn_ctx), + asn_MAP_LogicalChannelConfig_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_LogicalChannelConfig_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_LogicalChannelConfig = { + "LogicalChannelConfig", + "LogicalChannelConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_LogicalChannelConfig_tags_1, + sizeof(asn_DEF_LogicalChannelConfig_tags_1) + /sizeof(asn_DEF_LogicalChannelConfig_tags_1[0]), /* 1 */ + asn_DEF_LogicalChannelConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_LogicalChannelConfig_tags_1) + /sizeof(asn_DEF_LogicalChannelConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_LogicalChannelConfig_1, + 2, /* Elements count */ + &asn_SPC_LogicalChannelConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/LogicalChannelConfig.h b/lte/rrc/asn/LogicalChannelConfig.h new file mode 100644 index 000000000..9200f6cd8 --- /dev/null +++ b/lte/rrc/asn/LogicalChannelConfig.h @@ -0,0 +1,84 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _LogicalChannelConfig_H_ +#define _LogicalChannelConfig_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate { + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps0 = 0, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps8 = 1, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps16 = 2, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps32 = 3, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps64 = 4, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps128 = 5, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps256 = 6, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_infinity = 7, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps512_v1020 = 8, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps1024_v1020 = 9, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_kBps2048_v1020 = 10, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare5 = 11, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare4 = 12, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare3 = 13, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare2 = 14, + LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate_spare1 = 15 +} e_LogicalChannelConfig__ul_SpecificParameters__prioritisedBitRate; +typedef enum LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration { + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms50 = 0, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms100 = 1, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms150 = 2, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms300 = 3, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms500 = 4, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_ms1000 = 5, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_spare2 = 6, + LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration_spare1 = 7 +} e_LogicalChannelConfig__ul_SpecificParameters__bucketSizeDuration; +typedef enum LogicalChannelConfig__logicalChannelSR_Mask_r9 { + LogicalChannelConfig__logicalChannelSR_Mask_r9_setup = 0 +} e_LogicalChannelConfig__logicalChannelSR_Mask_r9; + +/* LogicalChannelConfig */ +typedef struct LogicalChannelConfig { + struct LogicalChannelConfig__ul_SpecificParameters { + long priority; + long prioritisedBitRate; + long bucketSizeDuration; + long *logicalChannelGroup /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ul_SpecificParameters; + long *logicalChannelSR_Mask_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} LogicalChannelConfig_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_prioritisedBitRate_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_bucketSizeDuration_21; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_logicalChannelSR_Mask_r9_31; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_LogicalChannelConfig; + +#ifdef __cplusplus +} +#endif + +#endif /* _LogicalChannelConfig_H_ */ +#include diff --git a/lte/rrc/asn/MAC-MainConfig.c b/lte/rrc/asn/MAC-MainConfig.c new file mode 100644 index 000000000..905b9b925 --- /dev/null +++ b/lte/rrc/asn/MAC-MainConfig.c @@ -0,0 +1,1793 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MAC-MainConfig.h" + +static int +maxHARQ_Tx_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +maxHARQ_Tx_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +maxHARQ_Tx_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +maxHARQ_Tx_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +maxHARQ_Tx_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +maxHARQ_Tx_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +maxHARQ_Tx_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +maxHARQ_Tx_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +maxHARQ_Tx_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +maxHARQ_Tx_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + maxHARQ_Tx_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +periodicBSR_Timer_20_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +periodicBSR_Timer_20_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +periodicBSR_Timer_20_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +periodicBSR_Timer_20_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +periodicBSR_Timer_20_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +periodicBSR_Timer_20_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +periodicBSR_Timer_20_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +periodicBSR_Timer_20_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +periodicBSR_Timer_20_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +periodicBSR_Timer_20_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + periodicBSR_Timer_20_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +retxBSR_Timer_37_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +retxBSR_Timer_37_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +retxBSR_Timer_37_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +retxBSR_Timer_37_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +retxBSR_Timer_37_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +retxBSR_Timer_37_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +retxBSR_Timer_37_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +retxBSR_Timer_37_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +retxBSR_Timer_37_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +retxBSR_Timer_37_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + retxBSR_Timer_37_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +periodicPHR_Timer_52_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +periodicPHR_Timer_52_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +periodicPHR_Timer_52_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +periodicPHR_Timer_52_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +periodicPHR_Timer_52_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +periodicPHR_Timer_52_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +periodicPHR_Timer_52_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +periodicPHR_Timer_52_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +periodicPHR_Timer_52_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +periodicPHR_Timer_52_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + periodicPHR_Timer_52_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +prohibitPHR_Timer_61_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +prohibitPHR_Timer_61_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +prohibitPHR_Timer_61_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +prohibitPHR_Timer_61_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +prohibitPHR_Timer_61_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +prohibitPHR_Timer_61_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +prohibitPHR_Timer_61_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +prohibitPHR_Timer_61_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +prohibitPHR_Timer_61_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +prohibitPHR_Timer_61_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + prohibitPHR_Timer_61_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +dl_PathlossChange_70_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dl_PathlossChange_70_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dl_PathlossChange_70_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dl_PathlossChange_70_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dl_PathlossChange_70_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dl_PathlossChange_70_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dl_PathlossChange_70_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dl_PathlossChange_70_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dl_PathlossChange_70_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dl_PathlossChange_70_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dl_PathlossChange_70_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +sCellDeactivationTimer_r10_77_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +sCellDeactivationTimer_r10_77_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +sCellDeactivationTimer_r10_77_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +sCellDeactivationTimer_r10_77_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +sCellDeactivationTimer_r10_77_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +sCellDeactivationTimer_r10_77_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +sCellDeactivationTimer_r10_77_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +sCellDeactivationTimer_r10_77_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +sCellDeactivationTimer_r10_77_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + sCellDeactivationTimer_r10_77_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +extendedBSR_Sizes_r10_86_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +extendedBSR_Sizes_r10_86_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +extendedBSR_Sizes_r10_86_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +extendedBSR_Sizes_r10_86_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +extendedBSR_Sizes_r10_86_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +extendedBSR_Sizes_r10_86_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +extendedBSR_Sizes_r10_86_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +extendedBSR_Sizes_r10_86_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +extendedBSR_Sizes_r10_86_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + extendedBSR_Sizes_r10_86_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +extendedPHR_r10_88_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +extendedPHR_r10_88_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +extendedPHR_r10_88_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +extendedPHR_r10_88_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +extendedPHR_r10_88_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +extendedPHR_r10_88_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +extendedPHR_r10_88_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +extendedPHR_r10_88_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +extendedPHR_r10_88_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +extendedPHR_r10_88_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + extendedPHR_r10_88_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_sr_ProhibitTimer_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_maxHARQ_Tx_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_periodicBSR_Timer_constr_20 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_retxBSR_Timer_constr_37 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_periodicPHR_Timer_constr_52 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_prohibitPHR_Timer_constr_61 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_dl_PathlossChange_constr_70 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_phr_Config_constr_49 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sCellDeactivationTimer_r10_constr_77 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_extendedBSR_Sizes_r10_constr_86 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_extendedPHR_r10_constr_88 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sr_ProhibitTimer_r9_constr_75 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_maxHARQ_Tx_value2enum_3[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n3" }, + { 3, 2, "n4" }, + { 4, 2, "n5" }, + { 5, 2, "n6" }, + { 6, 2, "n7" }, + { 7, 2, "n8" }, + { 8, 3, "n10" }, + { 9, 3, "n12" }, + { 10, 3, "n16" }, + { 11, 3, "n20" }, + { 12, 3, "n24" }, + { 13, 3, "n28" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_maxHARQ_Tx_enum2value_3[] = { + 0, /* n1(0) */ + 8, /* n10(8) */ + 9, /* n12(9) */ + 10, /* n16(10) */ + 1, /* n2(1) */ + 11, /* n20(11) */ + 12, /* n24(12) */ + 13, /* n28(13) */ + 2, /* n3(2) */ + 3, /* n4(3) */ + 4, /* n5(4) */ + 5, /* n6(5) */ + 6, /* n7(6) */ + 7, /* n8(7) */ + 15, /* spare1(15) */ + 14 /* spare2(14) */ +}; +static asn_INTEGER_specifics_t asn_SPC_maxHARQ_Tx_specs_3 = { + asn_MAP_maxHARQ_Tx_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_maxHARQ_Tx_enum2value_3, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_maxHARQ_Tx_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_maxHARQ_Tx_3 = { + "maxHARQ-Tx", + "maxHARQ-Tx", + maxHARQ_Tx_3_free, + maxHARQ_Tx_3_print, + maxHARQ_Tx_3_constraint, + maxHARQ_Tx_3_decode_ber, + maxHARQ_Tx_3_encode_der, + maxHARQ_Tx_3_decode_xer, + maxHARQ_Tx_3_encode_xer, + maxHARQ_Tx_3_decode_uper, + maxHARQ_Tx_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_maxHARQ_Tx_tags_3, + sizeof(asn_DEF_maxHARQ_Tx_tags_3) + /sizeof(asn_DEF_maxHARQ_Tx_tags_3[0]) - 1, /* 1 */ + asn_DEF_maxHARQ_Tx_tags_3, /* Same as above */ + sizeof(asn_DEF_maxHARQ_Tx_tags_3) + /sizeof(asn_DEF_maxHARQ_Tx_tags_3[0]), /* 2 */ + &asn_PER_type_maxHARQ_Tx_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_maxHARQ_Tx_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_periodicBSR_Timer_value2enum_20[] = { + { 0, 3, "sf5" }, + { 1, 4, "sf10" }, + { 2, 4, "sf16" }, + { 3, 4, "sf20" }, + { 4, 4, "sf32" }, + { 5, 4, "sf40" }, + { 6, 4, "sf64" }, + { 7, 4, "sf80" }, + { 8, 5, "sf128" }, + { 9, 5, "sf160" }, + { 10, 5, "sf320" }, + { 11, 5, "sf640" }, + { 12, 6, "sf1280" }, + { 13, 6, "sf2560" }, + { 14, 8, "infinity" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_periodicBSR_Timer_enum2value_20[] = { + 14, /* infinity(14) */ + 1, /* sf10(1) */ + 8, /* sf128(8) */ + 12, /* sf1280(12) */ + 2, /* sf16(2) */ + 9, /* sf160(9) */ + 3, /* sf20(3) */ + 13, /* sf2560(13) */ + 4, /* sf32(4) */ + 10, /* sf320(10) */ + 5, /* sf40(5) */ + 0, /* sf5(0) */ + 6, /* sf64(6) */ + 11, /* sf640(11) */ + 7, /* sf80(7) */ + 15 /* spare1(15) */ +}; +static asn_INTEGER_specifics_t asn_SPC_periodicBSR_Timer_specs_20 = { + asn_MAP_periodicBSR_Timer_value2enum_20, /* "tag" => N; sorted by tag */ + asn_MAP_periodicBSR_Timer_enum2value_20, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_periodicBSR_Timer_tags_20[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_periodicBSR_Timer_20 = { + "periodicBSR-Timer", + "periodicBSR-Timer", + periodicBSR_Timer_20_free, + periodicBSR_Timer_20_print, + periodicBSR_Timer_20_constraint, + periodicBSR_Timer_20_decode_ber, + periodicBSR_Timer_20_encode_der, + periodicBSR_Timer_20_decode_xer, + periodicBSR_Timer_20_encode_xer, + periodicBSR_Timer_20_decode_uper, + periodicBSR_Timer_20_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_periodicBSR_Timer_tags_20, + sizeof(asn_DEF_periodicBSR_Timer_tags_20) + /sizeof(asn_DEF_periodicBSR_Timer_tags_20[0]) - 1, /* 1 */ + asn_DEF_periodicBSR_Timer_tags_20, /* Same as above */ + sizeof(asn_DEF_periodicBSR_Timer_tags_20) + /sizeof(asn_DEF_periodicBSR_Timer_tags_20[0]), /* 2 */ + &asn_PER_type_periodicBSR_Timer_constr_20, + 0, 0, /* Defined elsewhere */ + &asn_SPC_periodicBSR_Timer_specs_20 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_retxBSR_Timer_value2enum_37[] = { + { 0, 5, "sf320" }, + { 1, 5, "sf640" }, + { 2, 6, "sf1280" }, + { 3, 6, "sf2560" }, + { 4, 6, "sf5120" }, + { 5, 7, "sf10240" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_retxBSR_Timer_enum2value_37[] = { + 5, /* sf10240(5) */ + 2, /* sf1280(2) */ + 3, /* sf2560(3) */ + 0, /* sf320(0) */ + 4, /* sf5120(4) */ + 1, /* sf640(1) */ + 7, /* spare1(7) */ + 6 /* spare2(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_retxBSR_Timer_specs_37 = { + asn_MAP_retxBSR_Timer_value2enum_37, /* "tag" => N; sorted by tag */ + asn_MAP_retxBSR_Timer_enum2value_37, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_retxBSR_Timer_tags_37[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_retxBSR_Timer_37 = { + "retxBSR-Timer", + "retxBSR-Timer", + retxBSR_Timer_37_free, + retxBSR_Timer_37_print, + retxBSR_Timer_37_constraint, + retxBSR_Timer_37_decode_ber, + retxBSR_Timer_37_encode_der, + retxBSR_Timer_37_decode_xer, + retxBSR_Timer_37_encode_xer, + retxBSR_Timer_37_decode_uper, + retxBSR_Timer_37_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_retxBSR_Timer_tags_37, + sizeof(asn_DEF_retxBSR_Timer_tags_37) + /sizeof(asn_DEF_retxBSR_Timer_tags_37[0]) - 1, /* 1 */ + asn_DEF_retxBSR_Timer_tags_37, /* Same as above */ + sizeof(asn_DEF_retxBSR_Timer_tags_37) + /sizeof(asn_DEF_retxBSR_Timer_tags_37[0]), /* 2 */ + &asn_PER_type_retxBSR_Timer_constr_37, + 0, 0, /* Defined elsewhere */ + &asn_SPC_retxBSR_Timer_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ul_SCH_Config_2[] = { + { ATF_POINTER, 2, offsetof(struct MAC_MainConfig__ul_SCH_Config, maxHARQ_Tx), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_maxHARQ_Tx_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "maxHARQ-Tx" + }, + { ATF_POINTER, 1, offsetof(struct MAC_MainConfig__ul_SCH_Config, periodicBSR_Timer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_periodicBSR_Timer_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "periodicBSR-Timer" + }, + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__ul_SCH_Config, retxBSR_Timer), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_retxBSR_Timer_37, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "retxBSR-Timer" + }, + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__ul_SCH_Config, ttiBundling), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ttiBundling" + }, +}; +static int asn_MAP_ul_SCH_Config_oms_2[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_ul_SCH_Config_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ul_SCH_Config_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* maxHARQ-Tx at 2001 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* periodicBSR-Timer at 2005 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* retxBSR-Timer at 2009 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* ttiBundling at 2011 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ul_SCH_Config_specs_2 = { + sizeof(struct MAC_MainConfig__ul_SCH_Config), + offsetof(struct MAC_MainConfig__ul_SCH_Config, _asn_ctx), + asn_MAP_ul_SCH_Config_tag2el_2, + 4, /* Count of tags in the map */ + asn_MAP_ul_SCH_Config_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_SCH_Config_2 = { + "ul-SCH-Config", + "ul-SCH-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_SCH_Config_tags_2, + sizeof(asn_DEF_ul_SCH_Config_tags_2) + /sizeof(asn_DEF_ul_SCH_Config_tags_2[0]) - 1, /* 1 */ + asn_DEF_ul_SCH_Config_tags_2, /* Same as above */ + sizeof(asn_DEF_ul_SCH_Config_tags_2) + /sizeof(asn_DEF_ul_SCH_Config_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ul_SCH_Config_2, + 4, /* Elements count */ + &asn_SPC_ul_SCH_Config_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_periodicPHR_Timer_value2enum_52[] = { + { 0, 4, "sf10" }, + { 1, 4, "sf20" }, + { 2, 4, "sf50" }, + { 3, 5, "sf100" }, + { 4, 5, "sf200" }, + { 5, 5, "sf500" }, + { 6, 6, "sf1000" }, + { 7, 8, "infinity" } +}; +static unsigned int asn_MAP_periodicPHR_Timer_enum2value_52[] = { + 7, /* infinity(7) */ + 0, /* sf10(0) */ + 3, /* sf100(3) */ + 6, /* sf1000(6) */ + 1, /* sf20(1) */ + 4, /* sf200(4) */ + 2, /* sf50(2) */ + 5 /* sf500(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_periodicPHR_Timer_specs_52 = { + asn_MAP_periodicPHR_Timer_value2enum_52, /* "tag" => N; sorted by tag */ + asn_MAP_periodicPHR_Timer_enum2value_52, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_periodicPHR_Timer_tags_52[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_periodicPHR_Timer_52 = { + "periodicPHR-Timer", + "periodicPHR-Timer", + periodicPHR_Timer_52_free, + periodicPHR_Timer_52_print, + periodicPHR_Timer_52_constraint, + periodicPHR_Timer_52_decode_ber, + periodicPHR_Timer_52_encode_der, + periodicPHR_Timer_52_decode_xer, + periodicPHR_Timer_52_encode_xer, + periodicPHR_Timer_52_decode_uper, + periodicPHR_Timer_52_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_periodicPHR_Timer_tags_52, + sizeof(asn_DEF_periodicPHR_Timer_tags_52) + /sizeof(asn_DEF_periodicPHR_Timer_tags_52[0]) - 1, /* 1 */ + asn_DEF_periodicPHR_Timer_tags_52, /* Same as above */ + sizeof(asn_DEF_periodicPHR_Timer_tags_52) + /sizeof(asn_DEF_periodicPHR_Timer_tags_52[0]), /* 2 */ + &asn_PER_type_periodicPHR_Timer_constr_52, + 0, 0, /* Defined elsewhere */ + &asn_SPC_periodicPHR_Timer_specs_52 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_prohibitPHR_Timer_value2enum_61[] = { + { 0, 3, "sf0" }, + { 1, 4, "sf10" }, + { 2, 4, "sf20" }, + { 3, 4, "sf50" }, + { 4, 5, "sf100" }, + { 5, 5, "sf200" }, + { 6, 5, "sf500" }, + { 7, 6, "sf1000" } +}; +static unsigned int asn_MAP_prohibitPHR_Timer_enum2value_61[] = { + 0, /* sf0(0) */ + 1, /* sf10(1) */ + 4, /* sf100(4) */ + 7, /* sf1000(7) */ + 2, /* sf20(2) */ + 5, /* sf200(5) */ + 3, /* sf50(3) */ + 6 /* sf500(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_prohibitPHR_Timer_specs_61 = { + asn_MAP_prohibitPHR_Timer_value2enum_61, /* "tag" => N; sorted by tag */ + asn_MAP_prohibitPHR_Timer_enum2value_61, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_prohibitPHR_Timer_tags_61[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_prohibitPHR_Timer_61 = { + "prohibitPHR-Timer", + "prohibitPHR-Timer", + prohibitPHR_Timer_61_free, + prohibitPHR_Timer_61_print, + prohibitPHR_Timer_61_constraint, + prohibitPHR_Timer_61_decode_ber, + prohibitPHR_Timer_61_encode_der, + prohibitPHR_Timer_61_decode_xer, + prohibitPHR_Timer_61_encode_xer, + prohibitPHR_Timer_61_decode_uper, + prohibitPHR_Timer_61_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_prohibitPHR_Timer_tags_61, + sizeof(asn_DEF_prohibitPHR_Timer_tags_61) + /sizeof(asn_DEF_prohibitPHR_Timer_tags_61[0]) - 1, /* 1 */ + asn_DEF_prohibitPHR_Timer_tags_61, /* Same as above */ + sizeof(asn_DEF_prohibitPHR_Timer_tags_61) + /sizeof(asn_DEF_prohibitPHR_Timer_tags_61[0]), /* 2 */ + &asn_PER_type_prohibitPHR_Timer_constr_61, + 0, 0, /* Defined elsewhere */ + &asn_SPC_prohibitPHR_Timer_specs_61 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_dl_PathlossChange_value2enum_70[] = { + { 0, 3, "dB1" }, + { 1, 3, "dB3" }, + { 2, 3, "dB6" }, + { 3, 8, "infinity" } +}; +static unsigned int asn_MAP_dl_PathlossChange_enum2value_70[] = { + 0, /* dB1(0) */ + 1, /* dB3(1) */ + 2, /* dB6(2) */ + 3 /* infinity(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dl_PathlossChange_specs_70 = { + asn_MAP_dl_PathlossChange_value2enum_70, /* "tag" => N; sorted by tag */ + asn_MAP_dl_PathlossChange_enum2value_70, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dl_PathlossChange_tags_70[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dl_PathlossChange_70 = { + "dl-PathlossChange", + "dl-PathlossChange", + dl_PathlossChange_70_free, + dl_PathlossChange_70_print, + dl_PathlossChange_70_constraint, + dl_PathlossChange_70_decode_ber, + dl_PathlossChange_70_encode_der, + dl_PathlossChange_70_decode_xer, + dl_PathlossChange_70_encode_xer, + dl_PathlossChange_70_decode_uper, + dl_PathlossChange_70_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dl_PathlossChange_tags_70, + sizeof(asn_DEF_dl_PathlossChange_tags_70) + /sizeof(asn_DEF_dl_PathlossChange_tags_70[0]) - 1, /* 1 */ + asn_DEF_dl_PathlossChange_tags_70, /* Same as above */ + sizeof(asn_DEF_dl_PathlossChange_tags_70) + /sizeof(asn_DEF_dl_PathlossChange_tags_70[0]), /* 2 */ + &asn_PER_type_dl_PathlossChange_constr_70, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dl_PathlossChange_specs_70 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_51[] = { + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__phr_Config__setup, periodicPHR_Timer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_periodicPHR_Timer_52, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "periodicPHR-Timer" + }, + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__phr_Config__setup, prohibitPHR_Timer), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_prohibitPHR_Timer_61, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prohibitPHR-Timer" + }, + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__phr_Config__setup, dl_PathlossChange), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dl_PathlossChange_70, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-PathlossChange" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_51[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_51[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* periodicPHR-Timer at 2018 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* prohibitPHR-Timer at 2020 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* dl-PathlossChange at 2022 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_51 = { + sizeof(struct MAC_MainConfig__phr_Config__setup), + offsetof(struct MAC_MainConfig__phr_Config__setup, _asn_ctx), + asn_MAP_setup_tag2el_51, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_51 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_51, + sizeof(asn_DEF_setup_tags_51) + /sizeof(asn_DEF_setup_tags_51[0]) - 1, /* 1 */ + asn_DEF_setup_tags_51, /* Same as above */ + sizeof(asn_DEF_setup_tags_51) + /sizeof(asn_DEF_setup_tags_51[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_51, + 3, /* Elements count */ + &asn_SPC_setup_specs_51 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_phr_Config_49[] = { + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__phr_Config, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig__phr_Config, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_51, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_phr_Config_tag2el_49[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2016 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2019 */ +}; +static asn_CHOICE_specifics_t asn_SPC_phr_Config_specs_49 = { + sizeof(struct MAC_MainConfig__phr_Config), + offsetof(struct MAC_MainConfig__phr_Config, _asn_ctx), + offsetof(struct MAC_MainConfig__phr_Config, present), + sizeof(((struct MAC_MainConfig__phr_Config *)0)->present), + asn_MAP_phr_Config_tag2el_49, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_phr_Config_49 = { + "phr-Config", + "phr-Config", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_phr_Config_constr_49, + asn_MBR_phr_Config_49, + 2, /* Elements count */ + &asn_SPC_phr_Config_specs_49 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_sCellDeactivationTimer_r10_value2enum_77[] = { + { 0, 3, "rf2" }, + { 1, 3, "rf4" }, + { 2, 3, "rf8" }, + { 3, 4, "rf16" }, + { 4, 4, "rf32" }, + { 5, 4, "rf64" }, + { 6, 5, "rf128" }, + { 7, 5, "spare" } +}; +static unsigned int asn_MAP_sCellDeactivationTimer_r10_enum2value_77[] = { + 6, /* rf128(6) */ + 3, /* rf16(3) */ + 0, /* rf2(0) */ + 4, /* rf32(4) */ + 1, /* rf4(1) */ + 5, /* rf64(5) */ + 2, /* rf8(2) */ + 7 /* spare(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_sCellDeactivationTimer_r10_specs_77 = { + asn_MAP_sCellDeactivationTimer_r10_value2enum_77, /* "tag" => N; sorted by tag */ + asn_MAP_sCellDeactivationTimer_r10_enum2value_77, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_sCellDeactivationTimer_r10_tags_77[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sCellDeactivationTimer_r10_77 = { + "sCellDeactivationTimer-r10", + "sCellDeactivationTimer-r10", + sCellDeactivationTimer_r10_77_free, + sCellDeactivationTimer_r10_77_print, + sCellDeactivationTimer_r10_77_constraint, + sCellDeactivationTimer_r10_77_decode_ber, + sCellDeactivationTimer_r10_77_encode_der, + sCellDeactivationTimer_r10_77_decode_xer, + sCellDeactivationTimer_r10_77_encode_xer, + sCellDeactivationTimer_r10_77_decode_uper, + sCellDeactivationTimer_r10_77_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sCellDeactivationTimer_r10_tags_77, + sizeof(asn_DEF_sCellDeactivationTimer_r10_tags_77) + /sizeof(asn_DEF_sCellDeactivationTimer_r10_tags_77[0]) - 1, /* 1 */ + asn_DEF_sCellDeactivationTimer_r10_tags_77, /* Same as above */ + sizeof(asn_DEF_sCellDeactivationTimer_r10_tags_77) + /sizeof(asn_DEF_sCellDeactivationTimer_r10_tags_77[0]), /* 2 */ + &asn_PER_type_sCellDeactivationTimer_r10_constr_77, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sCellDeactivationTimer_r10_specs_77 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_extendedBSR_Sizes_r10_value2enum_86[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_extendedBSR_Sizes_r10_enum2value_86[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_extendedBSR_Sizes_r10_specs_86 = { + asn_MAP_extendedBSR_Sizes_r10_value2enum_86, /* "tag" => N; sorted by tag */ + asn_MAP_extendedBSR_Sizes_r10_enum2value_86, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_extendedBSR_Sizes_r10_tags_86[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extendedBSR_Sizes_r10_86 = { + "extendedBSR-Sizes-r10", + "extendedBSR-Sizes-r10", + extendedBSR_Sizes_r10_86_free, + extendedBSR_Sizes_r10_86_print, + extendedBSR_Sizes_r10_86_constraint, + extendedBSR_Sizes_r10_86_decode_ber, + extendedBSR_Sizes_r10_86_encode_der, + extendedBSR_Sizes_r10_86_decode_xer, + extendedBSR_Sizes_r10_86_encode_xer, + extendedBSR_Sizes_r10_86_decode_uper, + extendedBSR_Sizes_r10_86_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_extendedBSR_Sizes_r10_tags_86, + sizeof(asn_DEF_extendedBSR_Sizes_r10_tags_86) + /sizeof(asn_DEF_extendedBSR_Sizes_r10_tags_86[0]) - 1, /* 1 */ + asn_DEF_extendedBSR_Sizes_r10_tags_86, /* Same as above */ + sizeof(asn_DEF_extendedBSR_Sizes_r10_tags_86) + /sizeof(asn_DEF_extendedBSR_Sizes_r10_tags_86[0]), /* 2 */ + &asn_PER_type_extendedBSR_Sizes_r10_constr_86, + 0, 0, /* Defined elsewhere */ + &asn_SPC_extendedBSR_Sizes_r10_specs_86 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_extendedPHR_r10_value2enum_88[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_extendedPHR_r10_enum2value_88[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_extendedPHR_r10_specs_88 = { + asn_MAP_extendedPHR_r10_value2enum_88, /* "tag" => N; sorted by tag */ + asn_MAP_extendedPHR_r10_enum2value_88, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_extendedPHR_r10_tags_88[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_extendedPHR_r10_88 = { + "extendedPHR-r10", + "extendedPHR-r10", + extendedPHR_r10_88_free, + extendedPHR_r10_88_print, + extendedPHR_r10_88_constraint, + extendedPHR_r10_88_decode_ber, + extendedPHR_r10_88_encode_der, + extendedPHR_r10_88_decode_xer, + extendedPHR_r10_88_encode_xer, + extendedPHR_r10_88_decode_uper, + extendedPHR_r10_88_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_extendedPHR_r10_tags_88, + sizeof(asn_DEF_extendedPHR_r10_tags_88) + /sizeof(asn_DEF_extendedPHR_r10_tags_88[0]) - 1, /* 1 */ + asn_DEF_extendedPHR_r10_tags_88, /* Same as above */ + sizeof(asn_DEF_extendedPHR_r10_tags_88) + /sizeof(asn_DEF_extendedPHR_r10_tags_88[0]), /* 2 */ + &asn_PER_type_extendedPHR_r10_constr_88, + 0, 0, /* Defined elsewhere */ + &asn_SPC_extendedPHR_r10_specs_88 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_mac_MainConfig_v1020_76[] = { + { ATF_POINTER, 3, offsetof(struct MAC_MainConfig__mac_MainConfig_v1020, sCellDeactivationTimer_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sCellDeactivationTimer_r10_77, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sCellDeactivationTimer-r10" + }, + { ATF_POINTER, 2, offsetof(struct MAC_MainConfig__mac_MainConfig_v1020, extendedBSR_Sizes_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_extendedBSR_Sizes_r10_86, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "extendedBSR-Sizes-r10" + }, + { ATF_POINTER, 1, offsetof(struct MAC_MainConfig__mac_MainConfig_v1020, extendedPHR_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_extendedPHR_r10_88, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "extendedPHR-r10" + }, +}; +static int asn_MAP_mac_MainConfig_v1020_oms_76[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_mac_MainConfig_v1020_tags_76[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_mac_MainConfig_v1020_tag2el_76[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCellDeactivationTimer-r10 at 2028 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* extendedBSR-Sizes-r10 at 2030 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* extendedPHR-r10 at 2031 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_mac_MainConfig_v1020_specs_76 = { + sizeof(struct MAC_MainConfig__mac_MainConfig_v1020), + offsetof(struct MAC_MainConfig__mac_MainConfig_v1020, _asn_ctx), + asn_MAP_mac_MainConfig_v1020_tag2el_76, + 3, /* Count of tags in the map */ + asn_MAP_mac_MainConfig_v1020_oms_76, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mac_MainConfig_v1020_76 = { + "mac-MainConfig-v1020", + "mac-MainConfig-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mac_MainConfig_v1020_tags_76, + sizeof(asn_DEF_mac_MainConfig_v1020_tags_76) + /sizeof(asn_DEF_mac_MainConfig_v1020_tags_76[0]) - 1, /* 1 */ + asn_DEF_mac_MainConfig_v1020_tags_76, /* Same as above */ + sizeof(asn_DEF_mac_MainConfig_v1020_tags_76) + /sizeof(asn_DEF_mac_MainConfig_v1020_tags_76[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_mac_MainConfig_v1020_76, + 3, /* Elements count */ + &asn_SPC_mac_MainConfig_v1020_specs_76 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MAC_MainConfig_1[] = { + { ATF_POINTER, 2, offsetof(struct MAC_MainConfig, ul_SCH_Config), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ul_SCH_Config_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-SCH-Config" + }, + { ATF_POINTER, 1, offsetof(struct MAC_MainConfig, drx_Config), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_DRX_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drx-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct MAC_MainConfig, timeAlignmentTimerDedicated), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TimeAlignmentTimer, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "timeAlignmentTimerDedicated" + }, + { ATF_POINTER, 3, offsetof(struct MAC_MainConfig, phr_Config), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_phr_Config_49, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phr-Config" + }, + { ATF_POINTER, 2, offsetof(struct MAC_MainConfig, sr_ProhibitTimer_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sr_ProhibitTimer_r9_constraint_1, + &asn_PER_memb_sr_ProhibitTimer_r9_constr_75, + 0, + "sr-ProhibitTimer-r9" + }, + { ATF_POINTER, 1, offsetof(struct MAC_MainConfig, mac_MainConfig_v1020), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + 0, + &asn_DEF_mac_MainConfig_v1020_76, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mac-MainConfig-v1020" + }, +}; +static int asn_MAP_MAC_MainConfig_oms_1[] = { 0, 1, 3, 4, 5 }; +static ber_tlv_tag_t asn_DEF_MAC_MainConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MAC_MainConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-SCH-Config at 2003 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drx-Config at 2013 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* timeAlignmentTimerDedicated at 2014 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* phr-Config at 2016 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sr-ProhibitTimer-r9 at 2025 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* mac-MainConfig-v1020 at 2029 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MAC_MainConfig_specs_1 = { + sizeof(struct MAC_MainConfig), + offsetof(struct MAC_MainConfig, _asn_ctx), + asn_MAP_MAC_MainConfig_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_MAC_MainConfig_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MAC_MainConfig = { + "MAC-MainConfig", + "MAC-MainConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MAC_MainConfig_tags_1, + sizeof(asn_DEF_MAC_MainConfig_tags_1) + /sizeof(asn_DEF_MAC_MainConfig_tags_1[0]), /* 1 */ + asn_DEF_MAC_MainConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_MAC_MainConfig_tags_1) + /sizeof(asn_DEF_MAC_MainConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MAC_MainConfig_1, + 6, /* Elements count */ + &asn_SPC_MAC_MainConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MAC-MainConfig.h b/lte/rrc/asn/MAC-MainConfig.h new file mode 100644 index 000000000..1d34570e6 --- /dev/null +++ b/lte/rrc/asn/MAC-MainConfig.h @@ -0,0 +1,189 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MAC_MainConfig_H_ +#define _MAC_MainConfig_H_ + + +#include + +/* Including external dependencies */ +#include "TimeAlignmentTimer.h" +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx { + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n1 = 0, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n2 = 1, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n3 = 2, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n4 = 3, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n5 = 4, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n6 = 5, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n7 = 6, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n8 = 7, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n10 = 8, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n12 = 9, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n16 = 10, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n20 = 11, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n24 = 12, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_n28 = 13, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_spare2 = 14, + MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx_spare1 = 15 +} e_MAC_MainConfig__ul_SCH_Config__maxHARQ_Tx; +typedef enum MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer { + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf5 = 0, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf10 = 1, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf16 = 2, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf20 = 3, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf32 = 4, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf40 = 5, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf64 = 6, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf80 = 7, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf128 = 8, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf160 = 9, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf320 = 10, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf640 = 11, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf1280 = 12, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_sf2560 = 13, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_infinity = 14, + MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer_spare1 = 15 +} e_MAC_MainConfig__ul_SCH_Config__periodicBSR_Timer; +typedef enum MAC_MainConfig__ul_SCH_Config__retxBSR_Timer { + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf320 = 0, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf640 = 1, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf1280 = 2, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf2560 = 3, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf5120 = 4, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_sf10240 = 5, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_spare2 = 6, + MAC_MainConfig__ul_SCH_Config__retxBSR_Timer_spare1 = 7 +} e_MAC_MainConfig__ul_SCH_Config__retxBSR_Timer; +typedef enum MAC_MainConfig__phr_Config_PR { + MAC_MainConfig__phr_Config_PR_NOTHING, /* No components present */ + MAC_MainConfig__phr_Config_PR_release, + MAC_MainConfig__phr_Config_PR_setup +} MAC_MainConfig__phr_Config_PR; +typedef enum MAC_MainConfig__phr_Config__setup__periodicPHR_Timer { + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf10 = 0, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf20 = 1, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf50 = 2, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf100 = 3, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf200 = 4, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf500 = 5, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_sf1000 = 6, + MAC_MainConfig__phr_Config__setup__periodicPHR_Timer_infinity = 7 +} e_MAC_MainConfig__phr_Config__setup__periodicPHR_Timer; +typedef enum MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer { + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf0 = 0, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf10 = 1, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf20 = 2, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf50 = 3, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf100 = 4, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf200 = 5, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf500 = 6, + MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer_sf1000 = 7 +} e_MAC_MainConfig__phr_Config__setup__prohibitPHR_Timer; +typedef enum MAC_MainConfig__phr_Config__setup__dl_PathlossChange { + MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB1 = 0, + MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB3 = 1, + MAC_MainConfig__phr_Config__setup__dl_PathlossChange_dB6 = 2, + MAC_MainConfig__phr_Config__setup__dl_PathlossChange_infinity = 3 +} e_MAC_MainConfig__phr_Config__setup__dl_PathlossChange; +typedef enum MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10 { + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf2 = 0, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf4 = 1, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf8 = 2, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf16 = 3, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf32 = 4, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf64 = 5, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_rf128 = 6, + MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10_spare = 7 +} e_MAC_MainConfig__mac_MainConfig_v1020__sCellDeactivationTimer_r10; +typedef enum MAC_MainConfig__mac_MainConfig_v1020__extendedBSR_Sizes_r10 { + MAC_MainConfig__mac_MainConfig_v1020__extendedBSR_Sizes_r10_setup = 0 +} e_MAC_MainConfig__mac_MainConfig_v1020__extendedBSR_Sizes_r10; +typedef enum MAC_MainConfig__mac_MainConfig_v1020__extendedPHR_r10 { + MAC_MainConfig__mac_MainConfig_v1020__extendedPHR_r10_setup = 0 +} e_MAC_MainConfig__mac_MainConfig_v1020__extendedPHR_r10; + +/* Forward declarations */ +struct DRX_Config; + +/* MAC-MainConfig */ +typedef struct MAC_MainConfig { + struct MAC_MainConfig__ul_SCH_Config { + long *maxHARQ_Tx /* OPTIONAL */; + long *periodicBSR_Timer /* OPTIONAL */; + long retxBSR_Timer; + BOOLEAN_t ttiBundling; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ul_SCH_Config; + struct DRX_Config *drx_Config /* OPTIONAL */; + TimeAlignmentTimer_t timeAlignmentTimerDedicated; + struct MAC_MainConfig__phr_Config { + MAC_MainConfig__phr_Config_PR present; + union MAC_MainConfig__phr_Config_u { + NULL_t release; + struct MAC_MainConfig__phr_Config__setup { + long periodicPHR_Timer; + long prohibitPHR_Timer; + long dl_PathlossChange; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *phr_Config; + long *sr_ProhibitTimer_r9 /* OPTIONAL */; + struct MAC_MainConfig__mac_MainConfig_v1020 { + long *sCellDeactivationTimer_r10 /* OPTIONAL */; + long *extendedBSR_Sizes_r10 /* OPTIONAL */; + long *extendedPHR_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *mac_MainConfig_v1020; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MAC_MainConfig_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_maxHARQ_Tx_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_periodicBSR_Timer_20; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_retxBSR_Timer_37; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_periodicPHR_Timer_52; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_prohibitPHR_Timer_61; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_dl_PathlossChange_70; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sCellDeactivationTimer_r10_77; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_extendedBSR_Sizes_r10_86; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_extendedPHR_r10_88; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MAC_MainConfig; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DRX-Config.h" + +#endif /* _MAC_MainConfig_H_ */ +#include diff --git a/lte/rrc/asn/MBMS-NotificationConfig-r9.c b/lte/rrc/asn/MBMS-NotificationConfig-r9.c new file mode 100644 index 000000000..07494d657 --- /dev/null +++ b/lte/rrc/asn/MBMS-NotificationConfig-r9.c @@ -0,0 +1,279 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBMS-NotificationConfig-r9.h" + +static int +notificationRepetitionCoeff_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +notificationRepetitionCoeff_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +notificationRepetitionCoeff_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +notificationRepetitionCoeff_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +notificationRepetitionCoeff_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +notificationRepetitionCoeff_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +notificationRepetitionCoeff_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +notificationRepetitionCoeff_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +notificationRepetitionCoeff_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + notificationRepetitionCoeff_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_notificationOffset_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 10)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_notificationSF_Index_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_notificationRepetitionCoeff_r9_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_notificationOffset_r9_constr_5 = { + { APC_CONSTRAINED, 4, 4, 0, 10 } /* (0..10) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_notificationSF_Index_r9_constr_6 = { + { APC_CONSTRAINED, 3, 3, 1, 6 } /* (1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_notificationRepetitionCoeff_r9_value2enum_2[] = { + { 0, 2, "n2" }, + { 1, 2, "n4" } +}; +static unsigned int asn_MAP_notificationRepetitionCoeff_r9_enum2value_2[] = { + 0, /* n2(0) */ + 1 /* n4(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_notificationRepetitionCoeff_r9_specs_2 = { + asn_MAP_notificationRepetitionCoeff_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_notificationRepetitionCoeff_r9_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_notificationRepetitionCoeff_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_notificationRepetitionCoeff_r9_2 = { + "notificationRepetitionCoeff-r9", + "notificationRepetitionCoeff-r9", + notificationRepetitionCoeff_r9_2_free, + notificationRepetitionCoeff_r9_2_print, + notificationRepetitionCoeff_r9_2_constraint, + notificationRepetitionCoeff_r9_2_decode_ber, + notificationRepetitionCoeff_r9_2_encode_der, + notificationRepetitionCoeff_r9_2_decode_xer, + notificationRepetitionCoeff_r9_2_encode_xer, + notificationRepetitionCoeff_r9_2_decode_uper, + notificationRepetitionCoeff_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_notificationRepetitionCoeff_r9_tags_2, + sizeof(asn_DEF_notificationRepetitionCoeff_r9_tags_2) + /sizeof(asn_DEF_notificationRepetitionCoeff_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_notificationRepetitionCoeff_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_notificationRepetitionCoeff_r9_tags_2) + /sizeof(asn_DEF_notificationRepetitionCoeff_r9_tags_2[0]), /* 2 */ + &asn_PER_type_notificationRepetitionCoeff_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_notificationRepetitionCoeff_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBMS_NotificationConfig_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBMS_NotificationConfig_r9, notificationRepetitionCoeff_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_notificationRepetitionCoeff_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "notificationRepetitionCoeff-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMS_NotificationConfig_r9, notificationOffset_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_notificationOffset_r9_constraint_1, + &asn_PER_memb_notificationOffset_r9_constr_5, + 0, + "notificationOffset-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMS_NotificationConfig_r9, notificationSF_Index_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_notificationSF_Index_r9_constraint_1, + &asn_PER_memb_notificationSF_Index_r9_constr_6, + 0, + "notificationSF-Index-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_MBMS_NotificationConfig_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBMS_NotificationConfig_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* notificationRepetitionCoeff-r9 at 4035 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* notificationOffset-r9 at 4036 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* notificationSF-Index-r9 at 4037 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBMS_NotificationConfig_r9_specs_1 = { + sizeof(struct MBMS_NotificationConfig_r9), + offsetof(struct MBMS_NotificationConfig_r9, _asn_ctx), + asn_MAP_MBMS_NotificationConfig_r9_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMS_NotificationConfig_r9 = { + "MBMS-NotificationConfig-r9", + "MBMS-NotificationConfig-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBMS_NotificationConfig_r9_tags_1, + sizeof(asn_DEF_MBMS_NotificationConfig_r9_tags_1) + /sizeof(asn_DEF_MBMS_NotificationConfig_r9_tags_1[0]), /* 1 */ + asn_DEF_MBMS_NotificationConfig_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMS_NotificationConfig_r9_tags_1) + /sizeof(asn_DEF_MBMS_NotificationConfig_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBMS_NotificationConfig_r9_1, + 3, /* Elements count */ + &asn_SPC_MBMS_NotificationConfig_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBMS-NotificationConfig-r9.h b/lte/rrc/asn/MBMS-NotificationConfig-r9.h new file mode 100644 index 000000000..79ac19330 --- /dev/null +++ b/lte/rrc/asn/MBMS-NotificationConfig-r9.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBMS_NotificationConfig_r9_H_ +#define _MBMS_NotificationConfig_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9 { + MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9_n2 = 0, + MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9_n4 = 1 +} e_MBMS_NotificationConfig_r9__notificationRepetitionCoeff_r9; + +/* MBMS-NotificationConfig-r9 */ +typedef struct MBMS_NotificationConfig_r9 { + long notificationRepetitionCoeff_r9; + long notificationOffset_r9; + long notificationSF_Index_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMS_NotificationConfig_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_notificationRepetitionCoeff_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MBMS_NotificationConfig_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBMS_NotificationConfig_r9_H_ */ +#include diff --git a/lte/rrc/asn/MBMS-SessionInfo-r9.c b/lte/rrc/asn/MBMS-SessionInfo-r9.c new file mode 100644 index 000000000..127c089f3 --- /dev/null +++ b/lte/rrc/asn/MBMS-SessionInfo-r9.c @@ -0,0 +1,143 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBMS-SessionInfo-r9.h" + +static int +memb_sessionId_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_logicalChannelIdentity_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 28)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_sessionId_r9_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_logicalChannelIdentity_r9_constr_4 = { + { APC_CONSTRAINED, 5, 5, 0, 28 } /* (0..28) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MBMS_SessionInfo_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBMS_SessionInfo_r9, tmgi_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TMGI_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tmgi-r9" + }, + { ATF_POINTER, 1, offsetof(struct MBMS_SessionInfo_r9, sessionId_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_sessionId_r9_constraint_1, + &asn_PER_memb_sessionId_r9_constr_3, + 0, + "sessionId-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMS_SessionInfo_r9, logicalChannelIdentity_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_logicalChannelIdentity_r9_constraint_1, + &asn_PER_memb_logicalChannelIdentity_r9_constr_4, + 0, + "logicalChannelIdentity-r9" + }, +}; +static int asn_MAP_MBMS_SessionInfo_r9_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_MBMS_SessionInfo_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBMS_SessionInfo_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tmgi-r9 at 4078 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sessionId-r9 at 4079 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* logicalChannelIdentity-r9 at 4080 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBMS_SessionInfo_r9_specs_1 = { + sizeof(struct MBMS_SessionInfo_r9), + offsetof(struct MBMS_SessionInfo_r9, _asn_ctx), + asn_MAP_MBMS_SessionInfo_r9_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MBMS_SessionInfo_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMS_SessionInfo_r9 = { + "MBMS-SessionInfo-r9", + "MBMS-SessionInfo-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBMS_SessionInfo_r9_tags_1, + sizeof(asn_DEF_MBMS_SessionInfo_r9_tags_1) + /sizeof(asn_DEF_MBMS_SessionInfo_r9_tags_1[0]), /* 1 */ + asn_DEF_MBMS_SessionInfo_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMS_SessionInfo_r9_tags_1) + /sizeof(asn_DEF_MBMS_SessionInfo_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBMS_SessionInfo_r9_1, + 3, /* Elements count */ + &asn_SPC_MBMS_SessionInfo_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBMS-SessionInfo-r9.h b/lte/rrc/asn/MBMS-SessionInfo-r9.h new file mode 100644 index 000000000..7d6936200 --- /dev/null +++ b/lte/rrc/asn/MBMS-SessionInfo-r9.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBMS_SessionInfo_r9_H_ +#define _MBMS_SessionInfo_r9_H_ + + +#include + +/* Including external dependencies */ +#include "TMGI-r9.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MBMS-SessionInfo-r9 */ +typedef struct MBMS_SessionInfo_r9 { + TMGI_r9_t tmgi_r9; + OCTET_STRING_t *sessionId_r9 /* OPTIONAL */; + long logicalChannelIdentity_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMS_SessionInfo_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBMS_SessionInfo_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBMS_SessionInfo_r9_H_ */ +#include diff --git a/lte/rrc/asn/MBMS-SessionInfoList-r9.c b/lte/rrc/asn/MBMS-SessionInfoList-r9.c new file mode 100644 index 000000000..562dd7d58 --- /dev/null +++ b/lte/rrc/asn/MBMS-SessionInfoList-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBMS-SessionInfoList-r9.h" + +static asn_per_constraints_t asn_PER_type_MBMS_SessionInfoList_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 29 } /* (SIZE(0..29)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MBMS_SessionInfoList_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBMS_SessionInfo_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MBMS_SessionInfoList_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MBMS_SessionInfoList_r9_specs_1 = { + sizeof(struct MBMS_SessionInfoList_r9), + offsetof(struct MBMS_SessionInfoList_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMS_SessionInfoList_r9 = { + "MBMS-SessionInfoList-r9", + "MBMS-SessionInfoList-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBMS_SessionInfoList_r9_tags_1, + sizeof(asn_DEF_MBMS_SessionInfoList_r9_tags_1) + /sizeof(asn_DEF_MBMS_SessionInfoList_r9_tags_1[0]), /* 1 */ + asn_DEF_MBMS_SessionInfoList_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMS_SessionInfoList_r9_tags_1) + /sizeof(asn_DEF_MBMS_SessionInfoList_r9_tags_1[0]), /* 1 */ + &asn_PER_type_MBMS_SessionInfoList_r9_constr_1, + asn_MBR_MBMS_SessionInfoList_r9_1, + 1, /* Single element */ + &asn_SPC_MBMS_SessionInfoList_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBMS-SessionInfoList-r9.h b/lte/rrc/asn/MBMS-SessionInfoList-r9.h new file mode 100644 index 000000000..bda471b40 --- /dev/null +++ b/lte/rrc/asn/MBMS-SessionInfoList-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBMS_SessionInfoList_r9_H_ +#define _MBMS_SessionInfoList_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MBMS_SessionInfo_r9; + +/* MBMS-SessionInfoList-r9 */ +typedef struct MBMS_SessionInfoList_r9 { + A_SEQUENCE_OF(struct MBMS_SessionInfo_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMS_SessionInfoList_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBMS_SessionInfoList_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBMS-SessionInfo-r9.h" + +#endif /* _MBMS_SessionInfoList_r9_H_ */ +#include diff --git a/lte/rrc/asn/MBMSCountingRequest-r10.c b/lte/rrc/asn/MBMSCountingRequest-r10.c new file mode 100644 index 000000000..830046efa --- /dev/null +++ b/lte/rrc/asn/MBMSCountingRequest-r10.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBMSCountingRequest-r10.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_4 = { + sizeof(struct MBMSCountingRequest_r10__nonCriticalExtension), + offsetof(struct MBMSCountingRequest_r10__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_4 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_4, + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_4, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBMSCountingRequest_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingRequest_r10, countingRequestList_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CountingRequestList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "countingRequestList-r10" + }, + { ATF_POINTER, 2, offsetof(struct MBMSCountingRequest_r10, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct MBMSCountingRequest_r10, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_nonCriticalExtension_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MBMSCountingRequest_r10_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_MBMSCountingRequest_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBMSCountingRequest_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* countingRequestList-r10 at 356 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* lateNonCriticalExtension at 357 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 358 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBMSCountingRequest_r10_specs_1 = { + sizeof(struct MBMSCountingRequest_r10), + offsetof(struct MBMSCountingRequest_r10, _asn_ctx), + asn_MAP_MBMSCountingRequest_r10_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MBMSCountingRequest_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMSCountingRequest_r10 = { + "MBMSCountingRequest-r10", + "MBMSCountingRequest-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBMSCountingRequest_r10_tags_1, + sizeof(asn_DEF_MBMSCountingRequest_r10_tags_1) + /sizeof(asn_DEF_MBMSCountingRequest_r10_tags_1[0]), /* 1 */ + asn_DEF_MBMSCountingRequest_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMSCountingRequest_r10_tags_1) + /sizeof(asn_DEF_MBMSCountingRequest_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBMSCountingRequest_r10_1, + 3, /* Elements count */ + &asn_SPC_MBMSCountingRequest_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBMSCountingRequest-r10.h b/lte/rrc/asn/MBMSCountingRequest-r10.h new file mode 100644 index 000000000..796126540 --- /dev/null +++ b/lte/rrc/asn/MBMSCountingRequest-r10.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBMSCountingRequest_r10_H_ +#define _MBMSCountingRequest_r10_H_ + + +#include + +/* Including external dependencies */ +#include "CountingRequestList-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MBMSCountingRequest-r10 */ +typedef struct MBMSCountingRequest_r10 { + CountingRequestList_r10_t countingRequestList_r10; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct MBMSCountingRequest_r10__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMSCountingRequest_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBMSCountingRequest_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBMSCountingRequest_r10_H_ */ +#include diff --git a/lte/rrc/asn/MBMSCountingResponse-r10-IEs.c b/lte/rrc/asn/MBMSCountingResponse-r10-IEs.c new file mode 100644 index 000000000..8e5067b49 --- /dev/null +++ b/lte/rrc/asn/MBMSCountingResponse-r10-IEs.c @@ -0,0 +1,160 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBMSCountingResponse-r10-IEs.h" + +static int +memb_mbsfn_AreaIndex_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_mbsfn_AreaIndex_r10_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_5 = { + sizeof(struct MBMSCountingResponse_r10_IEs__nonCriticalExtension), + offsetof(struct MBMSCountingResponse_r10_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_5 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_5, + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_5, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBMSCountingResponse_r10_IEs_1[] = { + { ATF_POINTER, 4, offsetof(struct MBMSCountingResponse_r10_IEs, mbsfn_AreaIndex_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_mbsfn_AreaIndex_r10_constraint_1, + &asn_PER_memb_mbsfn_AreaIndex_r10_constr_2, + 0, + "mbsfn-AreaIndex-r10" + }, + { ATF_POINTER, 3, offsetof(struct MBMSCountingResponse_r10_IEs, countingResponseList_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CountingResponseList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "countingResponseList-r10" + }, + { ATF_POINTER, 2, offsetof(struct MBMSCountingResponse_r10_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct MBMSCountingResponse_r10_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_nonCriticalExtension_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MBMSCountingResponse_r10_IEs_oms_1[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_MBMSCountingResponse_r10_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBMSCountingResponse_r10_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mbsfn-AreaIndex-r10 at 380 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* countingResponseList-r10 at 381 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* lateNonCriticalExtension at 382 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 383 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBMSCountingResponse_r10_IEs_specs_1 = { + sizeof(struct MBMSCountingResponse_r10_IEs), + offsetof(struct MBMSCountingResponse_r10_IEs, _asn_ctx), + asn_MAP_MBMSCountingResponse_r10_IEs_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_MBMSCountingResponse_r10_IEs_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMSCountingResponse_r10_IEs = { + "MBMSCountingResponse-r10-IEs", + "MBMSCountingResponse-r10-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBMSCountingResponse_r10_IEs_tags_1, + sizeof(asn_DEF_MBMSCountingResponse_r10_IEs_tags_1) + /sizeof(asn_DEF_MBMSCountingResponse_r10_IEs_tags_1[0]), /* 1 */ + asn_DEF_MBMSCountingResponse_r10_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMSCountingResponse_r10_IEs_tags_1) + /sizeof(asn_DEF_MBMSCountingResponse_r10_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBMSCountingResponse_r10_IEs_1, + 4, /* Elements count */ + &asn_SPC_MBMSCountingResponse_r10_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBMSCountingResponse-r10-IEs.h b/lte/rrc/asn/MBMSCountingResponse-r10-IEs.h new file mode 100644 index 000000000..e1b536f55 --- /dev/null +++ b/lte/rrc/asn/MBMSCountingResponse-r10-IEs.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBMSCountingResponse_r10_IEs_H_ +#define _MBMSCountingResponse_r10_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CountingResponseList_r10; + +/* MBMSCountingResponse-r10-IEs */ +typedef struct MBMSCountingResponse_r10_IEs { + long *mbsfn_AreaIndex_r10 /* OPTIONAL */; + struct CountingResponseList_r10 *countingResponseList_r10 /* OPTIONAL */; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct MBMSCountingResponse_r10_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMSCountingResponse_r10_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBMSCountingResponse_r10_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CountingResponseList-r10.h" + +#endif /* _MBMSCountingResponse_r10_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MBMSCountingResponse-r10.c b/lte/rrc/asn/MBMSCountingResponse-r10.c new file mode 100644 index 000000000..5792cbf8c --- /dev/null +++ b/lte/rrc/asn/MBMSCountingResponse-r10.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBMSCountingResponse-r10.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10__criticalExtensions__c1, choice.countingResponse_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBMSCountingResponse_r10_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "countingResponse-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* countingResponse-r10 at 372 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 373 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 373 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 373 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct MBMSCountingResponse_r10__criticalExtensions__c1), + offsetof(struct MBMSCountingResponse_r10__criticalExtensions__c1, _asn_ctx), + offsetof(struct MBMSCountingResponse_r10__criticalExtensions__c1, present), + sizeof(((struct MBMSCountingResponse_r10__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct MBMSCountingResponse_r10__criticalExtensions__criticalExtensionsFuture), + offsetof(struct MBMSCountingResponse_r10__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 372 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 375 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct MBMSCountingResponse_r10__criticalExtensions), + offsetof(struct MBMSCountingResponse_r10__criticalExtensions, _asn_ctx), + offsetof(struct MBMSCountingResponse_r10__criticalExtensions, present), + sizeof(((struct MBMSCountingResponse_r10__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBMSCountingResponse_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBMSCountingResponse_r10, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_MBMSCountingResponse_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBMSCountingResponse_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 374 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBMSCountingResponse_r10_specs_1 = { + sizeof(struct MBMSCountingResponse_r10), + offsetof(struct MBMSCountingResponse_r10, _asn_ctx), + asn_MAP_MBMSCountingResponse_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBMSCountingResponse_r10 = { + "MBMSCountingResponse-r10", + "MBMSCountingResponse-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBMSCountingResponse_r10_tags_1, + sizeof(asn_DEF_MBMSCountingResponse_r10_tags_1) + /sizeof(asn_DEF_MBMSCountingResponse_r10_tags_1[0]), /* 1 */ + asn_DEF_MBMSCountingResponse_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MBMSCountingResponse_r10_tags_1) + /sizeof(asn_DEF_MBMSCountingResponse_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBMSCountingResponse_r10_1, + 1, /* Elements count */ + &asn_SPC_MBMSCountingResponse_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBMSCountingResponse-r10.h b/lte/rrc/asn/MBMSCountingResponse-r10.h new file mode 100644 index 000000000..bac1ef0be --- /dev/null +++ b/lte/rrc/asn/MBMSCountingResponse-r10.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBMSCountingResponse_r10_H_ +#define _MBMSCountingResponse_r10_H_ + + +#include + +/* Including external dependencies */ +#include "MBMSCountingResponse-r10-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MBMSCountingResponse_r10__criticalExtensions_PR { + MBMSCountingResponse_r10__criticalExtensions_PR_NOTHING, /* No components present */ + MBMSCountingResponse_r10__criticalExtensions_PR_c1, + MBMSCountingResponse_r10__criticalExtensions_PR_criticalExtensionsFuture +} MBMSCountingResponse_r10__criticalExtensions_PR; +typedef enum MBMSCountingResponse_r10__criticalExtensions__c1_PR { + MBMSCountingResponse_r10__criticalExtensions__c1_PR_NOTHING, /* No components present */ + MBMSCountingResponse_r10__criticalExtensions__c1_PR_countingResponse_r10, + MBMSCountingResponse_r10__criticalExtensions__c1_PR_spare3, + MBMSCountingResponse_r10__criticalExtensions__c1_PR_spare2, + MBMSCountingResponse_r10__criticalExtensions__c1_PR_spare1 +} MBMSCountingResponse_r10__criticalExtensions__c1_PR; + +/* MBMSCountingResponse-r10 */ +typedef struct MBMSCountingResponse_r10 { + struct MBMSCountingResponse_r10__criticalExtensions { + MBMSCountingResponse_r10__criticalExtensions_PR present; + union MBMSCountingResponse_r10__criticalExtensions_u { + struct MBMSCountingResponse_r10__criticalExtensions__c1 { + MBMSCountingResponse_r10__criticalExtensions__c1_PR present; + union MBMSCountingResponse_r10__criticalExtensions__c1_u { + MBMSCountingResponse_r10_IEs_t countingResponse_r10; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct MBMSCountingResponse_r10__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBMSCountingResponse_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBMSCountingResponse_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBMSCountingResponse_r10_H_ */ +#include diff --git a/lte/rrc/asn/MBSFN-AreaInfo-r9.c b/lte/rrc/asn/MBSFN-AreaInfo-r9.c new file mode 100644 index 000000000..942cf0f5c --- /dev/null +++ b/lte/rrc/asn/MBSFN-AreaInfo-r9.c @@ -0,0 +1,873 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBSFN-AreaInfo-r9.h" + +static int +non_MBSFNregionLength_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +non_MBSFNregionLength_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +non_MBSFNregionLength_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +non_MBSFNregionLength_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +non_MBSFNregionLength_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +non_MBSFNregionLength_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +non_MBSFNregionLength_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +non_MBSFNregionLength_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +non_MBSFNregionLength_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +non_MBSFNregionLength_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + non_MBSFNregionLength_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +mcch_RepetitionPeriod_r9_8_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +mcch_RepetitionPeriod_r9_8_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +mcch_RepetitionPeriod_r9_8_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +mcch_RepetitionPeriod_r9_8_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +mcch_RepetitionPeriod_r9_8_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +mcch_RepetitionPeriod_r9_8_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +mcch_RepetitionPeriod_r9_8_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +mcch_RepetitionPeriod_r9_8_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +mcch_RepetitionPeriod_r9_8_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + mcch_RepetitionPeriod_r9_8_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +mcch_ModificationPeriod_r9_14_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +mcch_ModificationPeriod_r9_14_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +mcch_ModificationPeriod_r9_14_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +mcch_ModificationPeriod_r9_14_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +mcch_ModificationPeriod_r9_14_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +mcch_ModificationPeriod_r9_14_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +mcch_ModificationPeriod_r9_14_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +mcch_ModificationPeriod_r9_14_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +mcch_ModificationPeriod_r9_14_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + mcch_ModificationPeriod_r9_14_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +signallingMCS_r9_18_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +signallingMCS_r9_18_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +signallingMCS_r9_18_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +signallingMCS_r9_18_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +signallingMCS_r9_18_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +signallingMCS_r9_18_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +signallingMCS_r9_18_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +signallingMCS_r9_18_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +signallingMCS_r9_18_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +signallingMCS_r9_18_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + signallingMCS_r9_18_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_mcch_Offset_r9_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 10)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sf_AllocInfo_r9_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_mbsfn_AreaId_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_notificationIndicator_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_non_MBSFNregionLength_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_mcch_RepetitionPeriod_r9_constr_8 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_mcch_ModificationPeriod_r9_constr_14 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_signallingMCS_r9_constr_18 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_mcch_Offset_r9_constr_13 = { + { APC_CONSTRAINED, 4, 4, 0, 10 } /* (0..10) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf_AllocInfo_r9_constr_17 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_mbsfn_AreaId_r9_constr_2 = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_notificationIndicator_r9_constr_6 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_non_MBSFNregionLength_value2enum_3[] = { + { 0, 2, "s1" }, + { 1, 2, "s2" } +}; +static unsigned int asn_MAP_non_MBSFNregionLength_enum2value_3[] = { + 0, /* s1(0) */ + 1 /* s2(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_non_MBSFNregionLength_specs_3 = { + asn_MAP_non_MBSFNregionLength_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_non_MBSFNregionLength_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_non_MBSFNregionLength_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_non_MBSFNregionLength_3 = { + "non-MBSFNregionLength", + "non-MBSFNregionLength", + non_MBSFNregionLength_3_free, + non_MBSFNregionLength_3_print, + non_MBSFNregionLength_3_constraint, + non_MBSFNregionLength_3_decode_ber, + non_MBSFNregionLength_3_encode_der, + non_MBSFNregionLength_3_decode_xer, + non_MBSFNregionLength_3_encode_xer, + non_MBSFNregionLength_3_decode_uper, + non_MBSFNregionLength_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_non_MBSFNregionLength_tags_3, + sizeof(asn_DEF_non_MBSFNregionLength_tags_3) + /sizeof(asn_DEF_non_MBSFNregionLength_tags_3[0]) - 1, /* 1 */ + asn_DEF_non_MBSFNregionLength_tags_3, /* Same as above */ + sizeof(asn_DEF_non_MBSFNregionLength_tags_3) + /sizeof(asn_DEF_non_MBSFNregionLength_tags_3[0]), /* 2 */ + &asn_PER_type_non_MBSFNregionLength_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_non_MBSFNregionLength_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_mcch_RepetitionPeriod_r9_value2enum_8[] = { + { 0, 4, "rf32" }, + { 1, 4, "rf64" }, + { 2, 5, "rf128" }, + { 3, 5, "rf256" } +}; +static unsigned int asn_MAP_mcch_RepetitionPeriod_r9_enum2value_8[] = { + 2, /* rf128(2) */ + 3, /* rf256(3) */ + 0, /* rf32(0) */ + 1 /* rf64(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_mcch_RepetitionPeriod_r9_specs_8 = { + asn_MAP_mcch_RepetitionPeriod_r9_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_mcch_RepetitionPeriod_r9_enum2value_8, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_mcch_RepetitionPeriod_r9_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mcch_RepetitionPeriod_r9_8 = { + "mcch-RepetitionPeriod-r9", + "mcch-RepetitionPeriod-r9", + mcch_RepetitionPeriod_r9_8_free, + mcch_RepetitionPeriod_r9_8_print, + mcch_RepetitionPeriod_r9_8_constraint, + mcch_RepetitionPeriod_r9_8_decode_ber, + mcch_RepetitionPeriod_r9_8_encode_der, + mcch_RepetitionPeriod_r9_8_decode_xer, + mcch_RepetitionPeriod_r9_8_encode_xer, + mcch_RepetitionPeriod_r9_8_decode_uper, + mcch_RepetitionPeriod_r9_8_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mcch_RepetitionPeriod_r9_tags_8, + sizeof(asn_DEF_mcch_RepetitionPeriod_r9_tags_8) + /sizeof(asn_DEF_mcch_RepetitionPeriod_r9_tags_8[0]) - 1, /* 1 */ + asn_DEF_mcch_RepetitionPeriod_r9_tags_8, /* Same as above */ + sizeof(asn_DEF_mcch_RepetitionPeriod_r9_tags_8) + /sizeof(asn_DEF_mcch_RepetitionPeriod_r9_tags_8[0]), /* 2 */ + &asn_PER_type_mcch_RepetitionPeriod_r9_constr_8, + 0, 0, /* Defined elsewhere */ + &asn_SPC_mcch_RepetitionPeriod_r9_specs_8 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_mcch_ModificationPeriod_r9_value2enum_14[] = { + { 0, 5, "rf512" }, + { 1, 6, "rf1024" } +}; +static unsigned int asn_MAP_mcch_ModificationPeriod_r9_enum2value_14[] = { + 1, /* rf1024(1) */ + 0 /* rf512(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_mcch_ModificationPeriod_r9_specs_14 = { + asn_MAP_mcch_ModificationPeriod_r9_value2enum_14, /* "tag" => N; sorted by tag */ + asn_MAP_mcch_ModificationPeriod_r9_enum2value_14, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_mcch_ModificationPeriod_r9_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mcch_ModificationPeriod_r9_14 = { + "mcch-ModificationPeriod-r9", + "mcch-ModificationPeriod-r9", + mcch_ModificationPeriod_r9_14_free, + mcch_ModificationPeriod_r9_14_print, + mcch_ModificationPeriod_r9_14_constraint, + mcch_ModificationPeriod_r9_14_decode_ber, + mcch_ModificationPeriod_r9_14_encode_der, + mcch_ModificationPeriod_r9_14_decode_xer, + mcch_ModificationPeriod_r9_14_encode_xer, + mcch_ModificationPeriod_r9_14_decode_uper, + mcch_ModificationPeriod_r9_14_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mcch_ModificationPeriod_r9_tags_14, + sizeof(asn_DEF_mcch_ModificationPeriod_r9_tags_14) + /sizeof(asn_DEF_mcch_ModificationPeriod_r9_tags_14[0]) - 1, /* 1 */ + asn_DEF_mcch_ModificationPeriod_r9_tags_14, /* Same as above */ + sizeof(asn_DEF_mcch_ModificationPeriod_r9_tags_14) + /sizeof(asn_DEF_mcch_ModificationPeriod_r9_tags_14[0]), /* 2 */ + &asn_PER_type_mcch_ModificationPeriod_r9_constr_14, + 0, 0, /* Defined elsewhere */ + &asn_SPC_mcch_ModificationPeriod_r9_specs_14 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_signallingMCS_r9_value2enum_18[] = { + { 0, 2, "n2" }, + { 1, 2, "n7" }, + { 2, 3, "n13" }, + { 3, 3, "n19" } +}; +static unsigned int asn_MAP_signallingMCS_r9_enum2value_18[] = { + 2, /* n13(2) */ + 3, /* n19(3) */ + 0, /* n2(0) */ + 1 /* n7(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_signallingMCS_r9_specs_18 = { + asn_MAP_signallingMCS_r9_value2enum_18, /* "tag" => N; sorted by tag */ + asn_MAP_signallingMCS_r9_enum2value_18, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_signallingMCS_r9_tags_18[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_signallingMCS_r9_18 = { + "signallingMCS-r9", + "signallingMCS-r9", + signallingMCS_r9_18_free, + signallingMCS_r9_18_print, + signallingMCS_r9_18_constraint, + signallingMCS_r9_18_decode_ber, + signallingMCS_r9_18_encode_der, + signallingMCS_r9_18_decode_xer, + signallingMCS_r9_18_encode_xer, + signallingMCS_r9_18_decode_uper, + signallingMCS_r9_18_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_signallingMCS_r9_tags_18, + sizeof(asn_DEF_signallingMCS_r9_tags_18) + /sizeof(asn_DEF_signallingMCS_r9_tags_18[0]) - 1, /* 1 */ + asn_DEF_signallingMCS_r9_tags_18, /* Same as above */ + sizeof(asn_DEF_signallingMCS_r9_tags_18) + /sizeof(asn_DEF_signallingMCS_r9_tags_18[0]), /* 2 */ + &asn_PER_type_signallingMCS_r9_constr_18, + 0, 0, /* Defined elsewhere */ + &asn_SPC_signallingMCS_r9_specs_18 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_mcch_Config_r9_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9__mcch_Config_r9, mcch_RepetitionPeriod_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_mcch_RepetitionPeriod_r9_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mcch-RepetitionPeriod-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9__mcch_Config_r9, mcch_Offset_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_mcch_Offset_r9_constraint_7, + &asn_PER_memb_mcch_Offset_r9_constr_13, + 0, + "mcch-Offset-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9__mcch_Config_r9, mcch_ModificationPeriod_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_mcch_ModificationPeriod_r9_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mcch-ModificationPeriod-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9__mcch_Config_r9, sf_AllocInfo_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_sf_AllocInfo_r9_constraint_7, + &asn_PER_memb_sf_AllocInfo_r9_constr_17, + 0, + "sf-AllocInfo-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9__mcch_Config_r9, signallingMCS_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_signallingMCS_r9_18, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "signallingMCS-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_mcch_Config_r9_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_mcch_Config_r9_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mcch-RepetitionPeriod-r9 at 4048 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mcch-Offset-r9 at 4049 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mcch-ModificationPeriod-r9 at 4050 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sf-AllocInfo-r9 at 4051 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* signallingMCS-r9 at 4052 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_mcch_Config_r9_specs_7 = { + sizeof(struct MBSFN_AreaInfo_r9__mcch_Config_r9), + offsetof(struct MBSFN_AreaInfo_r9__mcch_Config_r9, _asn_ctx), + asn_MAP_mcch_Config_r9_tag2el_7, + 5, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mcch_Config_r9_7 = { + "mcch-Config-r9", + "mcch-Config-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mcch_Config_r9_tags_7, + sizeof(asn_DEF_mcch_Config_r9_tags_7) + /sizeof(asn_DEF_mcch_Config_r9_tags_7[0]) - 1, /* 1 */ + asn_DEF_mcch_Config_r9_tags_7, /* Same as above */ + sizeof(asn_DEF_mcch_Config_r9_tags_7) + /sizeof(asn_DEF_mcch_Config_r9_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_mcch_Config_r9_7, + 5, /* Elements count */ + &asn_SPC_mcch_Config_r9_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBSFN_AreaInfo_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9, mbsfn_AreaId_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_mbsfn_AreaId_r9_constraint_1, + &asn_PER_memb_mbsfn_AreaId_r9_constr_2, + 0, + "mbsfn-AreaId-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9, non_MBSFNregionLength), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_non_MBSFNregionLength_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "non-MBSFNregionLength" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9, notificationIndicator_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_notificationIndicator_r9_constraint_1, + &asn_PER_memb_notificationIndicator_r9_constr_6, + 0, + "notificationIndicator-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_AreaInfo_r9, mcch_Config_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_mcch_Config_r9_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mcch-Config-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_MBSFN_AreaInfo_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBSFN_AreaInfo_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mbsfn-AreaId-r9 at 4044 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* non-MBSFNregionLength at 4045 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* notificationIndicator-r9 at 4046 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* mcch-Config-r9 at 4048 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBSFN_AreaInfo_r9_specs_1 = { + sizeof(struct MBSFN_AreaInfo_r9), + offsetof(struct MBSFN_AreaInfo_r9, _asn_ctx), + asn_MAP_MBSFN_AreaInfo_r9_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_AreaInfo_r9 = { + "MBSFN-AreaInfo-r9", + "MBSFN-AreaInfo-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBSFN_AreaInfo_r9_tags_1, + sizeof(asn_DEF_MBSFN_AreaInfo_r9_tags_1) + /sizeof(asn_DEF_MBSFN_AreaInfo_r9_tags_1[0]), /* 1 */ + asn_DEF_MBSFN_AreaInfo_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFN_AreaInfo_r9_tags_1) + /sizeof(asn_DEF_MBSFN_AreaInfo_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBSFN_AreaInfo_r9_1, + 4, /* Elements count */ + &asn_SPC_MBSFN_AreaInfo_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBSFN-AreaInfo-r9.h b/lte/rrc/asn/MBSFN-AreaInfo-r9.h new file mode 100644 index 000000000..91885d4ad --- /dev/null +++ b/lte/rrc/asn/MBSFN-AreaInfo-r9.h @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBSFN_AreaInfo_r9_H_ +#define _MBSFN_AreaInfo_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MBSFN_AreaInfo_r9__non_MBSFNregionLength { + MBSFN_AreaInfo_r9__non_MBSFNregionLength_s1 = 0, + MBSFN_AreaInfo_r9__non_MBSFNregionLength_s2 = 1 +} e_MBSFN_AreaInfo_r9__non_MBSFNregionLength; +typedef enum MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9 { + MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf32 = 0, + MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf64 = 1, + MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf128 = 2, + MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9_rf256 = 3 +} e_MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_RepetitionPeriod_r9; +typedef enum MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_ModificationPeriod_r9 { + MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_ModificationPeriod_r9_rf512 = 0, + MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_ModificationPeriod_r9_rf1024 = 1 +} e_MBSFN_AreaInfo_r9__mcch_Config_r9__mcch_ModificationPeriod_r9; +typedef enum MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9 { + MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n2 = 0, + MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n7 = 1, + MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n13 = 2, + MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9_n19 = 3 +} e_MBSFN_AreaInfo_r9__mcch_Config_r9__signallingMCS_r9; + +/* MBSFN-AreaInfo-r9 */ +typedef struct MBSFN_AreaInfo_r9 { + long mbsfn_AreaId_r9; + long non_MBSFNregionLength; + long notificationIndicator_r9; + struct MBSFN_AreaInfo_r9__mcch_Config_r9 { + long mcch_RepetitionPeriod_r9; + long mcch_Offset_r9; + long mcch_ModificationPeriod_r9; + BIT_STRING_t sf_AllocInfo_r9; + long signallingMCS_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } mcch_Config_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_AreaInfo_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_non_MBSFNregionLength_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_mcch_RepetitionPeriod_r9_8; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_mcch_ModificationPeriod_r9_14; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_signallingMCS_r9_18; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_AreaInfo_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBSFN_AreaInfo_r9_H_ */ +#include diff --git a/lte/rrc/asn/MBSFN-AreaInfoList-r9.c b/lte/rrc/asn/MBSFN-AreaInfoList-r9.c new file mode 100644 index 000000000..d45a7327b --- /dev/null +++ b/lte/rrc/asn/MBSFN-AreaInfoList-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBSFN-AreaInfoList-r9.h" + +static asn_per_constraints_t asn_PER_type_MBSFN_AreaInfoList_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MBSFN_AreaInfoList_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBSFN_AreaInfo_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MBSFN_AreaInfoList_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MBSFN_AreaInfoList_r9_specs_1 = { + sizeof(struct MBSFN_AreaInfoList_r9), + offsetof(struct MBSFN_AreaInfoList_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_AreaInfoList_r9 = { + "MBSFN-AreaInfoList-r9", + "MBSFN-AreaInfoList-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBSFN_AreaInfoList_r9_tags_1, + sizeof(asn_DEF_MBSFN_AreaInfoList_r9_tags_1) + /sizeof(asn_DEF_MBSFN_AreaInfoList_r9_tags_1[0]), /* 1 */ + asn_DEF_MBSFN_AreaInfoList_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFN_AreaInfoList_r9_tags_1) + /sizeof(asn_DEF_MBSFN_AreaInfoList_r9_tags_1[0]), /* 1 */ + &asn_PER_type_MBSFN_AreaInfoList_r9_constr_1, + asn_MBR_MBSFN_AreaInfoList_r9_1, + 1, /* Single element */ + &asn_SPC_MBSFN_AreaInfoList_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBSFN-AreaInfoList-r9.h b/lte/rrc/asn/MBSFN-AreaInfoList-r9.h new file mode 100644 index 000000000..c0b685692 --- /dev/null +++ b/lte/rrc/asn/MBSFN-AreaInfoList-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBSFN_AreaInfoList_r9_H_ +#define _MBSFN_AreaInfoList_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MBSFN_AreaInfo_r9; + +/* MBSFN-AreaInfoList-r9 */ +typedef struct MBSFN_AreaInfoList_r9 { + A_SEQUENCE_OF(struct MBSFN_AreaInfo_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_AreaInfoList_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_AreaInfoList_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBSFN-AreaInfo-r9.h" + +#endif /* _MBSFN_AreaInfoList_r9_H_ */ +#include diff --git a/lte/rrc/asn/MBSFN-SubframeConfig.c b/lte/rrc/asn/MBSFN-SubframeConfig.c new file mode 100644 index 000000000..54a6eb04f --- /dev/null +++ b/lte/rrc/asn/MBSFN-SubframeConfig.c @@ -0,0 +1,392 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBSFN-SubframeConfig.h" + +static int +radioframeAllocationPeriod_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +radioframeAllocationPeriod_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +radioframeAllocationPeriod_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +radioframeAllocationPeriod_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +radioframeAllocationPeriod_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +radioframeAllocationPeriod_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +radioframeAllocationPeriod_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +radioframeAllocationPeriod_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +radioframeAllocationPeriod_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +radioframeAllocationPeriod_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + radioframeAllocationPeriod_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_oneFrame_constraint_10(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_fourFrames_constraint_10(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 24)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_radioframeAllocationOffset_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_radioframeAllocationPeriod_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_oneFrame_constr_11 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_fourFrames_constr_12 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 24, 24 } /* (SIZE(24..24)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_subframeAllocation_constr_10 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_radioframeAllocationOffset_constr_9 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_radioframeAllocationPeriod_value2enum_2[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n4" }, + { 3, 2, "n8" }, + { 4, 3, "n16" }, + { 5, 3, "n32" } +}; +static unsigned int asn_MAP_radioframeAllocationPeriod_enum2value_2[] = { + 0, /* n1(0) */ + 4, /* n16(4) */ + 1, /* n2(1) */ + 5, /* n32(5) */ + 2, /* n4(2) */ + 3 /* n8(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_radioframeAllocationPeriod_specs_2 = { + asn_MAP_radioframeAllocationPeriod_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_radioframeAllocationPeriod_enum2value_2, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_radioframeAllocationPeriod_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_radioframeAllocationPeriod_2 = { + "radioframeAllocationPeriod", + "radioframeAllocationPeriod", + radioframeAllocationPeriod_2_free, + radioframeAllocationPeriod_2_print, + radioframeAllocationPeriod_2_constraint, + radioframeAllocationPeriod_2_decode_ber, + radioframeAllocationPeriod_2_encode_der, + radioframeAllocationPeriod_2_decode_xer, + radioframeAllocationPeriod_2_encode_xer, + radioframeAllocationPeriod_2_decode_uper, + radioframeAllocationPeriod_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_radioframeAllocationPeriod_tags_2, + sizeof(asn_DEF_radioframeAllocationPeriod_tags_2) + /sizeof(asn_DEF_radioframeAllocationPeriod_tags_2[0]) - 1, /* 1 */ + asn_DEF_radioframeAllocationPeriod_tags_2, /* Same as above */ + sizeof(asn_DEF_radioframeAllocationPeriod_tags_2) + /sizeof(asn_DEF_radioframeAllocationPeriod_tags_2[0]), /* 2 */ + &asn_PER_type_radioframeAllocationPeriod_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_radioframeAllocationPeriod_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_subframeAllocation_10[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_SubframeConfig__subframeAllocation, choice.oneFrame), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_oneFrame_constraint_10, + &asn_PER_memb_oneFrame_constr_11, + 0, + "oneFrame" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_SubframeConfig__subframeAllocation, choice.fourFrames), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_fourFrames_constraint_10, + &asn_PER_memb_fourFrames_constr_12, + 0, + "fourFrames" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_subframeAllocation_tag2el_10[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* oneFrame at 4062 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* fourFrames at 4063 */ +}; +static asn_CHOICE_specifics_t asn_SPC_subframeAllocation_specs_10 = { + sizeof(struct MBSFN_SubframeConfig__subframeAllocation), + offsetof(struct MBSFN_SubframeConfig__subframeAllocation, _asn_ctx), + offsetof(struct MBSFN_SubframeConfig__subframeAllocation, present), + sizeof(((struct MBSFN_SubframeConfig__subframeAllocation *)0)->present), + asn_MAP_subframeAllocation_tag2el_10, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_subframeAllocation_10 = { + "subframeAllocation", + "subframeAllocation", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_subframeAllocation_constr_10, + asn_MBR_subframeAllocation_10, + 2, /* Elements count */ + &asn_SPC_subframeAllocation_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBSFN_SubframeConfig_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_SubframeConfig, radioframeAllocationPeriod), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_radioframeAllocationPeriod_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioframeAllocationPeriod" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_SubframeConfig, radioframeAllocationOffset), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_radioframeAllocationOffset_constraint_1, + &asn_PER_memb_radioframeAllocationOffset_constr_9, + 0, + "radioframeAllocationOffset" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFN_SubframeConfig, subframeAllocation), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_subframeAllocation_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "subframeAllocation" + }, +}; +static ber_tlv_tag_t asn_DEF_MBSFN_SubframeConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBSFN_SubframeConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioframeAllocationPeriod at 4059 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* radioframeAllocationOffset at 4060 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* subframeAllocation at 4062 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBSFN_SubframeConfig_specs_1 = { + sizeof(struct MBSFN_SubframeConfig), + offsetof(struct MBSFN_SubframeConfig, _asn_ctx), + asn_MAP_MBSFN_SubframeConfig_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_SubframeConfig = { + "MBSFN-SubframeConfig", + "MBSFN-SubframeConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBSFN_SubframeConfig_tags_1, + sizeof(asn_DEF_MBSFN_SubframeConfig_tags_1) + /sizeof(asn_DEF_MBSFN_SubframeConfig_tags_1[0]), /* 1 */ + asn_DEF_MBSFN_SubframeConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFN_SubframeConfig_tags_1) + /sizeof(asn_DEF_MBSFN_SubframeConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBSFN_SubframeConfig_1, + 3, /* Elements count */ + &asn_SPC_MBSFN_SubframeConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBSFN-SubframeConfig.h b/lte/rrc/asn/MBSFN-SubframeConfig.h new file mode 100644 index 000000000..f8d562151 --- /dev/null +++ b/lte/rrc/asn/MBSFN-SubframeConfig.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBSFN_SubframeConfig_H_ +#define _MBSFN_SubframeConfig_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MBSFN_SubframeConfig__radioframeAllocationPeriod { + MBSFN_SubframeConfig__radioframeAllocationPeriod_n1 = 0, + MBSFN_SubframeConfig__radioframeAllocationPeriod_n2 = 1, + MBSFN_SubframeConfig__radioframeAllocationPeriod_n4 = 2, + MBSFN_SubframeConfig__radioframeAllocationPeriod_n8 = 3, + MBSFN_SubframeConfig__radioframeAllocationPeriod_n16 = 4, + MBSFN_SubframeConfig__radioframeAllocationPeriod_n32 = 5 +} e_MBSFN_SubframeConfig__radioframeAllocationPeriod; +typedef enum MBSFN_SubframeConfig__subframeAllocation_PR { + MBSFN_SubframeConfig__subframeAllocation_PR_NOTHING, /* No components present */ + MBSFN_SubframeConfig__subframeAllocation_PR_oneFrame, + MBSFN_SubframeConfig__subframeAllocation_PR_fourFrames +} MBSFN_SubframeConfig__subframeAllocation_PR; + +/* MBSFN-SubframeConfig */ +typedef struct MBSFN_SubframeConfig { + long radioframeAllocationPeriod; + long radioframeAllocationOffset; + struct MBSFN_SubframeConfig__subframeAllocation { + MBSFN_SubframeConfig__subframeAllocation_PR present; + union MBSFN_SubframeConfig__subframeAllocation_u { + BIT_STRING_t oneFrame; + BIT_STRING_t fourFrames; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } subframeAllocation; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_SubframeConfig_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_radioframeAllocationPeriod_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_SubframeConfig; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBSFN_SubframeConfig_H_ */ +#include diff --git a/lte/rrc/asn/MBSFN-SubframeConfigList.c b/lte/rrc/asn/MBSFN-SubframeConfigList.c new file mode 100644 index 000000000..722f13f0f --- /dev/null +++ b/lte/rrc/asn/MBSFN-SubframeConfigList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBSFN-SubframeConfigList.h" + +static asn_per_constraints_t asn_PER_type_MBSFN_SubframeConfigList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MBSFN_SubframeConfigList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MBSFN_SubframeConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MBSFN_SubframeConfigList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MBSFN_SubframeConfigList_specs_1 = { + sizeof(struct MBSFN_SubframeConfigList), + offsetof(struct MBSFN_SubframeConfigList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFN_SubframeConfigList = { + "MBSFN-SubframeConfigList", + "MBSFN-SubframeConfigList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBSFN_SubframeConfigList_tags_1, + sizeof(asn_DEF_MBSFN_SubframeConfigList_tags_1) + /sizeof(asn_DEF_MBSFN_SubframeConfigList_tags_1[0]), /* 1 */ + asn_DEF_MBSFN_SubframeConfigList_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFN_SubframeConfigList_tags_1) + /sizeof(asn_DEF_MBSFN_SubframeConfigList_tags_1[0]), /* 1 */ + &asn_PER_type_MBSFN_SubframeConfigList_constr_1, + asn_MBR_MBSFN_SubframeConfigList_1, + 1, /* Single element */ + &asn_SPC_MBSFN_SubframeConfigList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBSFN-SubframeConfigList.h b/lte/rrc/asn/MBSFN-SubframeConfigList.h new file mode 100644 index 000000000..d44421f8b --- /dev/null +++ b/lte/rrc/asn/MBSFN-SubframeConfigList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBSFN_SubframeConfigList_H_ +#define _MBSFN_SubframeConfigList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MBSFN_SubframeConfig; + +/* MBSFN-SubframeConfigList */ +typedef struct MBSFN_SubframeConfigList { + A_SEQUENCE_OF(struct MBSFN_SubframeConfig) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFN_SubframeConfigList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFN_SubframeConfigList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBSFN-SubframeConfig.h" + +#endif /* _MBSFN_SubframeConfigList_H_ */ +#include diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-r9.c b/lte/rrc/asn/MBSFNAreaConfiguration-r9.c new file mode 100644 index 000000000..cc882781f --- /dev/null +++ b/lte/rrc/asn/MBSFNAreaConfiguration-r9.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBSFNAreaConfiguration-r9.h" + +static int +commonSF_AllocPeriod_r9_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +commonSF_AllocPeriod_r9_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +commonSF_AllocPeriod_r9_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +commonSF_AllocPeriod_r9_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +commonSF_AllocPeriod_r9_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +commonSF_AllocPeriod_r9_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +commonSF_AllocPeriod_r9_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +commonSF_AllocPeriod_r9_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +commonSF_AllocPeriod_r9_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + commonSF_AllocPeriod_r9_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_commonSF_AllocPeriod_r9_constr_3 = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_commonSF_AllocPeriod_r9_value2enum_3[] = { + { 0, 3, "rf4" }, + { 1, 3, "rf8" }, + { 2, 4, "rf16" }, + { 3, 4, "rf32" }, + { 4, 4, "rf64" }, + { 5, 5, "rf128" }, + { 6, 5, "rf256" } +}; +static unsigned int asn_MAP_commonSF_AllocPeriod_r9_enum2value_3[] = { + 5, /* rf128(5) */ + 2, /* rf16(2) */ + 6, /* rf256(6) */ + 3, /* rf32(3) */ + 0, /* rf4(0) */ + 4, /* rf64(4) */ + 1 /* rf8(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_commonSF_AllocPeriod_r9_specs_3 = { + asn_MAP_commonSF_AllocPeriod_r9_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_commonSF_AllocPeriod_r9_enum2value_3, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_commonSF_AllocPeriod_r9_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_commonSF_AllocPeriod_r9_3 = { + "commonSF-AllocPeriod-r9", + "commonSF-AllocPeriod-r9", + commonSF_AllocPeriod_r9_3_free, + commonSF_AllocPeriod_r9_3_print, + commonSF_AllocPeriod_r9_3_constraint, + commonSF_AllocPeriod_r9_3_decode_ber, + commonSF_AllocPeriod_r9_3_encode_der, + commonSF_AllocPeriod_r9_3_decode_xer, + commonSF_AllocPeriod_r9_3_encode_xer, + commonSF_AllocPeriod_r9_3_decode_uper, + commonSF_AllocPeriod_r9_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_commonSF_AllocPeriod_r9_tags_3, + sizeof(asn_DEF_commonSF_AllocPeriod_r9_tags_3) + /sizeof(asn_DEF_commonSF_AllocPeriod_r9_tags_3[0]) - 1, /* 1 */ + asn_DEF_commonSF_AllocPeriod_r9_tags_3, /* Same as above */ + sizeof(asn_DEF_commonSF_AllocPeriod_r9_tags_3) + /sizeof(asn_DEF_commonSF_AllocPeriod_r9_tags_3[0]), /* 2 */ + &asn_PER_type_commonSF_AllocPeriod_r9_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_commonSF_AllocPeriod_r9_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBSFNAreaConfiguration_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MBSFNAreaConfiguration_r9, commonSF_Alloc_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CommonSF_AllocPatternList_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "commonSF-Alloc-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFNAreaConfiguration_r9, commonSF_AllocPeriod_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_commonSF_AllocPeriod_r9_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "commonSF-AllocPeriod-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MBSFNAreaConfiguration_r9, pmch_InfoList_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PMCH_InfoList_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pmch-InfoList-r9" + }, + { ATF_POINTER, 1, offsetof(struct MBSFNAreaConfiguration_r9, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBSFNAreaConfiguration_v930_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MBSFNAreaConfiguration_r9_oms_1[] = { 3 }; +static ber_tlv_tag_t asn_DEF_MBSFNAreaConfiguration_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBSFNAreaConfiguration_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* commonSF-Alloc-r9 at 395 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* commonSF-AllocPeriod-r9 at 397 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pmch-InfoList-r9 at 398 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 399 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBSFNAreaConfiguration_r9_specs_1 = { + sizeof(struct MBSFNAreaConfiguration_r9), + offsetof(struct MBSFNAreaConfiguration_r9, _asn_ctx), + asn_MAP_MBSFNAreaConfiguration_r9_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_MBSFNAreaConfiguration_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFNAreaConfiguration_r9 = { + "MBSFNAreaConfiguration-r9", + "MBSFNAreaConfiguration-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBSFNAreaConfiguration_r9_tags_1, + sizeof(asn_DEF_MBSFNAreaConfiguration_r9_tags_1) + /sizeof(asn_DEF_MBSFNAreaConfiguration_r9_tags_1[0]), /* 1 */ + asn_DEF_MBSFNAreaConfiguration_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFNAreaConfiguration_r9_tags_1) + /sizeof(asn_DEF_MBSFNAreaConfiguration_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBSFNAreaConfiguration_r9_1, + 4, /* Elements count */ + &asn_SPC_MBSFNAreaConfiguration_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-r9.h b/lte/rrc/asn/MBSFNAreaConfiguration-r9.h new file mode 100644 index 000000000..241419af0 --- /dev/null +++ b/lte/rrc/asn/MBSFNAreaConfiguration-r9.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBSFNAreaConfiguration_r9_H_ +#define _MBSFNAreaConfiguration_r9_H_ + + +#include + +/* Including external dependencies */ +#include "CommonSF-AllocPatternList-r9.h" +#include +#include "PMCH-InfoList-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9 { + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf4 = 0, + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf8 = 1, + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf16 = 2, + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf32 = 3, + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf64 = 4, + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf128 = 5, + MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9_rf256 = 6 +} e_MBSFNAreaConfiguration_r9__commonSF_AllocPeriod_r9; + +/* Forward declarations */ +struct MBSFNAreaConfiguration_v930_IEs; + +/* MBSFNAreaConfiguration-r9 */ +typedef struct MBSFNAreaConfiguration_r9 { + CommonSF_AllocPatternList_r9_t commonSF_Alloc_r9; + long commonSF_AllocPeriod_r9; + PMCH_InfoList_r9_t pmch_InfoList_r9; + struct MBSFNAreaConfiguration_v930_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFNAreaConfiguration_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_commonSF_AllocPeriod_r9_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFNAreaConfiguration_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBSFNAreaConfiguration-v930-IEs.h" + +#endif /* _MBSFNAreaConfiguration_r9_H_ */ +#include diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c b/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c new file mode 100644 index 000000000..00936a55b --- /dev/null +++ b/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MBSFNAreaConfiguration-v930-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct MBSFNAreaConfiguration_v930_IEs__nonCriticalExtension), + offsetof(struct MBSFNAreaConfiguration_v930_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MBSFNAreaConfiguration_v930_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct MBSFNAreaConfiguration_v930_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct MBSFNAreaConfiguration_v930_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MBSFNAreaConfiguration_v930_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MBSFNAreaConfiguration_v930_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 403 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 404 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MBSFNAreaConfiguration_v930_IEs_specs_1 = { + sizeof(struct MBSFNAreaConfiguration_v930_IEs), + offsetof(struct MBSFNAreaConfiguration_v930_IEs, _asn_ctx), + asn_MAP_MBSFNAreaConfiguration_v930_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MBSFNAreaConfiguration_v930_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MBSFNAreaConfiguration_v930_IEs = { + "MBSFNAreaConfiguration-v930-IEs", + "MBSFNAreaConfiguration-v930-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1, + sizeof(asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1) + /sizeof(asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1[0]), /* 1 */ + asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1) + /sizeof(asn_DEF_MBSFNAreaConfiguration_v930_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MBSFNAreaConfiguration_v930_IEs_1, + 2, /* Elements count */ + &asn_SPC_MBSFNAreaConfiguration_v930_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h b/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h new file mode 100644 index 000000000..0c0aaeaf8 --- /dev/null +++ b/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MBSFNAreaConfiguration_v930_IEs_H_ +#define _MBSFNAreaConfiguration_v930_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MBSFNAreaConfiguration-v930-IEs */ +typedef struct MBSFNAreaConfiguration_v930_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct MBSFNAreaConfiguration_v930_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MBSFNAreaConfiguration_v930_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MBSFNAreaConfiguration_v930_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _MBSFNAreaConfiguration_v930_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MCC-MNC-Digit.c b/lte/rrc/asn/MCC-MNC-Digit.c index 56469586b..fdb3da88c 100644 --- a/lte/rrc/asn/MCC-MNC-Digit.c +++ b/lte/rrc/asn/MCC-MNC-Digit.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "MCC-MNC-Digit.h" @@ -39,7 +40,6 @@ static void MCC_MNC_Digit_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; - td->check_constraints = asn_DEF_NativeInteger.check_constraints; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; @@ -112,12 +112,12 @@ MCC_MNC_Digit_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_MCC_MNC_Digit_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_MCC_MNC_Digit_constr_1 = { { APC_CONSTRAINED, 4, 4, 0, 9 } /* (0..9) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_MCC_MNC_Digit_tags_1[] = { +static ber_tlv_tag_t asn_DEF_MCC_MNC_Digit_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MCC_MNC_Digit = { diff --git a/lte/rrc/asn/MCC-MNC-Digit.h b/lte/rrc/asn/MCC-MNC-Digit.h index 8a4e3099d..7c99e1695 100644 --- a/lte/rrc/asn/MCC-MNC-Digit.h +++ b/lte/rrc/asn/MCC-MNC-Digit.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _MCC_MNC_Digit_H_ diff --git a/lte/rrc/asn/MCC.c b/lte/rrc/asn/MCC.c index bf918ab19..389ce66bd 100644 --- a/lte/rrc/asn/MCC.c +++ b/lte/rrc/asn/MCC.c @@ -1,12 +1,13 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "MCC.h" -static asn_per_constraints_t asn_PER_type_MCC_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_MCC_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, 0, 0 /* No PER value map */ @@ -22,7 +23,7 @@ static asn_TYPE_member_t asn_MBR_MCC_1[] = { "" }, }; -static const ber_tlv_tag_t asn_DEF_MCC_tags_1[] = { +static ber_tlv_tag_t asn_DEF_MCC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_MCC_specs_1 = { diff --git a/lte/rrc/asn/MCC.h b/lte/rrc/asn/MCC.h index 27e348d6a..8791ca322 100644 --- a/lte/rrc/asn/MCC.h +++ b/lte/rrc/asn/MCC.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _MCC_H_ diff --git a/lte/rrc/asn/MCCH-Message.c b/lte/rrc/asn/MCCH-Message.c new file mode 100644 index 000000000..490958127 --- /dev/null +++ b/lte/rrc/asn/MCCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MCCH-Message.h" + +static asn_TYPE_member_t asn_MBR_MCCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MCCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MCCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_MCCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MCCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 28 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MCCH_Message_specs_1 = { + sizeof(struct MCCH_Message), + offsetof(struct MCCH_Message, _asn_ctx), + asn_MAP_MCCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MCCH_Message = { + "MCCH-Message", + "MCCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MCCH_Message_tags_1, + sizeof(asn_DEF_MCCH_Message_tags_1) + /sizeof(asn_DEF_MCCH_Message_tags_1[0]), /* 1 */ + asn_DEF_MCCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_MCCH_Message_tags_1) + /sizeof(asn_DEF_MCCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MCCH_Message_1, + 1, /* Elements count */ + &asn_SPC_MCCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MCCH-Message.h b/lte/rrc/asn/MCCH-Message.h new file mode 100644 index 000000000..9c1b6f7bf --- /dev/null +++ b/lte/rrc/asn/MCCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MCCH_Message_H_ +#define _MCCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "MCCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MCCH-Message */ +typedef struct MCCH_Message { + MCCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MCCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MCCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _MCCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/MCCH-MessageType.c b/lte/rrc/asn/MCCH-MessageType.c new file mode 100644 index 000000000..48f5ed337 --- /dev/null +++ b/lte/rrc/asn/MCCH-MessageType.c @@ -0,0 +1,278 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MCCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_c2_constr_5 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_later_constr_4 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_MCCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct MCCH_MessageType__c1, choice.mbsfnAreaConfiguration_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBSFNAreaConfiguration_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbsfnAreaConfiguration-r9" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbsfnAreaConfiguration-r9 at 33 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct MCCH_MessageType__c1), + offsetof(struct MCCH_MessageType__c1, _asn_ctx), + offsetof(struct MCCH_MessageType__c1, present), + sizeof(((struct MCCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 1, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 1, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_c2_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct MCCH_MessageType__later__c2, choice.mbmsCountingRequest_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBMSCountingRequest_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbmsCountingRequest-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c2_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* mbmsCountingRequest-r10 at 37 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c2_specs_5 = { + sizeof(struct MCCH_MessageType__later__c2), + offsetof(struct MCCH_MessageType__later__c2, _asn_ctx), + offsetof(struct MCCH_MessageType__later__c2, present), + sizeof(((struct MCCH_MessageType__later__c2 *)0)->present), + asn_MAP_c2_tag2el_5, + 1, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c2_5 = { + "c2", + "c2", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c2_constr_5, + asn_MBR_c2_5, + 1, /* Elements count */ + &asn_SPC_c2_specs_5 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_7 = { + sizeof(struct MCCH_MessageType__later__messageClassExtension), + offsetof(struct MCCH_MessageType__later__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_7 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_7, + sizeof(asn_DEF_messageClassExtension_tags_7) + /sizeof(asn_DEF_messageClassExtension_tags_7[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_7, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_7) + /sizeof(asn_DEF_messageClassExtension_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_later_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct MCCH_MessageType__later, choice.c2), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c2_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c2" + }, + { ATF_NOFLAGS, 0, offsetof(struct MCCH_MessageType__later, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_later_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c2 at 37 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 38 */ +}; +static asn_CHOICE_specifics_t asn_SPC_later_specs_4 = { + sizeof(struct MCCH_MessageType__later), + offsetof(struct MCCH_MessageType__later, _asn_ctx), + offsetof(struct MCCH_MessageType__later, present), + sizeof(((struct MCCH_MessageType__later *)0)->present), + asn_MAP_later_tag2el_4, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_later_4 = { + "later", + "later", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_later_constr_4, + asn_MBR_later_4, + 2, /* Elements count */ + &asn_SPC_later_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MCCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MCCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct MCCH_MessageType, choice.later), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_later_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "later" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_MCCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 33 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* later at 37 */ +}; +static asn_CHOICE_specifics_t asn_SPC_MCCH_MessageType_specs_1 = { + sizeof(struct MCCH_MessageType), + offsetof(struct MCCH_MessageType, _asn_ctx), + offsetof(struct MCCH_MessageType, present), + sizeof(((struct MCCH_MessageType *)0)->present), + asn_MAP_MCCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MCCH_MessageType = { + "MCCH-MessageType", + "MCCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_MCCH_MessageType_constr_1, + asn_MBR_MCCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_MCCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MCCH-MessageType.h b/lte/rrc/asn/MCCH-MessageType.h new file mode 100644 index 000000000..e1c76ac3c --- /dev/null +++ b/lte/rrc/asn/MCCH-MessageType.h @@ -0,0 +1,93 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MCCH_MessageType_H_ +#define _MCCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "MBSFNAreaConfiguration-r9.h" +#include +#include "MBMSCountingRequest-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MCCH_MessageType_PR { + MCCH_MessageType_PR_NOTHING, /* No components present */ + MCCH_MessageType_PR_c1, + MCCH_MessageType_PR_later +} MCCH_MessageType_PR; +typedef enum MCCH_MessageType__c1_PR { + MCCH_MessageType__c1_PR_NOTHING, /* No components present */ + MCCH_MessageType__c1_PR_mbsfnAreaConfiguration_r9 +} MCCH_MessageType__c1_PR; +typedef enum MCCH_MessageType__later_PR { + MCCH_MessageType__later_PR_NOTHING, /* No components present */ + MCCH_MessageType__later_PR_c2, + MCCH_MessageType__later_PR_messageClassExtension +} MCCH_MessageType__later_PR; +typedef enum MCCH_MessageType__later__c2_PR { + MCCH_MessageType__later__c2_PR_NOTHING, /* No components present */ + MCCH_MessageType__later__c2_PR_mbmsCountingRequest_r10 +} MCCH_MessageType__later__c2_PR; + +/* MCCH-MessageType */ +typedef struct MCCH_MessageType { + MCCH_MessageType_PR present; + union MCCH_MessageType_u { + struct MCCH_MessageType__c1 { + MCCH_MessageType__c1_PR present; + union MCCH_MessageType__c1_u { + MBSFNAreaConfiguration_r9_t mbsfnAreaConfiguration_r9; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct MCCH_MessageType__later { + MCCH_MessageType__later_PR present; + union MCCH_MessageType__later_u { + struct MCCH_MessageType__later__c2 { + MCCH_MessageType__later__c2_PR present; + union MCCH_MessageType__later__c2_u { + MBMSCountingRequest_r10_t mbmsCountingRequest_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c2; + struct MCCH_MessageType__later__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } later; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MCCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MCCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _MCCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/MIMO-CapabilityDL-r10.c b/lte/rrc/asn/MIMO-CapabilityDL-r10.c new file mode 100644 index 000000000..5341ba840 --- /dev/null +++ b/lte/rrc/asn/MIMO-CapabilityDL-r10.c @@ -0,0 +1,148 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MIMO-CapabilityDL-r10.h" + +int +MIMO_CapabilityDL_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +MIMO_CapabilityDL_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MIMO_CapabilityDL_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MIMO_CapabilityDL_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MIMO_CapabilityDL_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MIMO_CapabilityDL_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MIMO_CapabilityDL_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MIMO_CapabilityDL_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MIMO_CapabilityDL_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MIMO_CapabilityDL_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MIMO_CapabilityDL_r10_constr_1 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_MIMO_CapabilityDL_r10_value2enum_1[] = { + { 0, 9, "twoLayers" }, + { 1, 10, "fourLayers" }, + { 2, 11, "eightLayers" } +}; +static unsigned int asn_MAP_MIMO_CapabilityDL_r10_enum2value_1[] = { + 2, /* eightLayers(2) */ + 1, /* fourLayers(1) */ + 0 /* twoLayers(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_MIMO_CapabilityDL_r10_specs_1 = { + asn_MAP_MIMO_CapabilityDL_r10_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_MIMO_CapabilityDL_r10_enum2value_1, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_MIMO_CapabilityDL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MIMO_CapabilityDL_r10 = { + "MIMO-CapabilityDL-r10", + "MIMO-CapabilityDL-r10", + MIMO_CapabilityDL_r10_free, + MIMO_CapabilityDL_r10_print, + MIMO_CapabilityDL_r10_constraint, + MIMO_CapabilityDL_r10_decode_ber, + MIMO_CapabilityDL_r10_encode_der, + MIMO_CapabilityDL_r10_decode_xer, + MIMO_CapabilityDL_r10_encode_xer, + MIMO_CapabilityDL_r10_decode_uper, + MIMO_CapabilityDL_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MIMO_CapabilityDL_r10_tags_1, + sizeof(asn_DEF_MIMO_CapabilityDL_r10_tags_1) + /sizeof(asn_DEF_MIMO_CapabilityDL_r10_tags_1[0]), /* 1 */ + asn_DEF_MIMO_CapabilityDL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MIMO_CapabilityDL_r10_tags_1) + /sizeof(asn_DEF_MIMO_CapabilityDL_r10_tags_1[0]), /* 1 */ + &asn_PER_type_MIMO_CapabilityDL_r10_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_MIMO_CapabilityDL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MIMO-CapabilityDL-r10.h b/lte/rrc/asn/MIMO-CapabilityDL-r10.h new file mode 100644 index 000000000..48d559806 --- /dev/null +++ b/lte/rrc/asn/MIMO-CapabilityDL-r10.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MIMO_CapabilityDL_r10_H_ +#define _MIMO_CapabilityDL_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MIMO_CapabilityDL_r10 { + MIMO_CapabilityDL_r10_twoLayers = 0, + MIMO_CapabilityDL_r10_fourLayers = 1, + MIMO_CapabilityDL_r10_eightLayers = 2 +} e_MIMO_CapabilityDL_r10; + +/* MIMO-CapabilityDL-r10 */ +typedef long MIMO_CapabilityDL_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MIMO_CapabilityDL_r10; +asn_struct_free_f MIMO_CapabilityDL_r10_free; +asn_struct_print_f MIMO_CapabilityDL_r10_print; +asn_constr_check_f MIMO_CapabilityDL_r10_constraint; +ber_type_decoder_f MIMO_CapabilityDL_r10_decode_ber; +der_type_encoder_f MIMO_CapabilityDL_r10_encode_der; +xer_type_decoder_f MIMO_CapabilityDL_r10_decode_xer; +xer_type_encoder_f MIMO_CapabilityDL_r10_encode_xer; +per_type_decoder_f MIMO_CapabilityDL_r10_decode_uper; +per_type_encoder_f MIMO_CapabilityDL_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MIMO_CapabilityDL_r10_H_ */ +#include diff --git a/lte/rrc/asn/MIMO-CapabilityUL-r10.c b/lte/rrc/asn/MIMO-CapabilityUL-r10.c new file mode 100644 index 000000000..d0d2238d3 --- /dev/null +++ b/lte/rrc/asn/MIMO-CapabilityUL-r10.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MIMO-CapabilityUL-r10.h" + +int +MIMO_CapabilityUL_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +MIMO_CapabilityUL_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MIMO_CapabilityUL_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MIMO_CapabilityUL_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MIMO_CapabilityUL_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MIMO_CapabilityUL_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MIMO_CapabilityUL_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MIMO_CapabilityUL_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MIMO_CapabilityUL_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MIMO_CapabilityUL_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MIMO_CapabilityUL_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_MIMO_CapabilityUL_r10_value2enum_1[] = { + { 0, 9, "twoLayers" }, + { 1, 10, "fourLayers" } +}; +static unsigned int asn_MAP_MIMO_CapabilityUL_r10_enum2value_1[] = { + 1, /* fourLayers(1) */ + 0 /* twoLayers(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_MIMO_CapabilityUL_r10_specs_1 = { + asn_MAP_MIMO_CapabilityUL_r10_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_MIMO_CapabilityUL_r10_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_MIMO_CapabilityUL_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MIMO_CapabilityUL_r10 = { + "MIMO-CapabilityUL-r10", + "MIMO-CapabilityUL-r10", + MIMO_CapabilityUL_r10_free, + MIMO_CapabilityUL_r10_print, + MIMO_CapabilityUL_r10_constraint, + MIMO_CapabilityUL_r10_decode_ber, + MIMO_CapabilityUL_r10_encode_der, + MIMO_CapabilityUL_r10_decode_xer, + MIMO_CapabilityUL_r10_encode_xer, + MIMO_CapabilityUL_r10_decode_uper, + MIMO_CapabilityUL_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MIMO_CapabilityUL_r10_tags_1, + sizeof(asn_DEF_MIMO_CapabilityUL_r10_tags_1) + /sizeof(asn_DEF_MIMO_CapabilityUL_r10_tags_1[0]), /* 1 */ + asn_DEF_MIMO_CapabilityUL_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MIMO_CapabilityUL_r10_tags_1) + /sizeof(asn_DEF_MIMO_CapabilityUL_r10_tags_1[0]), /* 1 */ + &asn_PER_type_MIMO_CapabilityUL_r10_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_MIMO_CapabilityUL_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MIMO-CapabilityUL-r10.h b/lte/rrc/asn/MIMO-CapabilityUL-r10.h new file mode 100644 index 000000000..92af9af93 --- /dev/null +++ b/lte/rrc/asn/MIMO-CapabilityUL-r10.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MIMO_CapabilityUL_r10_H_ +#define _MIMO_CapabilityUL_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MIMO_CapabilityUL_r10 { + MIMO_CapabilityUL_r10_twoLayers = 0, + MIMO_CapabilityUL_r10_fourLayers = 1 +} e_MIMO_CapabilityUL_r10; + +/* MIMO-CapabilityUL-r10 */ +typedef long MIMO_CapabilityUL_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MIMO_CapabilityUL_r10; +asn_struct_free_f MIMO_CapabilityUL_r10_free; +asn_struct_print_f MIMO_CapabilityUL_r10_print; +asn_constr_check_f MIMO_CapabilityUL_r10_constraint; +ber_type_decoder_f MIMO_CapabilityUL_r10_decode_ber; +der_type_encoder_f MIMO_CapabilityUL_r10_encode_der; +xer_type_decoder_f MIMO_CapabilityUL_r10_decode_xer; +xer_type_encoder_f MIMO_CapabilityUL_r10_encode_xer; +per_type_decoder_f MIMO_CapabilityUL_r10_decode_uper; +per_type_encoder_f MIMO_CapabilityUL_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MIMO_CapabilityUL_r10_H_ */ +#include diff --git a/lte/rrc/asn/MMEC.c b/lte/rrc/asn/MMEC.c index 87bb04573..d5a6b0a0b 100644 --- a/lte/rrc/asn/MMEC.c +++ b/lte/rrc/asn/MMEC.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "MMEC.h" @@ -45,7 +46,6 @@ static void MMEC_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; - td->check_constraints = asn_DEF_BIT_STRING.check_constraints; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; @@ -118,12 +118,12 @@ MMEC_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_MMEC_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_MMEC_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_MMEC_tags_1[] = { +static ber_tlv_tag_t asn_DEF_MMEC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_MMEC = { diff --git a/lte/rrc/asn/MMEC.h b/lte/rrc/asn/MMEC.h index 84466bb56..6d9f6c942 100644 --- a/lte/rrc/asn/MMEC.h +++ b/lte/rrc/asn/MMEC.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _MMEC_H_ diff --git a/lte/rrc/asn/MNC.c b/lte/rrc/asn/MNC.c index 69b98c647..12c5ed6ed 100644 --- a/lte/rrc/asn/MNC.c +++ b/lte/rrc/asn/MNC.c @@ -1,12 +1,13 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "MNC.h" -static asn_per_constraints_t asn_PER_type_MNC_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_MNC_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 1, 1, 2, 3 } /* (SIZE(2..3)) */, 0, 0 /* No PER value map */ @@ -22,7 +23,7 @@ static asn_TYPE_member_t asn_MBR_MNC_1[] = { "" }, }; -static const ber_tlv_tag_t asn_DEF_MNC_tags_1[] = { +static ber_tlv_tag_t asn_DEF_MNC_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_MNC_specs_1 = { diff --git a/lte/rrc/asn/MNC.h b/lte/rrc/asn/MNC.h index 7eff84466..dfbac4e18 100644 --- a/lte/rrc/asn/MNC.h +++ b/lte/rrc/asn/MNC.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _MNC_H_ diff --git a/lte/rrc/asn/MasterInformationBlock.c b/lte/rrc/asn/MasterInformationBlock.c index 825e63a5a..88fe72e95 100644 --- a/lte/rrc/asn/MasterInformationBlock.c +++ b/lte/rrc/asn/MasterInformationBlock.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "MasterInformationBlock.h" @@ -22,7 +23,6 @@ static void dl_Bandwidth_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -157,22 +157,22 @@ memb_spare_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, } } -static asn_per_constraints_t asn_PER_type_dl_Bandwidth_constr_2 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_dl_Bandwidth_constr_2 = { { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_memb_systemFrameNumber_constr_10 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_systemFrameNumber_constr_10 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_memb_spare_constr_11 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_spare_constr_11 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 10, 10 } /* (SIZE(10..10)) */, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_dl_Bandwidth_value2enum_2[] = { +static asn_INTEGER_enum_map_t asn_MAP_dl_Bandwidth_value2enum_2[] = { { 0, 2, "n6" }, { 1, 3, "n15" }, { 2, 3, "n25" }, @@ -180,7 +180,7 @@ static const asn_INTEGER_enum_map_t asn_MAP_dl_Bandwidth_value2enum_2[] = { { 4, 3, "n75" }, { 5, 4, "n100" } }; -static const unsigned int asn_MAP_dl_Bandwidth_enum2value_2[] = { +static unsigned int asn_MAP_dl_Bandwidth_enum2value_2[] = { 5, /* n100(5) */ 1, /* n15(1) */ 2, /* n25(2) */ @@ -188,7 +188,7 @@ static const unsigned int asn_MAP_dl_Bandwidth_enum2value_2[] = { 0, /* n6(0) */ 4 /* n75(4) */ }; -static const asn_INTEGER_specifics_t asn_SPC_dl_Bandwidth_specs_2 = { +static asn_INTEGER_specifics_t asn_SPC_dl_Bandwidth_specs_2 = { asn_MAP_dl_Bandwidth_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_dl_Bandwidth_enum2value_2, /* N => "tag"; sorted by N */ 6, /* Number of elements in the maps */ @@ -197,7 +197,7 @@ static const asn_INTEGER_specifics_t asn_SPC_dl_Bandwidth_specs_2 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_dl_Bandwidth_tags_2[] = { +static ber_tlv_tag_t asn_DEF_dl_Bandwidth_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -264,14 +264,14 @@ static asn_TYPE_member_t asn_MBR_MasterInformationBlock_1[] = { "spare" }, }; -static const ber_tlv_tag_t asn_DEF_MasterInformationBlock_tags_1[] = { +static ber_tlv_tag_t asn_DEF_MasterInformationBlock_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_MasterInformationBlock_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-Bandwidth */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* phich-Config */ - { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* systemFrameNumber */ - { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare */ +static asn_TYPE_tag2member_t asn_MAP_MasterInformationBlock_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-Bandwidth at 347 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* phich-Config at 348 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* systemFrameNumber at 349 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare at 350 */ }; static asn_SEQUENCE_specifics_t asn_SPC_MasterInformationBlock_specs_1 = { sizeof(struct MasterInformationBlock), diff --git a/lte/rrc/asn/MasterInformationBlock.h b/lte/rrc/asn/MasterInformationBlock.h index 9ac24560a..5aa8d4981 100644 --- a/lte/rrc/asn/MasterInformationBlock.h +++ b/lte/rrc/asn/MasterInformationBlock.h @@ -1,14 +1,14 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _MasterInformationBlock_H_ #define _MasterInformationBlock_H_ -#include "liblte/config.h" #include /* Including external dependencies */ @@ -22,14 +22,14 @@ extern "C" { #endif /* Dependencies */ -typedef enum dl_Bandwidth { - dl_Bandwidth_n6 = 0, - dl_Bandwidth_n15 = 1, - dl_Bandwidth_n25 = 2, - dl_Bandwidth_n50 = 3, - dl_Bandwidth_n75 = 4, - dl_Bandwidth_n100 = 5 -} e_dl_Bandwidth; +typedef enum MasterInformationBlock__dl_Bandwidth { + MasterInformationBlock__dl_Bandwidth_n6 = 0, + MasterInformationBlock__dl_Bandwidth_n15 = 1, + MasterInformationBlock__dl_Bandwidth_n25 = 2, + MasterInformationBlock__dl_Bandwidth_n50 = 3, + MasterInformationBlock__dl_Bandwidth_n75 = 4, + MasterInformationBlock__dl_Bandwidth_n100 = 5 +} e_MasterInformationBlock__dl_Bandwidth; /* MasterInformationBlock */ typedef struct MasterInformationBlock { diff --git a/lte/rrc/asn/MeasConfig.c b/lte/rrc/asn/MeasConfig.c new file mode 100644 index 000000000..4df3df089 --- /dev/null +++ b/lte/rrc/asn/MeasConfig.c @@ -0,0 +1,288 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasConfig.h" + +static asn_per_constraints_t asn_PER_type_speedStatePars_constr_12 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_setup_14[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasConfig__speedStatePars__setup, mobilityStateParameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityStateParameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityStateParameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasConfig__speedStatePars__setup, timeToTrigger_SF), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "timeToTrigger-SF" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_14[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mobilityStateParameters at 3186 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* timeToTrigger-SF at 3188 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_14 = { + sizeof(struct MeasConfig__speedStatePars__setup), + offsetof(struct MeasConfig__speedStatePars__setup, _asn_ctx), + asn_MAP_setup_tag2el_14, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_14 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_14, + sizeof(asn_DEF_setup_tags_14) + /sizeof(asn_DEF_setup_tags_14[0]) - 1, /* 1 */ + asn_DEF_setup_tags_14, /* Same as above */ + sizeof(asn_DEF_setup_tags_14) + /sizeof(asn_DEF_setup_tags_14[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_14, + 2, /* Elements count */ + &asn_SPC_setup_specs_14 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_speedStatePars_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasConfig__speedStatePars, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasConfig__speedStatePars, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_speedStatePars_tag2el_12[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 3184 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 3186 */ +}; +static asn_CHOICE_specifics_t asn_SPC_speedStatePars_specs_12 = { + sizeof(struct MeasConfig__speedStatePars), + offsetof(struct MeasConfig__speedStatePars, _asn_ctx), + offsetof(struct MeasConfig__speedStatePars, present), + sizeof(((struct MeasConfig__speedStatePars *)0)->present), + asn_MAP_speedStatePars_tag2el_12, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_speedStatePars_12 = { + "speedStatePars", + "speedStatePars", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_speedStatePars_constr_12, + asn_MBR_speedStatePars_12, + 2, /* Elements count */ + &asn_SPC_speedStatePars_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasConfig_1[] = { + { ATF_POINTER, 11, offsetof(struct MeasConfig, measObjectToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectToRemoveList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectToRemoveList" + }, + { ATF_POINTER, 10, offsetof(struct MeasConfig, measObjectToAddModList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectToAddModList" + }, + { ATF_POINTER, 9, offsetof(struct MeasConfig, reportConfigToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigToRemoveList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigToRemoveList" + }, + { ATF_POINTER, 8, offsetof(struct MeasConfig, reportConfigToAddModList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigToAddModList" + }, + { ATF_POINTER, 7, offsetof(struct MeasConfig, measIdToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasIdToRemoveList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measIdToRemoveList" + }, + { ATF_POINTER, 6, offsetof(struct MeasConfig, measIdToAddModList), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasIdToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measIdToAddModList" + }, + { ATF_POINTER, 5, offsetof(struct MeasConfig, quantityConfig), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfig" + }, + { ATF_POINTER, 4, offsetof(struct MeasConfig, measGapConfig), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasGapConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measGapConfig" + }, + { ATF_POINTER, 3, offsetof(struct MeasConfig, s_Measure), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-Measure" + }, + { ATF_POINTER, 2, offsetof(struct MeasConfig, preRegistrationInfoHRPD), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PreRegistrationInfoHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preRegistrationInfoHRPD" + }, + { ATF_POINTER, 1, offsetof(struct MeasConfig, speedStatePars), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_speedStatePars_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "speedStatePars" + }, +}; +static int asn_MAP_MeasConfig_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; +static ber_tlv_tag_t asn_DEF_MeasConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measObjectToRemoveList at 3170 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measObjectToAddModList at 3171 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reportConfigToRemoveList at 3173 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* reportConfigToAddModList at 3174 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* measIdToRemoveList at 3176 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* measIdToAddModList at 3177 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* quantityConfig at 3179 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* measGapConfig at 3180 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* s-Measure at 3181 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* preRegistrationInfoHRPD at 3182 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 } /* speedStatePars at 3184 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasConfig_specs_1 = { + sizeof(struct MeasConfig), + offsetof(struct MeasConfig, _asn_ctx), + asn_MAP_MeasConfig_tag2el_1, + 11, /* Count of tags in the map */ + asn_MAP_MeasConfig_oms_1, /* Optional members */ + 11, 0, /* Root/Additions */ + 10, /* Start extensions */ + 12 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasConfig = { + "MeasConfig", + "MeasConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasConfig_tags_1, + sizeof(asn_DEF_MeasConfig_tags_1) + /sizeof(asn_DEF_MeasConfig_tags_1[0]), /* 1 */ + asn_DEF_MeasConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasConfig_tags_1) + /sizeof(asn_DEF_MeasConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasConfig_1, + 11, /* Elements count */ + &asn_SPC_MeasConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasConfig.h b/lte/rrc/asn/MeasConfig.h new file mode 100644 index 000000000..ba1287743 --- /dev/null +++ b/lte/rrc/asn/MeasConfig.h @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasConfig_H_ +#define _MeasConfig_H_ + + +#include + +/* Including external dependencies */ +#include "RSRP-Range.h" +#include +#include "MobilityStateParameters.h" +#include "SpeedStateScaleFactors.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasConfig__speedStatePars_PR { + MeasConfig__speedStatePars_PR_NOTHING, /* No components present */ + MeasConfig__speedStatePars_PR_release, + MeasConfig__speedStatePars_PR_setup +} MeasConfig__speedStatePars_PR; + +/* Forward declarations */ +struct MeasObjectToRemoveList; +struct MeasObjectToAddModList; +struct ReportConfigToRemoveList; +struct ReportConfigToAddModList; +struct MeasIdToRemoveList; +struct MeasIdToAddModList; +struct QuantityConfig; +struct MeasGapConfig; +struct PreRegistrationInfoHRPD; + +/* MeasConfig */ +typedef struct MeasConfig { + struct MeasObjectToRemoveList *measObjectToRemoveList /* OPTIONAL */; + struct MeasObjectToAddModList *measObjectToAddModList /* OPTIONAL */; + struct ReportConfigToRemoveList *reportConfigToRemoveList /* OPTIONAL */; + struct ReportConfigToAddModList *reportConfigToAddModList /* OPTIONAL */; + struct MeasIdToRemoveList *measIdToRemoveList /* OPTIONAL */; + struct MeasIdToAddModList *measIdToAddModList /* OPTIONAL */; + struct QuantityConfig *quantityConfig /* OPTIONAL */; + struct MeasGapConfig *measGapConfig /* OPTIONAL */; + RSRP_Range_t *s_Measure /* OPTIONAL */; + struct PreRegistrationInfoHRPD *preRegistrationInfoHRPD /* OPTIONAL */; + struct MeasConfig__speedStatePars { + MeasConfig__speedStatePars_PR present; + union MeasConfig__speedStatePars_u { + NULL_t release; + struct MeasConfig__speedStatePars__setup { + MobilityStateParameters_t mobilityStateParameters; + SpeedStateScaleFactors_t timeToTrigger_SF; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *speedStatePars; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasConfig; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasObjectToRemoveList.h" +#include "MeasObjectToAddModList.h" +#include "ReportConfigToRemoveList.h" +#include "ReportConfigToAddModList.h" +#include "MeasIdToRemoveList.h" +#include "MeasIdToAddModList.h" +#include "QuantityConfig.h" +#include "MeasGapConfig.h" +#include "PreRegistrationInfoHRPD.h" + +#endif /* _MeasConfig_H_ */ +#include diff --git a/lte/rrc/asn/MeasCycleSCell-r10.c b/lte/rrc/asn/MeasCycleSCell-r10.c new file mode 100644 index 000000000..39aa06d22 --- /dev/null +++ b/lte/rrc/asn/MeasCycleSCell-r10.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasCycleSCell-r10.h" + +int +MeasCycleSCell_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +MeasCycleSCell_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +MeasCycleSCell_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MeasCycleSCell_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MeasCycleSCell_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MeasCycleSCell_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MeasCycleSCell_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MeasCycleSCell_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MeasCycleSCell_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MeasCycleSCell_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MeasCycleSCell_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MeasCycleSCell_r10_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_MeasCycleSCell_r10_value2enum_1[] = { + { 0, 5, "sf160" }, + { 1, 5, "sf256" }, + { 2, 5, "sf320" }, + { 3, 5, "sf512" }, + { 4, 5, "sf640" }, + { 5, 6, "sf1024" }, + { 6, 6, "sf1280" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_MeasCycleSCell_r10_enum2value_1[] = { + 5, /* sf1024(5) */ + 6, /* sf1280(6) */ + 0, /* sf160(0) */ + 1, /* sf256(1) */ + 2, /* sf320(2) */ + 3, /* sf512(3) */ + 4, /* sf640(4) */ + 7 /* spare1(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_MeasCycleSCell_r10_specs_1 = { + asn_MAP_MeasCycleSCell_r10_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_MeasCycleSCell_r10_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_MeasCycleSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeasCycleSCell_r10 = { + "MeasCycleSCell-r10", + "MeasCycleSCell-r10", + MeasCycleSCell_r10_free, + MeasCycleSCell_r10_print, + MeasCycleSCell_r10_constraint, + MeasCycleSCell_r10_decode_ber, + MeasCycleSCell_r10_encode_der, + MeasCycleSCell_r10_decode_xer, + MeasCycleSCell_r10_encode_xer, + MeasCycleSCell_r10_decode_uper, + MeasCycleSCell_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasCycleSCell_r10_tags_1, + sizeof(asn_DEF_MeasCycleSCell_r10_tags_1) + /sizeof(asn_DEF_MeasCycleSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_MeasCycleSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasCycleSCell_r10_tags_1) + /sizeof(asn_DEF_MeasCycleSCell_r10_tags_1[0]), /* 1 */ + &asn_PER_type_MeasCycleSCell_r10_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_MeasCycleSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasCycleSCell-r10.h b/lte/rrc/asn/MeasCycleSCell-r10.h new file mode 100644 index 000000000..120eb05ba --- /dev/null +++ b/lte/rrc/asn/MeasCycleSCell-r10.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasCycleSCell_r10_H_ +#define _MeasCycleSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasCycleSCell_r10 { + MeasCycleSCell_r10_sf160 = 0, + MeasCycleSCell_r10_sf256 = 1, + MeasCycleSCell_r10_sf320 = 2, + MeasCycleSCell_r10_sf512 = 3, + MeasCycleSCell_r10_sf640 = 4, + MeasCycleSCell_r10_sf1024 = 5, + MeasCycleSCell_r10_sf1280 = 6, + MeasCycleSCell_r10_spare1 = 7 +} e_MeasCycleSCell_r10; + +/* MeasCycleSCell-r10 */ +typedef long MeasCycleSCell_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasCycleSCell_r10; +asn_struct_free_f MeasCycleSCell_r10_free; +asn_struct_print_f MeasCycleSCell_r10_print; +asn_constr_check_f MeasCycleSCell_r10_constraint; +ber_type_decoder_f MeasCycleSCell_r10_decode_ber; +der_type_encoder_f MeasCycleSCell_r10_encode_der; +xer_type_decoder_f MeasCycleSCell_r10_decode_xer; +xer_type_encoder_f MeasCycleSCell_r10_encode_xer; +per_type_decoder_f MeasCycleSCell_r10_decode_uper; +per_type_encoder_f MeasCycleSCell_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasCycleSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasGapConfig.c b/lte/rrc/asn/MeasGapConfig.c new file mode 100644 index 000000000..1050527ec --- /dev/null +++ b/lte/rrc/asn/MeasGapConfig.c @@ -0,0 +1,247 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasGapConfig.h" + +static int +memb_gp0_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 39)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_gp1_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 79)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_gp0_constr_5 = { + { APC_CONSTRAINED, 6, 6, 0, 39 } /* (0..39) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_gp1_constr_6 = { + { APC_CONSTRAINED, 7, 7, 0, 79 } /* (0..79) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_gapOffset_constr_4 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_MeasGapConfig_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_gapOffset_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasGapConfig__setup__gapOffset, choice.gp0), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_gp0_constraint_4, + &asn_PER_memb_gp0_constr_5, + 0, + "gp0" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasGapConfig__setup__gapOffset, choice.gp1), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_gp1_constraint_4, + &asn_PER_memb_gp1_constr_6, + 0, + "gp1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_gapOffset_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gp0 at 3204 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* gp1 at 3205 */ +}; +static asn_CHOICE_specifics_t asn_SPC_gapOffset_specs_4 = { + sizeof(struct MeasGapConfig__setup__gapOffset), + offsetof(struct MeasGapConfig__setup__gapOffset, _asn_ctx), + offsetof(struct MeasGapConfig__setup__gapOffset, present), + sizeof(((struct MeasGapConfig__setup__gapOffset *)0)->present), + asn_MAP_gapOffset_tag2el_4, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_gapOffset_4 = { + "gapOffset", + "gapOffset", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_gapOffset_constr_4, + asn_MBR_gapOffset_4, + 2, /* Elements count */ + &asn_SPC_gapOffset_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasGapConfig__setup, gapOffset), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_gapOffset_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "gapOffset" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* gapOffset at 3204 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct MeasGapConfig__setup), + offsetof(struct MeasGapConfig__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 1, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasGapConfig_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasGapConfig, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasGapConfig, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_MeasGapConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 3201 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 3208 */ +}; +static asn_CHOICE_specifics_t asn_SPC_MeasGapConfig_specs_1 = { + sizeof(struct MeasGapConfig), + offsetof(struct MeasGapConfig, _asn_ctx), + offsetof(struct MeasGapConfig, present), + sizeof(((struct MeasGapConfig *)0)->present), + asn_MAP_MeasGapConfig_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasGapConfig = { + "MeasGapConfig", + "MeasGapConfig", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_MeasGapConfig_constr_1, + asn_MBR_MeasGapConfig_1, + 2, /* Elements count */ + &asn_SPC_MeasGapConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasGapConfig.h b/lte/rrc/asn/MeasGapConfig.h new file mode 100644 index 000000000..c1c513fde --- /dev/null +++ b/lte/rrc/asn/MeasGapConfig.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasGapConfig_H_ +#define _MeasGapConfig_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasGapConfig_PR { + MeasGapConfig_PR_NOTHING, /* No components present */ + MeasGapConfig_PR_release, + MeasGapConfig_PR_setup +} MeasGapConfig_PR; +typedef enum MeasGapConfig__setup__gapOffset_PR { + MeasGapConfig__setup__gapOffset_PR_NOTHING, /* No components present */ + MeasGapConfig__setup__gapOffset_PR_gp0, + MeasGapConfig__setup__gapOffset_PR_gp1, + /* Extensions may appear below */ + +} MeasGapConfig__setup__gapOffset_PR; + +/* MeasGapConfig */ +typedef struct MeasGapConfig { + MeasGapConfig_PR present; + union MeasGapConfig_u { + NULL_t release; + struct MeasGapConfig__setup { + struct MeasGapConfig__setup__gapOffset { + MeasGapConfig__setup__gapOffset_PR present; + union MeasGapConfig__setup__gapOffset_u { + long gp0; + long gp1; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } gapOffset; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasGapConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasGapConfig; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasGapConfig_H_ */ +#include diff --git a/lte/rrc/asn/MeasId.c b/lte/rrc/asn/MeasId.c new file mode 100644 index 000000000..f435c03e4 --- /dev/null +++ b/lte/rrc/asn/MeasId.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasId.h" + +int +MeasId_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +MeasId_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +MeasId_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MeasId_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MeasId_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MeasId_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MeasId_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MeasId_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MeasId_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MeasId_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MeasId_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MeasId_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MeasId_constr_1 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_MeasId_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeasId = { + "MeasId", + "MeasId", + MeasId_free, + MeasId_print, + MeasId_constraint, + MeasId_decode_ber, + MeasId_encode_der, + MeasId_decode_xer, + MeasId_encode_xer, + MeasId_decode_uper, + MeasId_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasId_tags_1, + sizeof(asn_DEF_MeasId_tags_1) + /sizeof(asn_DEF_MeasId_tags_1[0]), /* 1 */ + asn_DEF_MeasId_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasId_tags_1) + /sizeof(asn_DEF_MeasId_tags_1[0]), /* 1 */ + &asn_PER_type_MeasId_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/MeasId.h b/lte/rrc/asn/MeasId.h new file mode 100644 index 000000000..a28099284 --- /dev/null +++ b/lte/rrc/asn/MeasId.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasId_H_ +#define _MeasId_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasId */ +typedef long MeasId_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasId; +asn_struct_free_f MeasId_free; +asn_struct_print_f MeasId_print; +asn_constr_check_f MeasId_constraint; +ber_type_decoder_f MeasId_decode_ber; +der_type_encoder_f MeasId_encode_der; +xer_type_decoder_f MeasId_decode_xer; +xer_type_encoder_f MeasId_encode_xer; +per_type_decoder_f MeasId_decode_uper; +per_type_encoder_f MeasId_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasId_H_ */ +#include diff --git a/lte/rrc/asn/MeasIdToAddMod.c b/lte/rrc/asn/MeasIdToAddMod.c new file mode 100644 index 000000000..61f236f92 --- /dev/null +++ b/lte/rrc/asn/MeasIdToAddMod.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasIdToAddMod.h" + +static asn_TYPE_member_t asn_MBR_MeasIdToAddMod_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasIdToAddMod, measId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measId" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasIdToAddMod, measObjectId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectId" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasIdToAddMod, reportConfigId), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigId" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasIdToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasIdToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measId at 3218 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measObjectId at 3219 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* reportConfigId at 3221 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasIdToAddMod_specs_1 = { + sizeof(struct MeasIdToAddMod), + offsetof(struct MeasIdToAddMod, _asn_ctx), + asn_MAP_MeasIdToAddMod_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasIdToAddMod = { + "MeasIdToAddMod", + "MeasIdToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasIdToAddMod_tags_1, + sizeof(asn_DEF_MeasIdToAddMod_tags_1) + /sizeof(asn_DEF_MeasIdToAddMod_tags_1[0]), /* 1 */ + asn_DEF_MeasIdToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasIdToAddMod_tags_1) + /sizeof(asn_DEF_MeasIdToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasIdToAddMod_1, + 3, /* Elements count */ + &asn_SPC_MeasIdToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasIdToAddMod.h b/lte/rrc/asn/MeasIdToAddMod.h new file mode 100644 index 000000000..71c7bd659 --- /dev/null +++ b/lte/rrc/asn/MeasIdToAddMod.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasIdToAddMod_H_ +#define _MeasIdToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include "MeasId.h" +#include "MeasObjectId.h" +#include "ReportConfigId.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasIdToAddMod */ +typedef struct MeasIdToAddMod { + MeasId_t measId; + MeasObjectId_t measObjectId; + ReportConfigId_t reportConfigId; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasIdToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasIdToAddMod; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasIdToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/MeasIdToAddModList.c b/lte/rrc/asn/MeasIdToAddModList.c new file mode 100644 index 000000000..5d147c3c0 --- /dev/null +++ b/lte/rrc/asn/MeasIdToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasIdToAddModList.h" + +static asn_per_constraints_t asn_PER_type_MeasIdToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasIdToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasIdToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasIdToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasIdToAddModList_specs_1 = { + sizeof(struct MeasIdToAddModList), + offsetof(struct MeasIdToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasIdToAddModList = { + "MeasIdToAddModList", + "MeasIdToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasIdToAddModList_tags_1, + sizeof(asn_DEF_MeasIdToAddModList_tags_1) + /sizeof(asn_DEF_MeasIdToAddModList_tags_1[0]), /* 1 */ + asn_DEF_MeasIdToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasIdToAddModList_tags_1) + /sizeof(asn_DEF_MeasIdToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_MeasIdToAddModList_constr_1, + asn_MBR_MeasIdToAddModList_1, + 1, /* Single element */ + &asn_SPC_MeasIdToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasIdToAddModList.h b/lte/rrc/asn/MeasIdToAddModList.h new file mode 100644 index 000000000..3cb16cf9e --- /dev/null +++ b/lte/rrc/asn/MeasIdToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasIdToAddModList_H_ +#define _MeasIdToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasIdToAddMod; + +/* MeasIdToAddModList */ +typedef struct MeasIdToAddModList { + A_SEQUENCE_OF(struct MeasIdToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasIdToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasIdToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasIdToAddMod.h" + +#endif /* _MeasIdToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/MeasIdToRemoveList.c b/lte/rrc/asn/MeasIdToRemoveList.c new file mode 100644 index 000000000..9fdb39181 --- /dev/null +++ b/lte/rrc/asn/MeasIdToRemoveList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasIdToRemoveList.h" + +static asn_per_constraints_t asn_PER_type_MeasIdToRemoveList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasIdToRemoveList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_MeasId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasIdToRemoveList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasIdToRemoveList_specs_1 = { + sizeof(struct MeasIdToRemoveList), + offsetof(struct MeasIdToRemoveList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasIdToRemoveList = { + "MeasIdToRemoveList", + "MeasIdToRemoveList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasIdToRemoveList_tags_1, + sizeof(asn_DEF_MeasIdToRemoveList_tags_1) + /sizeof(asn_DEF_MeasIdToRemoveList_tags_1[0]), /* 1 */ + asn_DEF_MeasIdToRemoveList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasIdToRemoveList_tags_1) + /sizeof(asn_DEF_MeasIdToRemoveList_tags_1[0]), /* 1 */ + &asn_PER_type_MeasIdToRemoveList_constr_1, + asn_MBR_MeasIdToRemoveList_1, + 1, /* Single element */ + &asn_SPC_MeasIdToRemoveList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasIdToRemoveList.h b/lte/rrc/asn/MeasIdToRemoveList.h new file mode 100644 index 000000000..e7bddee73 --- /dev/null +++ b/lte/rrc/asn/MeasIdToRemoveList.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasIdToRemoveList_H_ +#define _MeasIdToRemoveList_H_ + + +#include + +/* Including external dependencies */ +#include "MeasId.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasIdToRemoveList */ +typedef struct MeasIdToRemoveList { + A_SEQUENCE_OF(MeasId_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasIdToRemoveList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasIdToRemoveList; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasIdToRemoveList_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectCDMA2000.c b/lte/rrc/asn/MeasObjectCDMA2000.c new file mode 100644 index 000000000..49f91ad27 --- /dev/null +++ b/lte/rrc/asn/MeasObjectCDMA2000.c @@ -0,0 +1,170 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectCDMA2000.h" + +static int +memb_searchWindowSize_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_searchWindowSize_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static int asn_DFL_5_set_0(int set_value, void **sptr) { + Q_OffsetRangeInterRAT_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 0 */ + *st = 0; + return 0; + } else { + /* Test default value 0 */ + return (*st == 0); + } +} +static asn_TYPE_member_t asn_MBR_MeasObjectCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectCDMA2000, cdma2000_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CDMA2000_Type, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectCDMA2000, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_POINTER, 5, offsetof(struct MeasObjectCDMA2000, searchWindowSize), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_searchWindowSize_constraint_1, + &asn_PER_memb_searchWindowSize_constr_4, + 0, + "searchWindowSize" + }, + { ATF_NOFLAGS, 4, offsetof(struct MeasObjectCDMA2000, offsetFreq), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRangeInterRAT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_5_set_0, /* DEFAULT 0 */ + "offsetFreq" + }, + { ATF_POINTER, 3, offsetof(struct MeasObjectCDMA2000, cellsToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIndexList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToRemoveList" + }, + { ATF_POINTER, 2, offsetof(struct MeasObjectCDMA2000, cellsToAddModList), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellsToAddModListCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToAddModList" + }, + { ATF_POINTER, 1, offsetof(struct MeasObjectCDMA2000, cellForWhichToReportCGI), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellForWhichToReportCGI" + }, +}; +static int asn_MAP_MeasObjectCDMA2000_oms_1[] = { 2, 3, 4, 5, 6 }; +static ber_tlv_tag_t asn_DEF_MeasObjectCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasObjectCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cdma2000-Type at 3225 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreq at 3226 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* searchWindowSize at 3227 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* offsetFreq at 3228 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* cellsToRemoveList at 3229 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* cellsToAddModList at 3230 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* cellForWhichToReportCGI at 3231 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasObjectCDMA2000_specs_1 = { + sizeof(struct MeasObjectCDMA2000), + offsetof(struct MeasObjectCDMA2000, _asn_ctx), + asn_MAP_MeasObjectCDMA2000_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_MeasObjectCDMA2000_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + 6, /* Start extensions */ + 8 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectCDMA2000 = { + "MeasObjectCDMA2000", + "MeasObjectCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectCDMA2000_tags_1, + sizeof(asn_DEF_MeasObjectCDMA2000_tags_1) + /sizeof(asn_DEF_MeasObjectCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectCDMA2000_tags_1) + /sizeof(asn_DEF_MeasObjectCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasObjectCDMA2000_1, + 7, /* Elements count */ + &asn_SPC_MeasObjectCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectCDMA2000.h b/lte/rrc/asn/MeasObjectCDMA2000.h new file mode 100644 index 000000000..709c7e523 --- /dev/null +++ b/lte/rrc/asn/MeasObjectCDMA2000.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectCDMA2000_H_ +#define _MeasObjectCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "CDMA2000-Type.h" +#include "CarrierFreqCDMA2000.h" +#include +#include "Q-OffsetRangeInterRAT.h" +#include "PhysCellIdCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellIndexList; +struct CellsToAddModListCDMA2000; + +/* MeasObjectCDMA2000 */ +typedef struct MeasObjectCDMA2000 { + CDMA2000_Type_t cdma2000_Type; + CarrierFreqCDMA2000_t carrierFreq; + long *searchWindowSize /* OPTIONAL */; + Q_OffsetRangeInterRAT_t offsetFreq /* DEFAULT 0 */; + struct CellIndexList *cellsToRemoveList /* OPTIONAL */; + struct CellsToAddModListCDMA2000 *cellsToAddModList /* OPTIONAL */; + PhysCellIdCDMA2000_t *cellForWhichToReportCGI /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellIndexList.h" +#include "CellsToAddModListCDMA2000.h" + +#endif /* _MeasObjectCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectEUTRA.c b/lte/rrc/asn/MeasObjectEUTRA.c new file mode 100644 index 000000000..987b072e4 --- /dev/null +++ b/lte/rrc/asn/MeasObjectEUTRA.c @@ -0,0 +1,190 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectEUTRA.h" + +static int asn_DFL_6_set_15(int set_value, void **sptr) { + Q_OffsetRange_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 15 */ + *st = 15; + return 0; + } else { + /* Test default value 15 */ + return (*st == 15); + } +} +static asn_TYPE_member_t asn_MBR_MeasObjectEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectEUTRA, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectEUTRA, allowedMeasBandwidth), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AllowedMeasBandwidth, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "allowedMeasBandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectEUTRA, presenceAntennaPort1), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PresenceAntennaPort1, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "presenceAntennaPort1" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectEUTRA, neighCellConfig), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellConfig" + }, + { ATF_POINTER, 8, offsetof(struct MeasObjectEUTRA, offsetFreq), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_6_set_15, /* DEFAULT 15 */ + "offsetFreq" + }, + { ATF_POINTER, 7, offsetof(struct MeasObjectEUTRA, cellsToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIndexList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToRemoveList" + }, + { ATF_POINTER, 6, offsetof(struct MeasObjectEUTRA, cellsToAddModList), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellsToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToAddModList" + }, + { ATF_POINTER, 5, offsetof(struct MeasObjectEUTRA, blackCellsToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIndexList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "blackCellsToRemoveList" + }, + { ATF_POINTER, 4, offsetof(struct MeasObjectEUTRA, blackCellsToAddModList), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BlackCellsToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "blackCellsToAddModList" + }, + { ATF_POINTER, 3, offsetof(struct MeasObjectEUTRA, cellForWhichToReportCGI), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellForWhichToReportCGI" + }, + { ATF_POINTER, 2, offsetof(struct MeasObjectEUTRA, measCycleSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasCycleSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measCycleSCell-r10" + }, + { ATF_POINTER, 1, offsetof(struct MeasObjectEUTRA, measSubframePatternConfigNeigh_r10), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasSubframePatternConfigNeigh_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measSubframePatternConfigNeigh-r10" + }, +}; +static int asn_MAP_MeasObjectEUTRA_oms_1[] = { 4, 5, 6, 7, 8, 9, 10, 11 }; +static ber_tlv_tag_t asn_DEF_MeasObjectEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasObjectEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 3244 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* allowedMeasBandwidth at 3245 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* presenceAntennaPort1 at 3246 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* neighCellConfig at 3247 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* offsetFreq at 3248 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* cellsToRemoveList at 3250 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* cellsToAddModList at 3251 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* blackCellsToRemoveList at 3253 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* blackCellsToAddModList at 3254 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* cellForWhichToReportCGI at 3255 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* measCycleSCell-r10 at 3256 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 } /* measSubframePatternConfigNeigh-r10 at 3257 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasObjectEUTRA_specs_1 = { + sizeof(struct MeasObjectEUTRA), + offsetof(struct MeasObjectEUTRA, _asn_ctx), + asn_MAP_MeasObjectEUTRA_tag2el_1, + 12, /* Count of tags in the map */ + asn_MAP_MeasObjectEUTRA_oms_1, /* Optional members */ + 8, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectEUTRA = { + "MeasObjectEUTRA", + "MeasObjectEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectEUTRA_tags_1, + sizeof(asn_DEF_MeasObjectEUTRA_tags_1) + /sizeof(asn_DEF_MeasObjectEUTRA_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectEUTRA_tags_1) + /sizeof(asn_DEF_MeasObjectEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasObjectEUTRA_1, + 12, /* Elements count */ + &asn_SPC_MeasObjectEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectEUTRA.h b/lte/rrc/asn/MeasObjectEUTRA.h new file mode 100644 index 000000000..1ba80c728 --- /dev/null +++ b/lte/rrc/asn/MeasObjectEUTRA.h @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectEUTRA_H_ +#define _MeasObjectEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include "AllowedMeasBandwidth.h" +#include "PresenceAntennaPort1.h" +#include "NeighCellConfig.h" +#include "Q-OffsetRange.h" +#include "PhysCellId.h" +#include "MeasCycleSCell-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellIndexList; +struct CellsToAddModList; +struct BlackCellsToAddModList; +struct MeasSubframePatternConfigNeigh_r10; + +/* MeasObjectEUTRA */ +typedef struct MeasObjectEUTRA { + ARFCN_ValueEUTRA_t carrierFreq; + AllowedMeasBandwidth_t allowedMeasBandwidth; + PresenceAntennaPort1_t presenceAntennaPort1; + NeighCellConfig_t neighCellConfig; + Q_OffsetRange_t *offsetFreq /* DEFAULT 15 */; + struct CellIndexList *cellsToRemoveList /* OPTIONAL */; + struct CellsToAddModList *cellsToAddModList /* OPTIONAL */; + struct CellIndexList *blackCellsToRemoveList /* OPTIONAL */; + struct BlackCellsToAddModList *blackCellsToAddModList /* OPTIONAL */; + PhysCellId_t *cellForWhichToReportCGI /* OPTIONAL */; + MeasCycleSCell_r10_t *measCycleSCell_r10 /* OPTIONAL */; + struct MeasSubframePatternConfigNeigh_r10 *measSubframePatternConfigNeigh_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellIndexList.h" +#include "CellsToAddModList.h" +#include "BlackCellsToAddModList.h" +#include "MeasSubframePatternConfigNeigh-r10.h" + +#endif /* _MeasObjectEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectGERAN.c b/lte/rrc/asn/MeasObjectGERAN.c new file mode 100644 index 000000000..9f4f0c16a --- /dev/null +++ b/lte/rrc/asn/MeasObjectGERAN.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectGERAN.h" + +static int +memb_ncc_Permitted_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ncc_Permitted_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static int asn_DFL_3_set_0(int set_value, void **sptr) { + Q_OffsetRangeInterRAT_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 0 */ + *st = 0; + return 0; + } else { + /* Test default value 0 */ + return (*st == 0); + } +} +static asn_TYPE_member_t asn_MBR_MeasObjectGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectGERAN, carrierFreqs), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqsGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreqs" + }, + { ATF_NOFLAGS, 3, offsetof(struct MeasObjectGERAN, offsetFreq), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRangeInterRAT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_3_set_0, /* DEFAULT 0 */ + "offsetFreq" + }, + { ATF_POINTER, 2, offsetof(struct MeasObjectGERAN, ncc_Permitted), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_ncc_Permitted_constraint_1, + &asn_PER_memb_ncc_Permitted_constr_4, + 0, + "ncc-Permitted" + }, + { ATF_POINTER, 1, offsetof(struct MeasObjectGERAN, cellForWhichToReportCGI), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellForWhichToReportCGI" + }, +}; +static int asn_MAP_MeasObjectGERAN_oms_1[] = { 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_MeasObjectGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasObjectGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreqs at 3290 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* offsetFreq at 3291 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ncc-Permitted at 3292 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* cellForWhichToReportCGI at 3293 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasObjectGERAN_specs_1 = { + sizeof(struct MeasObjectGERAN), + offsetof(struct MeasObjectGERAN, _asn_ctx), + asn_MAP_MeasObjectGERAN_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_MeasObjectGERAN_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectGERAN = { + "MeasObjectGERAN", + "MeasObjectGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectGERAN_tags_1, + sizeof(asn_DEF_MeasObjectGERAN_tags_1) + /sizeof(asn_DEF_MeasObjectGERAN_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectGERAN_tags_1) + /sizeof(asn_DEF_MeasObjectGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasObjectGERAN_1, + 4, /* Elements count */ + &asn_SPC_MeasObjectGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectGERAN.h b/lte/rrc/asn/MeasObjectGERAN.h new file mode 100644 index 000000000..be27aa1d1 --- /dev/null +++ b/lte/rrc/asn/MeasObjectGERAN.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectGERAN_H_ +#define _MeasObjectGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "CarrierFreqsGERAN.h" +#include "Q-OffsetRangeInterRAT.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysCellIdGERAN; + +/* MeasObjectGERAN */ +typedef struct MeasObjectGERAN { + CarrierFreqsGERAN_t carrierFreqs; + Q_OffsetRangeInterRAT_t offsetFreq /* DEFAULT 0 */; + BIT_STRING_t *ncc_Permitted /* DEFAULT 'FF'HH */; + struct PhysCellIdGERAN *cellForWhichToReportCGI /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectGERAN; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysCellIdGERAN.h" + +#endif /* _MeasObjectGERAN_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectId.c b/lte/rrc/asn/MeasObjectId.c new file mode 100644 index 000000000..d3e508eab --- /dev/null +++ b/lte/rrc/asn/MeasObjectId.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectId.h" + +int +MeasObjectId_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +MeasObjectId_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +MeasObjectId_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MeasObjectId_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MeasObjectId_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MeasObjectId_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MeasObjectId_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MeasObjectId_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MeasObjectId_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MeasObjectId_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MeasObjectId_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_MeasObjectId_constr_1 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_MeasObjectId_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectId = { + "MeasObjectId", + "MeasObjectId", + MeasObjectId_free, + MeasObjectId_print, + MeasObjectId_constraint, + MeasObjectId_decode_ber, + MeasObjectId_encode_der, + MeasObjectId_decode_xer, + MeasObjectId_encode_xer, + MeasObjectId_decode_uper, + MeasObjectId_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectId_tags_1, + sizeof(asn_DEF_MeasObjectId_tags_1) + /sizeof(asn_DEF_MeasObjectId_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectId_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectId_tags_1) + /sizeof(asn_DEF_MeasObjectId_tags_1[0]), /* 1 */ + &asn_PER_type_MeasObjectId_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/MeasObjectId.h b/lte/rrc/asn/MeasObjectId.h new file mode 100644 index 000000000..c8333453c --- /dev/null +++ b/lte/rrc/asn/MeasObjectId.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectId_H_ +#define _MeasObjectId_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasObjectId */ +typedef long MeasObjectId_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectId; +asn_struct_free_f MeasObjectId_free; +asn_struct_print_f MeasObjectId_print; +asn_constr_check_f MeasObjectId_constraint; +ber_type_decoder_f MeasObjectId_decode_ber; +der_type_encoder_f MeasObjectId_encode_der; +xer_type_decoder_f MeasObjectId_decode_xer; +xer_type_encoder_f MeasObjectId_encode_xer; +per_type_decoder_f MeasObjectId_decode_uper; +per_type_encoder_f MeasObjectId_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasObjectId_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectToAddMod.c b/lte/rrc/asn/MeasObjectToAddMod.c new file mode 100644 index 000000000..95869b394 --- /dev/null +++ b/lte/rrc/asn/MeasObjectToAddMod.c @@ -0,0 +1,153 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectToAddMod.h" + +static asn_per_constraints_t asn_PER_type_measObject_constr_3 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_measObject_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectToAddMod__measObject, choice.measObjectEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectEUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectToAddMod__measObject, choice.measObjectUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectToAddMod__measObject, choice.measObjectGERAN), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectGERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectToAddMod__measObject, choice.measObjectCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectCDMA2000" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_measObject_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measObjectEUTRA at 3306 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measObjectUTRA at 3307 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measObjectGERAN at 3308 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* measObjectCDMA2000 at 3309 */ +}; +static asn_CHOICE_specifics_t asn_SPC_measObject_specs_3 = { + sizeof(struct MeasObjectToAddMod__measObject), + offsetof(struct MeasObjectToAddMod__measObject, _asn_ctx), + offsetof(struct MeasObjectToAddMod__measObject, present), + sizeof(((struct MeasObjectToAddMod__measObject *)0)->present), + asn_MAP_measObject_tag2el_3, + 4, /* Count of tags in the map */ + 0, + 4 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measObject_3 = { + "measObject", + "measObject", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_measObject_constr_3, + asn_MBR_measObject_3, + 4, /* Elements count */ + &asn_SPC_measObject_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasObjectToAddMod_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectToAddMod, measObjectId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectId" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectToAddMod, measObject), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_measObject_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObject" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasObjectToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasObjectToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measObjectId at 3304 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measObject at 3306 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasObjectToAddMod_specs_1 = { + sizeof(struct MeasObjectToAddMod), + offsetof(struct MeasObjectToAddMod, _asn_ctx), + asn_MAP_MeasObjectToAddMod_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectToAddMod = { + "MeasObjectToAddMod", + "MeasObjectToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectToAddMod_tags_1, + sizeof(asn_DEF_MeasObjectToAddMod_tags_1) + /sizeof(asn_DEF_MeasObjectToAddMod_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectToAddMod_tags_1) + /sizeof(asn_DEF_MeasObjectToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasObjectToAddMod_1, + 2, /* Elements count */ + &asn_SPC_MeasObjectToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectToAddMod.h b/lte/rrc/asn/MeasObjectToAddMod.h new file mode 100644 index 000000000..f5674cbb6 --- /dev/null +++ b/lte/rrc/asn/MeasObjectToAddMod.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectToAddMod_H_ +#define _MeasObjectToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include "MeasObjectId.h" +#include "MeasObjectEUTRA.h" +#include "MeasObjectUTRA.h" +#include "MeasObjectGERAN.h" +#include "MeasObjectCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasObjectToAddMod__measObject_PR { + MeasObjectToAddMod__measObject_PR_NOTHING, /* No components present */ + MeasObjectToAddMod__measObject_PR_measObjectEUTRA, + MeasObjectToAddMod__measObject_PR_measObjectUTRA, + MeasObjectToAddMod__measObject_PR_measObjectGERAN, + MeasObjectToAddMod__measObject_PR_measObjectCDMA2000, + /* Extensions may appear below */ + +} MeasObjectToAddMod__measObject_PR; + +/* MeasObjectToAddMod */ +typedef struct MeasObjectToAddMod { + MeasObjectId_t measObjectId; + struct MeasObjectToAddMod__measObject { + MeasObjectToAddMod__measObject_PR present; + union MeasObjectToAddMod__measObject_u { + MeasObjectEUTRA_t measObjectEUTRA; + MeasObjectUTRA_t measObjectUTRA; + MeasObjectGERAN_t measObjectGERAN; + MeasObjectCDMA2000_t measObjectCDMA2000; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measObject; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectToAddMod; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasObjectToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectToAddModList.c b/lte/rrc/asn/MeasObjectToAddModList.c new file mode 100644 index 000000000..9ee840373 --- /dev/null +++ b/lte/rrc/asn/MeasObjectToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectToAddModList.h" + +static asn_per_constraints_t asn_PER_type_MeasObjectToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasObjectToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasObjectToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasObjectToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasObjectToAddModList_specs_1 = { + sizeof(struct MeasObjectToAddModList), + offsetof(struct MeasObjectToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectToAddModList = { + "MeasObjectToAddModList", + "MeasObjectToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectToAddModList_tags_1, + sizeof(asn_DEF_MeasObjectToAddModList_tags_1) + /sizeof(asn_DEF_MeasObjectToAddModList_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectToAddModList_tags_1) + /sizeof(asn_DEF_MeasObjectToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_MeasObjectToAddModList_constr_1, + asn_MBR_MeasObjectToAddModList_1, + 1, /* Single element */ + &asn_SPC_MeasObjectToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectToAddModList.h b/lte/rrc/asn/MeasObjectToAddModList.h new file mode 100644 index 000000000..e3b360e80 --- /dev/null +++ b/lte/rrc/asn/MeasObjectToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectToAddModList_H_ +#define _MeasObjectToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasObjectToAddMod; + +/* MeasObjectToAddModList */ +typedef struct MeasObjectToAddModList { + A_SEQUENCE_OF(struct MeasObjectToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasObjectToAddMod.h" + +#endif /* _MeasObjectToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectToRemoveList.c b/lte/rrc/asn/MeasObjectToRemoveList.c new file mode 100644 index 000000000..26d7ecc58 --- /dev/null +++ b/lte/rrc/asn/MeasObjectToRemoveList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectToRemoveList.h" + +static asn_per_constraints_t asn_PER_type_MeasObjectToRemoveList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasObjectToRemoveList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_MeasObjectId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasObjectToRemoveList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasObjectToRemoveList_specs_1 = { + sizeof(struct MeasObjectToRemoveList), + offsetof(struct MeasObjectToRemoveList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectToRemoveList = { + "MeasObjectToRemoveList", + "MeasObjectToRemoveList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectToRemoveList_tags_1, + sizeof(asn_DEF_MeasObjectToRemoveList_tags_1) + /sizeof(asn_DEF_MeasObjectToRemoveList_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectToRemoveList_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectToRemoveList_tags_1) + /sizeof(asn_DEF_MeasObjectToRemoveList_tags_1[0]), /* 1 */ + &asn_PER_type_MeasObjectToRemoveList_constr_1, + asn_MBR_MeasObjectToRemoveList_1, + 1, /* Single element */ + &asn_SPC_MeasObjectToRemoveList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectToRemoveList.h b/lte/rrc/asn/MeasObjectToRemoveList.h new file mode 100644 index 000000000..845ecb6d2 --- /dev/null +++ b/lte/rrc/asn/MeasObjectToRemoveList.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectToRemoveList_H_ +#define _MeasObjectToRemoveList_H_ + + +#include + +/* Including external dependencies */ +#include "MeasObjectId.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasObjectToRemoveList */ +typedef struct MeasObjectToRemoveList { + A_SEQUENCE_OF(MeasObjectId_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectToRemoveList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectToRemoveList; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasObjectToRemoveList_H_ */ +#include diff --git a/lte/rrc/asn/MeasObjectUTRA.c b/lte/rrc/asn/MeasObjectUTRA.c new file mode 100644 index 000000000..9169fde43 --- /dev/null +++ b/lte/rrc/asn/MeasObjectUTRA.c @@ -0,0 +1,256 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasObjectUTRA.h" + +static asn_per_constraints_t asn_PER_type_cellsToAddModList_constr_5 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cellForWhichToReportCGI_constr_8 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static int asn_DFL_3_set_0(int set_value, void **sptr) { + Q_OffsetRangeInterRAT_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 0 */ + *st = 0; + return 0; + } else { + /* Test default value 0 */ + return (*st == 0); + } +} +static asn_TYPE_member_t asn_MBR_cellsToAddModList_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectUTRA__cellsToAddModList, choice.cellsToAddModListUTRA_FDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellsToAddModListUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToAddModListUTRA-FDD" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectUTRA__cellsToAddModList, choice.cellsToAddModListUTRA_TDD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellsToAddModListUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToAddModListUTRA-TDD" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_cellsToAddModList_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellsToAddModListUTRA-FDD at 3320 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellsToAddModListUTRA-TDD at 3322 */ +}; +static asn_CHOICE_specifics_t asn_SPC_cellsToAddModList_specs_5 = { + sizeof(struct MeasObjectUTRA__cellsToAddModList), + offsetof(struct MeasObjectUTRA__cellsToAddModList, _asn_ctx), + offsetof(struct MeasObjectUTRA__cellsToAddModList, present), + sizeof(((struct MeasObjectUTRA__cellsToAddModList *)0)->present), + asn_MAP_cellsToAddModList_tag2el_5, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellsToAddModList_5 = { + "cellsToAddModList", + "cellsToAddModList", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_cellsToAddModList_constr_5, + asn_MBR_cellsToAddModList_5, + 2, /* Elements count */ + &asn_SPC_cellsToAddModList_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cellForWhichToReportCGI_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectUTRA__cellForWhichToReportCGI, choice.utra_FDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-FDD" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectUTRA__cellForWhichToReportCGI, choice.utra_TDD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-TDD" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_cellForWhichToReportCGI_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* utra-FDD at 3324 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* utra-TDD at 3326 */ +}; +static asn_CHOICE_specifics_t asn_SPC_cellForWhichToReportCGI_specs_8 = { + sizeof(struct MeasObjectUTRA__cellForWhichToReportCGI), + offsetof(struct MeasObjectUTRA__cellForWhichToReportCGI, _asn_ctx), + offsetof(struct MeasObjectUTRA__cellForWhichToReportCGI, present), + sizeof(((struct MeasObjectUTRA__cellForWhichToReportCGI *)0)->present), + asn_MAP_cellForWhichToReportCGI_tag2el_8, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellForWhichToReportCGI_8 = { + "cellForWhichToReportCGI", + "cellForWhichToReportCGI", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_cellForWhichToReportCGI_constr_8, + asn_MBR_cellForWhichToReportCGI_8, + 2, /* Elements count */ + &asn_SPC_cellForWhichToReportCGI_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasObjectUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasObjectUTRA, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 5, offsetof(struct MeasObjectUTRA, offsetFreq), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_OffsetRangeInterRAT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_3_set_0, /* DEFAULT 0 */ + "offsetFreq" + }, + { ATF_POINTER, 4, offsetof(struct MeasObjectUTRA, cellsToRemoveList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIndexList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToRemoveList" + }, + { ATF_POINTER, 3, offsetof(struct MeasObjectUTRA, cellsToAddModList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_cellsToAddModList_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsToAddModList" + }, + { ATF_POINTER, 2, offsetof(struct MeasObjectUTRA, cellForWhichToReportCGI), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_cellForWhichToReportCGI_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellForWhichToReportCGI" + }, + { ATF_POINTER, 1, offsetof(struct MeasObjectUTRA, csg_allowedReportingCells_v930), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSG_AllowedReportingCells_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-allowedReportingCells-v930" + }, +}; +static int asn_MAP_MeasObjectUTRA_oms_1[] = { 1, 2, 3, 4, 5 }; +static ber_tlv_tag_t asn_DEF_MeasObjectUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasObjectUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 3316 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* offsetFreq at 3317 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellsToRemoveList at 3318 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* cellsToAddModList at 3320 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* cellForWhichToReportCGI at 3324 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* csg-allowedReportingCells-v930 at 3327 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasObjectUTRA_specs_1 = { + sizeof(struct MeasObjectUTRA), + offsetof(struct MeasObjectUTRA, _asn_ctx), + asn_MAP_MeasObjectUTRA_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_MeasObjectUTRA_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasObjectUTRA = { + "MeasObjectUTRA", + "MeasObjectUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasObjectUTRA_tags_1, + sizeof(asn_DEF_MeasObjectUTRA_tags_1) + /sizeof(asn_DEF_MeasObjectUTRA_tags_1[0]), /* 1 */ + asn_DEF_MeasObjectUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasObjectUTRA_tags_1) + /sizeof(asn_DEF_MeasObjectUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasObjectUTRA_1, + 6, /* Elements count */ + &asn_SPC_MeasObjectUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasObjectUTRA.h b/lte/rrc/asn/MeasObjectUTRA.h new file mode 100644 index 000000000..5eaa8414b --- /dev/null +++ b/lte/rrc/asn/MeasObjectUTRA.h @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasObjectUTRA_H_ +#define _MeasObjectUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include "Q-OffsetRangeInterRAT.h" +#include "CellsToAddModListUTRA-FDD.h" +#include "CellsToAddModListUTRA-TDD.h" +#include +#include "PhysCellIdUTRA-FDD.h" +#include "PhysCellIdUTRA-TDD.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasObjectUTRA__cellsToAddModList_PR { + MeasObjectUTRA__cellsToAddModList_PR_NOTHING, /* No components present */ + MeasObjectUTRA__cellsToAddModList_PR_cellsToAddModListUTRA_FDD, + MeasObjectUTRA__cellsToAddModList_PR_cellsToAddModListUTRA_TDD +} MeasObjectUTRA__cellsToAddModList_PR; +typedef enum MeasObjectUTRA__cellForWhichToReportCGI_PR { + MeasObjectUTRA__cellForWhichToReportCGI_PR_NOTHING, /* No components present */ + MeasObjectUTRA__cellForWhichToReportCGI_PR_utra_FDD, + MeasObjectUTRA__cellForWhichToReportCGI_PR_utra_TDD +} MeasObjectUTRA__cellForWhichToReportCGI_PR; + +/* Forward declarations */ +struct CellIndexList; +struct CSG_AllowedReportingCells_r9; + +/* MeasObjectUTRA */ +typedef struct MeasObjectUTRA { + ARFCN_ValueUTRA_t carrierFreq; + Q_OffsetRangeInterRAT_t offsetFreq /* DEFAULT 0 */; + struct CellIndexList *cellsToRemoveList /* OPTIONAL */; + struct MeasObjectUTRA__cellsToAddModList { + MeasObjectUTRA__cellsToAddModList_PR present; + union MeasObjectUTRA__cellsToAddModList_u { + CellsToAddModListUTRA_FDD_t cellsToAddModListUTRA_FDD; + CellsToAddModListUTRA_TDD_t cellsToAddModListUTRA_TDD; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cellsToAddModList; + struct MeasObjectUTRA__cellForWhichToReportCGI { + MeasObjectUTRA__cellForWhichToReportCGI_PR present; + union MeasObjectUTRA__cellForWhichToReportCGI_u { + PhysCellIdUTRA_FDD_t utra_FDD; + PhysCellIdUTRA_TDD_t utra_TDD; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cellForWhichToReportCGI; + struct CSG_AllowedReportingCells_r9 *csg_allowedReportingCells_v930 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasObjectUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasObjectUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellIndexList.h" +#include "CSG-AllowedReportingCells-r9.h" + +#endif /* _MeasObjectUTRA_H_ */ +#include diff --git a/lte/rrc/asn/MeasParameters-v1020.c b/lte/rrc/asn/MeasParameters-v1020.c new file mode 100644 index 000000000..35d50dd38 --- /dev/null +++ b/lte/rrc/asn/MeasParameters-v1020.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasParameters-v1020.h" + +static asn_TYPE_member_t asn_MBR_MeasParameters_v1020_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasParameters_v1020, bandCombinationListEUTRA_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandCombinationListEUTRA_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandCombinationListEUTRA-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasParameters_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasParameters_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* bandCombinationListEUTRA-r10 at 3874 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasParameters_v1020_specs_1 = { + sizeof(struct MeasParameters_v1020), + offsetof(struct MeasParameters_v1020, _asn_ctx), + asn_MAP_MeasParameters_v1020_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasParameters_v1020 = { + "MeasParameters-v1020", + "MeasParameters-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasParameters_v1020_tags_1, + sizeof(asn_DEF_MeasParameters_v1020_tags_1) + /sizeof(asn_DEF_MeasParameters_v1020_tags_1[0]), /* 1 */ + asn_DEF_MeasParameters_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasParameters_v1020_tags_1) + /sizeof(asn_DEF_MeasParameters_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasParameters_v1020_1, + 1, /* Elements count */ + &asn_SPC_MeasParameters_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasParameters-v1020.h b/lte/rrc/asn/MeasParameters-v1020.h new file mode 100644 index 000000000..4ee1a99c1 --- /dev/null +++ b/lte/rrc/asn/MeasParameters-v1020.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasParameters_v1020_H_ +#define _MeasParameters_v1020_H_ + + +#include + +/* Including external dependencies */ +#include "BandCombinationListEUTRA-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasParameters-v1020 */ +typedef struct MeasParameters_v1020 { + BandCombinationListEUTRA_r10_t bandCombinationListEUTRA_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasParameters_v1020_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasParameters_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasParameters_v1020_H_ */ +#include diff --git a/lte/rrc/asn/MeasParameters.c b/lte/rrc/asn/MeasParameters.c new file mode 100644 index 000000000..54ee5bfd3 --- /dev/null +++ b/lte/rrc/asn/MeasParameters.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasParameters.h" + +static asn_TYPE_member_t asn_MBR_MeasParameters_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasParameters, bandListEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandListEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandListEUTRA" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasParameters_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasParameters_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* bandListEUTRA at 3870 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasParameters_specs_1 = { + sizeof(struct MeasParameters), + offsetof(struct MeasParameters, _asn_ctx), + asn_MAP_MeasParameters_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasParameters = { + "MeasParameters", + "MeasParameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasParameters_tags_1, + sizeof(asn_DEF_MeasParameters_tags_1) + /sizeof(asn_DEF_MeasParameters_tags_1[0]), /* 1 */ + asn_DEF_MeasParameters_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasParameters_tags_1) + /sizeof(asn_DEF_MeasParameters_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasParameters_1, + 1, /* Elements count */ + &asn_SPC_MeasParameters_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasParameters.h b/lte/rrc/asn/MeasParameters.h new file mode 100644 index 000000000..8c23a26fd --- /dev/null +++ b/lte/rrc/asn/MeasParameters.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasParameters_H_ +#define _MeasParameters_H_ + + +#include + +/* Including external dependencies */ +#include "BandListEUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasParameters */ +typedef struct MeasParameters { + BandListEUTRA_t bandListEUTRA; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasParameters_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasParameters; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasParameters_H_ */ +#include diff --git a/lte/rrc/asn/MeasResult2CDMA2000-r9.c b/lte/rrc/asn/MeasResult2CDMA2000-r9.c new file mode 100644 index 000000000..39b17426d --- /dev/null +++ b/lte/rrc/asn/MeasResult2CDMA2000-r9.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResult2CDMA2000-r9.h" + +static asn_TYPE_member_t asn_MBR_MeasResult2CDMA2000_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResult2CDMA2000_r9, carrierFreq_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResult2CDMA2000_r9, measResultList_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultsCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultList-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResult2CDMA2000_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResult2CDMA2000_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq-r9 at 1381 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResultList-r9 at 1383 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResult2CDMA2000_r9_specs_1 = { + sizeof(struct MeasResult2CDMA2000_r9), + offsetof(struct MeasResult2CDMA2000_r9, _asn_ctx), + asn_MAP_MeasResult2CDMA2000_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResult2CDMA2000_r9 = { + "MeasResult2CDMA2000-r9", + "MeasResult2CDMA2000-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResult2CDMA2000_r9_tags_1, + sizeof(asn_DEF_MeasResult2CDMA2000_r9_tags_1) + /sizeof(asn_DEF_MeasResult2CDMA2000_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResult2CDMA2000_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResult2CDMA2000_r9_tags_1) + /sizeof(asn_DEF_MeasResult2CDMA2000_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResult2CDMA2000_r9_1, + 2, /* Elements count */ + &asn_SPC_MeasResult2CDMA2000_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResult2CDMA2000-r9.h b/lte/rrc/asn/MeasResult2CDMA2000-r9.h new file mode 100644 index 000000000..6a2d476b5 --- /dev/null +++ b/lte/rrc/asn/MeasResult2CDMA2000-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResult2CDMA2000_r9_H_ +#define _MeasResult2CDMA2000_r9_H_ + + +#include + +/* Including external dependencies */ +#include "CarrierFreqCDMA2000.h" +#include "MeasResultsCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResult2CDMA2000-r9 */ +typedef struct MeasResult2CDMA2000_r9 { + CarrierFreqCDMA2000_t carrierFreq_r9; + MeasResultsCDMA2000_t measResultList_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResult2CDMA2000_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResult2CDMA2000_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResult2CDMA2000_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResult2EUTRA-r9.c b/lte/rrc/asn/MeasResult2EUTRA-r9.c new file mode 100644 index 000000000..7f2461e2f --- /dev/null +++ b/lte/rrc/asn/MeasResult2EUTRA-r9.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResult2EUTRA-r9.h" + +static asn_TYPE_member_t asn_MBR_MeasResult2EUTRA_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResult2EUTRA_r9, carrierFreq_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResult2EUTRA_r9, measResultList_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultList-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResult2EUTRA_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResult2EUTRA_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq-r9 at 1367 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResultList-r9 at 1369 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResult2EUTRA_r9_specs_1 = { + sizeof(struct MeasResult2EUTRA_r9), + offsetof(struct MeasResult2EUTRA_r9, _asn_ctx), + asn_MAP_MeasResult2EUTRA_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResult2EUTRA_r9 = { + "MeasResult2EUTRA-r9", + "MeasResult2EUTRA-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResult2EUTRA_r9_tags_1, + sizeof(asn_DEF_MeasResult2EUTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResult2EUTRA_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResult2EUTRA_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResult2EUTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResult2EUTRA_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResult2EUTRA_r9_1, + 2, /* Elements count */ + &asn_SPC_MeasResult2EUTRA_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResult2EUTRA-r9.h b/lte/rrc/asn/MeasResult2EUTRA-r9.h new file mode 100644 index 000000000..908f1a943 --- /dev/null +++ b/lte/rrc/asn/MeasResult2EUTRA-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResult2EUTRA_r9_H_ +#define _MeasResult2EUTRA_r9_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include "MeasResultListEUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResult2EUTRA-r9 */ +typedef struct MeasResult2EUTRA_r9 { + ARFCN_ValueEUTRA_t carrierFreq_r9; + MeasResultListEUTRA_t measResultList_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResult2EUTRA_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResult2EUTRA_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResult2EUTRA_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResult2UTRA-r9.c b/lte/rrc/asn/MeasResult2UTRA-r9.c new file mode 100644 index 000000000..97b65a094 --- /dev/null +++ b/lte/rrc/asn/MeasResult2UTRA-r9.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResult2UTRA-r9.h" + +static asn_TYPE_member_t asn_MBR_MeasResult2UTRA_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResult2UTRA_r9, carrierFreq_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResult2UTRA_r9, measResultList_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultList-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResult2UTRA_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResult2UTRA_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq-r9 at 1374 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResultList-r9 at 1376 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResult2UTRA_r9_specs_1 = { + sizeof(struct MeasResult2UTRA_r9), + offsetof(struct MeasResult2UTRA_r9, _asn_ctx), + asn_MAP_MeasResult2UTRA_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResult2UTRA_r9 = { + "MeasResult2UTRA-r9", + "MeasResult2UTRA-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResult2UTRA_r9_tags_1, + sizeof(asn_DEF_MeasResult2UTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResult2UTRA_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResult2UTRA_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResult2UTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResult2UTRA_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResult2UTRA_r9_1, + 2, /* Elements count */ + &asn_SPC_MeasResult2UTRA_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResult2UTRA-r9.h b/lte/rrc/asn/MeasResult2UTRA-r9.h new file mode 100644 index 000000000..c39d8e9d7 --- /dev/null +++ b/lte/rrc/asn/MeasResult2UTRA-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResult2UTRA_r9_H_ +#define _MeasResult2UTRA_r9_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueUTRA.h" +#include "MeasResultListUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResult2UTRA-r9 */ +typedef struct MeasResult2UTRA_r9 { + ARFCN_ValueUTRA_t carrierFreq_r9; + MeasResultListUTRA_t measResultList_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResult2UTRA_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResult2UTRA_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResult2UTRA_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultCDMA2000.c b/lte/rrc/asn/MeasResultCDMA2000.c new file mode 100644 index 000000000..cb89e228a --- /dev/null +++ b/lte/rrc/asn/MeasResultCDMA2000.c @@ -0,0 +1,207 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultCDMA2000.h" + +static int +memb_pilotPnPhase_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 32767)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pilotStrength_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_pilotPnPhase_constr_5 = { + { APC_CONSTRAINED, 15, 15, 0, 32767 } /* (0..32767) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pilotStrength_constr_6 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_measResult_4[] = { + { ATF_POINTER, 1, offsetof(struct MeasResultCDMA2000__measResult, pilotPnPhase), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pilotPnPhase_constraint_4, + &asn_PER_memb_pilotPnPhase_constr_5, + 0, + "pilotPnPhase" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultCDMA2000__measResult, pilotStrength), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pilotStrength_constraint_4, + &asn_PER_memb_pilotStrength_constr_6, + 0, + "pilotStrength" + }, +}; +static int asn_MAP_measResult_oms_4[] = { 0 }; +static ber_tlv_tag_t asn_DEF_measResult_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResult_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pilotPnPhase at 3444 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pilotStrength at 3445 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResult_specs_4 = { + sizeof(struct MeasResultCDMA2000__measResult), + offsetof(struct MeasResultCDMA2000__measResult, _asn_ctx), + asn_MAP_measResult_tag2el_4, + 2, /* Count of tags in the map */ + asn_MAP_measResult_oms_4, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResult_4 = { + "measResult", + "measResult", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResult_tags_4, + sizeof(asn_DEF_measResult_tags_4) + /sizeof(asn_DEF_measResult_tags_4[0]) - 1, /* 1 */ + asn_DEF_measResult_tags_4, /* Same as above */ + sizeof(asn_DEF_measResult_tags_4) + /sizeof(asn_DEF_measResult_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResult_4, + 2, /* Elements count */ + &asn_SPC_measResult_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasResultCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultCDMA2000, physCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultCDMA2000, cgi_Info), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_CellGlobalIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cgi-Info" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultCDMA2000, measResult), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_measResult_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResult" + }, +}; +static int asn_MAP_MeasResultCDMA2000_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_MeasResultCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId at 3441 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cgi-Info at 3442 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* measResult at 3444 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultCDMA2000_specs_1 = { + sizeof(struct MeasResultCDMA2000), + offsetof(struct MeasResultCDMA2000, _asn_ctx), + asn_MAP_MeasResultCDMA2000_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasResultCDMA2000_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultCDMA2000 = { + "MeasResultCDMA2000", + "MeasResultCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultCDMA2000_tags_1, + sizeof(asn_DEF_MeasResultCDMA2000_tags_1) + /sizeof(asn_DEF_MeasResultCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_MeasResultCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultCDMA2000_tags_1) + /sizeof(asn_DEF_MeasResultCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultCDMA2000_1, + 3, /* Elements count */ + &asn_SPC_MeasResultCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultCDMA2000.h b/lte/rrc/asn/MeasResultCDMA2000.h new file mode 100644 index 000000000..a34212be1 --- /dev/null +++ b/lte/rrc/asn/MeasResultCDMA2000.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultCDMA2000_H_ +#define _MeasResultCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellGlobalIdCDMA2000; + +/* MeasResultCDMA2000 */ +typedef struct MeasResultCDMA2000 { + PhysCellIdCDMA2000_t physCellId; + struct CellGlobalIdCDMA2000 *cgi_Info /* OPTIONAL */; + struct MeasResultCDMA2000__measResult { + long *pilotPnPhase /* OPTIONAL */; + long pilotStrength; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResult; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellGlobalIdCDMA2000.h" + +#endif /* _MeasResultCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultEUTRA.c b/lte/rrc/asn/MeasResultEUTRA.c new file mode 100644 index 000000000..74756c10e --- /dev/null +++ b/lte/rrc/asn/MeasResultEUTRA.c @@ -0,0 +1,232 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultEUTRA.h" + +static asn_TYPE_member_t asn_MBR_cgi_Info_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultEUTRA__cgi_Info, cellGlobalId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellGlobalId" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultEUTRA__cgi_Info, trackingAreaCode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TrackingAreaCode, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "trackingAreaCode" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultEUTRA__cgi_Info, plmn_IdentityList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_IdentityList2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-IdentityList" + }, +}; +static int asn_MAP_cgi_Info_oms_3[] = { 2 }; +static ber_tlv_tag_t asn_DEF_cgi_Info_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_cgi_Info_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobalId at 3371 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* trackingAreaCode at 3372 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* plmn-IdentityList at 3373 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cgi_Info_specs_3 = { + sizeof(struct MeasResultEUTRA__cgi_Info), + offsetof(struct MeasResultEUTRA__cgi_Info, _asn_ctx), + asn_MAP_cgi_Info_tag2el_3, + 3, /* Count of tags in the map */ + asn_MAP_cgi_Info_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cgi_Info_3 = { + "cgi-Info", + "cgi-Info", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cgi_Info_tags_3, + sizeof(asn_DEF_cgi_Info_tags_3) + /sizeof(asn_DEF_cgi_Info_tags_3[0]) - 1, /* 1 */ + asn_DEF_cgi_Info_tags_3, /* Same as above */ + sizeof(asn_DEF_cgi_Info_tags_3) + /sizeof(asn_DEF_cgi_Info_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cgi_Info_3, + 3, /* Elements count */ + &asn_SPC_cgi_Info_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResult_7[] = { + { ATF_POINTER, 3, offsetof(struct MeasResultEUTRA__measResult, rsrpResult), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrpResult" + }, + { ATF_POINTER, 2, offsetof(struct MeasResultEUTRA__measResult, rsrqResult), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrqResult" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultEUTRA__measResult, additionalSI_Info_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSI_Info_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "additionalSI-Info-r9" + }, +}; +static int asn_MAP_measResult_oms_7[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_measResult_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResult_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrpResult at 3376 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rsrqResult at 3377 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* additionalSI-Info-r9 at 3378 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResult_specs_7 = { + sizeof(struct MeasResultEUTRA__measResult), + offsetof(struct MeasResultEUTRA__measResult, _asn_ctx), + asn_MAP_measResult_tag2el_7, + 3, /* Count of tags in the map */ + asn_MAP_measResult_oms_7, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResult_7 = { + "measResult", + "measResult", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResult_tags_7, + sizeof(asn_DEF_measResult_tags_7) + /sizeof(asn_DEF_measResult_tags_7[0]) - 1, /* 1 */ + asn_DEF_measResult_tags_7, /* Same as above */ + sizeof(asn_DEF_measResult_tags_7) + /sizeof(asn_DEF_measResult_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResult_7, + 3, /* Elements count */ + &asn_SPC_measResult_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasResultEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultEUTRA, physCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultEUTRA, cgi_Info), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cgi_Info_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cgi-Info" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultEUTRA, measResult), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_measResult_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResult" + }, +}; +static int asn_MAP_MeasResultEUTRA_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_MeasResultEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId at 3369 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cgi-Info at 3371 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* measResult at 3376 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultEUTRA_specs_1 = { + sizeof(struct MeasResultEUTRA), + offsetof(struct MeasResultEUTRA, _asn_ctx), + asn_MAP_MeasResultEUTRA_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasResultEUTRA_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultEUTRA = { + "MeasResultEUTRA", + "MeasResultEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultEUTRA_tags_1, + sizeof(asn_DEF_MeasResultEUTRA_tags_1) + /sizeof(asn_DEF_MeasResultEUTRA_tags_1[0]), /* 1 */ + asn_DEF_MeasResultEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultEUTRA_tags_1) + /sizeof(asn_DEF_MeasResultEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultEUTRA_1, + 3, /* Elements count */ + &asn_SPC_MeasResultEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultEUTRA.h b/lte/rrc/asn/MeasResultEUTRA.h new file mode 100644 index 000000000..421e65bfc --- /dev/null +++ b/lte/rrc/asn/MeasResultEUTRA.h @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultEUTRA_H_ +#define _MeasResultEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellId.h" +#include "CellGlobalIdEUTRA.h" +#include "TrackingAreaCode.h" +#include +#include "RSRP-Range.h" +#include "RSRQ-Range.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PLMN_IdentityList2; +struct AdditionalSI_Info_r9; + +/* MeasResultEUTRA */ +typedef struct MeasResultEUTRA { + PhysCellId_t physCellId; + struct MeasResultEUTRA__cgi_Info { + CellGlobalIdEUTRA_t cellGlobalId; + TrackingAreaCode_t trackingAreaCode; + struct PLMN_IdentityList2 *plmn_IdentityList /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cgi_Info; + struct MeasResultEUTRA__measResult { + RSRP_Range_t *rsrpResult /* OPTIONAL */; + RSRQ_Range_t *rsrqResult /* OPTIONAL */; + struct AdditionalSI_Info_r9 *additionalSI_Info_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResult; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PLMN-IdentityList2.h" +#include "AdditionalSI-Info-r9.h" + +#endif /* _MeasResultEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultForECID-r9.c b/lte/rrc/asn/MeasResultForECID-r9.c new file mode 100644 index 000000000..5113ac287 --- /dev/null +++ b/lte/rrc/asn/MeasResultForECID-r9.c @@ -0,0 +1,136 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultForECID-r9.h" + +static int +memb_ue_RxTxTimeDiffResult_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 4095)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_currentSFN_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 10)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ue_RxTxTimeDiffResult_r9_constr_2 = { + { APC_CONSTRAINED, 12, 12, 0, 4095 } /* (0..4095) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_currentSFN_r9_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 10, 10 } /* (SIZE(10..10)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultForECID_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultForECID_r9, ue_RxTxTimeDiffResult_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ue_RxTxTimeDiffResult_r9_constraint_1, + &asn_PER_memb_ue_RxTxTimeDiffResult_r9_constr_2, + 0, + "ue-RxTxTimeDiffResult-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultForECID_r9, currentSFN_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_currentSFN_r9_constraint_1, + &asn_PER_memb_currentSFN_r9_constr_3, + 0, + "currentSFN-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultForECID_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultForECID_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-RxTxTimeDiffResult-r9 at 3451 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* currentSFN-r9 at 3452 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultForECID_r9_specs_1 = { + sizeof(struct MeasResultForECID_r9), + offsetof(struct MeasResultForECID_r9, _asn_ctx), + asn_MAP_MeasResultForECID_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultForECID_r9 = { + "MeasResultForECID-r9", + "MeasResultForECID-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultForECID_r9_tags_1, + sizeof(asn_DEF_MeasResultForECID_r9_tags_1) + /sizeof(asn_DEF_MeasResultForECID_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResultForECID_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultForECID_r9_tags_1) + /sizeof(asn_DEF_MeasResultForECID_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultForECID_r9_1, + 2, /* Elements count */ + &asn_SPC_MeasResultForECID_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultForECID-r9.h b/lte/rrc/asn/MeasResultForECID-r9.h new file mode 100644 index 000000000..18e13cf6b --- /dev/null +++ b/lte/rrc/asn/MeasResultForECID-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultForECID_r9_H_ +#define _MeasResultForECID_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResultForECID-r9 */ +typedef struct MeasResultForECID_r9 { + long ue_RxTxTimeDiffResult_r9; + BIT_STRING_t currentSFN_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultForECID_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultForECID_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResultForECID_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultGERAN.c b/lte/rrc/asn/MeasResultGERAN.c new file mode 100644 index 000000000..6ee08814a --- /dev/null +++ b/lte/rrc/asn/MeasResultGERAN.c @@ -0,0 +1,276 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultGERAN.h" + +static int +memb_routingAreaCode_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_rssi_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_routingAreaCode_constr_6 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_rssi_constr_8 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cgi_Info_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultGERAN__cgi_Info, cellGlobalId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellGlobalId" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultGERAN__cgi_Info, routingAreaCode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_routingAreaCode_constraint_4, + &asn_PER_memb_routingAreaCode_constr_6, + 0, + "routingAreaCode" + }, +}; +static int asn_MAP_cgi_Info_oms_4[] = { 1 }; +static ber_tlv_tag_t asn_DEF_cgi_Info_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_cgi_Info_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobalId at 3424 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* routingAreaCode at 3425 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cgi_Info_specs_4 = { + sizeof(struct MeasResultGERAN__cgi_Info), + offsetof(struct MeasResultGERAN__cgi_Info, _asn_ctx), + asn_MAP_cgi_Info_tag2el_4, + 2, /* Count of tags in the map */ + asn_MAP_cgi_Info_oms_4, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cgi_Info_4 = { + "cgi-Info", + "cgi-Info", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cgi_Info_tags_4, + sizeof(asn_DEF_cgi_Info_tags_4) + /sizeof(asn_DEF_cgi_Info_tags_4[0]) - 1, /* 1 */ + asn_DEF_cgi_Info_tags_4, /* Same as above */ + sizeof(asn_DEF_cgi_Info_tags_4) + /sizeof(asn_DEF_cgi_Info_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cgi_Info_4, + 2, /* Elements count */ + &asn_SPC_cgi_Info_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResult_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultGERAN__measResult, rssi), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_rssi_constraint_7, + &asn_PER_memb_rssi_constr_8, + 0, + "rssi" + }, +}; +static ber_tlv_tag_t asn_DEF_measResult_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResult_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rssi at 3428 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResult_specs_7 = { + sizeof(struct MeasResultGERAN__measResult), + offsetof(struct MeasResultGERAN__measResult, _asn_ctx), + asn_MAP_measResult_tag2el_7, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResult_7 = { + "measResult", + "measResult", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResult_tags_7, + sizeof(asn_DEF_measResult_tags_7) + /sizeof(asn_DEF_measResult_tags_7[0]) - 1, /* 1 */ + asn_DEF_measResult_tags_7, /* Same as above */ + sizeof(asn_DEF_measResult_tags_7) + /sizeof(asn_DEF_measResult_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResult_7, + 1, /* Elements count */ + &asn_SPC_measResult_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasResultGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultGERAN, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultGERAN, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultGERAN, cgi_Info), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_cgi_Info_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cgi-Info" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultGERAN, measResult), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_measResult_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResult" + }, +}; +static int asn_MAP_MeasResultGERAN_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_MeasResultGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq at 3421 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* physCellId at 3422 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cgi-Info at 3424 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* measResult at 3428 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultGERAN_specs_1 = { + sizeof(struct MeasResultGERAN), + offsetof(struct MeasResultGERAN, _asn_ctx), + asn_MAP_MeasResultGERAN_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_MeasResultGERAN_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultGERAN = { + "MeasResultGERAN", + "MeasResultGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultGERAN_tags_1, + sizeof(asn_DEF_MeasResultGERAN_tags_1) + /sizeof(asn_DEF_MeasResultGERAN_tags_1[0]), /* 1 */ + asn_DEF_MeasResultGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultGERAN_tags_1) + /sizeof(asn_DEF_MeasResultGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultGERAN_1, + 4, /* Elements count */ + &asn_SPC_MeasResultGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultGERAN.h b/lte/rrc/asn/MeasResultGERAN.h new file mode 100644 index 000000000..5a68c51b2 --- /dev/null +++ b/lte/rrc/asn/MeasResultGERAN.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultGERAN_H_ +#define _MeasResultGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "CarrierFreqGERAN.h" +#include "PhysCellIdGERAN.h" +#include "CellGlobalIdGERAN.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResultGERAN */ +typedef struct MeasResultGERAN { + CarrierFreqGERAN_t carrierFreq; + PhysCellIdGERAN_t physCellId; + struct MeasResultGERAN__cgi_Info { + CellGlobalIdGERAN_t cellGlobalId; + BIT_STRING_t *routingAreaCode /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cgi_Info; + struct MeasResultGERAN__measResult { + long rssi; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResult; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResultGERAN_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultList2CDMA2000-r9.c b/lte/rrc/asn/MeasResultList2CDMA2000-r9.c new file mode 100644 index 000000000..54d870acb --- /dev/null +++ b/lte/rrc/asn/MeasResultList2CDMA2000-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultList2CDMA2000-r9.h" + +static asn_per_constraints_t asn_PER_type_MeasResultList2CDMA2000_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultList2CDMA2000_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResult2CDMA2000_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultList2CDMA2000_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultList2CDMA2000_r9_specs_1 = { + sizeof(struct MeasResultList2CDMA2000_r9), + offsetof(struct MeasResultList2CDMA2000_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultList2CDMA2000_r9 = { + "MeasResultList2CDMA2000-r9", + "MeasResultList2CDMA2000-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultList2CDMA2000_r9_tags_1, + sizeof(asn_DEF_MeasResultList2CDMA2000_r9_tags_1) + /sizeof(asn_DEF_MeasResultList2CDMA2000_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResultList2CDMA2000_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultList2CDMA2000_r9_tags_1) + /sizeof(asn_DEF_MeasResultList2CDMA2000_r9_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultList2CDMA2000_r9_constr_1, + asn_MBR_MeasResultList2CDMA2000_r9_1, + 1, /* Single element */ + &asn_SPC_MeasResultList2CDMA2000_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultList2CDMA2000-r9.h b/lte/rrc/asn/MeasResultList2CDMA2000-r9.h new file mode 100644 index 000000000..3da55383c --- /dev/null +++ b/lte/rrc/asn/MeasResultList2CDMA2000-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultList2CDMA2000_r9_H_ +#define _MeasResultList2CDMA2000_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResult2CDMA2000_r9; + +/* MeasResultList2CDMA2000-r9 */ +typedef struct MeasResultList2CDMA2000_r9 { + A_SEQUENCE_OF(struct MeasResult2CDMA2000_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultList2CDMA2000_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultList2CDMA2000_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResult2CDMA2000-r9.h" + +#endif /* _MeasResultList2CDMA2000_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultList2EUTRA-r9.c b/lte/rrc/asn/MeasResultList2EUTRA-r9.c new file mode 100644 index 000000000..0dbd2dae7 --- /dev/null +++ b/lte/rrc/asn/MeasResultList2EUTRA-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultList2EUTRA-r9.h" + +static asn_per_constraints_t asn_PER_type_MeasResultList2EUTRA_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultList2EUTRA_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResult2EUTRA_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultList2EUTRA_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultList2EUTRA_r9_specs_1 = { + sizeof(struct MeasResultList2EUTRA_r9), + offsetof(struct MeasResultList2EUTRA_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultList2EUTRA_r9 = { + "MeasResultList2EUTRA-r9", + "MeasResultList2EUTRA-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultList2EUTRA_r9_tags_1, + sizeof(asn_DEF_MeasResultList2EUTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResultList2EUTRA_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResultList2EUTRA_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultList2EUTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResultList2EUTRA_r9_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultList2EUTRA_r9_constr_1, + asn_MBR_MeasResultList2EUTRA_r9_1, + 1, /* Single element */ + &asn_SPC_MeasResultList2EUTRA_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultList2EUTRA-r9.h b/lte/rrc/asn/MeasResultList2EUTRA-r9.h new file mode 100644 index 000000000..016c8e474 --- /dev/null +++ b/lte/rrc/asn/MeasResultList2EUTRA-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultList2EUTRA_r9_H_ +#define _MeasResultList2EUTRA_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResult2EUTRA_r9; + +/* MeasResultList2EUTRA-r9 */ +typedef struct MeasResultList2EUTRA_r9 { + A_SEQUENCE_OF(struct MeasResult2EUTRA_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultList2EUTRA_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultList2EUTRA_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResult2EUTRA-r9.h" + +#endif /* _MeasResultList2EUTRA_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultList2GERAN-r10.c b/lte/rrc/asn/MeasResultList2GERAN-r10.c new file mode 100644 index 000000000..54b198e9b --- /dev/null +++ b/lte/rrc/asn/MeasResultList2GERAN-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultList2GERAN-r10.h" + +static asn_per_constraints_t asn_PER_type_MeasResultList2GERAN_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultList2GERAN_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResultListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultList2GERAN_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultList2GERAN_r10_specs_1 = { + sizeof(struct MeasResultList2GERAN_r10), + offsetof(struct MeasResultList2GERAN_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultList2GERAN_r10 = { + "MeasResultList2GERAN-r10", + "MeasResultList2GERAN-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultList2GERAN_r10_tags_1, + sizeof(asn_DEF_MeasResultList2GERAN_r10_tags_1) + /sizeof(asn_DEF_MeasResultList2GERAN_r10_tags_1[0]), /* 1 */ + asn_DEF_MeasResultList2GERAN_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultList2GERAN_r10_tags_1) + /sizeof(asn_DEF_MeasResultList2GERAN_r10_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultList2GERAN_r10_constr_1, + asn_MBR_MeasResultList2GERAN_r10_1, + 1, /* Single element */ + &asn_SPC_MeasResultList2GERAN_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultList2GERAN-r10.h b/lte/rrc/asn/MeasResultList2GERAN-r10.h new file mode 100644 index 000000000..95d942185 --- /dev/null +++ b/lte/rrc/asn/MeasResultList2GERAN-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultList2GERAN_r10_H_ +#define _MeasResultList2GERAN_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResultListGERAN; + +/* MeasResultList2GERAN-r10 */ +typedef struct MeasResultList2GERAN_r10 { + A_SEQUENCE_OF(struct MeasResultListGERAN) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultList2GERAN_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultList2GERAN_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultListGERAN.h" + +#endif /* _MeasResultList2GERAN_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultList2UTRA-r9.c b/lte/rrc/asn/MeasResultList2UTRA-r9.c new file mode 100644 index 000000000..8f296946e --- /dev/null +++ b/lte/rrc/asn/MeasResultList2UTRA-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultList2UTRA-r9.h" + +static asn_per_constraints_t asn_PER_type_MeasResultList2UTRA_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultList2UTRA_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResult2UTRA_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultList2UTRA_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultList2UTRA_r9_specs_1 = { + sizeof(struct MeasResultList2UTRA_r9), + offsetof(struct MeasResultList2UTRA_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultList2UTRA_r9 = { + "MeasResultList2UTRA-r9", + "MeasResultList2UTRA-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultList2UTRA_r9_tags_1, + sizeof(asn_DEF_MeasResultList2UTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResultList2UTRA_r9_tags_1[0]), /* 1 */ + asn_DEF_MeasResultList2UTRA_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultList2UTRA_r9_tags_1) + /sizeof(asn_DEF_MeasResultList2UTRA_r9_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultList2UTRA_r9_constr_1, + asn_MBR_MeasResultList2UTRA_r9_1, + 1, /* Single element */ + &asn_SPC_MeasResultList2UTRA_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultList2UTRA-r9.h b/lte/rrc/asn/MeasResultList2UTRA-r9.h new file mode 100644 index 000000000..f5c3c0a55 --- /dev/null +++ b/lte/rrc/asn/MeasResultList2UTRA-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultList2UTRA_r9_H_ +#define _MeasResultList2UTRA_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResult2UTRA_r9; + +/* MeasResultList2UTRA-r9 */ +typedef struct MeasResultList2UTRA_r9 { + A_SEQUENCE_OF(struct MeasResult2UTRA_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultList2UTRA_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultList2UTRA_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResult2UTRA-r9.h" + +#endif /* _MeasResultList2UTRA_r9_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultListCDMA2000.c b/lte/rrc/asn/MeasResultListCDMA2000.c new file mode 100644 index 000000000..b7b652d77 --- /dev/null +++ b/lte/rrc/asn/MeasResultListCDMA2000.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultListCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_MeasResultListCDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultListCDMA2000_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResultCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultListCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultListCDMA2000_specs_1 = { + sizeof(struct MeasResultListCDMA2000), + offsetof(struct MeasResultListCDMA2000, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultListCDMA2000 = { + "MeasResultListCDMA2000", + "MeasResultListCDMA2000", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultListCDMA2000_tags_1, + sizeof(asn_DEF_MeasResultListCDMA2000_tags_1) + /sizeof(asn_DEF_MeasResultListCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_MeasResultListCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultListCDMA2000_tags_1) + /sizeof(asn_DEF_MeasResultListCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultListCDMA2000_constr_1, + asn_MBR_MeasResultListCDMA2000_1, + 1, /* Single element */ + &asn_SPC_MeasResultListCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultListCDMA2000.h b/lte/rrc/asn/MeasResultListCDMA2000.h new file mode 100644 index 000000000..57113afaf --- /dev/null +++ b/lte/rrc/asn/MeasResultListCDMA2000.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultListCDMA2000_H_ +#define _MeasResultListCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResultCDMA2000; + +/* MeasResultListCDMA2000 */ +typedef struct MeasResultListCDMA2000 { + A_SEQUENCE_OF(struct MeasResultCDMA2000) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultListCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultListCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultCDMA2000.h" + +#endif /* _MeasResultListCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultListEUTRA.c b/lte/rrc/asn/MeasResultListEUTRA.c new file mode 100644 index 000000000..8b9aaeb13 --- /dev/null +++ b/lte/rrc/asn/MeasResultListEUTRA.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultListEUTRA.h" + +static asn_per_constraints_t asn_PER_type_MeasResultListEUTRA_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultListEUTRA_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResultEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultListEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultListEUTRA_specs_1 = { + sizeof(struct MeasResultListEUTRA), + offsetof(struct MeasResultListEUTRA, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultListEUTRA = { + "MeasResultListEUTRA", + "MeasResultListEUTRA", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultListEUTRA_tags_1, + sizeof(asn_DEF_MeasResultListEUTRA_tags_1) + /sizeof(asn_DEF_MeasResultListEUTRA_tags_1[0]), /* 1 */ + asn_DEF_MeasResultListEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultListEUTRA_tags_1) + /sizeof(asn_DEF_MeasResultListEUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultListEUTRA_constr_1, + asn_MBR_MeasResultListEUTRA_1, + 1, /* Single element */ + &asn_SPC_MeasResultListEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultListEUTRA.h b/lte/rrc/asn/MeasResultListEUTRA.h new file mode 100644 index 000000000..9492cc574 --- /dev/null +++ b/lte/rrc/asn/MeasResultListEUTRA.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultListEUTRA_H_ +#define _MeasResultListEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResultEUTRA; + +/* MeasResultListEUTRA */ +typedef struct MeasResultListEUTRA { + A_SEQUENCE_OF(struct MeasResultEUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultListEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultListEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultEUTRA.h" + +#endif /* _MeasResultListEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultListGERAN.c b/lte/rrc/asn/MeasResultListGERAN.c new file mode 100644 index 000000000..d59dad910 --- /dev/null +++ b/lte/rrc/asn/MeasResultListGERAN.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultListGERAN.h" + +static asn_per_constraints_t asn_PER_type_MeasResultListGERAN_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultListGERAN_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResultGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultListGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultListGERAN_specs_1 = { + sizeof(struct MeasResultListGERAN), + offsetof(struct MeasResultListGERAN, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultListGERAN = { + "MeasResultListGERAN", + "MeasResultListGERAN", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultListGERAN_tags_1, + sizeof(asn_DEF_MeasResultListGERAN_tags_1) + /sizeof(asn_DEF_MeasResultListGERAN_tags_1[0]), /* 1 */ + asn_DEF_MeasResultListGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultListGERAN_tags_1) + /sizeof(asn_DEF_MeasResultListGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultListGERAN_constr_1, + asn_MBR_MeasResultListGERAN_1, + 1, /* Single element */ + &asn_SPC_MeasResultListGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultListGERAN.h b/lte/rrc/asn/MeasResultListGERAN.h new file mode 100644 index 000000000..1e26d0253 --- /dev/null +++ b/lte/rrc/asn/MeasResultListGERAN.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultListGERAN_H_ +#define _MeasResultListGERAN_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResultGERAN; + +/* MeasResultListGERAN */ +typedef struct MeasResultListGERAN { + A_SEQUENCE_OF(struct MeasResultGERAN) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultListGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultListGERAN; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultGERAN.h" + +#endif /* _MeasResultListGERAN_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultListUTRA.c b/lte/rrc/asn/MeasResultListUTRA.c new file mode 100644 index 000000000..40f9c86f9 --- /dev/null +++ b/lte/rrc/asn/MeasResultListUTRA.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultListUTRA.h" + +static asn_per_constraints_t asn_PER_type_MeasResultListUTRA_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultListUTRA_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResultUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultListUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultListUTRA_specs_1 = { + sizeof(struct MeasResultListUTRA), + offsetof(struct MeasResultListUTRA, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultListUTRA = { + "MeasResultListUTRA", + "MeasResultListUTRA", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultListUTRA_tags_1, + sizeof(asn_DEF_MeasResultListUTRA_tags_1) + /sizeof(asn_DEF_MeasResultListUTRA_tags_1[0]), /* 1 */ + asn_DEF_MeasResultListUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultListUTRA_tags_1) + /sizeof(asn_DEF_MeasResultListUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultListUTRA_constr_1, + asn_MBR_MeasResultListUTRA_1, + 1, /* Single element */ + &asn_SPC_MeasResultListUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultListUTRA.h b/lte/rrc/asn/MeasResultListUTRA.h new file mode 100644 index 000000000..282d3219f --- /dev/null +++ b/lte/rrc/asn/MeasResultListUTRA.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultListUTRA_H_ +#define _MeasResultListUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResultUTRA; + +/* MeasResultListUTRA */ +typedef struct MeasResultListUTRA { + A_SEQUENCE_OF(struct MeasResultUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultListUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultListUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultUTRA.h" + +#endif /* _MeasResultListUTRA_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultServFreq-r10.c b/lte/rrc/asn/MeasResultServFreq-r10.c new file mode 100644 index 000000000..dd77a34a5 --- /dev/null +++ b/lte/rrc/asn/MeasResultServFreq-r10.c @@ -0,0 +1,218 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultServFreq-r10.h" + +static asn_TYPE_member_t asn_MBR_measResultSCell_r10_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultServFreq_r10__measResultSCell_r10, rsrpResultSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrpResultSCell-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultServFreq_r10__measResultSCell_r10, rsrqResultSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrqResultSCell-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_measResultSCell_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultSCell_r10_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrpResultSCell-r10 at 3387 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rsrqResultSCell-r10 at 3389 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultSCell_r10_specs_3 = { + sizeof(struct MeasResultServFreq_r10__measResultSCell_r10), + offsetof(struct MeasResultServFreq_r10__measResultSCell_r10, _asn_ctx), + asn_MAP_measResultSCell_r10_tag2el_3, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultSCell_r10_3 = { + "measResultSCell-r10", + "measResultSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultSCell_r10_tags_3, + sizeof(asn_DEF_measResultSCell_r10_tags_3) + /sizeof(asn_DEF_measResultSCell_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_measResultSCell_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_measResultSCell_r10_tags_3) + /sizeof(asn_DEF_measResultSCell_r10_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultSCell_r10_3, + 2, /* Elements count */ + &asn_SPC_measResultSCell_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResultBestNeighCell_r10_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultServFreq_r10__measResultBestNeighCell_r10, physCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultServFreq_r10__measResultBestNeighCell_r10, rsrpResultNCell_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrpResultNCell-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultServFreq_r10__measResultBestNeighCell_r10, rsrqResultNCell_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrqResultNCell-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_measResultBestNeighCell_r10_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultBestNeighCell_r10_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r10 at 3391 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rsrpResultNCell-r10 at 3392 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* rsrqResultNCell-r10 at 3394 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultBestNeighCell_r10_specs_6 = { + sizeof(struct MeasResultServFreq_r10__measResultBestNeighCell_r10), + offsetof(struct MeasResultServFreq_r10__measResultBestNeighCell_r10, _asn_ctx), + asn_MAP_measResultBestNeighCell_r10_tag2el_6, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultBestNeighCell_r10_6 = { + "measResultBestNeighCell-r10", + "measResultBestNeighCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultBestNeighCell_r10_tags_6, + sizeof(asn_DEF_measResultBestNeighCell_r10_tags_6) + /sizeof(asn_DEF_measResultBestNeighCell_r10_tags_6[0]) - 1, /* 1 */ + asn_DEF_measResultBestNeighCell_r10_tags_6, /* Same as above */ + sizeof(asn_DEF_measResultBestNeighCell_r10_tags_6) + /sizeof(asn_DEF_measResultBestNeighCell_r10_tags_6[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultBestNeighCell_r10_6, + 3, /* Elements count */ + &asn_SPC_measResultBestNeighCell_r10_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasResultServFreq_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultServFreq_r10, servFreqId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ServCellIndex_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "servFreqId-r10" + }, + { ATF_POINTER, 2, offsetof(struct MeasResultServFreq_r10, measResultSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_measResultSCell_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultSCell-r10" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultServFreq_r10, measResultBestNeighCell_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_measResultBestNeighCell_r10_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultBestNeighCell-r10" + }, +}; +static int asn_MAP_MeasResultServFreq_r10_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_MeasResultServFreq_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultServFreq_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* servFreqId-r10 at 3385 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultSCell-r10 at 3387 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* measResultBestNeighCell-r10 at 3391 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultServFreq_r10_specs_1 = { + sizeof(struct MeasResultServFreq_r10), + offsetof(struct MeasResultServFreq_r10, _asn_ctx), + asn_MAP_MeasResultServFreq_r10_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasResultServFreq_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultServFreq_r10 = { + "MeasResultServFreq-r10", + "MeasResultServFreq-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultServFreq_r10_tags_1, + sizeof(asn_DEF_MeasResultServFreq_r10_tags_1) + /sizeof(asn_DEF_MeasResultServFreq_r10_tags_1[0]), /* 1 */ + asn_DEF_MeasResultServFreq_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultServFreq_r10_tags_1) + /sizeof(asn_DEF_MeasResultServFreq_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultServFreq_r10_1, + 3, /* Elements count */ + &asn_SPC_MeasResultServFreq_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultServFreq-r10.h b/lte/rrc/asn/MeasResultServFreq-r10.h new file mode 100644 index 000000000..f01ad66e8 --- /dev/null +++ b/lte/rrc/asn/MeasResultServFreq-r10.h @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultServFreq_r10_H_ +#define _MeasResultServFreq_r10_H_ + + +#include + +/* Including external dependencies */ +#include "ServCellIndex-r10.h" +#include "RSRP-Range.h" +#include "RSRQ-Range.h" +#include +#include "PhysCellId.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResultServFreq-r10 */ +typedef struct MeasResultServFreq_r10 { + ServCellIndex_r10_t servFreqId_r10; + struct MeasResultServFreq_r10__measResultSCell_r10 { + RSRP_Range_t rsrpResultSCell_r10; + RSRQ_Range_t rsrqResultSCell_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *measResultSCell_r10; + struct MeasResultServFreq_r10__measResultBestNeighCell_r10 { + PhysCellId_t physCellId_r10; + RSRP_Range_t rsrpResultNCell_r10; + RSRQ_Range_t rsrqResultNCell_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *measResultBestNeighCell_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultServFreq_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultServFreq_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResultServFreq_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultServFreqList-r10.c b/lte/rrc/asn/MeasResultServFreqList-r10.c new file mode 100644 index 000000000..9edbaa9c4 --- /dev/null +++ b/lte/rrc/asn/MeasResultServFreqList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultServFreqList-r10.h" + +static asn_per_constraints_t asn_PER_type_MeasResultServFreqList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 5 } /* (SIZE(1..5)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasResultServFreqList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_MeasResultServFreq_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultServFreqList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasResultServFreqList_r10_specs_1 = { + sizeof(struct MeasResultServFreqList_r10), + offsetof(struct MeasResultServFreqList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultServFreqList_r10 = { + "MeasResultServFreqList-r10", + "MeasResultServFreqList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultServFreqList_r10_tags_1, + sizeof(asn_DEF_MeasResultServFreqList_r10_tags_1) + /sizeof(asn_DEF_MeasResultServFreqList_r10_tags_1[0]), /* 1 */ + asn_DEF_MeasResultServFreqList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultServFreqList_r10_tags_1) + /sizeof(asn_DEF_MeasResultServFreqList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_MeasResultServFreqList_r10_constr_1, + asn_MBR_MeasResultServFreqList_r10_1, + 1, /* Single element */ + &asn_SPC_MeasResultServFreqList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultServFreqList-r10.h b/lte/rrc/asn/MeasResultServFreqList-r10.h new file mode 100644 index 000000000..053041bd0 --- /dev/null +++ b/lte/rrc/asn/MeasResultServFreqList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultServFreqList_r10_H_ +#define _MeasResultServFreqList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasResultServFreq_r10; + +/* MeasResultServFreqList-r10 */ +typedef struct MeasResultServFreqList_r10 { + A_SEQUENCE_OF(struct MeasResultServFreq_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultServFreqList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultServFreqList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultServFreq-r10.h" + +#endif /* _MeasResultServFreqList_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultUTRA.c b/lte/rrc/asn/MeasResultUTRA.c new file mode 100644 index 000000000..113d8b65c --- /dev/null +++ b/lte/rrc/asn/MeasResultUTRA.c @@ -0,0 +1,437 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultUTRA.h" + +static int +memb_locationAreaCode_constraint_5(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_routingAreaCode_constraint_5(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_utra_RSCP_constraint_10(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -5 && value <= 91)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_utra_EcN0_constraint_10(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 49)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_physCellId_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_locationAreaCode_constr_7 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_routingAreaCode_constr_8 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_utra_RSCP_constr_11 = { + { APC_CONSTRAINED, 7, 7, -5, 91 } /* (-5..91) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_utra_EcN0_constr_12 = { + { APC_CONSTRAINED, 6, 6, 0, 49 } /* (0..49) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_physCellId_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultUTRA__physCellId, choice.fdd), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "fdd" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultUTRA__physCellId, choice.tdd), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tdd" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_physCellId_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* fdd at 3402 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd at 3404 */ +}; +static asn_CHOICE_specifics_t asn_SPC_physCellId_specs_2 = { + sizeof(struct MeasResultUTRA__physCellId), + offsetof(struct MeasResultUTRA__physCellId, _asn_ctx), + offsetof(struct MeasResultUTRA__physCellId, present), + sizeof(((struct MeasResultUTRA__physCellId *)0)->present), + asn_MAP_physCellId_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_physCellId_2 = { + "physCellId", + "physCellId", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_physCellId_constr_2, + asn_MBR_physCellId_2, + 2, /* Elements count */ + &asn_SPC_physCellId_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cgi_Info_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultUTRA__cgi_Info, cellGlobalId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellGlobalId" + }, + { ATF_POINTER, 3, offsetof(struct MeasResultUTRA__cgi_Info, locationAreaCode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_locationAreaCode_constraint_5, + &asn_PER_memb_locationAreaCode_constr_7, + 0, + "locationAreaCode" + }, + { ATF_POINTER, 2, offsetof(struct MeasResultUTRA__cgi_Info, routingAreaCode), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_routingAreaCode_constraint_5, + &asn_PER_memb_routingAreaCode_constr_8, + 0, + "routingAreaCode" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultUTRA__cgi_Info, plmn_IdentityList), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_IdentityList2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-IdentityList" + }, +}; +static int asn_MAP_cgi_Info_oms_5[] = { 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_cgi_Info_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_cgi_Info_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobalId at 3406 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* locationAreaCode at 3407 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* routingAreaCode at 3408 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* plmn-IdentityList at 3409 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cgi_Info_specs_5 = { + sizeof(struct MeasResultUTRA__cgi_Info), + offsetof(struct MeasResultUTRA__cgi_Info, _asn_ctx), + asn_MAP_cgi_Info_tag2el_5, + 4, /* Count of tags in the map */ + asn_MAP_cgi_Info_oms_5, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cgi_Info_5 = { + "cgi-Info", + "cgi-Info", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cgi_Info_tags_5, + sizeof(asn_DEF_cgi_Info_tags_5) + /sizeof(asn_DEF_cgi_Info_tags_5[0]) - 1, /* 1 */ + asn_DEF_cgi_Info_tags_5, /* Same as above */ + sizeof(asn_DEF_cgi_Info_tags_5) + /sizeof(asn_DEF_cgi_Info_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cgi_Info_5, + 4, /* Elements count */ + &asn_SPC_cgi_Info_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResult_10[] = { + { ATF_POINTER, 3, offsetof(struct MeasResultUTRA__measResult, utra_RSCP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_utra_RSCP_constraint_10, + &asn_PER_memb_utra_RSCP_constr_11, + 0, + "utra-RSCP" + }, + { ATF_POINTER, 2, offsetof(struct MeasResultUTRA__measResult, utra_EcN0), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_utra_EcN0_constraint_10, + &asn_PER_memb_utra_EcN0_constr_12, + 0, + "utra-EcN0" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultUTRA__measResult, additionalSI_Info_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSI_Info_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "additionalSI-Info-r9" + }, +}; +static int asn_MAP_measResult_oms_10[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_measResult_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResult_tag2el_10[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* utra-RSCP at 3412 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* utra-EcN0 at 3413 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* additionalSI-Info-r9 at 3414 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResult_specs_10 = { + sizeof(struct MeasResultUTRA__measResult), + offsetof(struct MeasResultUTRA__measResult, _asn_ctx), + asn_MAP_measResult_tag2el_10, + 3, /* Count of tags in the map */ + asn_MAP_measResult_oms_10, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResult_10 = { + "measResult", + "measResult", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResult_tags_10, + sizeof(asn_DEF_measResult_tags_10) + /sizeof(asn_DEF_measResult_tags_10[0]) - 1, /* 1 */ + asn_DEF_measResult_tags_10, /* Same as above */ + sizeof(asn_DEF_measResult_tags_10) + /sizeof(asn_DEF_measResult_tags_10[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResult_10, + 3, /* Elements count */ + &asn_SPC_measResult_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasResultUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultUTRA, physCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_physCellId_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_POINTER, 1, offsetof(struct MeasResultUTRA, cgi_Info), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cgi_Info_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cgi-Info" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultUTRA, measResult), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_measResult_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResult" + }, +}; +static int asn_MAP_MeasResultUTRA_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_MeasResultUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId at 3402 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cgi-Info at 3406 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* measResult at 3412 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultUTRA_specs_1 = { + sizeof(struct MeasResultUTRA), + offsetof(struct MeasResultUTRA, _asn_ctx), + asn_MAP_MeasResultUTRA_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MeasResultUTRA_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultUTRA = { + "MeasResultUTRA", + "MeasResultUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultUTRA_tags_1, + sizeof(asn_DEF_MeasResultUTRA_tags_1) + /sizeof(asn_DEF_MeasResultUTRA_tags_1[0]), /* 1 */ + asn_DEF_MeasResultUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultUTRA_tags_1) + /sizeof(asn_DEF_MeasResultUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultUTRA_1, + 3, /* Elements count */ + &asn_SPC_MeasResultUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultUTRA.h b/lte/rrc/asn/MeasResultUTRA.h new file mode 100644 index 000000000..d0c3510a1 --- /dev/null +++ b/lte/rrc/asn/MeasResultUTRA.h @@ -0,0 +1,84 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultUTRA_H_ +#define _MeasResultUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdUTRA-FDD.h" +#include "PhysCellIdUTRA-TDD.h" +#include +#include "CellGlobalIdUTRA.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasResultUTRA__physCellId_PR { + MeasResultUTRA__physCellId_PR_NOTHING, /* No components present */ + MeasResultUTRA__physCellId_PR_fdd, + MeasResultUTRA__physCellId_PR_tdd +} MeasResultUTRA__physCellId_PR; + +/* Forward declarations */ +struct PLMN_IdentityList2; +struct AdditionalSI_Info_r9; + +/* MeasResultUTRA */ +typedef struct MeasResultUTRA { + struct MeasResultUTRA__physCellId { + MeasResultUTRA__physCellId_PR present; + union MeasResultUTRA__physCellId_u { + PhysCellIdUTRA_FDD_t fdd; + PhysCellIdUTRA_TDD_t tdd; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } physCellId; + struct MeasResultUTRA__cgi_Info { + CellGlobalIdUTRA_t cellGlobalId; + BIT_STRING_t *locationAreaCode /* OPTIONAL */; + BIT_STRING_t *routingAreaCode /* OPTIONAL */; + struct PLMN_IdentityList2 *plmn_IdentityList /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cgi_Info; + struct MeasResultUTRA__measResult { + long *utra_RSCP /* OPTIONAL */; + long *utra_EcN0 /* OPTIONAL */; + struct AdditionalSI_Info_r9 *additionalSI_Info_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResult; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PLMN-IdentityList2.h" +#include "AdditionalSI-Info-r9.h" + +#endif /* _MeasResultUTRA_H_ */ +#include diff --git a/lte/rrc/asn/MeasResults.c b/lte/rrc/asn/MeasResults.c new file mode 100644 index 000000000..3b0948776 --- /dev/null +++ b/lte/rrc/asn/MeasResults.c @@ -0,0 +1,258 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResults.h" + +static asn_per_constraints_t asn_PER_type_measResultNeighCells_constr_6 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_measResultPCell_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResults__measResultPCell, rsrpResult), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrpResult" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResults__measResultPCell, rsrqResult), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrqResult" + }, +}; +static ber_tlv_tag_t asn_DEF_measResultPCell_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultPCell_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrpResult at 3351 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rsrqResult at 3353 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultPCell_specs_3 = { + sizeof(struct MeasResults__measResultPCell), + offsetof(struct MeasResults__measResultPCell, _asn_ctx), + asn_MAP_measResultPCell_tag2el_3, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultPCell_3 = { + "measResultPCell", + "measResultPCell", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultPCell_tags_3, + sizeof(asn_DEF_measResultPCell_tags_3) + /sizeof(asn_DEF_measResultPCell_tags_3[0]) - 1, /* 1 */ + asn_DEF_measResultPCell_tags_3, /* Same as above */ + sizeof(asn_DEF_measResultPCell_tags_3) + /sizeof(asn_DEF_measResultPCell_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultPCell_3, + 2, /* Elements count */ + &asn_SPC_measResultPCell_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResultNeighCells_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResults__measResultNeighCells, choice.measResultListEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListEUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResults__measResultNeighCells, choice.measResultListUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResults__measResultNeighCells, choice.measResultListGERAN), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListGERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResults__measResultNeighCells, choice.measResultsCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultsCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultsCDMA2000" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_measResultNeighCells_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measResultListEUTRA at 3355 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultListUTRA at 3356 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measResultListGERAN at 3357 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* measResultsCDMA2000 at 3358 */ +}; +static asn_CHOICE_specifics_t asn_SPC_measResultNeighCells_specs_6 = { + sizeof(struct MeasResults__measResultNeighCells), + offsetof(struct MeasResults__measResultNeighCells, _asn_ctx), + offsetof(struct MeasResults__measResultNeighCells, present), + sizeof(((struct MeasResults__measResultNeighCells *)0)->present), + asn_MAP_measResultNeighCells_tag2el_6, + 4, /* Count of tags in the map */ + 0, + 4 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultNeighCells_6 = { + "measResultNeighCells", + "measResultNeighCells", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_measResultNeighCells_constr_6, + asn_MBR_measResultNeighCells_6, + 4, /* Elements count */ + &asn_SPC_measResultNeighCells_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasResults_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResults, measId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measId" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResults, measResultPCell), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_measResultPCell_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultPCell" + }, + { ATF_POINTER, 4, offsetof(struct MeasResults, measResultNeighCells), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_measResultNeighCells_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultNeighCells" + }, + { ATF_POINTER, 3, offsetof(struct MeasResults, measResultForECID_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultForECID_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultForECID-r9" + }, + { ATF_POINTER, 2, offsetof(struct MeasResults, locationInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LocationInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "locationInfo-r10" + }, + { ATF_POINTER, 1, offsetof(struct MeasResults, measResultServFreqList_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultServFreqList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultServFreqList-r10" + }, +}; +static int asn_MAP_MeasResults_oms_1[] = { 2, 3, 4, 5 }; +static ber_tlv_tag_t asn_DEF_MeasResults_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResults_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measId at 3349 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultPCell at 3351 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measResultNeighCells at 3355 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* measResultForECID-r9 at 3361 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* locationInfo-r10 at 3362 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* measResultServFreqList-r10 at 3363 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResults_specs_1 = { + sizeof(struct MeasResults), + offsetof(struct MeasResults, _asn_ctx), + asn_MAP_MeasResults_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_MeasResults_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResults = { + "MeasResults", + "MeasResults", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResults_tags_1, + sizeof(asn_DEF_MeasResults_tags_1) + /sizeof(asn_DEF_MeasResults_tags_1[0]), /* 1 */ + asn_DEF_MeasResults_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResults_tags_1) + /sizeof(asn_DEF_MeasResults_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResults_1, + 6, /* Elements count */ + &asn_SPC_MeasResults_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResults.h b/lte/rrc/asn/MeasResults.h new file mode 100644 index 000000000..fe12f25fd --- /dev/null +++ b/lte/rrc/asn/MeasResults.h @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResults_H_ +#define _MeasResults_H_ + + +#include + +/* Including external dependencies */ +#include "MeasId.h" +#include "RSRP-Range.h" +#include "RSRQ-Range.h" +#include +#include "MeasResultListEUTRA.h" +#include "MeasResultListUTRA.h" +#include "MeasResultListGERAN.h" +#include "MeasResultsCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasResults__measResultNeighCells_PR { + MeasResults__measResultNeighCells_PR_NOTHING, /* No components present */ + MeasResults__measResultNeighCells_PR_measResultListEUTRA, + MeasResults__measResultNeighCells_PR_measResultListUTRA, + MeasResults__measResultNeighCells_PR_measResultListGERAN, + MeasResults__measResultNeighCells_PR_measResultsCDMA2000, + /* Extensions may appear below */ + +} MeasResults__measResultNeighCells_PR; + +/* Forward declarations */ +struct MeasResultForECID_r9; +struct LocationInfo_r10; +struct MeasResultServFreqList_r10; + +/* MeasResults */ +typedef struct MeasResults { + MeasId_t measId; + struct MeasResults__measResultPCell { + RSRP_Range_t rsrpResult; + RSRQ_Range_t rsrqResult; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResultPCell; + struct MeasResults__measResultNeighCells { + MeasResults__measResultNeighCells_PR present; + union MeasResults__measResultNeighCells_u { + MeasResultListEUTRA_t measResultListEUTRA; + MeasResultListUTRA_t measResultListUTRA; + MeasResultListGERAN_t measResultListGERAN; + MeasResultsCDMA2000_t measResultsCDMA2000; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *measResultNeighCells; + struct MeasResultForECID_r9 *measResultForECID_r9 /* OPTIONAL */; + struct LocationInfo_r10 *locationInfo_r10 /* OPTIONAL */; + struct MeasResultServFreqList_r10 *measResultServFreqList_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResults_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResults; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasResultForECID-r9.h" +#include "LocationInfo-r10.h" +#include "MeasResultServFreqList-r10.h" + +#endif /* _MeasResults_H_ */ +#include diff --git a/lte/rrc/asn/MeasResultsCDMA2000.c b/lte/rrc/asn/MeasResultsCDMA2000.c new file mode 100644 index 000000000..5263d53a0 --- /dev/null +++ b/lte/rrc/asn/MeasResultsCDMA2000.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasResultsCDMA2000.h" + +static asn_TYPE_member_t asn_MBR_MeasResultsCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasResultsCDMA2000, preRegistrationStatusHRPD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preRegistrationStatusHRPD" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasResultsCDMA2000, measResultListCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListCDMA2000" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasResultsCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasResultsCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* preRegistrationStatusHRPD at 3434 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measResultListCDMA2000 at 3436 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasResultsCDMA2000_specs_1 = { + sizeof(struct MeasResultsCDMA2000), + offsetof(struct MeasResultsCDMA2000, _asn_ctx), + asn_MAP_MeasResultsCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasResultsCDMA2000 = { + "MeasResultsCDMA2000", + "MeasResultsCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasResultsCDMA2000_tags_1, + sizeof(asn_DEF_MeasResultsCDMA2000_tags_1) + /sizeof(asn_DEF_MeasResultsCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_MeasResultsCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasResultsCDMA2000_tags_1) + /sizeof(asn_DEF_MeasResultsCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasResultsCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_MeasResultsCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasResultsCDMA2000.h b/lte/rrc/asn/MeasResultsCDMA2000.h new file mode 100644 index 000000000..37d80714c --- /dev/null +++ b/lte/rrc/asn/MeasResultsCDMA2000.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasResultsCDMA2000_H_ +#define _MeasResultsCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include "MeasResultListCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasResultsCDMA2000 */ +typedef struct MeasResultsCDMA2000 { + BOOLEAN_t preRegistrationStatusHRPD; + MeasResultListCDMA2000_t measResultListCDMA2000; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasResultsCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasResultsCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasResultsCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/MeasSubframeCellList-r10.c b/lte/rrc/asn/MeasSubframeCellList-r10.c new file mode 100644 index 000000000..d2136167a --- /dev/null +++ b/lte/rrc/asn/MeasSubframeCellList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasSubframeCellList-r10.h" + +static asn_per_constraints_t asn_PER_type_MeasSubframeCellList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasSubframeCellList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PhysCellIdRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasSubframeCellList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_MeasSubframeCellList_r10_specs_1 = { + sizeof(struct MeasSubframeCellList_r10), + offsetof(struct MeasSubframeCellList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasSubframeCellList_r10 = { + "MeasSubframeCellList-r10", + "MeasSubframeCellList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasSubframeCellList_r10_tags_1, + sizeof(asn_DEF_MeasSubframeCellList_r10_tags_1) + /sizeof(asn_DEF_MeasSubframeCellList_r10_tags_1[0]), /* 1 */ + asn_DEF_MeasSubframeCellList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasSubframeCellList_r10_tags_1) + /sizeof(asn_DEF_MeasSubframeCellList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_MeasSubframeCellList_r10_constr_1, + asn_MBR_MeasSubframeCellList_r10_1, + 1, /* Single element */ + &asn_SPC_MeasSubframeCellList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasSubframeCellList-r10.h b/lte/rrc/asn/MeasSubframeCellList-r10.h new file mode 100644 index 000000000..6902f1f97 --- /dev/null +++ b/lte/rrc/asn/MeasSubframeCellList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasSubframeCellList_r10_H_ +#define _MeasSubframeCellList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysCellIdRange; + +/* MeasSubframeCellList-r10 */ +typedef struct MeasSubframeCellList_r10 { + A_SEQUENCE_OF(struct PhysCellIdRange) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasSubframeCellList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasSubframeCellList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysCellIdRange.h" + +#endif /* _MeasSubframeCellList_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasSubframePattern-r10.c b/lte/rrc/asn/MeasSubframePattern-r10.c new file mode 100644 index 000000000..44c704e7b --- /dev/null +++ b/lte/rrc/asn/MeasSubframePattern-r10.c @@ -0,0 +1,288 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasSubframePattern-r10.h" + +static int +memb_subframeConfig1_5_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 20)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_subframeConfig0_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 70)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_subframeConfig6_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 60)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_subframePatternFDD_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 40)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_subframeConfig1_5_r10_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 20, 20 } /* (SIZE(20..20)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_subframeConfig0_r10_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 70, 70 } /* (SIZE(70..70)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_subframeConfig6_r10_constr_6 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 60, 60 } /* (SIZE(60..60)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_subframePatternTDD_r10_constr_3 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_subframePatternFDD_r10_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 40, 40 } /* (SIZE(40..40)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_MeasSubframePattern_r10_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_subframePatternTDD_r10_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePattern_r10__subframePatternTDD_r10, choice.subframeConfig1_5_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_subframeConfig1_5_r10_constraint_3, + &asn_PER_memb_subframeConfig1_5_r10_constr_4, + 0, + "subframeConfig1-5-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePattern_r10__subframePatternTDD_r10, choice.subframeConfig0_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_subframeConfig0_r10_constraint_3, + &asn_PER_memb_subframeConfig0_r10_constr_5, + 0, + "subframeConfig0-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePattern_r10__subframePatternTDD_r10, choice.subframeConfig6_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_subframeConfig6_r10_constraint_3, + &asn_PER_memb_subframeConfig6_r10_constr_6, + 0, + "subframeConfig6-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_subframePatternTDD_r10_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeConfig1-5-r10 at 3668 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* subframeConfig0-r10 at 3669 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* subframeConfig6-r10 at 3670 */ +}; +static asn_CHOICE_specifics_t asn_SPC_subframePatternTDD_r10_specs_3 = { + sizeof(struct MeasSubframePattern_r10__subframePatternTDD_r10), + offsetof(struct MeasSubframePattern_r10__subframePatternTDD_r10, _asn_ctx), + offsetof(struct MeasSubframePattern_r10__subframePatternTDD_r10, present), + sizeof(((struct MeasSubframePattern_r10__subframePatternTDD_r10 *)0)->present), + asn_MAP_subframePatternTDD_r10_tag2el_3, + 3, /* Count of tags in the map */ + 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_subframePatternTDD_r10_3 = { + "subframePatternTDD-r10", + "subframePatternTDD-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_subframePatternTDD_r10_constr_3, + asn_MBR_subframePatternTDD_r10_3, + 3, /* Elements count */ + &asn_SPC_subframePatternTDD_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasSubframePattern_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePattern_r10, choice.subframePatternFDD_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_subframePatternFDD_r10_constraint_1, + &asn_PER_memb_subframePatternFDD_r10_constr_2, + 0, + "subframePatternFDD-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePattern_r10, choice.subframePatternTDD_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_subframePatternTDD_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "subframePatternTDD-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_MeasSubframePattern_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframePatternFDD-r10 at 3666 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* subframePatternTDD-r10 at 3668 */ +}; +static asn_CHOICE_specifics_t asn_SPC_MeasSubframePattern_r10_specs_1 = { + sizeof(struct MeasSubframePattern_r10), + offsetof(struct MeasSubframePattern_r10, _asn_ctx), + offsetof(struct MeasSubframePattern_r10, present), + sizeof(((struct MeasSubframePattern_r10 *)0)->present), + asn_MAP_MeasSubframePattern_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasSubframePattern_r10 = { + "MeasSubframePattern-r10", + "MeasSubframePattern-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_MeasSubframePattern_r10_constr_1, + asn_MBR_MeasSubframePattern_r10_1, + 2, /* Elements count */ + &asn_SPC_MeasSubframePattern_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasSubframePattern-r10.h b/lte/rrc/asn/MeasSubframePattern-r10.h new file mode 100644 index 000000000..2ca60c07f --- /dev/null +++ b/lte/rrc/asn/MeasSubframePattern-r10.h @@ -0,0 +1,77 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasSubframePattern_r10_H_ +#define _MeasSubframePattern_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasSubframePattern_r10_PR { + MeasSubframePattern_r10_PR_NOTHING, /* No components present */ + MeasSubframePattern_r10_PR_subframePatternFDD_r10, + MeasSubframePattern_r10_PR_subframePatternTDD_r10, + /* Extensions may appear below */ + +} MeasSubframePattern_r10_PR; +typedef enum MeasSubframePattern_r10__subframePatternTDD_r10_PR { + MeasSubframePattern_r10__subframePatternTDD_r10_PR_NOTHING, /* No components present */ + MeasSubframePattern_r10__subframePatternTDD_r10_PR_subframeConfig1_5_r10, + MeasSubframePattern_r10__subframePatternTDD_r10_PR_subframeConfig0_r10, + MeasSubframePattern_r10__subframePatternTDD_r10_PR_subframeConfig6_r10, + /* Extensions may appear below */ + +} MeasSubframePattern_r10__subframePatternTDD_r10_PR; + +/* MeasSubframePattern-r10 */ +typedef struct MeasSubframePattern_r10 { + MeasSubframePattern_r10_PR present; + union MeasSubframePattern_r10_u { + BIT_STRING_t subframePatternFDD_r10; + struct MeasSubframePattern_r10__subframePatternTDD_r10 { + MeasSubframePattern_r10__subframePatternTDD_r10_PR present; + union MeasSubframePattern_r10__subframePatternTDD_r10_u { + BIT_STRING_t subframeConfig1_5_r10; + BIT_STRING_t subframeConfig0_r10; + BIT_STRING_t subframeConfig6_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } subframePatternTDD_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasSubframePattern_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasSubframePattern_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasSubframePattern_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.c b/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.c new file mode 100644 index 000000000..4ba7f6c81 --- /dev/null +++ b/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.c @@ -0,0 +1,136 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasSubframePatternConfigNeigh-r10.h" + +static asn_per_constraints_t asn_PER_type_MeasSubframePatternConfigNeigh_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePatternConfigNeigh_r10__setup, measSubframePatternNeigh_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasSubframePattern_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measSubframePatternNeigh-r10" + }, + { ATF_POINTER, 1, offsetof(struct MeasSubframePatternConfigNeigh_r10__setup, measSubframeCellList_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasSubframeCellList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measSubframeCellList-r10" + }, +}; +static int asn_MAP_setup_oms_3[] = { 1 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measSubframePatternNeigh-r10 at 3281 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measSubframeCellList-r10 at 3282 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct MeasSubframePatternConfigNeigh_r10__setup), + offsetof(struct MeasSubframePatternConfigNeigh_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 2, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasSubframePatternConfigNeigh_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePatternConfigNeigh_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePatternConfigNeigh_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_MeasSubframePatternConfigNeigh_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 3279 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 3281 */ +}; +static asn_CHOICE_specifics_t asn_SPC_MeasSubframePatternConfigNeigh_r10_specs_1 = { + sizeof(struct MeasSubframePatternConfigNeigh_r10), + offsetof(struct MeasSubframePatternConfigNeigh_r10, _asn_ctx), + offsetof(struct MeasSubframePatternConfigNeigh_r10, present), + sizeof(((struct MeasSubframePatternConfigNeigh_r10 *)0)->present), + asn_MAP_MeasSubframePatternConfigNeigh_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasSubframePatternConfigNeigh_r10 = { + "MeasSubframePatternConfigNeigh-r10", + "MeasSubframePatternConfigNeigh-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_MeasSubframePatternConfigNeigh_r10_constr_1, + asn_MBR_MeasSubframePatternConfigNeigh_r10_1, + 2, /* Elements count */ + &asn_SPC_MeasSubframePatternConfigNeigh_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h b/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h new file mode 100644 index 000000000..e64876495 --- /dev/null +++ b/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasSubframePatternConfigNeigh_r10_H_ +#define _MeasSubframePatternConfigNeigh_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include "MeasSubframePattern-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasSubframePatternConfigNeigh_r10_PR { + MeasSubframePatternConfigNeigh_r10_PR_NOTHING, /* No components present */ + MeasSubframePatternConfigNeigh_r10_PR_release, + MeasSubframePatternConfigNeigh_r10_PR_setup +} MeasSubframePatternConfigNeigh_r10_PR; + +/* Forward declarations */ +struct MeasSubframeCellList_r10; + +/* MeasSubframePatternConfigNeigh-r10 */ +typedef struct MeasSubframePatternConfigNeigh_r10 { + MeasSubframePatternConfigNeigh_r10_PR present; + union MeasSubframePatternConfigNeigh_r10_u { + NULL_t release; + struct MeasSubframePatternConfigNeigh_r10__setup { + MeasSubframePattern_r10_t measSubframePatternNeigh_r10; + struct MeasSubframeCellList_r10 *measSubframeCellList_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasSubframePatternConfigNeigh_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasSubframePatternConfigNeigh_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasSubframeCellList-r10.h" + +#endif /* _MeasSubframePatternConfigNeigh_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasSubframePatternPCell-r10.c b/lte/rrc/asn/MeasSubframePatternPCell-r10.c new file mode 100644 index 000000000..b3126ec57 --- /dev/null +++ b/lte/rrc/asn/MeasSubframePatternPCell-r10.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasSubframePatternPCell-r10.h" + +static asn_per_constraints_t asn_PER_type_MeasSubframePatternPCell_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_MeasSubframePatternPCell_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePatternPCell_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasSubframePatternPCell_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasSubframePattern_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_MeasSubframePatternPCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2506 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2508 */ +}; +static asn_CHOICE_specifics_t asn_SPC_MeasSubframePatternPCell_r10_specs_1 = { + sizeof(struct MeasSubframePatternPCell_r10), + offsetof(struct MeasSubframePatternPCell_r10, _asn_ctx), + offsetof(struct MeasSubframePatternPCell_r10, present), + sizeof(((struct MeasSubframePatternPCell_r10 *)0)->present), + asn_MAP_MeasSubframePatternPCell_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasSubframePatternPCell_r10 = { + "MeasSubframePatternPCell-r10", + "MeasSubframePatternPCell-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_MeasSubframePatternPCell_r10_constr_1, + asn_MBR_MeasSubframePatternPCell_r10_1, + 2, /* Elements count */ + &asn_SPC_MeasSubframePatternPCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasSubframePatternPCell-r10.h b/lte/rrc/asn/MeasSubframePatternPCell-r10.h new file mode 100644 index 000000000..00c55e5d2 --- /dev/null +++ b/lte/rrc/asn/MeasSubframePatternPCell-r10.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasSubframePatternPCell_r10_H_ +#define _MeasSubframePatternPCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include "MeasSubframePattern-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasSubframePatternPCell_r10_PR { + MeasSubframePatternPCell_r10_PR_NOTHING, /* No components present */ + MeasSubframePatternPCell_r10_PR_release, + MeasSubframePatternPCell_r10_PR_setup +} MeasSubframePatternPCell_r10_PR; + +/* MeasSubframePatternPCell-r10 */ +typedef struct MeasSubframePatternPCell_r10 { + MeasSubframePatternPCell_r10_PR present; + union MeasSubframePatternPCell_r10_u { + NULL_t release; + MeasSubframePattern_r10_t setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasSubframePatternPCell_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasSubframePatternPCell_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasSubframePatternPCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/MeasurementReport-r8-IEs.c b/lte/rrc/asn/MeasurementReport-r8-IEs.c new file mode 100644 index 000000000..6272aee4c --- /dev/null +++ b/lte/rrc/asn/MeasurementReport-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasurementReport-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_MeasurementReport_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport_r8_IEs, measResults), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResults, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResults" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementReport_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementReport_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MeasurementReport_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_MeasurementReport_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasurementReport_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measResults at 423 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 424 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasurementReport_r8_IEs_specs_1 = { + sizeof(struct MeasurementReport_r8_IEs), + offsetof(struct MeasurementReport_r8_IEs, _asn_ctx), + asn_MAP_MeasurementReport_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MeasurementReport_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementReport_r8_IEs = { + "MeasurementReport-r8-IEs", + "MeasurementReport-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasurementReport_r8_IEs_tags_1, + sizeof(asn_DEF_MeasurementReport_r8_IEs_tags_1) + /sizeof(asn_DEF_MeasurementReport_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_MeasurementReport_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementReport_r8_IEs_tags_1) + /sizeof(asn_DEF_MeasurementReport_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasurementReport_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_MeasurementReport_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasurementReport-r8-IEs.h b/lte/rrc/asn/MeasurementReport-r8-IEs.h new file mode 100644 index 000000000..104eea939 --- /dev/null +++ b/lte/rrc/asn/MeasurementReport-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasurementReport_r8_IEs_H_ +#define _MeasurementReport_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "MeasResults.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasurementReport_v8a0_IEs; + +/* MeasurementReport-r8-IEs */ +typedef struct MeasurementReport_r8_IEs { + MeasResults_t measResults; + struct MeasurementReport_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementReport_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementReport_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasurementReport-v8a0-IEs.h" + +#endif /* _MeasurementReport_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MeasurementReport-v8a0-IEs.c b/lte/rrc/asn/MeasurementReport-v8a0-IEs.c new file mode 100644 index 000000000..7a310d795 --- /dev/null +++ b/lte/rrc/asn/MeasurementReport-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasurementReport-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct MeasurementReport_v8a0_IEs__nonCriticalExtension), + offsetof(struct MeasurementReport_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasurementReport_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct MeasurementReport_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct MeasurementReport_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MeasurementReport_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_MeasurementReport_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasurementReport_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 428 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 429 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasurementReport_v8a0_IEs_specs_1 = { + sizeof(struct MeasurementReport_v8a0_IEs), + offsetof(struct MeasurementReport_v8a0_IEs, _asn_ctx), + asn_MAP_MeasurementReport_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MeasurementReport_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementReport_v8a0_IEs = { + "MeasurementReport-v8a0-IEs", + "MeasurementReport-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasurementReport_v8a0_IEs_tags_1, + sizeof(asn_DEF_MeasurementReport_v8a0_IEs_tags_1) + /sizeof(asn_DEF_MeasurementReport_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_MeasurementReport_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementReport_v8a0_IEs_tags_1) + /sizeof(asn_DEF_MeasurementReport_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasurementReport_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_MeasurementReport_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasurementReport-v8a0-IEs.h b/lte/rrc/asn/MeasurementReport-v8a0-IEs.h new file mode 100644 index 000000000..e40c9e7ca --- /dev/null +++ b/lte/rrc/asn/MeasurementReport-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasurementReport_v8a0_IEs_H_ +#define _MeasurementReport_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MeasurementReport-v8a0-IEs */ +typedef struct MeasurementReport_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct MeasurementReport_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementReport_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementReport_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementReport_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MeasurementReport.c b/lte/rrc/asn/MeasurementReport.c new file mode 100644 index 000000000..6168465dd --- /dev/null +++ b/lte/rrc/asn/MeasurementReport.c @@ -0,0 +1,284 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MeasurementReport.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.measurementReport_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementReport_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measurementReport-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measurementReport-r8 at 413 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 at 414 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 at 415 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 at 415 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 at 415 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 at 416 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 at 416 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 at 416 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct MeasurementReport__criticalExtensions__c1), + offsetof(struct MeasurementReport__criticalExtensions__c1, _asn_ctx), + offsetof(struct MeasurementReport__criticalExtensions__c1, present), + sizeof(((struct MeasurementReport__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 8, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_12 = { + sizeof(struct MeasurementReport__criticalExtensions__criticalExtensionsFuture), + offsetof(struct MeasurementReport__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_12 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_12, + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_12, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 413 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 418 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct MeasurementReport__criticalExtensions), + offsetof(struct MeasurementReport__criticalExtensions, _asn_ctx), + offsetof(struct MeasurementReport__criticalExtensions, present), + sizeof(((struct MeasurementReport__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MeasurementReport_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MeasurementReport, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_MeasurementReport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MeasurementReport_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 417 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MeasurementReport_specs_1 = { + sizeof(struct MeasurementReport), + offsetof(struct MeasurementReport, _asn_ctx), + asn_MAP_MeasurementReport_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MeasurementReport = { + "MeasurementReport", + "MeasurementReport", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MeasurementReport_tags_1, + sizeof(asn_DEF_MeasurementReport_tags_1) + /sizeof(asn_DEF_MeasurementReport_tags_1[0]), /* 1 */ + asn_DEF_MeasurementReport_tags_1, /* Same as above */ + sizeof(asn_DEF_MeasurementReport_tags_1) + /sizeof(asn_DEF_MeasurementReport_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MeasurementReport_1, + 1, /* Elements count */ + &asn_SPC_MeasurementReport_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MeasurementReport.h b/lte/rrc/asn/MeasurementReport.h new file mode 100644 index 000000000..cd49bd677 --- /dev/null +++ b/lte/rrc/asn/MeasurementReport.h @@ -0,0 +1,86 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MeasurementReport_H_ +#define _MeasurementReport_H_ + + +#include + +/* Including external dependencies */ +#include "MeasurementReport-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MeasurementReport__criticalExtensions_PR { + MeasurementReport__criticalExtensions_PR_NOTHING, /* No components present */ + MeasurementReport__criticalExtensions_PR_c1, + MeasurementReport__criticalExtensions_PR_criticalExtensionsFuture +} MeasurementReport__criticalExtensions_PR; +typedef enum MeasurementReport__criticalExtensions__c1_PR { + MeasurementReport__criticalExtensions__c1_PR_NOTHING, /* No components present */ + MeasurementReport__criticalExtensions__c1_PR_measurementReport_r8, + MeasurementReport__criticalExtensions__c1_PR_spare7, + MeasurementReport__criticalExtensions__c1_PR_spare6, + MeasurementReport__criticalExtensions__c1_PR_spare5, + MeasurementReport__criticalExtensions__c1_PR_spare4, + MeasurementReport__criticalExtensions__c1_PR_spare3, + MeasurementReport__criticalExtensions__c1_PR_spare2, + MeasurementReport__criticalExtensions__c1_PR_spare1 +} MeasurementReport__criticalExtensions__c1_PR; + +/* MeasurementReport */ +typedef struct MeasurementReport { + struct MeasurementReport__criticalExtensions { + MeasurementReport__criticalExtensions_PR present; + union MeasurementReport__criticalExtensions_u { + struct MeasurementReport__criticalExtensions__c1 { + MeasurementReport__criticalExtensions__c1_PR present; + union MeasurementReport__criticalExtensions__c1_u { + MeasurementReport_r8_IEs_t measurementReport_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct MeasurementReport__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MeasurementReport_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MeasurementReport; + +#ifdef __cplusplus +} +#endif + +#endif /* _MeasurementReport_H_ */ +#include diff --git a/lte/rrc/asn/MobilityControlInfo.c b/lte/rrc/asn/MobilityControlInfo.c new file mode 100644 index 000000000..b81e4c80b --- /dev/null +++ b/lte/rrc/asn/MobilityControlInfo.c @@ -0,0 +1,283 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityControlInfo.h" + +static int +t304_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t304_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t304_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t304_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t304_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t304_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t304_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t304_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t304_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t304_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t304_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t304_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t304_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t304_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t304_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t304_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t304_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t304_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_t304_constr_6 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_t304_value2enum_6[] = { + { 0, 4, "ms50" }, + { 1, 5, "ms100" }, + { 2, 5, "ms150" }, + { 3, 5, "ms200" }, + { 4, 5, "ms500" }, + { 5, 6, "ms1000" }, + { 6, 6, "ms2000" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_t304_enum2value_6[] = { + 1, /* ms100(1) */ + 5, /* ms1000(5) */ + 2, /* ms150(2) */ + 3, /* ms200(3) */ + 6, /* ms2000(6) */ + 0, /* ms50(0) */ + 4, /* ms500(4) */ + 7 /* spare1(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t304_specs_6 = { + asn_MAP_t304_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_t304_enum2value_6, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t304_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t304_6 = { + "t304", + "t304", + t304_6_free, + t304_6_print, + t304_6_constraint, + t304_6_decode_ber, + t304_6_encode_der, + t304_6_decode_xer, + t304_6_encode_xer, + t304_6_decode_uper, + t304_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t304_tags_6, + sizeof(asn_DEF_t304_tags_6) + /sizeof(asn_DEF_t304_tags_6[0]) - 1, /* 1 */ + asn_DEF_t304_tags_6, /* Same as above */ + sizeof(asn_DEF_t304_tags_6) + /sizeof(asn_DEF_t304_tags_6[0]), /* 2 */ + &asn_PER_type_t304_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t304_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityControlInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityControlInfo, targetPhysCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "targetPhysCellId" + }, + { ATF_POINTER, 3, offsetof(struct MobilityControlInfo, carrierFreq), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq" + }, + { ATF_POINTER, 2, offsetof(struct MobilityControlInfo, carrierBandwidth), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierBandwidthEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierBandwidth" + }, + { ATF_POINTER, 1, offsetof(struct MobilityControlInfo, additionalSpectrumEmission), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSpectrumEmission, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "additionalSpectrumEmission" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityControlInfo, t304), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t304_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t304" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityControlInfo, newUE_Identity), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "newUE-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityControlInfo, radioResourceConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigCommon" + }, + { ATF_POINTER, 1, offsetof(struct MobilityControlInfo, rach_ConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RACH_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rach-ConfigDedicated" + }, +}; +static int asn_MAP_MobilityControlInfo_oms_1[] = { 1, 2, 3, 7 }; +static ber_tlv_tag_t asn_DEF_MobilityControlInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityControlInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* targetPhysCellId at 2993 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreq at 2994 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* carrierBandwidth at 2995 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* additionalSpectrumEmission at 2996 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* t304 at 2998 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* newUE-Identity at 3000 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* radioResourceConfigCommon at 3001 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* rach-ConfigDedicated at 3002 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityControlInfo_specs_1 = { + sizeof(struct MobilityControlInfo), + offsetof(struct MobilityControlInfo, _asn_ctx), + asn_MAP_MobilityControlInfo_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_MobilityControlInfo_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + 7, /* Start extensions */ + 9 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityControlInfo = { + "MobilityControlInfo", + "MobilityControlInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityControlInfo_tags_1, + sizeof(asn_DEF_MobilityControlInfo_tags_1) + /sizeof(asn_DEF_MobilityControlInfo_tags_1[0]), /* 1 */ + asn_DEF_MobilityControlInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityControlInfo_tags_1) + /sizeof(asn_DEF_MobilityControlInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityControlInfo_1, + 8, /* Elements count */ + &asn_SPC_MobilityControlInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityControlInfo.h b/lte/rrc/asn/MobilityControlInfo.h new file mode 100644 index 000000000..5ccca9cef --- /dev/null +++ b/lte/rrc/asn/MobilityControlInfo.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityControlInfo_H_ +#define _MobilityControlInfo_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellId.h" +#include "AdditionalSpectrumEmission.h" +#include +#include "C-RNTI.h" +#include "RadioResourceConfigCommon.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MobilityControlInfo__t304 { + MobilityControlInfo__t304_ms50 = 0, + MobilityControlInfo__t304_ms100 = 1, + MobilityControlInfo__t304_ms150 = 2, + MobilityControlInfo__t304_ms200 = 3, + MobilityControlInfo__t304_ms500 = 4, + MobilityControlInfo__t304_ms1000 = 5, + MobilityControlInfo__t304_ms2000 = 6, + MobilityControlInfo__t304_spare1 = 7 +} e_MobilityControlInfo__t304; + +/* Forward declarations */ +struct CarrierFreqEUTRA; +struct CarrierBandwidthEUTRA; +struct RACH_ConfigDedicated; + +/* MobilityControlInfo */ +typedef struct MobilityControlInfo { + PhysCellId_t targetPhysCellId; + struct CarrierFreqEUTRA *carrierFreq /* OPTIONAL */; + struct CarrierBandwidthEUTRA *carrierBandwidth /* OPTIONAL */; + AdditionalSpectrumEmission_t *additionalSpectrumEmission /* OPTIONAL */; + long t304; + C_RNTI_t newUE_Identity; + RadioResourceConfigCommon_t radioResourceConfigCommon; + struct RACH_ConfigDedicated *rach_ConfigDedicated /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityControlInfo_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_t304_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityControlInfo; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqEUTRA.h" +#include "CarrierBandwidthEUTRA.h" +#include "RACH-ConfigDedicated.h" + +#endif /* _MobilityControlInfo_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c b/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c new file mode 100644 index 000000000..7c335e70f --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c @@ -0,0 +1,145 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand-r8-IEs.h" + +static asn_per_constraints_t asn_PER_type_purpose_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_purpose_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r8_IEs__purpose, choice.handover), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Handover, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handover" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r8_IEs__purpose, choice.cellChangeOrder), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellChangeOrder, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellChangeOrder" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_purpose_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handover at 448 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellChangeOrder at 450 */ +}; +static asn_CHOICE_specifics_t asn_SPC_purpose_specs_3 = { + sizeof(struct MobilityFromEUTRACommand_r8_IEs__purpose), + offsetof(struct MobilityFromEUTRACommand_r8_IEs__purpose, _asn_ctx), + offsetof(struct MobilityFromEUTRACommand_r8_IEs__purpose, present), + sizeof(((struct MobilityFromEUTRACommand_r8_IEs__purpose *)0)->present), + asn_MAP_purpose_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_purpose_3 = { + "purpose", + "purpose", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_purpose_constr_3, + asn_MBR_purpose_3, + 2, /* Elements count */ + &asn_SPC_purpose_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r8_IEs, cs_FallbackIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cs-FallbackIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r8_IEs, purpose), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_purpose_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "purpose" + }, + { ATF_POINTER, 1, offsetof(struct MobilityFromEUTRACommand_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MobilityFromEUTRACommand_r8_IEs_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cs-FallbackIndicator at 446 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* purpose at 448 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 451 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_r8_IEs_specs_1 = { + sizeof(struct MobilityFromEUTRACommand_r8_IEs), + offsetof(struct MobilityFromEUTRACommand_r8_IEs, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_r8_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MobilityFromEUTRACommand_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_r8_IEs = { + "MobilityFromEUTRACommand-r8-IEs", + "MobilityFromEUTRACommand-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_r8_IEs_1, + 3, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h b/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h new file mode 100644 index 000000000..bf989c411 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_r8_IEs_H_ +#define _MobilityFromEUTRACommand_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include "Handover.h" +#include "CellChangeOrder.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MobilityFromEUTRACommand_r8_IEs__purpose_PR { + MobilityFromEUTRACommand_r8_IEs__purpose_PR_NOTHING, /* No components present */ + MobilityFromEUTRACommand_r8_IEs__purpose_PR_handover, + MobilityFromEUTRACommand_r8_IEs__purpose_PR_cellChangeOrder +} MobilityFromEUTRACommand_r8_IEs__purpose_PR; + +/* Forward declarations */ +struct MobilityFromEUTRACommand_v8a0_IEs; + +/* MobilityFromEUTRACommand-r8-IEs */ +typedef struct MobilityFromEUTRACommand_r8_IEs { + BOOLEAN_t cs_FallbackIndicator; + struct MobilityFromEUTRACommand_r8_IEs__purpose { + MobilityFromEUTRACommand_r8_IEs__purpose_PR present; + union MobilityFromEUTRACommand_r8_IEs__purpose_u { + Handover_t handover; + CellChangeOrder_t cellChangeOrder; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } purpose; + struct MobilityFromEUTRACommand_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MobilityFromEUTRACommand-v8a0-IEs.h" + +#endif /* _MobilityFromEUTRACommand_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c b/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c new file mode 100644 index 000000000..d982ff14e --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c @@ -0,0 +1,155 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand-r9-IEs.h" + +static asn_per_constraints_t asn_PER_type_purpose_constr_3 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_purpose_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r9_IEs__purpose, choice.handover), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Handover, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handover" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r9_IEs__purpose, choice.cellChangeOrder), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellChangeOrder, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellChangeOrder" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r9_IEs__purpose, choice.e_CSFB_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_E_CSFB_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "e-CSFB-r9" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_purpose_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* handover at 467 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellChangeOrder at 468 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* e-CSFB-r9 at 469 */ +}; +static asn_CHOICE_specifics_t asn_SPC_purpose_specs_3 = { + sizeof(struct MobilityFromEUTRACommand_r9_IEs__purpose), + offsetof(struct MobilityFromEUTRACommand_r9_IEs__purpose, _asn_ctx), + offsetof(struct MobilityFromEUTRACommand_r9_IEs__purpose, present), + sizeof(((struct MobilityFromEUTRACommand_r9_IEs__purpose *)0)->present), + asn_MAP_purpose_tag2el_3, + 3, /* Count of tags in the map */ + 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_purpose_3 = { + "purpose", + "purpose", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_purpose_constr_3, + asn_MBR_purpose_3, + 3, /* Elements count */ + &asn_SPC_purpose_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_r9_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r9_IEs, cs_FallbackIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cs-FallbackIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand_r9_IEs, purpose), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_purpose_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "purpose" + }, + { ATF_POINTER, 1, offsetof(struct MobilityFromEUTRACommand_r9_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand_v930_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MobilityFromEUTRACommand_r9_IEs_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_r9_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cs-FallbackIndicator at 465 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* purpose at 467 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 472 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_r9_IEs_specs_1 = { + sizeof(struct MobilityFromEUTRACommand_r9_IEs), + offsetof(struct MobilityFromEUTRACommand_r9_IEs, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_r9_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_MobilityFromEUTRACommand_r9_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_r9_IEs = { + "MobilityFromEUTRACommand-r9-IEs", + "MobilityFromEUTRACommand-r9-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_r9_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_r9_IEs_1, + 3, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_r9_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h b/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h new file mode 100644 index 000000000..df6195183 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_r9_IEs_H_ +#define _MobilityFromEUTRACommand_r9_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include "Handover.h" +#include "CellChangeOrder.h" +#include "E-CSFB-r9.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MobilityFromEUTRACommand_r9_IEs__purpose_PR { + MobilityFromEUTRACommand_r9_IEs__purpose_PR_NOTHING, /* No components present */ + MobilityFromEUTRACommand_r9_IEs__purpose_PR_handover, + MobilityFromEUTRACommand_r9_IEs__purpose_PR_cellChangeOrder, + MobilityFromEUTRACommand_r9_IEs__purpose_PR_e_CSFB_r9, + /* Extensions may appear below */ + +} MobilityFromEUTRACommand_r9_IEs__purpose_PR; + +/* Forward declarations */ +struct MobilityFromEUTRACommand_v930_IEs; + +/* MobilityFromEUTRACommand-r9-IEs */ +typedef struct MobilityFromEUTRACommand_r9_IEs { + BOOLEAN_t cs_FallbackIndicator; + struct MobilityFromEUTRACommand_r9_IEs__purpose { + MobilityFromEUTRACommand_r9_IEs__purpose_PR present; + union MobilityFromEUTRACommand_r9_IEs__purpose_u { + Handover_t handover; + CellChangeOrder_t cellChangeOrder; + E_CSFB_r9_t e_CSFB_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } purpose; + struct MobilityFromEUTRACommand_v930_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_r9_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_r9_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MobilityFromEUTRACommand-v930-IEs.h" + +#endif /* _MobilityFromEUTRACommand_r9_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.c b/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.c new file mode 100644 index 000000000..e8d53823a --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand-v8a0-IEs.h" + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct MobilityFromEUTRACommand_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct MobilityFromEUTRACommand_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand_v8d0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MobilityFromEUTRACommand_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 455 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 456 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_v8a0_IEs_specs_1 = { + sizeof(struct MobilityFromEUTRACommand_v8a0_IEs), + offsetof(struct MobilityFromEUTRACommand_v8a0_IEs, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MobilityFromEUTRACommand_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v8a0_IEs = { + "MobilityFromEUTRACommand-v8a0-IEs", + "MobilityFromEUTRACommand-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h b/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h new file mode 100644 index 000000000..6031423b4 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_v8a0_IEs_H_ +#define _MobilityFromEUTRACommand_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MobilityFromEUTRACommand_v8d0_IEs; + +/* MobilityFromEUTRACommand-v8a0-IEs */ +typedef struct MobilityFromEUTRACommand_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct MobilityFromEUTRACommand_v8d0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MobilityFromEUTRACommand-v8d0-IEs.h" + +#endif /* _MobilityFromEUTRACommand_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.c b/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.c new file mode 100644 index 000000000..d379d0424 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand-v8d0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct MobilityFromEUTRACommand_v8d0_IEs__nonCriticalExtension), + offsetof(struct MobilityFromEUTRACommand_v8d0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_v8d0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct MobilityFromEUTRACommand_v8d0_IEs, bandIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandIndicatorGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandIndicator" + }, + { ATF_POINTER, 1, offsetof(struct MobilityFromEUTRACommand_v8d0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MobilityFromEUTRACommand_v8d0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_v8d0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandIndicator at 460 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 461 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_v8d0_IEs_specs_1 = { + sizeof(struct MobilityFromEUTRACommand_v8d0_IEs), + offsetof(struct MobilityFromEUTRACommand_v8d0_IEs, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_v8d0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MobilityFromEUTRACommand_v8d0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v8d0_IEs = { + "MobilityFromEUTRACommand-v8d0-IEs", + "MobilityFromEUTRACommand-v8d0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v8d0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_v8d0_IEs_1, + 2, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_v8d0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h b/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h new file mode 100644 index 000000000..c356430ed --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_v8d0_IEs_H_ +#define _MobilityFromEUTRACommand_v8d0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "BandIndicatorGERAN.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityFromEUTRACommand-v8d0-IEs */ +typedef struct MobilityFromEUTRACommand_v8d0_IEs { + BandIndicatorGERAN_t *bandIndicator /* OPTIONAL */; + struct MobilityFromEUTRACommand_v8d0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_v8d0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v8d0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityFromEUTRACommand_v8d0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.c b/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.c new file mode 100644 index 000000000..bdb06e9e1 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand-v930-IEs.h" + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_v930_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct MobilityFromEUTRACommand_v930_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct MobilityFromEUTRACommand_v930_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand_v960_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MobilityFromEUTRACommand_v930_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_v930_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 476 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 477 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_v930_IEs_specs_1 = { + sizeof(struct MobilityFromEUTRACommand_v930_IEs), + offsetof(struct MobilityFromEUTRACommand_v930_IEs, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_v930_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MobilityFromEUTRACommand_v930_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v930_IEs = { + "MobilityFromEUTRACommand-v930-IEs", + "MobilityFromEUTRACommand-v930-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v930_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_v930_IEs_1, + 2, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_v930_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h b/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h new file mode 100644 index 000000000..ab31c7444 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_v930_IEs_H_ +#define _MobilityFromEUTRACommand_v930_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MobilityFromEUTRACommand_v960_IEs; + +/* MobilityFromEUTRACommand-v930-IEs */ +typedef struct MobilityFromEUTRACommand_v930_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct MobilityFromEUTRACommand_v960_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_v930_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v930_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MobilityFromEUTRACommand-v960-IEs.h" + +#endif /* _MobilityFromEUTRACommand_v930_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.c b/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.c new file mode 100644 index 000000000..814430b40 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand-v960-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct MobilityFromEUTRACommand_v960_IEs__nonCriticalExtension), + offsetof(struct MobilityFromEUTRACommand_v960_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_v960_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct MobilityFromEUTRACommand_v960_IEs, bandIndicator), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandIndicatorGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandIndicator" + }, + { ATF_POINTER, 1, offsetof(struct MobilityFromEUTRACommand_v960_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_MobilityFromEUTRACommand_v960_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_v960_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandIndicator at 481 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 482 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_v960_IEs_specs_1 = { + sizeof(struct MobilityFromEUTRACommand_v960_IEs), + offsetof(struct MobilityFromEUTRACommand_v960_IEs, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_v960_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_MobilityFromEUTRACommand_v960_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v960_IEs = { + "MobilityFromEUTRACommand-v960-IEs", + "MobilityFromEUTRACommand-v960-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_v960_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_v960_IEs_1, + 2, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_v960_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h b/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h new file mode 100644 index 000000000..938be59da --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_v960_IEs_H_ +#define _MobilityFromEUTRACommand_v960_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "BandIndicatorGERAN.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityFromEUTRACommand-v960-IEs */ +typedef struct MobilityFromEUTRACommand_v960_IEs { + BandIndicatorGERAN_t *bandIndicator /* OPTIONAL */; + struct MobilityFromEUTRACommand_v960_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_v960_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand_v960_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityFromEUTRACommand_v960_IEs_H_ */ +#include diff --git a/lte/rrc/asn/MobilityFromEUTRACommand.c b/lte/rrc/asn/MobilityFromEUTRACommand.c new file mode 100644 index 000000000..7f908e0c6 --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityFromEUTRACommand.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand__criticalExtensions__c1, choice.mobilityFromEUTRACommand_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityFromEUTRACommand-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand__criticalExtensions__c1, choice.mobilityFromEUTRACommand_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityFromEUTRACommand_r9_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityFromEUTRACommand-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mobilityFromEUTRACommand-r8 at 437 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mobilityFromEUTRACommand-r9 at 438 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 439 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 439 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct MobilityFromEUTRACommand__criticalExtensions__c1), + offsetof(struct MobilityFromEUTRACommand__criticalExtensions__c1, _asn_ctx), + offsetof(struct MobilityFromEUTRACommand__criticalExtensions__c1, present), + sizeof(((struct MobilityFromEUTRACommand__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct MobilityFromEUTRACommand__criticalExtensions__criticalExtensionsFuture), + offsetof(struct MobilityFromEUTRACommand__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 437 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 441 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct MobilityFromEUTRACommand__criticalExtensions), + offsetof(struct MobilityFromEUTRACommand__criticalExtensions, _asn_ctx), + offsetof(struct MobilityFromEUTRACommand__criticalExtensions, present), + sizeof(((struct MobilityFromEUTRACommand__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityFromEUTRACommand_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityFromEUTRACommand, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_MobilityFromEUTRACommand_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityFromEUTRACommand_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 434 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 440 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityFromEUTRACommand_specs_1 = { + sizeof(struct MobilityFromEUTRACommand), + offsetof(struct MobilityFromEUTRACommand, _asn_ctx), + asn_MAP_MobilityFromEUTRACommand_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand = { + "MobilityFromEUTRACommand", + "MobilityFromEUTRACommand", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityFromEUTRACommand_tags_1, + sizeof(asn_DEF_MobilityFromEUTRACommand_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_tags_1[0]), /* 1 */ + asn_DEF_MobilityFromEUTRACommand_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityFromEUTRACommand_tags_1) + /sizeof(asn_DEF_MobilityFromEUTRACommand_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityFromEUTRACommand_1, + 2, /* Elements count */ + &asn_SPC_MobilityFromEUTRACommand_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityFromEUTRACommand.h b/lte/rrc/asn/MobilityFromEUTRACommand.h new file mode 100644 index 000000000..b60c02b2e --- /dev/null +++ b/lte/rrc/asn/MobilityFromEUTRACommand.h @@ -0,0 +1,81 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityFromEUTRACommand_H_ +#define _MobilityFromEUTRACommand_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "MobilityFromEUTRACommand-r8-IEs.h" +#include "MobilityFromEUTRACommand-r9-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MobilityFromEUTRACommand__criticalExtensions_PR { + MobilityFromEUTRACommand__criticalExtensions_PR_NOTHING, /* No components present */ + MobilityFromEUTRACommand__criticalExtensions_PR_c1, + MobilityFromEUTRACommand__criticalExtensions_PR_criticalExtensionsFuture +} MobilityFromEUTRACommand__criticalExtensions_PR; +typedef enum MobilityFromEUTRACommand__criticalExtensions__c1_PR { + MobilityFromEUTRACommand__criticalExtensions__c1_PR_NOTHING, /* No components present */ + MobilityFromEUTRACommand__criticalExtensions__c1_PR_mobilityFromEUTRACommand_r8, + MobilityFromEUTRACommand__criticalExtensions__c1_PR_mobilityFromEUTRACommand_r9, + MobilityFromEUTRACommand__criticalExtensions__c1_PR_spare2, + MobilityFromEUTRACommand__criticalExtensions__c1_PR_spare1 +} MobilityFromEUTRACommand__criticalExtensions__c1_PR; + +/* MobilityFromEUTRACommand */ +typedef struct MobilityFromEUTRACommand { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct MobilityFromEUTRACommand__criticalExtensions { + MobilityFromEUTRACommand__criticalExtensions_PR present; + union MobilityFromEUTRACommand__criticalExtensions_u { + struct MobilityFromEUTRACommand__criticalExtensions__c1 { + MobilityFromEUTRACommand__criticalExtensions__c1_PR present; + union MobilityFromEUTRACommand__criticalExtensions__c1_u { + MobilityFromEUTRACommand_r8_IEs_t mobilityFromEUTRACommand_r8; + MobilityFromEUTRACommand_r9_IEs_t mobilityFromEUTRACommand_r9; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct MobilityFromEUTRACommand__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityFromEUTRACommand_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityFromEUTRACommand; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityFromEUTRACommand_H_ */ +#include diff --git a/lte/rrc/asn/MobilityParametersCDMA2000.c b/lte/rrc/asn/MobilityParametersCDMA2000.c new file mode 100644 index 000000000..df693e087 --- /dev/null +++ b/lte/rrc/asn/MobilityParametersCDMA2000.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityParametersCDMA2000.h" + +int +MobilityParametersCDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_OCTET_STRING.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using OCTET_STRING, + * so here we adjust the DEF accordingly. + */ +static void +MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_OCTET_STRING.free_struct; + td->print_struct = asn_DEF_OCTET_STRING.print_struct; + td->ber_decoder = asn_DEF_OCTET_STRING.ber_decoder; + td->der_encoder = asn_DEF_OCTET_STRING.der_encoder; + td->xer_decoder = asn_DEF_OCTET_STRING.xer_decoder; + td->xer_encoder = asn_DEF_OCTET_STRING.xer_encoder; + td->uper_decoder = asn_DEF_OCTET_STRING.uper_decoder; + td->uper_encoder = asn_DEF_OCTET_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_OCTET_STRING.per_constraints; + td->elements = asn_DEF_OCTET_STRING.elements; + td->elements_count = asn_DEF_OCTET_STRING.elements_count; + td->specifics = asn_DEF_OCTET_STRING.specifics; +} + +void +MobilityParametersCDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +MobilityParametersCDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +MobilityParametersCDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +MobilityParametersCDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +MobilityParametersCDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +MobilityParametersCDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +MobilityParametersCDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +MobilityParametersCDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + MobilityParametersCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_MobilityParametersCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_MobilityParametersCDMA2000 = { + "MobilityParametersCDMA2000", + "MobilityParametersCDMA2000", + MobilityParametersCDMA2000_free, + MobilityParametersCDMA2000_print, + MobilityParametersCDMA2000_constraint, + MobilityParametersCDMA2000_decode_ber, + MobilityParametersCDMA2000_encode_der, + MobilityParametersCDMA2000_decode_xer, + MobilityParametersCDMA2000_encode_xer, + MobilityParametersCDMA2000_decode_uper, + MobilityParametersCDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityParametersCDMA2000_tags_1, + sizeof(asn_DEF_MobilityParametersCDMA2000_tags_1) + /sizeof(asn_DEF_MobilityParametersCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_MobilityParametersCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityParametersCDMA2000_tags_1) + /sizeof(asn_DEF_MobilityParametersCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/MobilityParametersCDMA2000.h b/lte/rrc/asn/MobilityParametersCDMA2000.h new file mode 100644 index 000000000..ae8c1f7c9 --- /dev/null +++ b/lte/rrc/asn/MobilityParametersCDMA2000.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityParametersCDMA2000_H_ +#define _MobilityParametersCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* MobilityParametersCDMA2000 */ +typedef OCTET_STRING_t MobilityParametersCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityParametersCDMA2000; +asn_struct_free_f MobilityParametersCDMA2000_free; +asn_struct_print_f MobilityParametersCDMA2000_print; +asn_constr_check_f MobilityParametersCDMA2000_constraint; +ber_type_decoder_f MobilityParametersCDMA2000_decode_ber; +der_type_encoder_f MobilityParametersCDMA2000_encode_der; +xer_type_decoder_f MobilityParametersCDMA2000_decode_xer; +xer_type_encoder_f MobilityParametersCDMA2000_encode_xer; +per_type_decoder_f MobilityParametersCDMA2000_decode_uper; +per_type_encoder_f MobilityParametersCDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityParametersCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/MobilityStateParameters.c b/lte/rrc/asn/MobilityStateParameters.c new file mode 100644 index 000000000..77dc14c6a --- /dev/null +++ b/lte/rrc/asn/MobilityStateParameters.c @@ -0,0 +1,452 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "MobilityStateParameters.h" + +static int +t_Evaluation_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t_Evaluation_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t_Evaluation_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t_Evaluation_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t_Evaluation_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t_Evaluation_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t_Evaluation_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t_Evaluation_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t_Evaluation_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t_Evaluation_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t_Evaluation_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +t_HystNormal_11_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t_HystNormal_11_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t_HystNormal_11_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t_HystNormal_11_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t_HystNormal_11_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t_HystNormal_11_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t_HystNormal_11_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t_HystNormal_11_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t_HystNormal_11_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t_HystNormal_11_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t_HystNormal_11_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_n_CellChangeMedium_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n_CellChangeHigh_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_t_Evaluation_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_t_HystNormal_constr_11 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n_CellChangeMedium_constr_20 = { + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (1..16) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n_CellChangeHigh_constr_21 = { + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (1..16) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_t_Evaluation_value2enum_2[] = { + { 0, 3, "s30" }, + { 1, 3, "s60" }, + { 2, 4, "s120" }, + { 3, 4, "s180" }, + { 4, 4, "s240" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_t_Evaluation_enum2value_2[] = { + 2, /* s120(2) */ + 3, /* s180(3) */ + 4, /* s240(4) */ + 0, /* s30(0) */ + 1, /* s60(1) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5 /* spare3(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t_Evaluation_specs_2 = { + asn_MAP_t_Evaluation_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_t_Evaluation_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t_Evaluation_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t_Evaluation_2 = { + "t-Evaluation", + "t-Evaluation", + t_Evaluation_2_free, + t_Evaluation_2_print, + t_Evaluation_2_constraint, + t_Evaluation_2_decode_ber, + t_Evaluation_2_encode_der, + t_Evaluation_2_decode_xer, + t_Evaluation_2_encode_xer, + t_Evaluation_2_decode_uper, + t_Evaluation_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t_Evaluation_tags_2, + sizeof(asn_DEF_t_Evaluation_tags_2) + /sizeof(asn_DEF_t_Evaluation_tags_2[0]) - 1, /* 1 */ + asn_DEF_t_Evaluation_tags_2, /* Same as above */ + sizeof(asn_DEF_t_Evaluation_tags_2) + /sizeof(asn_DEF_t_Evaluation_tags_2[0]), /* 2 */ + &asn_PER_type_t_Evaluation_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t_Evaluation_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_t_HystNormal_value2enum_11[] = { + { 0, 3, "s30" }, + { 1, 3, "s60" }, + { 2, 4, "s120" }, + { 3, 4, "s180" }, + { 4, 4, "s240" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_t_HystNormal_enum2value_11[] = { + 2, /* s120(2) */ + 3, /* s180(3) */ + 4, /* s240(4) */ + 0, /* s30(0) */ + 1, /* s60(1) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5 /* spare3(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t_HystNormal_specs_11 = { + asn_MAP_t_HystNormal_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_t_HystNormal_enum2value_11, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t_HystNormal_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t_HystNormal_11 = { + "t-HystNormal", + "t-HystNormal", + t_HystNormal_11_free, + t_HystNormal_11_print, + t_HystNormal_11_constraint, + t_HystNormal_11_decode_ber, + t_HystNormal_11_encode_der, + t_HystNormal_11_decode_xer, + t_HystNormal_11_encode_xer, + t_HystNormal_11_decode_uper, + t_HystNormal_11_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t_HystNormal_tags_11, + sizeof(asn_DEF_t_HystNormal_tags_11) + /sizeof(asn_DEF_t_HystNormal_tags_11[0]) - 1, /* 1 */ + asn_DEF_t_HystNormal_tags_11, /* Same as above */ + sizeof(asn_DEF_t_HystNormal_tags_11) + /sizeof(asn_DEF_t_HystNormal_tags_11[0]), /* 2 */ + &asn_PER_type_t_HystNormal_constr_11, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t_HystNormal_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_MobilityStateParameters_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct MobilityStateParameters, t_Evaluation), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t_Evaluation_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-Evaluation" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityStateParameters, t_HystNormal), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t_HystNormal_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-HystNormal" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityStateParameters, n_CellChangeMedium), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n_CellChangeMedium_constraint_1, + &asn_PER_memb_n_CellChangeMedium_constr_20, + 0, + "n-CellChangeMedium" + }, + { ATF_NOFLAGS, 0, offsetof(struct MobilityStateParameters, n_CellChangeHigh), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n_CellChangeHigh_constraint_1, + &asn_PER_memb_n_CellChangeHigh_constr_21, + 0, + "n-CellChangeHigh" + }, +}; +static ber_tlv_tag_t asn_DEF_MobilityStateParameters_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_MobilityStateParameters_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t-Evaluation at 3028 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* t-HystNormal at 3030 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* n-CellChangeMedium at 3031 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* n-CellChangeHigh at 3032 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_MobilityStateParameters_specs_1 = { + sizeof(struct MobilityStateParameters), + offsetof(struct MobilityStateParameters, _asn_ctx), + asn_MAP_MobilityStateParameters_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_MobilityStateParameters = { + "MobilityStateParameters", + "MobilityStateParameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_MobilityStateParameters_tags_1, + sizeof(asn_DEF_MobilityStateParameters_tags_1) + /sizeof(asn_DEF_MobilityStateParameters_tags_1[0]), /* 1 */ + asn_DEF_MobilityStateParameters_tags_1, /* Same as above */ + sizeof(asn_DEF_MobilityStateParameters_tags_1) + /sizeof(asn_DEF_MobilityStateParameters_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_MobilityStateParameters_1, + 4, /* Elements count */ + &asn_SPC_MobilityStateParameters_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/MobilityStateParameters.h b/lte/rrc/asn/MobilityStateParameters.h new file mode 100644 index 000000000..e1f248631 --- /dev/null +++ b/lte/rrc/asn/MobilityStateParameters.h @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _MobilityStateParameters_H_ +#define _MobilityStateParameters_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum MobilityStateParameters__t_Evaluation { + MobilityStateParameters__t_Evaluation_s30 = 0, + MobilityStateParameters__t_Evaluation_s60 = 1, + MobilityStateParameters__t_Evaluation_s120 = 2, + MobilityStateParameters__t_Evaluation_s180 = 3, + MobilityStateParameters__t_Evaluation_s240 = 4, + MobilityStateParameters__t_Evaluation_spare3 = 5, + MobilityStateParameters__t_Evaluation_spare2 = 6, + MobilityStateParameters__t_Evaluation_spare1 = 7 +} e_MobilityStateParameters__t_Evaluation; +typedef enum MobilityStateParameters__t_HystNormal { + MobilityStateParameters__t_HystNormal_s30 = 0, + MobilityStateParameters__t_HystNormal_s60 = 1, + MobilityStateParameters__t_HystNormal_s120 = 2, + MobilityStateParameters__t_HystNormal_s180 = 3, + MobilityStateParameters__t_HystNormal_s240 = 4, + MobilityStateParameters__t_HystNormal_spare3 = 5, + MobilityStateParameters__t_HystNormal_spare2 = 6, + MobilityStateParameters__t_HystNormal_spare1 = 7 +} e_MobilityStateParameters__t_HystNormal; + +/* MobilityStateParameters */ +typedef struct MobilityStateParameters { + long t_Evaluation; + long t_HystNormal; + long n_CellChangeMedium; + long n_CellChangeHigh; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} MobilityStateParameters_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_t_Evaluation_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_t_HystNormal_11; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_MobilityStateParameters; + +#ifdef __cplusplus +} +#endif + +#endif /* _MobilityStateParameters_H_ */ +#include diff --git a/lte/rrc/asn/N1-PUCCH-AN-PersistentList.c b/lte/rrc/asn/N1-PUCCH-AN-PersistentList.c new file mode 100644 index 000000000..3988fca7e --- /dev/null +++ b/lte/rrc/asn/N1-PUCCH-AN-PersistentList.c @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#include "N1-PUCCH-AN-PersistentList.h" + +static int +memb_NativeInteger_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_Member_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_N1_PUCCH_AN_PersistentList_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_N1_PUCCH_AN_PersistentList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_NativeInteger, + memb_NativeInteger_constraint_1, + &asn_PER_memb_Member_constr_2, + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_N1_PUCCH_AN_PersistentList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_N1_PUCCH_AN_PersistentList_specs_1 = { + sizeof(struct N1_PUCCH_AN_PersistentList), + offsetof(struct N1_PUCCH_AN_PersistentList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_N1_PUCCH_AN_PersistentList = { + "N1-PUCCH-AN-PersistentList", + "N1-PUCCH-AN-PersistentList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_N1_PUCCH_AN_PersistentList_tags_1, + sizeof(asn_DEF_N1_PUCCH_AN_PersistentList_tags_1) + /sizeof(asn_DEF_N1_PUCCH_AN_PersistentList_tags_1[0]), /* 1 */ + asn_DEF_N1_PUCCH_AN_PersistentList_tags_1, /* Same as above */ + sizeof(asn_DEF_N1_PUCCH_AN_PersistentList_tags_1) + /sizeof(asn_DEF_N1_PUCCH_AN_PersistentList_tags_1[0]), /* 1 */ + &asn_PER_type_N1_PUCCH_AN_PersistentList_constr_1, + asn_MBR_N1_PUCCH_AN_PersistentList_1, + 1, /* Single element */ + &asn_SPC_N1_PUCCH_AN_PersistentList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/N1-PUCCH-AN-PersistentList.h b/lte/rrc/asn/N1-PUCCH-AN-PersistentList.h new file mode 100644 index 000000000..47c583c91 --- /dev/null +++ b/lte/rrc/asn/N1-PUCCH-AN-PersistentList.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "EUTRA-RRC-Definitions.asn" + */ + +#ifndef _N1_PUCCH_AN_PersistentList_H_ +#define _N1_PUCCH_AN_PersistentList_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* N1-PUCCH-AN-PersistentList */ +typedef struct N1_PUCCH_AN_PersistentList { + A_SEQUENCE_OF(long) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} N1_PUCCH_AN_PersistentList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_N1_PUCCH_AN_PersistentList; + +#ifdef __cplusplus +} +#endif + +#endif /* _N1_PUCCH_AN_PersistentList_H_ */ +#include diff --git a/lte/rrc/asn/N1PUCCH-AN-CS-r10.c b/lte/rrc/asn/N1PUCCH-AN-CS-r10.c new file mode 100644 index 000000000..fcfca1c1f --- /dev/null +++ b/lte/rrc/asn/N1PUCCH-AN-CS-r10.c @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "N1PUCCH-AN-CS-r10.h" + +static int +memb_NativeInteger_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_Member_constr_2 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_N1PUCCH_AN_CS_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_N1PUCCH_AN_CS_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_NativeInteger, + memb_NativeInteger_constraint_1, + &asn_PER_memb_Member_constr_2, + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_N1PUCCH_AN_CS_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_N1PUCCH_AN_CS_r10_specs_1 = { + sizeof(struct N1PUCCH_AN_CS_r10), + offsetof(struct N1PUCCH_AN_CS_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_N1PUCCH_AN_CS_r10 = { + "N1PUCCH-AN-CS-r10", + "N1PUCCH-AN-CS-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_N1PUCCH_AN_CS_r10_tags_1, + sizeof(asn_DEF_N1PUCCH_AN_CS_r10_tags_1) + /sizeof(asn_DEF_N1PUCCH_AN_CS_r10_tags_1[0]), /* 1 */ + asn_DEF_N1PUCCH_AN_CS_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_N1PUCCH_AN_CS_r10_tags_1) + /sizeof(asn_DEF_N1PUCCH_AN_CS_r10_tags_1[0]), /* 1 */ + &asn_PER_type_N1PUCCH_AN_CS_r10_constr_1, + asn_MBR_N1PUCCH_AN_CS_r10_1, + 1, /* Single element */ + &asn_SPC_N1PUCCH_AN_CS_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/N1PUCCH-AN-CS-r10.h b/lte/rrc/asn/N1PUCCH-AN-CS-r10.h new file mode 100644 index 000000000..d343c4fd3 --- /dev/null +++ b/lte/rrc/asn/N1PUCCH-AN-CS-r10.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _N1PUCCH_AN_CS_r10_H_ +#define _N1PUCCH_AN_CS_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* N1PUCCH-AN-CS-r10 */ +typedef struct N1PUCCH_AN_CS_r10 { + A_SEQUENCE_OF(long) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} N1PUCCH_AN_CS_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_N1PUCCH_AN_CS_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _N1PUCCH_AN_CS_r10_H_ */ +#include diff --git a/lte/rrc/asn/N1PUCCH-AN-PersistentList.c b/lte/rrc/asn/N1PUCCH-AN-PersistentList.c new file mode 100644 index 000000000..b16a487f8 --- /dev/null +++ b/lte/rrc/asn/N1PUCCH-AN-PersistentList.c @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "N1PUCCH-AN-PersistentList.h" + +static int +memb_NativeInteger_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_Member_constr_2 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_N1PUCCH_AN_PersistentList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_N1PUCCH_AN_PersistentList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_NativeInteger, + memb_NativeInteger_constraint_1, + &asn_PER_memb_Member_constr_2, + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_N1PUCCH_AN_PersistentList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_N1PUCCH_AN_PersistentList_specs_1 = { + sizeof(struct N1PUCCH_AN_PersistentList), + offsetof(struct N1PUCCH_AN_PersistentList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_N1PUCCH_AN_PersistentList = { + "N1PUCCH-AN-PersistentList", + "N1PUCCH-AN-PersistentList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_N1PUCCH_AN_PersistentList_tags_1, + sizeof(asn_DEF_N1PUCCH_AN_PersistentList_tags_1) + /sizeof(asn_DEF_N1PUCCH_AN_PersistentList_tags_1[0]), /* 1 */ + asn_DEF_N1PUCCH_AN_PersistentList_tags_1, /* Same as above */ + sizeof(asn_DEF_N1PUCCH_AN_PersistentList_tags_1) + /sizeof(asn_DEF_N1PUCCH_AN_PersistentList_tags_1[0]), /* 1 */ + &asn_PER_type_N1PUCCH_AN_PersistentList_constr_1, + asn_MBR_N1PUCCH_AN_PersistentList_1, + 1, /* Single element */ + &asn_SPC_N1PUCCH_AN_PersistentList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/N1PUCCH-AN-PersistentList.h b/lte/rrc/asn/N1PUCCH-AN-PersistentList.h new file mode 100644 index 000000000..8a4c98ae0 --- /dev/null +++ b/lte/rrc/asn/N1PUCCH-AN-PersistentList.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _N1PUCCH_AN_PersistentList_H_ +#define _N1PUCCH_AN_PersistentList_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* N1PUCCH-AN-PersistentList */ +typedef struct N1PUCCH_AN_PersistentList { + A_SEQUENCE_OF(long) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} N1PUCCH_AN_PersistentList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_N1PUCCH_AN_PersistentList; + +#ifdef __cplusplus +} +#endif + +#endif /* _N1PUCCH_AN_PersistentList_H_ */ +#include diff --git a/lte/rrc/asn/NULL.c b/lte/rrc/asn/NULL.c new file mode 100644 index 000000000..6d3316f1c --- /dev/null +++ b/lte/rrc/asn/NULL.c @@ -0,0 +1,147 @@ +/*- + * Copyright (c) 2003, 2005 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#include +#include +#include +#include /* Implemented in terms of BOOLEAN type */ + +/* + * NULL basic type description. + */ +static ber_tlv_tag_t asn_DEF_NULL_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (5 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NULL = { + "NULL", + "NULL", + BOOLEAN_free, + NULL_print, + asn_generic_no_constraint, + BOOLEAN_decode_ber, /* Implemented in terms of BOOLEAN */ + NULL_encode_der, /* Special handling of DER encoding */ + NULL_decode_xer, + NULL_encode_xer, + NULL_decode_uper, /* Unaligned PER decoder */ + NULL_encode_uper, /* Unaligned PER encoder */ + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NULL_tags, + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + asn_DEF_NULL_tags, /* Same as above */ + sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + +asn_enc_rval_t +NULL_encode_der(asn_TYPE_descriptor_t *td, void *ptr, + int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t erval; + + erval.encoded = der_write_tags(td, 0, tag_mode, 0, tag, cb, app_key); + if(erval.encoded == -1) { + erval.failed_type = td; + erval.structure_ptr = ptr; + } + + _ASN_ENCODED_OK(erval); +} + +asn_enc_rval_t +NULL_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + asn_enc_rval_t er; + + (void)td; + (void)sptr; + (void)ilevel; + (void)flags; + (void)cb; + (void)app_key; + + /* XMLNullValue is empty */ + er.encoded = 0; + _ASN_ENCODED_OK(er); +} + + +static enum xer_pbd_rval +NULL__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chunk_buf, size_t chunk_size) { + (void)td; + (void)sptr; + + if(xer_is_whitespace(chunk_buf, chunk_size)) + return XPBD_BODY_CONSUMED; + else + return XPBD_BROKEN_ENCODING; +} + +asn_dec_rval_t +NULL_decode_xer(asn_codec_ctx_t *opt_codec_ctx, + asn_TYPE_descriptor_t *td, void **sptr, const char *opt_mname, + const void *buf_ptr, size_t size) { + + return xer_decode_primitive(opt_codec_ctx, td, + sptr, sizeof(NULL_t), opt_mname, buf_ptr, size, + NULL__xer_body_decode); +} + +int +NULL_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, + asn_app_consume_bytes_f *cb, void *app_key) { + + (void)td; /* Unused argument */ + (void)ilevel; /* Unused argument */ + + if(sptr) { + return (cb("", 9, app_key) < 0) ? -1 : 0; + } else { + return (cb("", 8, app_key) < 0) ? -1 : 0; + } +} + +asn_dec_rval_t +NULL_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { + asn_dec_rval_t rv; + + (void)opt_codec_ctx; + (void)td; + (void)constraints; + (void)pd; + + if(!*sptr) { + *sptr = MALLOC(sizeof(NULL_t)); + if(*sptr) { + *(NULL_t *)*sptr = 0; + } else { + _ASN_DECODE_FAILED; + } + } + + /* + * NULL type does not have content octets. + */ + + rv.code = RC_OK; + rv.consumed = 0; + return rv; +} + +asn_enc_rval_t +NULL_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, + void *sptr, asn_per_outp_t *po) { + asn_enc_rval_t er; + + (void)td; + (void)constraints; + (void)sptr; + (void)po; + + er.encoded = 0; + _ASN_ENCODED_OK(er); +} diff --git a/lte/rrc/asn/NULL.h b/lte/rrc/asn/NULL.h new file mode 100644 index 000000000..131e77592 --- /dev/null +++ b/lte/rrc/asn/NULL.h @@ -0,0 +1,33 @@ +/*- + * Copyright (c) 2003 Lev Walkin . All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef ASN_TYPE_NULL_H +#define ASN_TYPE_NULL_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The value of the NULL type is meaningless: see BOOLEAN if you want to + * carry true/false semantics. + */ +typedef int NULL_t; + +extern asn_TYPE_descriptor_t asn_DEF_NULL; + +asn_struct_print_f NULL_print; +der_type_encoder_f NULL_encode_der; +xer_type_decoder_f NULL_decode_xer; +xer_type_encoder_f NULL_encode_xer; +per_type_decoder_f NULL_decode_uper; +per_type_encoder_f NULL_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* NULL_H */ diff --git a/lte/rrc/asn/NativeEnumerated.c b/lte/rrc/asn/NativeEnumerated.c index ecf66d1b6..1a4014411 100644 --- a/lte/rrc/asn/NativeEnumerated.c +++ b/lte/rrc/asn/NativeEnumerated.c @@ -15,7 +15,7 @@ /* * NativeEnumerated basic type description. */ -static const ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { +static ber_tlv_tag_t asn_DEF_NativeEnumerated_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeEnumerated = { @@ -46,6 +46,7 @@ NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; asn_enc_rval_t er; + char scratch[128]; const long *native = (const long *)sptr; const asn_INTEGER_enum_map_t *el; @@ -57,7 +58,7 @@ NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, el = INTEGER_map_value2enum(specs, *native); if(el) { size_t srcsize = el->enum_len + 5; - char *src = (char *)alloca(srcsize); + char *src = (char *)scratch; //alloca(srcsize); er.encoded = snprintf(src, srcsize, "<%s/>", el->enum_name); assert(er.encoded > 0 && (size_t)er.encoded < srcsize); @@ -145,7 +146,7 @@ NativeEnumerated_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraint_t *ct; int inext = 0; asn_INTEGER_enum_map_t key; - const asn_INTEGER_enum_map_t *kf; + asn_INTEGER_enum_map_t *kf; if(!sptr) _ASN_ENCODE_FAILED; if(!specs) _ASN_ENCODE_FAILED; diff --git a/lte/rrc/asn/NativeInteger.c b/lte/rrc/asn/NativeInteger.c index 7f8e9276f..abdb71a8c 100644 --- a/lte/rrc/asn/NativeInteger.c +++ b/lte/rrc/asn/NativeInteger.c @@ -16,7 +16,7 @@ /* * NativeInteger basic type description. */ -static const ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { +static ber_tlv_tag_t asn_DEF_NativeInteger_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_NativeInteger = { @@ -107,7 +107,7 @@ NativeInteger_decode_ber(asn_codec_ctx_t *opt_codec_ctx, tmp.size = length; if((specs&&specs->field_unsigned) - ? asn_INTEGER2ulong(&tmp, (unsigned long *)&l) /* sic */ + ? asn_INTEGER2ulong(&tmp, &l) : asn_INTEGER2long(&tmp, &l)) { rval.code = RC_FAIL; rval.consumed = 0; @@ -187,7 +187,7 @@ NativeInteger_decode_xer(asn_codec_ctx_t *opt_codec_ctx, if(rval.code == RC_OK) { long l; if((specs&&specs->field_unsigned) - ? asn_INTEGER2ulong(&st, (unsigned long *)&l) /* sic */ + ? asn_INTEGER2ulong(&st, &l) : asn_INTEGER2long(&st, &l)) { rval.code = RC_FAIL; rval.consumed = 0; @@ -255,7 +255,7 @@ NativeInteger_decode_uper(asn_codec_ctx_t *opt_codec_ctx, &tmpintptr, pd); if(rval.code == RC_OK) { if((specs&&specs->field_unsigned) - ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) + ? asn_INTEGER2ulong(&tmpint, native) : asn_INTEGER2long(&tmpint, native)) rval.code = RC_FAIL; else diff --git a/lte/rrc/asn/NeighCellCDMA2000-v920.c b/lte/rrc/asn/NeighCellCDMA2000-v920.c new file mode 100644 index 000000000..e45b3daaa --- /dev/null +++ b/lte/rrc/asn/NeighCellCDMA2000-v920.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellCDMA2000-v920.h" + +static asn_TYPE_member_t asn_MBR_NeighCellCDMA2000_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NeighCellCDMA2000_v920, neighCellsPerFreqList_v920), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellsPerBandclassListCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellsPerFreqList-v920" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellCDMA2000_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_NeighCellCDMA2000_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* neighCellsPerFreqList-v920 at 1713 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NeighCellCDMA2000_v920_specs_1 = { + sizeof(struct NeighCellCDMA2000_v920), + offsetof(struct NeighCellCDMA2000_v920, _asn_ctx), + asn_MAP_NeighCellCDMA2000_v920_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellCDMA2000_v920 = { + "NeighCellCDMA2000-v920", + "NeighCellCDMA2000-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellCDMA2000_v920_tags_1, + sizeof(asn_DEF_NeighCellCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellCDMA2000_v920_tags_1[0]), /* 1 */ + asn_DEF_NeighCellCDMA2000_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellCDMA2000_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_NeighCellCDMA2000_v920_1, + 1, /* Elements count */ + &asn_SPC_NeighCellCDMA2000_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellCDMA2000-v920.h b/lte/rrc/asn/NeighCellCDMA2000-v920.h new file mode 100644 index 000000000..1273f99f2 --- /dev/null +++ b/lte/rrc/asn/NeighCellCDMA2000-v920.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellCDMA2000_v920_H_ +#define _NeighCellCDMA2000_v920_H_ + + +#include + +/* Including external dependencies */ +#include "NeighCellsPerBandclassListCDMA2000-v920.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NeighCellCDMA2000-v920 */ +typedef struct NeighCellCDMA2000_v920 { + NeighCellsPerBandclassListCDMA2000_v920_t neighCellsPerFreqList_v920; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellCDMA2000_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellCDMA2000_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _NeighCellCDMA2000_v920_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellCDMA2000.c b/lte/rrc/asn/NeighCellCDMA2000.c new file mode 100644 index 000000000..7f72c4684 --- /dev/null +++ b/lte/rrc/asn/NeighCellCDMA2000.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellCDMA2000.h" + +static asn_TYPE_member_t asn_MBR_NeighCellCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NeighCellCDMA2000, bandClass), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bandClass" + }, + { ATF_NOFLAGS, 0, offsetof(struct NeighCellCDMA2000, neighCellsPerFreqList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellsPerBandclassListCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellsPerFreqList" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_NeighCellCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandClass at 1698 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* neighCellsPerFreqList at 1700 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NeighCellCDMA2000_specs_1 = { + sizeof(struct NeighCellCDMA2000), + offsetof(struct NeighCellCDMA2000, _asn_ctx), + asn_MAP_NeighCellCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellCDMA2000 = { + "NeighCellCDMA2000", + "NeighCellCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellCDMA2000_tags_1, + sizeof(asn_DEF_NeighCellCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_NeighCellCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_NeighCellCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_NeighCellCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellCDMA2000.h b/lte/rrc/asn/NeighCellCDMA2000.h new file mode 100644 index 000000000..194b1e06f --- /dev/null +++ b/lte/rrc/asn/NeighCellCDMA2000.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellCDMA2000_H_ +#define _NeighCellCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include "NeighCellsPerBandclassListCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NeighCellCDMA2000 */ +typedef struct NeighCellCDMA2000 { + BandclassCDMA2000_t bandClass; + NeighCellsPerBandclassListCDMA2000_t neighCellsPerFreqList; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _NeighCellCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellConfig.c b/lte/rrc/asn/NeighCellConfig.c new file mode 100644 index 000000000..4160d6f0e --- /dev/null +++ b/lte/rrc/asn/NeighCellConfig.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellConfig.h" + +int +NeighCellConfig_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +NeighCellConfig_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +NeighCellConfig_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +NeighCellConfig_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +NeighCellConfig_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +NeighCellConfig_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +NeighCellConfig_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +NeighCellConfig_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +NeighCellConfig_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +NeighCellConfig_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + NeighCellConfig_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_NeighCellConfig_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_NeighCellConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellConfig = { + "NeighCellConfig", + "NeighCellConfig", + NeighCellConfig_free, + NeighCellConfig_print, + NeighCellConfig_constraint, + NeighCellConfig_decode_ber, + NeighCellConfig_encode_der, + NeighCellConfig_decode_xer, + NeighCellConfig_encode_xer, + NeighCellConfig_decode_uper, + NeighCellConfig_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellConfig_tags_1, + sizeof(asn_DEF_NeighCellConfig_tags_1) + /sizeof(asn_DEF_NeighCellConfig_tags_1[0]), /* 1 */ + asn_DEF_NeighCellConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellConfig_tags_1) + /sizeof(asn_DEF_NeighCellConfig_tags_1[0]), /* 1 */ + &asn_PER_type_NeighCellConfig_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/NeighCellConfig.h b/lte/rrc/asn/NeighCellConfig.h new file mode 100644 index 000000000..8582f754f --- /dev/null +++ b/lte/rrc/asn/NeighCellConfig.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellConfig_H_ +#define _NeighCellConfig_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NeighCellConfig */ +typedef BIT_STRING_t NeighCellConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellConfig; +asn_struct_free_f NeighCellConfig_free; +asn_struct_print_f NeighCellConfig_print; +asn_constr_check_f NeighCellConfig_constraint; +ber_type_decoder_f NeighCellConfig_decode_ber; +der_type_encoder_f NeighCellConfig_encode_der; +xer_type_decoder_f NeighCellConfig_decode_xer; +xer_type_encoder_f NeighCellConfig_encode_xer; +per_type_decoder_f NeighCellConfig_decode_uper; +per_type_encoder_f NeighCellConfig_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NeighCellConfig_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellListCDMA2000-v920.c b/lte/rrc/asn/NeighCellListCDMA2000-v920.c new file mode 100644 index 000000000..c38d48905 --- /dev/null +++ b/lte/rrc/asn/NeighCellListCDMA2000-v920.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellListCDMA2000-v920.h" + +static asn_per_constraints_t asn_PER_type_NeighCellListCDMA2000_v920_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_NeighCellListCDMA2000_v920_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NeighCellCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellListCDMA2000_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_NeighCellListCDMA2000_v920_specs_1 = { + sizeof(struct NeighCellListCDMA2000_v920), + offsetof(struct NeighCellListCDMA2000_v920, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellListCDMA2000_v920 = { + "NeighCellListCDMA2000-v920", + "NeighCellListCDMA2000-v920", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellListCDMA2000_v920_tags_1, + sizeof(asn_DEF_NeighCellListCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellListCDMA2000_v920_tags_1[0]), /* 1 */ + asn_DEF_NeighCellListCDMA2000_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellListCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellListCDMA2000_v920_tags_1[0]), /* 1 */ + &asn_PER_type_NeighCellListCDMA2000_v920_constr_1, + asn_MBR_NeighCellListCDMA2000_v920_1, + 1, /* Single element */ + &asn_SPC_NeighCellListCDMA2000_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellListCDMA2000-v920.h b/lte/rrc/asn/NeighCellListCDMA2000-v920.h new file mode 100644 index 000000000..ccaeb4404 --- /dev/null +++ b/lte/rrc/asn/NeighCellListCDMA2000-v920.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellListCDMA2000_v920_H_ +#define _NeighCellListCDMA2000_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NeighCellCDMA2000_v920; + +/* NeighCellListCDMA2000-v920 */ +typedef struct NeighCellListCDMA2000_v920 { + A_SEQUENCE_OF(struct NeighCellCDMA2000_v920) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellListCDMA2000_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellListCDMA2000_v920; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "NeighCellCDMA2000-v920.h" + +#endif /* _NeighCellListCDMA2000_v920_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellListCDMA2000.c b/lte/rrc/asn/NeighCellListCDMA2000.c new file mode 100644 index 000000000..61da89719 --- /dev/null +++ b/lte/rrc/asn/NeighCellListCDMA2000.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellListCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_NeighCellListCDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_NeighCellListCDMA2000_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NeighCellCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellListCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_NeighCellListCDMA2000_specs_1 = { + sizeof(struct NeighCellListCDMA2000), + offsetof(struct NeighCellListCDMA2000, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellListCDMA2000 = { + "NeighCellListCDMA2000", + "NeighCellListCDMA2000", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellListCDMA2000_tags_1, + sizeof(asn_DEF_NeighCellListCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellListCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_NeighCellListCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellListCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellListCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_NeighCellListCDMA2000_constr_1, + asn_MBR_NeighCellListCDMA2000_1, + 1, /* Single element */ + &asn_SPC_NeighCellListCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellListCDMA2000.h b/lte/rrc/asn/NeighCellListCDMA2000.h new file mode 100644 index 000000000..0812f3471 --- /dev/null +++ b/lte/rrc/asn/NeighCellListCDMA2000.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellListCDMA2000_H_ +#define _NeighCellListCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NeighCellCDMA2000; + +/* NeighCellListCDMA2000 */ +typedef struct NeighCellListCDMA2000 { + A_SEQUENCE_OF(struct NeighCellCDMA2000) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellListCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellListCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "NeighCellCDMA2000.h" + +#endif /* _NeighCellListCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.c b/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.c new file mode 100644 index 000000000..283ffd38d --- /dev/null +++ b/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.c @@ -0,0 +1,493 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellSI-AcquisitionParameters-r9.h" + +static int +intraFreqSI_AcquisitionForHO_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +intraFreqSI_AcquisitionForHO_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +intraFreqSI_AcquisitionForHO_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +intraFreqSI_AcquisitionForHO_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +intraFreqSI_AcquisitionForHO_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +intraFreqSI_AcquisitionForHO_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +intraFreqSI_AcquisitionForHO_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +intraFreqSI_AcquisitionForHO_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +intraFreqSI_AcquisitionForHO_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + intraFreqSI_AcquisitionForHO_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +interFreqSI_AcquisitionForHO_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +interFreqSI_AcquisitionForHO_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +interFreqSI_AcquisitionForHO_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +interFreqSI_AcquisitionForHO_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +interFreqSI_AcquisitionForHO_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +interFreqSI_AcquisitionForHO_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +interFreqSI_AcquisitionForHO_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +interFreqSI_AcquisitionForHO_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +interFreqSI_AcquisitionForHO_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + interFreqSI_AcquisitionForHO_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +utran_SI_AcquisitionForHO_r9_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +utran_SI_AcquisitionForHO_r9_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +utran_SI_AcquisitionForHO_r9_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +utran_SI_AcquisitionForHO_r9_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +utran_SI_AcquisitionForHO_r9_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +utran_SI_AcquisitionForHO_r9_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +utran_SI_AcquisitionForHO_r9_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +utran_SI_AcquisitionForHO_r9_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +utran_SI_AcquisitionForHO_r9_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + utran_SI_AcquisitionForHO_r9_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_intraFreqSI_AcquisitionForHO_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_interFreqSI_AcquisitionForHO_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_utran_SI_AcquisitionForHO_r9_constr_6 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_intraFreqSI_AcquisitionForHO_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_intraFreqSI_AcquisitionForHO_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_intraFreqSI_AcquisitionForHO_r9_specs_2 = { + asn_MAP_intraFreqSI_AcquisitionForHO_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_intraFreqSI_AcquisitionForHO_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_intraFreqSI_AcquisitionForHO_r9_2 = { + "intraFreqSI-AcquisitionForHO-r9", + "intraFreqSI-AcquisitionForHO-r9", + intraFreqSI_AcquisitionForHO_r9_2_free, + intraFreqSI_AcquisitionForHO_r9_2_print, + intraFreqSI_AcquisitionForHO_r9_2_constraint, + intraFreqSI_AcquisitionForHO_r9_2_decode_ber, + intraFreqSI_AcquisitionForHO_r9_2_encode_der, + intraFreqSI_AcquisitionForHO_r9_2_decode_xer, + intraFreqSI_AcquisitionForHO_r9_2_encode_xer, + intraFreqSI_AcquisitionForHO_r9_2_decode_uper, + intraFreqSI_AcquisitionForHO_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2, + sizeof(asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2) + /sizeof(asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2) + /sizeof(asn_DEF_intraFreqSI_AcquisitionForHO_r9_tags_2[0]), /* 2 */ + &asn_PER_type_intraFreqSI_AcquisitionForHO_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_intraFreqSI_AcquisitionForHO_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_interFreqSI_AcquisitionForHO_r9_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_interFreqSI_AcquisitionForHO_r9_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_interFreqSI_AcquisitionForHO_r9_specs_4 = { + asn_MAP_interFreqSI_AcquisitionForHO_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_interFreqSI_AcquisitionForHO_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_interFreqSI_AcquisitionForHO_r9_4 = { + "interFreqSI-AcquisitionForHO-r9", + "interFreqSI-AcquisitionForHO-r9", + interFreqSI_AcquisitionForHO_r9_4_free, + interFreqSI_AcquisitionForHO_r9_4_print, + interFreqSI_AcquisitionForHO_r9_4_constraint, + interFreqSI_AcquisitionForHO_r9_4_decode_ber, + interFreqSI_AcquisitionForHO_r9_4_encode_der, + interFreqSI_AcquisitionForHO_r9_4_decode_xer, + interFreqSI_AcquisitionForHO_r9_4_encode_xer, + interFreqSI_AcquisitionForHO_r9_4_decode_uper, + interFreqSI_AcquisitionForHO_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4, + sizeof(asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4) + /sizeof(asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4) + /sizeof(asn_DEF_interFreqSI_AcquisitionForHO_r9_tags_4[0]), /* 2 */ + &asn_PER_type_interFreqSI_AcquisitionForHO_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_interFreqSI_AcquisitionForHO_r9_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_utran_SI_AcquisitionForHO_r9_value2enum_6[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_utran_SI_AcquisitionForHO_r9_enum2value_6[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_utran_SI_AcquisitionForHO_r9_specs_6 = { + asn_MAP_utran_SI_AcquisitionForHO_r9_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_utran_SI_AcquisitionForHO_r9_enum2value_6, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_utran_SI_AcquisitionForHO_r9_6 = { + "utran-SI-AcquisitionForHO-r9", + "utran-SI-AcquisitionForHO-r9", + utran_SI_AcquisitionForHO_r9_6_free, + utran_SI_AcquisitionForHO_r9_6_print, + utran_SI_AcquisitionForHO_r9_6_constraint, + utran_SI_AcquisitionForHO_r9_6_decode_ber, + utran_SI_AcquisitionForHO_r9_6_encode_der, + utran_SI_AcquisitionForHO_r9_6_decode_xer, + utran_SI_AcquisitionForHO_r9_6_encode_xer, + utran_SI_AcquisitionForHO_r9_6_decode_uper, + utran_SI_AcquisitionForHO_r9_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6, + sizeof(asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6) + /sizeof(asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6[0]) - 1, /* 1 */ + asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6, /* Same as above */ + sizeof(asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6) + /sizeof(asn_DEF_utran_SI_AcquisitionForHO_r9_tags_6[0]), /* 2 */ + &asn_PER_type_utran_SI_AcquisitionForHO_r9_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_utran_SI_AcquisitionForHO_r9_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_NeighCellSI_AcquisitionParameters_r9_1[] = { + { ATF_POINTER, 3, offsetof(struct NeighCellSI_AcquisitionParameters_r9, intraFreqSI_AcquisitionForHO_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_intraFreqSI_AcquisitionForHO_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraFreqSI-AcquisitionForHO-r9" + }, + { ATF_POINTER, 2, offsetof(struct NeighCellSI_AcquisitionParameters_r9, interFreqSI_AcquisitionForHO_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_interFreqSI_AcquisitionForHO_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqSI-AcquisitionForHO-r9" + }, + { ATF_POINTER, 1, offsetof(struct NeighCellSI_AcquisitionParameters_r9, utran_SI_AcquisitionForHO_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_utran_SI_AcquisitionForHO_r9_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utran-SI-AcquisitionForHO-r9" + }, +}; +static int asn_MAP_NeighCellSI_AcquisitionParameters_r9_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_NeighCellSI_AcquisitionParameters_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* intraFreqSI-AcquisitionForHO-r9 at 3999 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interFreqSI-AcquisitionForHO-r9 at 4000 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* utran-SI-AcquisitionForHO-r9 at 4001 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NeighCellSI_AcquisitionParameters_r9_specs_1 = { + sizeof(struct NeighCellSI_AcquisitionParameters_r9), + offsetof(struct NeighCellSI_AcquisitionParameters_r9, _asn_ctx), + asn_MAP_NeighCellSI_AcquisitionParameters_r9_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_NeighCellSI_AcquisitionParameters_r9_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellSI_AcquisitionParameters_r9 = { + "NeighCellSI-AcquisitionParameters-r9", + "NeighCellSI-AcquisitionParameters-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1, + sizeof(asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1) + /sizeof(asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1[0]), /* 1 */ + asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1) + /sizeof(asn_DEF_NeighCellSI_AcquisitionParameters_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_NeighCellSI_AcquisitionParameters_r9_1, + 3, /* Elements count */ + &asn_SPC_NeighCellSI_AcquisitionParameters_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h b/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h new file mode 100644 index 000000000..04128112d --- /dev/null +++ b/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellSI_AcquisitionParameters_r9_H_ +#define _NeighCellSI_AcquisitionParameters_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NeighCellSI_AcquisitionParameters_r9__intraFreqSI_AcquisitionForHO_r9 { + NeighCellSI_AcquisitionParameters_r9__intraFreqSI_AcquisitionForHO_r9_supported = 0 +} e_NeighCellSI_AcquisitionParameters_r9__intraFreqSI_AcquisitionForHO_r9; +typedef enum NeighCellSI_AcquisitionParameters_r9__interFreqSI_AcquisitionForHO_r9 { + NeighCellSI_AcquisitionParameters_r9__interFreqSI_AcquisitionForHO_r9_supported = 0 +} e_NeighCellSI_AcquisitionParameters_r9__interFreqSI_AcquisitionForHO_r9; +typedef enum NeighCellSI_AcquisitionParameters_r9__utran_SI_AcquisitionForHO_r9 { + NeighCellSI_AcquisitionParameters_r9__utran_SI_AcquisitionForHO_r9_supported = 0 +} e_NeighCellSI_AcquisitionParameters_r9__utran_SI_AcquisitionForHO_r9; + +/* NeighCellSI-AcquisitionParameters-r9 */ +typedef struct NeighCellSI_AcquisitionParameters_r9 { + long *intraFreqSI_AcquisitionForHO_r9 /* OPTIONAL */; + long *interFreqSI_AcquisitionForHO_r9 /* OPTIONAL */; + long *utran_SI_AcquisitionForHO_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellSI_AcquisitionParameters_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_intraFreqSI_AcquisitionForHO_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_interFreqSI_AcquisitionForHO_r9_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_utran_SI_AcquisitionForHO_r9_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellSI_AcquisitionParameters_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _NeighCellSI_AcquisitionParameters_r9_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.c b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.c new file mode 100644 index 000000000..588c5064f --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellsPerBandclassCDMA2000-v920.h" + +static asn_TYPE_member_t asn_MBR_NeighCellsPerBandclassCDMA2000_v920_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NeighCellsPerBandclassCDMA2000_v920, physCellIdList_v920), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdListCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdList-v920" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_NeighCellsPerBandclassCDMA2000_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* physCellIdList-v920 at 1719 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NeighCellsPerBandclassCDMA2000_v920_specs_1 = { + sizeof(struct NeighCellsPerBandclassCDMA2000_v920), + offsetof(struct NeighCellsPerBandclassCDMA2000_v920, _asn_ctx), + asn_MAP_NeighCellsPerBandclassCDMA2000_v920_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassCDMA2000_v920 = { + "NeighCellsPerBandclassCDMA2000-v920", + "NeighCellsPerBandclassCDMA2000-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1, + sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1[0]), /* 1 */ + asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_NeighCellsPerBandclassCDMA2000_v920_1, + 1, /* Elements count */ + &asn_SPC_NeighCellsPerBandclassCDMA2000_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h new file mode 100644 index 000000000..8a33d0353 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellsPerBandclassCDMA2000_v920_H_ +#define _NeighCellsPerBandclassCDMA2000_v920_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdListCDMA2000-v920.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NeighCellsPerBandclassCDMA2000-v920 */ +typedef struct NeighCellsPerBandclassCDMA2000_v920 { + PhysCellIdListCDMA2000_v920_t physCellIdList_v920; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellsPerBandclassCDMA2000_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassCDMA2000_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _NeighCellsPerBandclassCDMA2000_v920_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c new file mode 100644 index 000000000..df8c611b1 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellsPerBandclassCDMA2000.h" + +static asn_TYPE_member_t asn_MBR_NeighCellsPerBandclassCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct NeighCellsPerBandclassCDMA2000, arfcn), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "arfcn" + }, + { ATF_NOFLAGS, 0, offsetof(struct NeighCellsPerBandclassCDMA2000, physCellIdList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdListCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellIdList" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_NeighCellsPerBandclassCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* arfcn at 1705 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* physCellIdList at 1707 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NeighCellsPerBandclassCDMA2000_specs_1 = { + sizeof(struct NeighCellsPerBandclassCDMA2000), + offsetof(struct NeighCellsPerBandclassCDMA2000, _asn_ctx), + asn_MAP_NeighCellsPerBandclassCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassCDMA2000 = { + "NeighCellsPerBandclassCDMA2000", + "NeighCellsPerBandclassCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1, + sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_NeighCellsPerBandclassCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_NeighCellsPerBandclassCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h new file mode 100644 index 000000000..3b2205175 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellsPerBandclassCDMA2000_H_ +#define _NeighCellsPerBandclassCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueCDMA2000.h" +#include "PhysCellIdListCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NeighCellsPerBandclassCDMA2000 */ +typedef struct NeighCellsPerBandclassCDMA2000 { + ARFCN_ValueCDMA2000_t arfcn; + PhysCellIdListCDMA2000_t physCellIdList; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellsPerBandclassCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _NeighCellsPerBandclassCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.c b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.c new file mode 100644 index 000000000..a5f0d3b80 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellsPerBandclassListCDMA2000-v920.h" + +static asn_per_constraints_t asn_PER_type_NeighCellsPerBandclassListCDMA2000_v920_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_NeighCellsPerBandclassListCDMA2000_v920_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NeighCellsPerBandclassCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_NeighCellsPerBandclassListCDMA2000_v920_specs_1 = { + sizeof(struct NeighCellsPerBandclassListCDMA2000_v920), + offsetof(struct NeighCellsPerBandclassListCDMA2000_v920, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassListCDMA2000_v920 = { + "NeighCellsPerBandclassListCDMA2000-v920", + "NeighCellsPerBandclassListCDMA2000-v920", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1, + sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1[0]), /* 1 */ + asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_v920_tags_1[0]), /* 1 */ + &asn_PER_type_NeighCellsPerBandclassListCDMA2000_v920_constr_1, + asn_MBR_NeighCellsPerBandclassListCDMA2000_v920_1, + 1, /* Single element */ + &asn_SPC_NeighCellsPerBandclassListCDMA2000_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h new file mode 100644 index 000000000..c62caf169 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellsPerBandclassListCDMA2000_v920_H_ +#define _NeighCellsPerBandclassListCDMA2000_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NeighCellsPerBandclassCDMA2000_v920; + +/* NeighCellsPerBandclassListCDMA2000-v920 */ +typedef struct NeighCellsPerBandclassListCDMA2000_v920 { + A_SEQUENCE_OF(struct NeighCellsPerBandclassCDMA2000_v920) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellsPerBandclassListCDMA2000_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassListCDMA2000_v920; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "NeighCellsPerBandclassCDMA2000-v920.h" + +#endif /* _NeighCellsPerBandclassListCDMA2000_v920_H_ */ +#include diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.c b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.c new file mode 100644 index 000000000..4ae2be173 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NeighCellsPerBandclassListCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_NeighCellsPerBandclassListCDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_NeighCellsPerBandclassListCDMA2000_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NeighCellsPerBandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_NeighCellsPerBandclassListCDMA2000_specs_1 = { + sizeof(struct NeighCellsPerBandclassListCDMA2000), + offsetof(struct NeighCellsPerBandclassListCDMA2000, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassListCDMA2000 = { + "NeighCellsPerBandclassListCDMA2000", + "NeighCellsPerBandclassListCDMA2000", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1, + sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1) + /sizeof(asn_DEF_NeighCellsPerBandclassListCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_NeighCellsPerBandclassListCDMA2000_constr_1, + asn_MBR_NeighCellsPerBandclassListCDMA2000_1, + 1, /* Single element */ + &asn_SPC_NeighCellsPerBandclassListCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h new file mode 100644 index 000000000..97f5b3035 --- /dev/null +++ b/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NeighCellsPerBandclassListCDMA2000_H_ +#define _NeighCellsPerBandclassListCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NeighCellsPerBandclassCDMA2000; + +/* NeighCellsPerBandclassListCDMA2000 */ +typedef struct NeighCellsPerBandclassListCDMA2000 { + A_SEQUENCE_OF(struct NeighCellsPerBandclassCDMA2000) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NeighCellsPerBandclassListCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NeighCellsPerBandclassListCDMA2000; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "NeighCellsPerBandclassCDMA2000.h" + +#endif /* _NeighCellsPerBandclassListCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/NextHopChainingCount.c b/lte/rrc/asn/NextHopChainingCount.c new file mode 100644 index 000000000..9edf725dd --- /dev/null +++ b/lte/rrc/asn/NextHopChainingCount.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NextHopChainingCount.h" + +int +NextHopChainingCount_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +NextHopChainingCount_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +NextHopChainingCount_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +NextHopChainingCount_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +NextHopChainingCount_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +NextHopChainingCount_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +NextHopChainingCount_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +NextHopChainingCount_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +NextHopChainingCount_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +NextHopChainingCount_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + NextHopChainingCount_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_NextHopChainingCount_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_NextHopChainingCount_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_NextHopChainingCount = { + "NextHopChainingCount", + "NextHopChainingCount", + NextHopChainingCount_free, + NextHopChainingCount_print, + NextHopChainingCount_constraint, + NextHopChainingCount_decode_ber, + NextHopChainingCount_encode_der, + NextHopChainingCount_decode_xer, + NextHopChainingCount_encode_xer, + NextHopChainingCount_decode_uper, + NextHopChainingCount_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NextHopChainingCount_tags_1, + sizeof(asn_DEF_NextHopChainingCount_tags_1) + /sizeof(asn_DEF_NextHopChainingCount_tags_1[0]), /* 1 */ + asn_DEF_NextHopChainingCount_tags_1, /* Same as above */ + sizeof(asn_DEF_NextHopChainingCount_tags_1) + /sizeof(asn_DEF_NextHopChainingCount_tags_1[0]), /* 1 */ + &asn_PER_type_NextHopChainingCount_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/NextHopChainingCount.h b/lte/rrc/asn/NextHopChainingCount.h new file mode 100644 index 000000000..8ac341b69 --- /dev/null +++ b/lte/rrc/asn/NextHopChainingCount.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NextHopChainingCount_H_ +#define _NextHopChainingCount_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* NextHopChainingCount */ +typedef long NextHopChainingCount_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NextHopChainingCount; +asn_struct_free_f NextHopChainingCount_free; +asn_struct_print_f NextHopChainingCount_print; +asn_constr_check_f NextHopChainingCount_constraint; +ber_type_decoder_f NextHopChainingCount_decode_ber; +der_type_encoder_f NextHopChainingCount_encode_der; +xer_type_decoder_f NextHopChainingCount_decode_xer; +xer_type_encoder_f NextHopChainingCount_encode_xer; +per_type_decoder_f NextHopChainingCount_decode_uper; +per_type_encoder_f NextHopChainingCount_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _NextHopChainingCount_H_ */ +#include diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.c b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.c new file mode 100644 index 000000000..3aaadc833 --- /dev/null +++ b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NonContiguousUL-RA-WithinCC-List-r10.h" + +static asn_per_constraints_t asn_PER_type_NonContiguousUL_RA_WithinCC_List_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_NonContiguousUL_RA_WithinCC_List_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_NonContiguousUL_RA_WithinCC_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_NonContiguousUL_RA_WithinCC_List_r10_specs_1 = { + sizeof(struct NonContiguousUL_RA_WithinCC_List_r10), + offsetof(struct NonContiguousUL_RA_WithinCC_List_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_NonContiguousUL_RA_WithinCC_List_r10 = { + "NonContiguousUL-RA-WithinCC-List-r10", + "NonContiguousUL-RA-WithinCC-List-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1, + sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1) + /sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1[0]), /* 1 */ + asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1) + /sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_List_r10_tags_1[0]), /* 1 */ + &asn_PER_type_NonContiguousUL_RA_WithinCC_List_r10_constr_1, + asn_MBR_NonContiguousUL_RA_WithinCC_List_r10_1, + 1, /* Single element */ + &asn_SPC_NonContiguousUL_RA_WithinCC_List_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h new file mode 100644 index 000000000..0b3b7e7e2 --- /dev/null +++ b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NonContiguousUL_RA_WithinCC_List_r10_H_ +#define _NonContiguousUL_RA_WithinCC_List_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct NonContiguousUL_RA_WithinCC_r10; + +/* NonContiguousUL-RA-WithinCC-List-r10 */ +typedef struct NonContiguousUL_RA_WithinCC_List_r10 { + A_SEQUENCE_OF(struct NonContiguousUL_RA_WithinCC_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NonContiguousUL_RA_WithinCC_List_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_NonContiguousUL_RA_WithinCC_List_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "NonContiguousUL-RA-WithinCC-r10.h" + +#endif /* _NonContiguousUL_RA_WithinCC_List_r10_H_ */ +#include diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c new file mode 100644 index 000000000..71bc7e170 --- /dev/null +++ b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c @@ -0,0 +1,199 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "NonContiguousUL-RA-WithinCC-r10.h" + +static int +nonContiguousUL_RA_WithinCC_Info_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +nonContiguousUL_RA_WithinCC_Info_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +nonContiguousUL_RA_WithinCC_Info_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +nonContiguousUL_RA_WithinCC_Info_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +nonContiguousUL_RA_WithinCC_Info_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +nonContiguousUL_RA_WithinCC_Info_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +nonContiguousUL_RA_WithinCC_Info_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +nonContiguousUL_RA_WithinCC_Info_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +nonContiguousUL_RA_WithinCC_Info_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + nonContiguousUL_RA_WithinCC_Info_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_nonContiguousUL_RA_WithinCC_Info_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_nonContiguousUL_RA_WithinCC_Info_r10_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_nonContiguousUL_RA_WithinCC_Info_r10_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_nonContiguousUL_RA_WithinCC_Info_r10_specs_2 = { + asn_MAP_nonContiguousUL_RA_WithinCC_Info_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_nonContiguousUL_RA_WithinCC_Info_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_2 = { + "nonContiguousUL-RA-WithinCC-Info-r10", + "nonContiguousUL-RA-WithinCC-Info-r10", + nonContiguousUL_RA_WithinCC_Info_r10_2_free, + nonContiguousUL_RA_WithinCC_Info_r10_2_print, + nonContiguousUL_RA_WithinCC_Info_r10_2_constraint, + nonContiguousUL_RA_WithinCC_Info_r10_2_decode_ber, + nonContiguousUL_RA_WithinCC_Info_r10_2_encode_der, + nonContiguousUL_RA_WithinCC_Info_r10_2_decode_xer, + nonContiguousUL_RA_WithinCC_Info_r10_2_encode_xer, + nonContiguousUL_RA_WithinCC_Info_r10_2_decode_uper, + nonContiguousUL_RA_WithinCC_Info_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2, + sizeof(asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2) + /sizeof(asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2) + /sizeof(asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_tags_2[0]), /* 2 */ + &asn_PER_type_nonContiguousUL_RA_WithinCC_Info_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_nonContiguousUL_RA_WithinCC_Info_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_NonContiguousUL_RA_WithinCC_r10_1[] = { + { ATF_POINTER, 1, offsetof(struct NonContiguousUL_RA_WithinCC_r10, nonContiguousUL_RA_WithinCC_Info_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonContiguousUL-RA-WithinCC-Info-r10" + }, +}; +static int asn_MAP_NonContiguousUL_RA_WithinCC_r10_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_NonContiguousUL_RA_WithinCC_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonContiguousUL-RA-WithinCC-Info-r10 at 3820 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_NonContiguousUL_RA_WithinCC_r10_specs_1 = { + sizeof(struct NonContiguousUL_RA_WithinCC_r10), + offsetof(struct NonContiguousUL_RA_WithinCC_r10, _asn_ctx), + asn_MAP_NonContiguousUL_RA_WithinCC_r10_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_NonContiguousUL_RA_WithinCC_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_NonContiguousUL_RA_WithinCC_r10 = { + "NonContiguousUL-RA-WithinCC-r10", + "NonContiguousUL-RA-WithinCC-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1, + sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1) + /sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1[0]), /* 1 */ + asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1) + /sizeof(asn_DEF_NonContiguousUL_RA_WithinCC_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_NonContiguousUL_RA_WithinCC_r10_1, + 1, /* Elements count */ + &asn_SPC_NonContiguousUL_RA_WithinCC_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h new file mode 100644 index 000000000..011a925a5 --- /dev/null +++ b/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _NonContiguousUL_RA_WithinCC_r10_H_ +#define _NonContiguousUL_RA_WithinCC_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum NonContiguousUL_RA_WithinCC_r10__nonContiguousUL_RA_WithinCC_Info_r10 { + NonContiguousUL_RA_WithinCC_r10__nonContiguousUL_RA_WithinCC_Info_r10_supported = 0 +} e_NonContiguousUL_RA_WithinCC_r10__nonContiguousUL_RA_WithinCC_Info_r10; + +/* NonContiguousUL-RA-WithinCC-r10 */ +typedef struct NonContiguousUL_RA_WithinCC_r10 { + long *nonContiguousUL_RA_WithinCC_Info_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} NonContiguousUL_RA_WithinCC_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_nonContiguousUL_RA_WithinCC_Info_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_NonContiguousUL_RA_WithinCC_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _NonContiguousUL_RA_WithinCC_r10_H_ */ +#include diff --git a/lte/rrc/asn/OCTET_STRING.c b/lte/rrc/asn/OCTET_STRING.c index ece27a283..74c6a0475 100644 --- a/lte/rrc/asn/OCTET_STRING.c +++ b/lte/rrc/asn/OCTET_STRING.c @@ -6,20 +6,19 @@ #include #include #include /* for .bits_unused member */ -#include /* * OCTET STRING basic type description. */ -static const ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { +static ber_tlv_tag_t asn_DEF_OCTET_STRING_tags[] = { (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)) }; -static const asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = { +static asn_OCTET_STRING_specifics_t asn_DEF_OCTET_STRING_specs = { sizeof(OCTET_STRING_t), offsetof(OCTET_STRING_t, _asn_ctx), ASN_OSUBV_STR }; -static const asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { +static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = { { APC_CONSTRAINED, 8, 8, 0, 255 }, { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 }, 0, 0 @@ -580,7 +579,7 @@ asn_enc_rval_t OCTET_STRING_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, int ilevel, enum xer_encoder_flags_e flags, asn_app_consume_bytes_f *cb, void *app_key) { - const char * const h2c = "0123456789ABCDEF"; + static const char *h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; asn_enc_rval_t er; char scratch[16 * 3 + 4]; @@ -639,8 +638,8 @@ cb_failed: _ASN_ENCODE_FAILED; } -static const struct OCTET_STRING__xer_escape_table_s { - const char *string; +static struct OCTET_STRING__xer_escape_table_s { + char *string; int size; } OCTET_STRING__xer_escape_table[] = { #define OSXET(s) { s, sizeof(s) - 1 } @@ -702,7 +701,7 @@ OS__check_escaped_control_char(const void *buf, int size) { * nested table lookups). */ for(i = 0; i < 32 /* Don't spend time on the bottom half */; i++) { - const struct OCTET_STRING__xer_escape_table_s *el; + struct OCTET_STRING__xer_escape_table_s *el; el = &OCTET_STRING__xer_escape_table[i]; if(el->size == size && memcmp(buf, el->string, size) == 0) return i; @@ -1571,7 +1570,7 @@ OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, csiz->lower_bound, csiz->upper_bound, csiz->effective_bits, ct_extensible ? " EXT" : ""); - /* Figure out whether size lies within PER visible constraint */ + /* Figure out wheter size lies within PER visible constraint */ if(csiz->effective_bits >= 0) { if((int)sizeinunits < csiz->lower_bound @@ -1655,7 +1654,7 @@ OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, int OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { - const char * const h2c = "0123456789ABCDEF"; + static const char *h2c = "0123456789ABCDEF"; const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; char scratch[16 * 3 + 4]; char *p = scratch; diff --git a/lte/rrc/asn/OCTET_STRING.h b/lte/rrc/asn/OCTET_STRING.h index 013c7b13f..8df9a182d 100644 --- a/lte/rrc/asn/OCTET_STRING.h +++ b/lte/rrc/asn/OCTET_STRING.h @@ -63,7 +63,7 @@ OCTET_STRING_t *OCTET_STRING_new_fromBuf(asn_TYPE_descriptor_t *td, * Internally useful stuff. * ****************************/ -typedef const struct asn_OCTET_STRING_specifics_s { +typedef struct asn_OCTET_STRING_specifics_s { /* * Target structure description. */ diff --git a/lte/rrc/asn/OtherConfig-r9.c b/lte/rrc/asn/OtherConfig-r9.c new file mode 100644 index 000000000..a11cabe56 --- /dev/null +++ b/lte/rrc/asn/OtherConfig-r9.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "OtherConfig-r9.h" + +static asn_TYPE_member_t asn_MBR_OtherConfig_r9_1[] = { + { ATF_POINTER, 1, offsetof(struct OtherConfig_r9, reportProximityConfig_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportProximityConfig_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportProximityConfig-r9" + }, +}; +static int asn_MAP_OtherConfig_r9_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_OtherConfig_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_OtherConfig_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* reportProximityConfig-r9 at 3684 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_OtherConfig_r9_specs_1 = { + sizeof(struct OtherConfig_r9), + offsetof(struct OtherConfig_r9, _asn_ctx), + asn_MAP_OtherConfig_r9_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_OtherConfig_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_OtherConfig_r9 = { + "OtherConfig-r9", + "OtherConfig-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_OtherConfig_r9_tags_1, + sizeof(asn_DEF_OtherConfig_r9_tags_1) + /sizeof(asn_DEF_OtherConfig_r9_tags_1[0]), /* 1 */ + asn_DEF_OtherConfig_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_OtherConfig_r9_tags_1) + /sizeof(asn_DEF_OtherConfig_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_OtherConfig_r9_1, + 1, /* Elements count */ + &asn_SPC_OtherConfig_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/OtherConfig-r9.h b/lte/rrc/asn/OtherConfig-r9.h new file mode 100644 index 000000000..cb3c80def --- /dev/null +++ b/lte/rrc/asn/OtherConfig-r9.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _OtherConfig_r9_H_ +#define _OtherConfig_r9_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ReportProximityConfig_r9; + +/* OtherConfig-r9 */ +typedef struct OtherConfig_r9 { + struct ReportProximityConfig_r9 *reportProximityConfig_r9 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} OtherConfig_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_OtherConfig_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ReportProximityConfig-r9.h" + +#endif /* _OtherConfig_r9_H_ */ +#include diff --git a/lte/rrc/asn/P-Max.c b/lte/rrc/asn/P-Max.c index ab19b8667..634151f0d 100644 --- a/lte/rrc/asn/P-Max.c +++ b/lte/rrc/asn/P-Max.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "P-Max.h" @@ -39,7 +40,6 @@ static void P_Max_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; - td->check_constraints = asn_DEF_NativeInteger.check_constraints; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; @@ -112,12 +112,12 @@ P_Max_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_P_Max_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_P_Max_constr_1 = { { APC_CONSTRAINED, 6, 6, -30, 33 } /* (-30..33) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_P_Max_tags_1[] = { +static ber_tlv_tag_t asn_DEF_P_Max_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_P_Max = { diff --git a/lte/rrc/asn/P-Max.h b/lte/rrc/asn/P-Max.h index 025d22b23..a7667dee9 100644 --- a/lte/rrc/asn/P-Max.h +++ b/lte/rrc/asn/P-Max.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _P_Max_H_ diff --git a/lte/rrc/asn/PCCH-Config.c b/lte/rrc/asn/PCCH-Config.c new file mode 100644 index 000000000..c7b373165 --- /dev/null +++ b/lte/rrc/asn/PCCH-Config.c @@ -0,0 +1,364 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PCCH-Config.h" + +static int +defaultPagingCycle_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +defaultPagingCycle_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +defaultPagingCycle_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +defaultPagingCycle_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +defaultPagingCycle_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +defaultPagingCycle_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +defaultPagingCycle_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +defaultPagingCycle_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +defaultPagingCycle_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +defaultPagingCycle_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + defaultPagingCycle_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +nB_7_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +nB_7_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +nB_7_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + nB_7_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +nB_7_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + nB_7_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +nB_7_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + nB_7_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +nB_7_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + nB_7_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +nB_7_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + nB_7_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +nB_7_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + nB_7_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +nB_7_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + nB_7_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +nB_7_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + nB_7_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_defaultPagingCycle_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_nB_constr_7 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_defaultPagingCycle_value2enum_2[] = { + { 0, 4, "rf32" }, + { 1, 4, "rf64" }, + { 2, 5, "rf128" }, + { 3, 5, "rf256" } +}; +static unsigned int asn_MAP_defaultPagingCycle_enum2value_2[] = { + 2, /* rf128(2) */ + 3, /* rf256(3) */ + 0, /* rf32(0) */ + 1 /* rf64(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_defaultPagingCycle_specs_2 = { + asn_MAP_defaultPagingCycle_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_defaultPagingCycle_enum2value_2, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_defaultPagingCycle_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_defaultPagingCycle_2 = { + "defaultPagingCycle", + "defaultPagingCycle", + defaultPagingCycle_2_free, + defaultPagingCycle_2_print, + defaultPagingCycle_2_constraint, + defaultPagingCycle_2_decode_ber, + defaultPagingCycle_2_encode_der, + defaultPagingCycle_2_decode_xer, + defaultPagingCycle_2_encode_xer, + defaultPagingCycle_2_decode_uper, + defaultPagingCycle_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_defaultPagingCycle_tags_2, + sizeof(asn_DEF_defaultPagingCycle_tags_2) + /sizeof(asn_DEF_defaultPagingCycle_tags_2[0]) - 1, /* 1 */ + asn_DEF_defaultPagingCycle_tags_2, /* Same as above */ + sizeof(asn_DEF_defaultPagingCycle_tags_2) + /sizeof(asn_DEF_defaultPagingCycle_tags_2[0]), /* 2 */ + &asn_PER_type_defaultPagingCycle_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_defaultPagingCycle_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_nB_value2enum_7[] = { + { 0, 5, "fourT" }, + { 1, 4, "twoT" }, + { 2, 4, "oneT" }, + { 3, 5, "halfT" }, + { 4, 8, "quarterT" }, + { 5, 10, "oneEighthT" }, + { 6, 13, "oneSixteenthT" }, + { 7, 16, "oneThirtySecondT" } +}; +static unsigned int asn_MAP_nB_enum2value_7[] = { + 0, /* fourT(0) */ + 3, /* halfT(3) */ + 5, /* oneEighthT(5) */ + 6, /* oneSixteenthT(6) */ + 2, /* oneT(2) */ + 7, /* oneThirtySecondT(7) */ + 4, /* quarterT(4) */ + 1 /* twoT(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_nB_specs_7 = { + asn_MAP_nB_value2enum_7, /* "tag" => N; sorted by tag */ + asn_MAP_nB_enum2value_7, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_nB_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nB_7 = { + "nB", + "nB", + nB_7_free, + nB_7_print, + nB_7_constraint, + nB_7_decode_ber, + nB_7_encode_der, + nB_7_decode_xer, + nB_7_encode_xer, + nB_7_decode_uper, + nB_7_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nB_tags_7, + sizeof(asn_DEF_nB_tags_7) + /sizeof(asn_DEF_nB_tags_7[0]) - 1, /* 1 */ + asn_DEF_nB_tags_7, /* Same as above */ + sizeof(asn_DEF_nB_tags_7) + /sizeof(asn_DEF_nB_tags_7[0]), /* 2 */ + &asn_PER_type_nB_constr_7, + 0, 0, /* Defined elsewhere */ + &asn_SPC_nB_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PCCH_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PCCH_Config, defaultPagingCycle), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_defaultPagingCycle_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "defaultPagingCycle" + }, + { ATF_NOFLAGS, 0, offsetof(struct PCCH_Config, nB), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_nB_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nB" + }, +}; +static ber_tlv_tag_t asn_DEF_PCCH_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PCCH_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* defaultPagingCycle at 2433 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nB at 2435 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PCCH_Config_specs_1 = { + sizeof(struct PCCH_Config), + offsetof(struct PCCH_Config, _asn_ctx), + asn_MAP_PCCH_Config_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PCCH_Config = { + "PCCH-Config", + "PCCH-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PCCH_Config_tags_1, + sizeof(asn_DEF_PCCH_Config_tags_1) + /sizeof(asn_DEF_PCCH_Config_tags_1[0]), /* 1 */ + asn_DEF_PCCH_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_PCCH_Config_tags_1) + /sizeof(asn_DEF_PCCH_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PCCH_Config_1, + 2, /* Elements count */ + &asn_SPC_PCCH_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PCCH-Config.h b/lte/rrc/asn/PCCH-Config.h new file mode 100644 index 000000000..0dc2cc16b --- /dev/null +++ b/lte/rrc/asn/PCCH-Config.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PCCH_Config_H_ +#define _PCCH_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PCCH_Config__defaultPagingCycle { + PCCH_Config__defaultPagingCycle_rf32 = 0, + PCCH_Config__defaultPagingCycle_rf64 = 1, + PCCH_Config__defaultPagingCycle_rf128 = 2, + PCCH_Config__defaultPagingCycle_rf256 = 3 +} e_PCCH_Config__defaultPagingCycle; +typedef enum PCCH_Config__nB { + PCCH_Config__nB_fourT = 0, + PCCH_Config__nB_twoT = 1, + PCCH_Config__nB_oneT = 2, + PCCH_Config__nB_halfT = 3, + PCCH_Config__nB_quarterT = 4, + PCCH_Config__nB_oneEighthT = 5, + PCCH_Config__nB_oneSixteenthT = 6, + PCCH_Config__nB_oneThirtySecondT = 7 +} e_PCCH_Config__nB; + +/* PCCH-Config */ +typedef struct PCCH_Config { + long defaultPagingCycle; + long nB; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PCCH_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_defaultPagingCycle_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_nB_7; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PCCH_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _PCCH_Config_H_ */ +#include diff --git a/lte/rrc/asn/PCCH-Message.c b/lte/rrc/asn/PCCH-Message.c new file mode 100644 index 000000000..d42adcf53 --- /dev/null +++ b/lte/rrc/asn/PCCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PCCH-Message.h" + +static asn_TYPE_member_t asn_MBR_PCCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PCCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PCCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_PCCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PCCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 45 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PCCH_Message_specs_1 = { + sizeof(struct PCCH_Message), + offsetof(struct PCCH_Message, _asn_ctx), + asn_MAP_PCCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PCCH_Message = { + "PCCH-Message", + "PCCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PCCH_Message_tags_1, + sizeof(asn_DEF_PCCH_Message_tags_1) + /sizeof(asn_DEF_PCCH_Message_tags_1[0]), /* 1 */ + asn_DEF_PCCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_PCCH_Message_tags_1) + /sizeof(asn_DEF_PCCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PCCH_Message_1, + 1, /* Elements count */ + &asn_SPC_PCCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PCCH-Message.h b/lte/rrc/asn/PCCH-Message.h new file mode 100644 index 000000000..19caa99ac --- /dev/null +++ b/lte/rrc/asn/PCCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PCCH_Message_H_ +#define _PCCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "PCCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PCCH-Message */ +typedef struct PCCH_Message { + PCCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PCCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PCCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _PCCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/PCCH-MessageType.c b/lte/rrc/asn/PCCH-MessageType.c new file mode 100644 index 000000000..6f3305d54 --- /dev/null +++ b/lte/rrc/asn/PCCH-MessageType.c @@ -0,0 +1,162 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PCCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_PCCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct PCCH_MessageType__c1, choice.paging), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Paging, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "paging" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* paging at 50 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct PCCH_MessageType__c1), + offsetof(struct PCCH_MessageType__c1, _asn_ctx), + offsetof(struct PCCH_MessageType__c1, present), + sizeof(((struct PCCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 1, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 1, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_4 = { + sizeof(struct PCCH_MessageType__messageClassExtension), + offsetof(struct PCCH_MessageType__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_4 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_4, + sizeof(asn_DEF_messageClassExtension_tags_4) + /sizeof(asn_DEF_messageClassExtension_tags_4[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_4, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_4) + /sizeof(asn_DEF_messageClassExtension_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PCCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PCCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct PCCH_MessageType, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_PCCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 50 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 51 */ +}; +static asn_CHOICE_specifics_t asn_SPC_PCCH_MessageType_specs_1 = { + sizeof(struct PCCH_MessageType), + offsetof(struct PCCH_MessageType, _asn_ctx), + offsetof(struct PCCH_MessageType, present), + sizeof(((struct PCCH_MessageType *)0)->present), + asn_MAP_PCCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PCCH_MessageType = { + "PCCH-MessageType", + "PCCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_PCCH_MessageType_constr_1, + asn_MBR_PCCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_PCCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PCCH-MessageType.h b/lte/rrc/asn/PCCH-MessageType.h new file mode 100644 index 000000000..6c0135958 --- /dev/null +++ b/lte/rrc/asn/PCCH-MessageType.h @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PCCH_MessageType_H_ +#define _PCCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "Paging.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PCCH_MessageType_PR { + PCCH_MessageType_PR_NOTHING, /* No components present */ + PCCH_MessageType_PR_c1, + PCCH_MessageType_PR_messageClassExtension +} PCCH_MessageType_PR; +typedef enum PCCH_MessageType__c1_PR { + PCCH_MessageType__c1_PR_NOTHING, /* No components present */ + PCCH_MessageType__c1_PR_paging +} PCCH_MessageType__c1_PR; + +/* PCCH-MessageType */ +typedef struct PCCH_MessageType { + PCCH_MessageType_PR present; + union PCCH_MessageType_u { + struct PCCH_MessageType__c1 { + PCCH_MessageType__c1_PR present; + union PCCH_MessageType__c1_u { + Paging_t paging; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct PCCH_MessageType__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PCCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PCCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _PCCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/PDCP-Config.c b/lte/rrc/asn/PDCP-Config.c new file mode 100644 index 000000000..678bfeddb --- /dev/null +++ b/lte/rrc/asn/PDCP-Config.c @@ -0,0 +1,944 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PDCP-Config.h" + +static int +discardTimer_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +discardTimer_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +discardTimer_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + discardTimer_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +discardTimer_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +discardTimer_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +discardTimer_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +discardTimer_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +discardTimer_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +discardTimer_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +discardTimer_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + discardTimer_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +pdcp_SN_Size_14_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +pdcp_SN_Size_14_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +pdcp_SN_Size_14_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +pdcp_SN_Size_14_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +pdcp_SN_Size_14_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +pdcp_SN_Size_14_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +pdcp_SN_Size_14_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +pdcp_SN_Size_14_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +pdcp_SN_Size_14_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +pdcp_SN_Size_14_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + pdcp_SN_Size_14_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_maxCID_constraint_19(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 16383)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +rn_IntegrityProtection_r10_32_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rn_IntegrityProtection_r10_32_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rn_IntegrityProtection_r10_32_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rn_IntegrityProtection_r10_32_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rn_IntegrityProtection_r10_32_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rn_IntegrityProtection_r10_32_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rn_IntegrityProtection_r10_32_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rn_IntegrityProtection_r10_32_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rn_IntegrityProtection_r10_32_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rn_IntegrityProtection_r10_32_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_discardTimer_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_pdcp_SN_Size_constr_14 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_maxCID_constr_20 = { + { APC_CONSTRAINED, 14, 14, 1, 16383 } /* (1..16383) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_headerCompression_constr_17 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_rn_IntegrityProtection_r10_constr_32 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_discardTimer_value2enum_2[] = { + { 0, 4, "ms50" }, + { 1, 5, "ms100" }, + { 2, 5, "ms150" }, + { 3, 5, "ms300" }, + { 4, 5, "ms500" }, + { 5, 5, "ms750" }, + { 6, 6, "ms1500" }, + { 7, 8, "infinity" } +}; +static unsigned int asn_MAP_discardTimer_enum2value_2[] = { + 7, /* infinity(7) */ + 1, /* ms100(1) */ + 2, /* ms150(2) */ + 6, /* ms1500(6) */ + 3, /* ms300(3) */ + 0, /* ms50(0) */ + 4, /* ms500(4) */ + 5 /* ms750(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_discardTimer_specs_2 = { + asn_MAP_discardTimer_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_discardTimer_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_discardTimer_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_discardTimer_2 = { + "discardTimer", + "discardTimer", + discardTimer_2_free, + discardTimer_2_print, + discardTimer_2_constraint, + discardTimer_2_decode_ber, + discardTimer_2_encode_der, + discardTimer_2_decode_xer, + discardTimer_2_encode_xer, + discardTimer_2_decode_uper, + discardTimer_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_discardTimer_tags_2, + sizeof(asn_DEF_discardTimer_tags_2) + /sizeof(asn_DEF_discardTimer_tags_2[0]) - 1, /* 1 */ + asn_DEF_discardTimer_tags_2, /* Same as above */ + sizeof(asn_DEF_discardTimer_tags_2) + /sizeof(asn_DEF_discardTimer_tags_2[0]), /* 2 */ + &asn_PER_type_discardTimer_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_discardTimer_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_rlc_AM_11[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__rlc_AM, statusReportRequired), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "statusReportRequired" + }, +}; +static ber_tlv_tag_t asn_DEF_rlc_AM_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_rlc_AM_tag2el_11[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* statusReportRequired at 2090 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_rlc_AM_specs_11 = { + sizeof(struct PDCP_Config__rlc_AM), + offsetof(struct PDCP_Config__rlc_AM, _asn_ctx), + asn_MAP_rlc_AM_tag2el_11, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rlc_AM_11 = { + "rlc-AM", + "rlc-AM", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rlc_AM_tags_11, + sizeof(asn_DEF_rlc_AM_tags_11) + /sizeof(asn_DEF_rlc_AM_tags_11[0]) - 1, /* 1 */ + asn_DEF_rlc_AM_tags_11, /* Same as above */ + sizeof(asn_DEF_rlc_AM_tags_11) + /sizeof(asn_DEF_rlc_AM_tags_11[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_rlc_AM_11, + 1, /* Elements count */ + &asn_SPC_rlc_AM_specs_11 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_pdcp_SN_Size_value2enum_14[] = { + { 0, 8, "len7bits" }, + { 1, 9, "len12bits" } +}; +static unsigned int asn_MAP_pdcp_SN_Size_enum2value_14[] = { + 1, /* len12bits(1) */ + 0 /* len7bits(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_pdcp_SN_Size_specs_14 = { + asn_MAP_pdcp_SN_Size_value2enum_14, /* "tag" => N; sorted by tag */ + asn_MAP_pdcp_SN_Size_enum2value_14, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_pdcp_SN_Size_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pdcp_SN_Size_14 = { + "pdcp-SN-Size", + "pdcp-SN-Size", + pdcp_SN_Size_14_free, + pdcp_SN_Size_14_print, + pdcp_SN_Size_14_constraint, + pdcp_SN_Size_14_decode_ber, + pdcp_SN_Size_14_encode_der, + pdcp_SN_Size_14_decode_xer, + pdcp_SN_Size_14_encode_xer, + pdcp_SN_Size_14_decode_uper, + pdcp_SN_Size_14_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pdcp_SN_Size_tags_14, + sizeof(asn_DEF_pdcp_SN_Size_tags_14) + /sizeof(asn_DEF_pdcp_SN_Size_tags_14[0]) - 1, /* 1 */ + asn_DEF_pdcp_SN_Size_tags_14, /* Same as above */ + sizeof(asn_DEF_pdcp_SN_Size_tags_14) + /sizeof(asn_DEF_pdcp_SN_Size_tags_14[0]), /* 2 */ + &asn_PER_type_pdcp_SN_Size_constr_14, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pdcp_SN_Size_specs_14 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_rlc_UM_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__rlc_UM, pdcp_SN_Size), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pdcp_SN_Size_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdcp-SN-Size" + }, +}; +static ber_tlv_tag_t asn_DEF_rlc_UM_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_rlc_UM_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* pdcp-SN-Size at 2093 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_rlc_UM_specs_13 = { + sizeof(struct PDCP_Config__rlc_UM), + offsetof(struct PDCP_Config__rlc_UM, _asn_ctx), + asn_MAP_rlc_UM_tag2el_13, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rlc_UM_13 = { + "rlc-UM", + "rlc-UM", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rlc_UM_tags_13, + sizeof(asn_DEF_rlc_UM_tags_13) + /sizeof(asn_DEF_rlc_UM_tags_13[0]) - 1, /* 1 */ + asn_DEF_rlc_UM_tags_13, /* Same as above */ + sizeof(asn_DEF_rlc_UM_tags_13) + /sizeof(asn_DEF_rlc_UM_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_rlc_UM_13, + 1, /* Elements count */ + &asn_SPC_rlc_UM_specs_13 /* Additional specs */ +}; + +static int asn_DFL_20_set_15(int set_value, void **sptr) { + long *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 15 */ + *st = 15; + return 0; + } else { + /* Test default value 15 */ + return (*st == 15); + } +} +static asn_TYPE_member_t asn_MBR_profiles_21[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0001), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0001" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0002), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0002" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0003), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0003" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0004), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0004" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0006), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0006" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0101), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0101" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0102), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0102" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0103), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0103" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc__profiles, profile0x0104), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0104" + }, +}; +static ber_tlv_tag_t asn_DEF_profiles_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_profiles_tag2el_21[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* profile0x0001 at 2100 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* profile0x0002 at 2101 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* profile0x0003 at 2102 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* profile0x0004 at 2103 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* profile0x0006 at 2104 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* profile0x0101 at 2105 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* profile0x0102 at 2106 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* profile0x0103 at 2107 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* profile0x0104 at 2108 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_profiles_specs_21 = { + sizeof(struct PDCP_Config__headerCompression__rohc__profiles), + offsetof(struct PDCP_Config__headerCompression__rohc__profiles, _asn_ctx), + asn_MAP_profiles_tag2el_21, + 9, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_profiles_21 = { + "profiles", + "profiles", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_profiles_tags_21, + sizeof(asn_DEF_profiles_tags_21) + /sizeof(asn_DEF_profiles_tags_21[0]) - 1, /* 1 */ + asn_DEF_profiles_tags_21, /* Same as above */ + sizeof(asn_DEF_profiles_tags_21) + /sizeof(asn_DEF_profiles_tags_21[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_profiles_21, + 9, /* Elements count */ + &asn_SPC_profiles_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_rohc_19[] = { + { ATF_POINTER, 1, offsetof(struct PDCP_Config__headerCompression__rohc, maxCID), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_maxCID_constraint_19, + &asn_PER_memb_maxCID_constr_20, + asn_DFL_20_set_15, /* DEFAULT 15 */ + "maxCID" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression__rohc, profiles), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_profiles_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profiles" + }, +}; +static int asn_MAP_rohc_oms_19[] = { 0 }; +static ber_tlv_tag_t asn_DEF_rohc_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_rohc_tag2el_19[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* maxCID at 2098 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* profiles at 2100 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_rohc_specs_19 = { + sizeof(struct PDCP_Config__headerCompression__rohc), + offsetof(struct PDCP_Config__headerCompression__rohc, _asn_ctx), + asn_MAP_rohc_tag2el_19, + 2, /* Count of tags in the map */ + asn_MAP_rohc_oms_19, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rohc_19 = { + "rohc", + "rohc", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rohc_tags_19, + sizeof(asn_DEF_rohc_tags_19) + /sizeof(asn_DEF_rohc_tags_19[0]) - 1, /* 1 */ + asn_DEF_rohc_tags_19, /* Same as above */ + sizeof(asn_DEF_rohc_tags_19) + /sizeof(asn_DEF_rohc_tags_19[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_rohc_19, + 2, /* Elements count */ + &asn_SPC_rohc_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_headerCompression_17[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression, choice.notUsed), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "notUsed" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config__headerCompression, choice.rohc), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_rohc_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rohc" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_headerCompression_tag2el_17[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* notUsed at 2096 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rohc at 2098 */ +}; +static asn_CHOICE_specifics_t asn_SPC_headerCompression_specs_17 = { + sizeof(struct PDCP_Config__headerCompression), + offsetof(struct PDCP_Config__headerCompression, _asn_ctx), + offsetof(struct PDCP_Config__headerCompression, present), + sizeof(((struct PDCP_Config__headerCompression *)0)->present), + asn_MAP_headerCompression_tag2el_17, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_headerCompression_17 = { + "headerCompression", + "headerCompression", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_headerCompression_constr_17, + asn_MBR_headerCompression_17, + 2, /* Elements count */ + &asn_SPC_headerCompression_specs_17 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_rn_IntegrityProtection_r10_value2enum_32[] = { + { 0, 7, "enabled" } +}; +static unsigned int asn_MAP_rn_IntegrityProtection_r10_enum2value_32[] = { + 0 /* enabled(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rn_IntegrityProtection_r10_specs_32 = { + asn_MAP_rn_IntegrityProtection_r10_value2enum_32, /* "tag" => N; sorted by tag */ + asn_MAP_rn_IntegrityProtection_r10_enum2value_32, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rn_IntegrityProtection_r10_tags_32[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rn_IntegrityProtection_r10_32 = { + "rn-IntegrityProtection-r10", + "rn-IntegrityProtection-r10", + rn_IntegrityProtection_r10_32_free, + rn_IntegrityProtection_r10_32_print, + rn_IntegrityProtection_r10_32_constraint, + rn_IntegrityProtection_r10_32_decode_ber, + rn_IntegrityProtection_r10_32_encode_der, + rn_IntegrityProtection_r10_32_decode_xer, + rn_IntegrityProtection_r10_32_encode_xer, + rn_IntegrityProtection_r10_32_decode_uper, + rn_IntegrityProtection_r10_32_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rn_IntegrityProtection_r10_tags_32, + sizeof(asn_DEF_rn_IntegrityProtection_r10_tags_32) + /sizeof(asn_DEF_rn_IntegrityProtection_r10_tags_32[0]) - 1, /* 1 */ + asn_DEF_rn_IntegrityProtection_r10_tags_32, /* Same as above */ + sizeof(asn_DEF_rn_IntegrityProtection_r10_tags_32) + /sizeof(asn_DEF_rn_IntegrityProtection_r10_tags_32[0]), /* 2 */ + &asn_PER_type_rn_IntegrityProtection_r10_constr_32, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rn_IntegrityProtection_r10_specs_32 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PDCP_Config_1[] = { + { ATF_POINTER, 3, offsetof(struct PDCP_Config, discardTimer), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_discardTimer_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "discardTimer" + }, + { ATF_POINTER, 2, offsetof(struct PDCP_Config, rlc_AM), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_rlc_AM_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlc-AM" + }, + { ATF_POINTER, 1, offsetof(struct PDCP_Config, rlc_UM), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_rlc_UM_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlc-UM" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Config, headerCompression), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_headerCompression_17, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "headerCompression" + }, + { ATF_POINTER, 1, offsetof(struct PDCP_Config, rn_IntegrityProtection_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rn_IntegrityProtection_r10_32, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rn-IntegrityProtection-r10" + }, +}; +static int asn_MAP_PDCP_Config_oms_1[] = { 0, 1, 2, 4 }; +static ber_tlv_tag_t asn_DEF_PDCP_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PDCP_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* discardTimer at 2086 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlc-AM at 2091 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rlc-UM at 2094 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* headerCompression at 2096 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* rn-IntegrityProtection-r10 at 2113 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PDCP_Config_specs_1 = { + sizeof(struct PDCP_Config), + offsetof(struct PDCP_Config, _asn_ctx), + asn_MAP_PDCP_Config_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_PDCP_Config_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PDCP_Config = { + "PDCP-Config", + "PDCP-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PDCP_Config_tags_1, + sizeof(asn_DEF_PDCP_Config_tags_1) + /sizeof(asn_DEF_PDCP_Config_tags_1[0]), /* 1 */ + asn_DEF_PDCP_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCP_Config_tags_1) + /sizeof(asn_DEF_PDCP_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PDCP_Config_1, + 5, /* Elements count */ + &asn_SPC_PDCP_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PDCP-Config.h b/lte/rrc/asn/PDCP-Config.h new file mode 100644 index 000000000..0a4af13ff --- /dev/null +++ b/lte/rrc/asn/PDCP-Config.h @@ -0,0 +1,115 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PDCP_Config_H_ +#define _PDCP_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PDCP_Config__discardTimer { + PDCP_Config__discardTimer_ms50 = 0, + PDCP_Config__discardTimer_ms100 = 1, + PDCP_Config__discardTimer_ms150 = 2, + PDCP_Config__discardTimer_ms300 = 3, + PDCP_Config__discardTimer_ms500 = 4, + PDCP_Config__discardTimer_ms750 = 5, + PDCP_Config__discardTimer_ms1500 = 6, + PDCP_Config__discardTimer_infinity = 7 +} e_PDCP_Config__discardTimer; +typedef enum PDCP_Config__rlc_UM__pdcp_SN_Size { + PDCP_Config__rlc_UM__pdcp_SN_Size_len7bits = 0, + PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits = 1 +} e_PDCP_Config__rlc_UM__pdcp_SN_Size; +typedef enum PDCP_Config__headerCompression_PR { + PDCP_Config__headerCompression_PR_NOTHING, /* No components present */ + PDCP_Config__headerCompression_PR_notUsed, + PDCP_Config__headerCompression_PR_rohc +} PDCP_Config__headerCompression_PR; +typedef enum PDCP_Config__rn_IntegrityProtection_r10 { + PDCP_Config__rn_IntegrityProtection_r10_enabled = 0 +} e_PDCP_Config__rn_IntegrityProtection_r10; + +/* PDCP-Config */ +typedef struct PDCP_Config { + long *discardTimer /* OPTIONAL */; + struct PDCP_Config__rlc_AM { + BOOLEAN_t statusReportRequired; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *rlc_AM; + struct PDCP_Config__rlc_UM { + long pdcp_SN_Size; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *rlc_UM; + struct PDCP_Config__headerCompression { + PDCP_Config__headerCompression_PR present; + union PDCP_Config__headerCompression_u { + NULL_t notUsed; + struct PDCP_Config__headerCompression__rohc { + long *maxCID /* DEFAULT 15 */; + struct PDCP_Config__headerCompression__rohc__profiles { + BOOLEAN_t profile0x0001; + BOOLEAN_t profile0x0002; + BOOLEAN_t profile0x0003; + BOOLEAN_t profile0x0004; + BOOLEAN_t profile0x0006; + BOOLEAN_t profile0x0101; + BOOLEAN_t profile0x0102; + BOOLEAN_t profile0x0103; + BOOLEAN_t profile0x0104; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } profiles; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } rohc; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } headerCompression; + long *rn_IntegrityProtection_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PDCP_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_discardTimer_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_pdcp_SN_Size_14; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rn_IntegrityProtection_r10_32; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PDCP_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCP_Config_H_ */ +#include diff --git a/lte/rrc/asn/PDCP-Parameters.c b/lte/rrc/asn/PDCP-Parameters.c new file mode 100644 index 000000000..16f858c9e --- /dev/null +++ b/lte/rrc/asn/PDCP-Parameters.c @@ -0,0 +1,390 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PDCP-Parameters.h" + +static int +maxNumberROHC_ContextSessions_12_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +maxNumberROHC_ContextSessions_12_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +maxNumberROHC_ContextSessions_12_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +maxNumberROHC_ContextSessions_12_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +maxNumberROHC_ContextSessions_12_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +maxNumberROHC_ContextSessions_12_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +maxNumberROHC_ContextSessions_12_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +maxNumberROHC_ContextSessions_12_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +maxNumberROHC_ContextSessions_12_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + maxNumberROHC_ContextSessions_12_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_maxNumberROHC_ContextSessions_constr_12 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_supportedROHC_Profiles_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0001), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0001" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0002), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0002" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0003), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0003" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0004), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0004" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0006), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0006" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0101), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0101" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0102), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0102" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0103), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0103" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters__supportedROHC_Profiles, profile0x0104), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "profile0x0104" + }, +}; +static ber_tlv_tag_t asn_DEF_supportedROHC_Profiles_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_supportedROHC_Profiles_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* profile0x0001 at 3780 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* profile0x0002 at 3781 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* profile0x0003 at 3782 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* profile0x0004 at 3783 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* profile0x0006 at 3784 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* profile0x0101 at 3785 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* profile0x0102 at 3786 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* profile0x0103 at 3787 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* profile0x0104 at 3788 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_supportedROHC_Profiles_specs_2 = { + sizeof(struct PDCP_Parameters__supportedROHC_Profiles), + offsetof(struct PDCP_Parameters__supportedROHC_Profiles, _asn_ctx), + asn_MAP_supportedROHC_Profiles_tag2el_2, + 9, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_supportedROHC_Profiles_2 = { + "supportedROHC-Profiles", + "supportedROHC-Profiles", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_supportedROHC_Profiles_tags_2, + sizeof(asn_DEF_supportedROHC_Profiles_tags_2) + /sizeof(asn_DEF_supportedROHC_Profiles_tags_2[0]) - 1, /* 1 */ + asn_DEF_supportedROHC_Profiles_tags_2, /* Same as above */ + sizeof(asn_DEF_supportedROHC_Profiles_tags_2) + /sizeof(asn_DEF_supportedROHC_Profiles_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_supportedROHC_Profiles_2, + 9, /* Elements count */ + &asn_SPC_supportedROHC_Profiles_specs_2 /* Additional specs */ +}; + +static int asn_DFL_12_set_4(int set_value, void **sptr) { + long *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static asn_INTEGER_enum_map_t asn_MAP_maxNumberROHC_ContextSessions_value2enum_12[] = { + { 0, 3, "cs2" }, + { 1, 3, "cs4" }, + { 2, 3, "cs8" }, + { 3, 4, "cs12" }, + { 4, 4, "cs16" }, + { 5, 4, "cs24" }, + { 6, 4, "cs32" }, + { 7, 4, "cs48" }, + { 8, 4, "cs64" }, + { 9, 5, "cs128" }, + { 10, 5, "cs256" }, + { 11, 5, "cs512" }, + { 12, 6, "cs1024" }, + { 13, 7, "cs16384" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_maxNumberROHC_ContextSessions_enum2value_12[] = { + 12, /* cs1024(12) */ + 3, /* cs12(3) */ + 9, /* cs128(9) */ + 4, /* cs16(4) */ + 13, /* cs16384(13) */ + 0, /* cs2(0) */ + 5, /* cs24(5) */ + 10, /* cs256(10) */ + 6, /* cs32(6) */ + 1, /* cs4(1) */ + 7, /* cs48(7) */ + 11, /* cs512(11) */ + 8, /* cs64(8) */ + 2, /* cs8(2) */ + 15, /* spare1(15) */ + 14 /* spare2(14) */ +}; +static asn_INTEGER_specifics_t asn_SPC_maxNumberROHC_ContextSessions_specs_12 = { + asn_MAP_maxNumberROHC_ContextSessions_value2enum_12, /* "tag" => N; sorted by tag */ + asn_MAP_maxNumberROHC_ContextSessions_enum2value_12, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_maxNumberROHC_ContextSessions_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_maxNumberROHC_ContextSessions_12 = { + "maxNumberROHC-ContextSessions", + "maxNumberROHC-ContextSessions", + maxNumberROHC_ContextSessions_12_free, + maxNumberROHC_ContextSessions_12_print, + maxNumberROHC_ContextSessions_12_constraint, + maxNumberROHC_ContextSessions_12_decode_ber, + maxNumberROHC_ContextSessions_12_encode_der, + maxNumberROHC_ContextSessions_12_decode_xer, + maxNumberROHC_ContextSessions_12_encode_xer, + maxNumberROHC_ContextSessions_12_decode_uper, + maxNumberROHC_ContextSessions_12_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_maxNumberROHC_ContextSessions_tags_12, + sizeof(asn_DEF_maxNumberROHC_ContextSessions_tags_12) + /sizeof(asn_DEF_maxNumberROHC_ContextSessions_tags_12[0]) - 1, /* 1 */ + asn_DEF_maxNumberROHC_ContextSessions_tags_12, /* Same as above */ + sizeof(asn_DEF_maxNumberROHC_ContextSessions_tags_12) + /sizeof(asn_DEF_maxNumberROHC_ContextSessions_tags_12[0]), /* 2 */ + &asn_PER_type_maxNumberROHC_ContextSessions_constr_12, + 0, 0, /* Defined elsewhere */ + &asn_SPC_maxNumberROHC_ContextSessions_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PDCP_Parameters_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDCP_Parameters, supportedROHC_Profiles), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_supportedROHC_Profiles_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedROHC-Profiles" + }, + { ATF_POINTER, 1, offsetof(struct PDCP_Parameters, maxNumberROHC_ContextSessions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_maxNumberROHC_ContextSessions_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_12_set_4, /* DEFAULT 4 */ + "maxNumberROHC-ContextSessions" + }, +}; +static int asn_MAP_PDCP_Parameters_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_PDCP_Parameters_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PDCP_Parameters_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* supportedROHC-Profiles at 3780 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* maxNumberROHC-ContextSessions at 3791 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PDCP_Parameters_specs_1 = { + sizeof(struct PDCP_Parameters), + offsetof(struct PDCP_Parameters, _asn_ctx), + asn_MAP_PDCP_Parameters_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PDCP_Parameters_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PDCP_Parameters = { + "PDCP-Parameters", + "PDCP-Parameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PDCP_Parameters_tags_1, + sizeof(asn_DEF_PDCP_Parameters_tags_1) + /sizeof(asn_DEF_PDCP_Parameters_tags_1[0]), /* 1 */ + asn_DEF_PDCP_Parameters_tags_1, /* Same as above */ + sizeof(asn_DEF_PDCP_Parameters_tags_1) + /sizeof(asn_DEF_PDCP_Parameters_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PDCP_Parameters_1, + 2, /* Elements count */ + &asn_SPC_PDCP_Parameters_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PDCP-Parameters.h b/lte/rrc/asn/PDCP-Parameters.h new file mode 100644 index 000000000..443aff93c --- /dev/null +++ b/lte/rrc/asn/PDCP-Parameters.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PDCP_Parameters_H_ +#define _PDCP_Parameters_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PDCP_Parameters__maxNumberROHC_ContextSessions { + PDCP_Parameters__maxNumberROHC_ContextSessions_cs2 = 0, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs4 = 1, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs8 = 2, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs12 = 3, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs16 = 4, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs24 = 5, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs32 = 6, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs48 = 7, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs64 = 8, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs128 = 9, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs256 = 10, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs512 = 11, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs1024 = 12, + PDCP_Parameters__maxNumberROHC_ContextSessions_cs16384 = 13, + PDCP_Parameters__maxNumberROHC_ContextSessions_spare2 = 14, + PDCP_Parameters__maxNumberROHC_ContextSessions_spare1 = 15 +} e_PDCP_Parameters__maxNumberROHC_ContextSessions; + +/* PDCP-Parameters */ +typedef struct PDCP_Parameters { + struct PDCP_Parameters__supportedROHC_Profiles { + BOOLEAN_t profile0x0001; + BOOLEAN_t profile0x0002; + BOOLEAN_t profile0x0003; + BOOLEAN_t profile0x0004; + BOOLEAN_t profile0x0006; + BOOLEAN_t profile0x0101; + BOOLEAN_t profile0x0102; + BOOLEAN_t profile0x0103; + BOOLEAN_t profile0x0104; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } supportedROHC_Profiles; + long *maxNumberROHC_ContextSessions /* DEFAULT 4 */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PDCP_Parameters_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_maxNumberROHC_ContextSessions_12; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PDCP_Parameters; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDCP_Parameters_H_ */ +#include diff --git a/lte/rrc/asn/PDSCH-ConfigCommon.c b/lte/rrc/asn/PDSCH-ConfigCommon.c new file mode 100644 index 000000000..0778ae927 --- /dev/null +++ b/lte/rrc/asn/PDSCH-ConfigCommon.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PDSCH-ConfigCommon.h" + +static int +memb_referenceSignalPower_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -60 && value <= 50)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p_b_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_referenceSignalPower_constr_2 = { + { APC_CONSTRAINED, 7, 7, -60, 50 } /* (-60..50) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p_b_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PDSCH_ConfigCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDSCH_ConfigCommon, referenceSignalPower), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_referenceSignalPower_constraint_1, + &asn_PER_memb_referenceSignalPower_constr_2, + 0, + "referenceSignalPower" + }, + { ATF_NOFLAGS, 0, offsetof(struct PDSCH_ConfigCommon, p_b), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p_b_constraint_1, + &asn_PER_memb_p_b_constr_3, + 0, + "p-b" + }, +}; +static ber_tlv_tag_t asn_DEF_PDSCH_ConfigCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PDSCH_ConfigCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* referenceSignalPower at 2118 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* p-b at 2119 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PDSCH_ConfigCommon_specs_1 = { + sizeof(struct PDSCH_ConfigCommon), + offsetof(struct PDSCH_ConfigCommon, _asn_ctx), + asn_MAP_PDSCH_ConfigCommon_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PDSCH_ConfigCommon = { + "PDSCH-ConfigCommon", + "PDSCH-ConfigCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PDSCH_ConfigCommon_tags_1, + sizeof(asn_DEF_PDSCH_ConfigCommon_tags_1) + /sizeof(asn_DEF_PDSCH_ConfigCommon_tags_1[0]), /* 1 */ + asn_DEF_PDSCH_ConfigCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_PDSCH_ConfigCommon_tags_1) + /sizeof(asn_DEF_PDSCH_ConfigCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PDSCH_ConfigCommon_1, + 2, /* Elements count */ + &asn_SPC_PDSCH_ConfigCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PDSCH-ConfigCommon.h b/lte/rrc/asn/PDSCH-ConfigCommon.h new file mode 100644 index 000000000..7118ab6b4 --- /dev/null +++ b/lte/rrc/asn/PDSCH-ConfigCommon.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PDSCH_ConfigCommon_H_ +#define _PDSCH_ConfigCommon_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PDSCH-ConfigCommon */ +typedef struct PDSCH_ConfigCommon { + long referenceSignalPower; + long p_b; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PDSCH_ConfigCommon_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PDSCH_ConfigCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDSCH_ConfigCommon_H_ */ +#include diff --git a/lte/rrc/asn/PDSCH-ConfigDedicated.c b/lte/rrc/asn/PDSCH-ConfigDedicated.c new file mode 100644 index 000000000..9239f1927 --- /dev/null +++ b/lte/rrc/asn/PDSCH-ConfigDedicated.c @@ -0,0 +1,211 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PDSCH-ConfigDedicated.h" + +static int +p_a_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +p_a_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +p_a_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + p_a_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +p_a_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + p_a_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +p_a_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + p_a_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +p_a_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + p_a_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +p_a_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + p_a_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +p_a_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + p_a_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +p_a_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + p_a_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +p_a_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + p_a_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_p_a_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_p_a_value2enum_2[] = { + { 0, 4, "dB-6" }, + { 1, 9, "dB-4dot77" }, + { 2, 4, "dB-3" }, + { 3, 9, "dB-1dot77" }, + { 4, 3, "dB0" }, + { 5, 3, "dB1" }, + { 6, 3, "dB2" }, + { 7, 3, "dB3" } +}; +static unsigned int asn_MAP_p_a_enum2value_2[] = { + 3, /* dB-1dot77(3) */ + 2, /* dB-3(2) */ + 1, /* dB-4dot77(1) */ + 0, /* dB-6(0) */ + 4, /* dB0(4) */ + 5, /* dB1(5) */ + 6, /* dB2(6) */ + 7 /* dB3(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_p_a_specs_2 = { + asn_MAP_p_a_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_p_a_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_p_a_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_p_a_2 = { + "p-a", + "p-a", + p_a_2_free, + p_a_2_print, + p_a_2_constraint, + p_a_2_decode_ber, + p_a_2_encode_der, + p_a_2_decode_xer, + p_a_2_encode_xer, + p_a_2_decode_uper, + p_a_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_p_a_tags_2, + sizeof(asn_DEF_p_a_tags_2) + /sizeof(asn_DEF_p_a_tags_2[0]) - 1, /* 1 */ + asn_DEF_p_a_tags_2, /* Same as above */ + sizeof(asn_DEF_p_a_tags_2) + /sizeof(asn_DEF_p_a_tags_2[0]), /* 2 */ + &asn_PER_type_p_a_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_p_a_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PDSCH_ConfigDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PDSCH_ConfigDedicated, p_a), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_p_a_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p-a" + }, +}; +static ber_tlv_tag_t asn_DEF_PDSCH_ConfigDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PDSCH_ConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* p-a at 2124 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PDSCH_ConfigDedicated_specs_1 = { + sizeof(struct PDSCH_ConfigDedicated), + offsetof(struct PDSCH_ConfigDedicated, _asn_ctx), + asn_MAP_PDSCH_ConfigDedicated_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PDSCH_ConfigDedicated = { + "PDSCH-ConfigDedicated", + "PDSCH-ConfigDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PDSCH_ConfigDedicated_tags_1, + sizeof(asn_DEF_PDSCH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_PDSCH_ConfigDedicated_tags_1[0]), /* 1 */ + asn_DEF_PDSCH_ConfigDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_PDSCH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_PDSCH_ConfigDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PDSCH_ConfigDedicated_1, + 1, /* Elements count */ + &asn_SPC_PDSCH_ConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PDSCH-ConfigDedicated.h b/lte/rrc/asn/PDSCH-ConfigDedicated.h new file mode 100644 index 000000000..ffc8c2de4 --- /dev/null +++ b/lte/rrc/asn/PDSCH-ConfigDedicated.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PDSCH_ConfigDedicated_H_ +#define _PDSCH_ConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PDSCH_ConfigDedicated__p_a { + PDSCH_ConfigDedicated__p_a_dB_6 = 0, + PDSCH_ConfigDedicated__p_a_dB_4dot77 = 1, + PDSCH_ConfigDedicated__p_a_dB_3 = 2, + PDSCH_ConfigDedicated__p_a_dB_1dot77 = 3, + PDSCH_ConfigDedicated__p_a_dB0 = 4, + PDSCH_ConfigDedicated__p_a_dB1 = 5, + PDSCH_ConfigDedicated__p_a_dB2 = 6, + PDSCH_ConfigDedicated__p_a_dB3 = 7 +} e_PDSCH_ConfigDedicated__p_a; + +/* PDSCH-ConfigDedicated */ +typedef struct PDSCH_ConfigDedicated { + long p_a; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PDSCH_ConfigDedicated_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_p_a_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PDSCH_ConfigDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _PDSCH_ConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/PHICH-Config.c b/lte/rrc/asn/PHICH-Config.c index 0cf225624..60ddfdd05 100644 --- a/lte/rrc/asn/PHICH-Config.c +++ b/lte/rrc/asn/PHICH-Config.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "PHICH-Config.h" @@ -22,7 +23,6 @@ static void phich_Duration_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -111,7 +111,6 @@ static void phich_Resource_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -184,25 +183,25 @@ phich_Resource_5_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_phich_Duration_constr_2 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_phich_Duration_constr_2 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_type_phich_Resource_constr_5 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_phich_Resource_constr_5 = { { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_phich_Duration_value2enum_2[] = { +static asn_INTEGER_enum_map_t asn_MAP_phich_Duration_value2enum_2[] = { { 0, 6, "normal" }, { 1, 8, "extended" } }; -static const unsigned int asn_MAP_phich_Duration_enum2value_2[] = { +static unsigned int asn_MAP_phich_Duration_enum2value_2[] = { 1, /* extended(1) */ 0 /* normal(0) */ }; -static const asn_INTEGER_specifics_t asn_SPC_phich_Duration_specs_2 = { +static asn_INTEGER_specifics_t asn_SPC_phich_Duration_specs_2 = { asn_MAP_phich_Duration_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_phich_Duration_enum2value_2, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ @@ -211,7 +210,7 @@ static const asn_INTEGER_specifics_t asn_SPC_phich_Duration_specs_2 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_phich_Duration_tags_2[] = { +static ber_tlv_tag_t asn_DEF_phich_Duration_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -240,19 +239,19 @@ asn_TYPE_descriptor_t asn_DEF_phich_Duration_2 = { &asn_SPC_phich_Duration_specs_2 /* Additional specs */ }; -static const asn_INTEGER_enum_map_t asn_MAP_phich_Resource_value2enum_5[] = { +static asn_INTEGER_enum_map_t asn_MAP_phich_Resource_value2enum_5[] = { { 0, 8, "oneSixth" }, { 1, 4, "half" }, { 2, 3, "one" }, { 3, 3, "two" } }; -static const unsigned int asn_MAP_phich_Resource_enum2value_5[] = { +static unsigned int asn_MAP_phich_Resource_enum2value_5[] = { 1, /* half(1) */ 2, /* one(2) */ 0, /* oneSixth(0) */ 3 /* two(3) */ }; -static const asn_INTEGER_specifics_t asn_SPC_phich_Resource_specs_5 = { +static asn_INTEGER_specifics_t asn_SPC_phich_Resource_specs_5 = { asn_MAP_phich_Resource_value2enum_5, /* "tag" => N; sorted by tag */ asn_MAP_phich_Resource_enum2value_5, /* N => "tag"; sorted by N */ 4, /* Number of elements in the maps */ @@ -261,7 +260,7 @@ static const asn_INTEGER_specifics_t asn_SPC_phich_Resource_specs_5 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_phich_Resource_tags_5[] = { +static ber_tlv_tag_t asn_DEF_phich_Resource_tags_5[] = { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -310,12 +309,12 @@ static asn_TYPE_member_t asn_MBR_PHICH_Config_1[] = { "phich-Resource" }, }; -static const ber_tlv_tag_t asn_DEF_PHICH_Config_tags_1[] = { +static ber_tlv_tag_t asn_DEF_PHICH_Config_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_PHICH_Config_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* phich-Duration */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* phich-Resource */ +static asn_TYPE_tag2member_t asn_MAP_PHICH_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* phich-Duration at 2130 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* phich-Resource at 2131 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PHICH_Config_specs_1 = { sizeof(struct PHICH_Config), diff --git a/lte/rrc/asn/PHICH-Config.h b/lte/rrc/asn/PHICH-Config.h index 2b731f936..a9c607175 100644 --- a/lte/rrc/asn/PHICH-Config.h +++ b/lte/rrc/asn/PHICH-Config.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _PHICH_Config_H_ @@ -19,16 +20,16 @@ extern "C" { #endif /* Dependencies */ -typedef enum phich_Duration { - phich_Duration_normal = 0, - phich_Duration_extended = 1 -} e_phich_Duration; -typedef enum phich_Resource { - phich_Resource_oneSixth = 0, - phich_Resource_half = 1, - phich_Resource_one = 2, - phich_Resource_two = 3 -} e_phich_Resource; +typedef enum PHICH_Config__phich_Duration { + PHICH_Config__phich_Duration_normal = 0, + PHICH_Config__phich_Duration_extended = 1 +} e_PHICH_Config__phich_Duration; +typedef enum PHICH_Config__phich_Resource { + PHICH_Config__phich_Resource_oneSixth = 0, + PHICH_Config__phich_Resource_half = 1, + PHICH_Config__phich_Resource_one = 2, + PHICH_Config__phich_Resource_two = 3 +} e_PHICH_Config__phich_Resource; /* PHICH-Config */ typedef struct PHICH_Config { diff --git a/lte/rrc/asn/PLMN-Identity.c b/lte/rrc/asn/PLMN-Identity.c index 8e2f195fe..d789c6909 100644 --- a/lte/rrc/asn/PLMN-Identity.c +++ b/lte/rrc/asn/PLMN-Identity.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "PLMN-Identity.h" @@ -26,13 +27,13 @@ static asn_TYPE_member_t asn_MBR_PLMN_Identity_1[] = { "mnc" }, }; -static const int asn_MAP_PLMN_Identity_oms_1[] = { 0 }; -static const ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { +static int asn_MAP_PLMN_Identity_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_PLMN_Identity_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_PLMN_Identity_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mcc */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* mnc */ +static asn_TYPE_tag2member_t asn_MAP_PLMN_Identity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mcc at 3072 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* mnc at 3074 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PLMN_Identity_specs_1 = { sizeof(struct PLMN_Identity), diff --git a/lte/rrc/asn/PLMN-Identity.h b/lte/rrc/asn/PLMN-Identity.h index 719aa0829..153696af5 100644 --- a/lte/rrc/asn/PLMN-Identity.h +++ b/lte/rrc/asn/PLMN-Identity.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _PLMN_Identity_H_ diff --git a/lte/rrc/asn/PLMN-IdentityInfo.c b/lte/rrc/asn/PLMN-IdentityInfo.c index f99b92a0b..9fa9e3b61 100644 --- a/lte/rrc/asn/PLMN-IdentityInfo.c +++ b/lte/rrc/asn/PLMN-IdentityInfo.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "PLMN-IdentityInfo.h" @@ -22,7 +23,6 @@ static void cellReservedForOperatorUse_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -95,20 +95,20 @@ cellReservedForOperatorUse_3_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_cellReservedForOperatorUse_constr_3 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_cellReservedForOperatorUse_constr_3 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_cellReservedForOperatorUse_value2enum_3[] = { +static asn_INTEGER_enum_map_t asn_MAP_cellReservedForOperatorUse_value2enum_3[] = { { 0, 8, "reserved" }, { 1, 11, "notReserved" } }; -static const unsigned int asn_MAP_cellReservedForOperatorUse_enum2value_3[] = { +static unsigned int asn_MAP_cellReservedForOperatorUse_enum2value_3[] = { 1, /* notReserved(1) */ 0 /* reserved(0) */ }; -static const asn_INTEGER_specifics_t asn_SPC_cellReservedForOperatorUse_specs_3 = { +static asn_INTEGER_specifics_t asn_SPC_cellReservedForOperatorUse_specs_3 = { asn_MAP_cellReservedForOperatorUse_value2enum_3, /* "tag" => N; sorted by tag */ asn_MAP_cellReservedForOperatorUse_enum2value_3, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ @@ -117,7 +117,7 @@ static const asn_INTEGER_specifics_t asn_SPC_cellReservedForOperatorUse_specs_3 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_cellReservedForOperatorUse_tags_3[] = { +static ber_tlv_tag_t asn_DEF_cellReservedForOperatorUse_tags_3[] = { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -166,12 +166,12 @@ static asn_TYPE_member_t asn_MBR_PLMN_IdentityInfo_1[] = { "cellReservedForOperatorUse" }, }; -static const ber_tlv_tag_t asn_DEF_PLMN_IdentityInfo_tags_1[] = { +static ber_tlv_tag_t asn_DEF_PLMN_IdentityInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_PLMN_IdentityInfo_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReservedForOperatorUse */ +static asn_TYPE_tag2member_t asn_MAP_PLMN_IdentityInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity at 1207 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReservedForOperatorUse at 1208 */ }; static asn_SEQUENCE_specifics_t asn_SPC_PLMN_IdentityInfo_specs_1 = { sizeof(struct PLMN_IdentityInfo), diff --git a/lte/rrc/asn/PLMN-IdentityInfo.h b/lte/rrc/asn/PLMN-IdentityInfo.h index 76d175613..69ad12a95 100644 --- a/lte/rrc/asn/PLMN-IdentityInfo.h +++ b/lte/rrc/asn/PLMN-IdentityInfo.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _PLMN_IdentityInfo_H_ @@ -20,10 +21,10 @@ extern "C" { #endif /* Dependencies */ -typedef enum cellReservedForOperatorUse { - cellReservedForOperatorUse_reserved = 0, - cellReservedForOperatorUse_notReserved = 1 -} e_cellReservedForOperatorUse; +typedef enum PLMN_IdentityInfo__cellReservedForOperatorUse { + PLMN_IdentityInfo__cellReservedForOperatorUse_reserved = 0, + PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved = 1 +} e_PLMN_IdentityInfo__cellReservedForOperatorUse; /* PLMN-IdentityInfo */ typedef struct PLMN_IdentityInfo { diff --git a/lte/rrc/asn/PLMN-IdentityList.c b/lte/rrc/asn/PLMN-IdentityList.c index 81a448d9e..4b54670d8 100644 --- a/lte/rrc/asn/PLMN-IdentityList.c +++ b/lte/rrc/asn/PLMN-IdentityList.c @@ -1,12 +1,13 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "PLMN-IdentityList.h" -static asn_per_constraints_t asn_PER_type_PLMN_IdentityList_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_PLMN_IdentityList_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 3, 3, 1, 6 } /* (SIZE(1..6)) */, 0, 0 /* No PER value map */ @@ -22,7 +23,7 @@ static asn_TYPE_member_t asn_MBR_PLMN_IdentityList_1[] = { "" }, }; -static const ber_tlv_tag_t asn_DEF_PLMN_IdentityList_tags_1[] = { +static ber_tlv_tag_t asn_DEF_PLMN_IdentityList_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_PLMN_IdentityList_specs_1 = { diff --git a/lte/rrc/asn/PLMN-IdentityList.h b/lte/rrc/asn/PLMN-IdentityList.h index 7dcb4bc7d..7ee8e6960 100644 --- a/lte/rrc/asn/PLMN-IdentityList.h +++ b/lte/rrc/asn/PLMN-IdentityList.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _PLMN_IdentityList_H_ diff --git a/lte/rrc/asn/PLMN-IdentityList2.c b/lte/rrc/asn/PLMN-IdentityList2.c new file mode 100644 index 000000000..09845b1a0 --- /dev/null +++ b/lte/rrc/asn/PLMN-IdentityList2.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PLMN-IdentityList2.h" + +static asn_per_constraints_t asn_PER_type_PLMN_IdentityList2_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 5 } /* (SIZE(1..5)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PLMN_IdentityList2_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_PLMN_IdentityList2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PLMN_IdentityList2_specs_1 = { + sizeof(struct PLMN_IdentityList2), + offsetof(struct PLMN_IdentityList2, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PLMN_IdentityList2 = { + "PLMN-IdentityList2", + "PLMN-IdentityList2", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PLMN_IdentityList2_tags_1, + sizeof(asn_DEF_PLMN_IdentityList2_tags_1) + /sizeof(asn_DEF_PLMN_IdentityList2_tags_1[0]), /* 1 */ + asn_DEF_PLMN_IdentityList2_tags_1, /* Same as above */ + sizeof(asn_DEF_PLMN_IdentityList2_tags_1) + /sizeof(asn_DEF_PLMN_IdentityList2_tags_1[0]), /* 1 */ + &asn_PER_type_PLMN_IdentityList2_constr_1, + asn_MBR_PLMN_IdentityList2_1, + 1, /* Single element */ + &asn_SPC_PLMN_IdentityList2_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PLMN-IdentityList2.h b/lte/rrc/asn/PLMN-IdentityList2.h new file mode 100644 index 000000000..6e650fa53 --- /dev/null +++ b/lte/rrc/asn/PLMN-IdentityList2.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PLMN_IdentityList2_H_ +#define _PLMN_IdentityList2_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PLMN_Identity; + +/* PLMN-IdentityList2 */ +typedef struct PLMN_IdentityList2 { + A_SEQUENCE_OF(struct PLMN_Identity) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PLMN_IdentityList2_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PLMN_IdentityList2; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PLMN-Identity.h" + +#endif /* _PLMN_IdentityList2_H_ */ +#include diff --git a/lte/rrc/asn/PMCH-Config-r9.c b/lte/rrc/asn/PMCH-Config-r9.c new file mode 100644 index 000000000..9baf201c3 --- /dev/null +++ b/lte/rrc/asn/PMCH-Config-r9.c @@ -0,0 +1,291 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PMCH-Config-r9.h" + +static int +mch_SchedulingPeriod_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +mch_SchedulingPeriod_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +mch_SchedulingPeriod_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +mch_SchedulingPeriod_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +mch_SchedulingPeriod_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +mch_SchedulingPeriod_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +mch_SchedulingPeriod_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +mch_SchedulingPeriod_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +mch_SchedulingPeriod_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + mch_SchedulingPeriod_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_sf_AllocEnd_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1535)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dataMCS_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 28)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_mch_SchedulingPeriod_r9_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sf_AllocEnd_r9_constr_2 = { + { APC_CONSTRAINED, 11, 11, 0, 1535 } /* (0..1535) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dataMCS_r9_constr_3 = { + { APC_CONSTRAINED, 5, 5, 0, 28 } /* (0..28) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_mch_SchedulingPeriod_r9_value2enum_4[] = { + { 0, 3, "rf8" }, + { 1, 4, "rf16" }, + { 2, 4, "rf32" }, + { 3, 4, "rf64" }, + { 4, 5, "rf128" }, + { 5, 5, "rf256" }, + { 6, 5, "rf512" }, + { 7, 6, "rf1024" } +}; +static unsigned int asn_MAP_mch_SchedulingPeriod_r9_enum2value_4[] = { + 7, /* rf1024(7) */ + 4, /* rf128(4) */ + 1, /* rf16(1) */ + 5, /* rf256(5) */ + 2, /* rf32(2) */ + 6, /* rf512(6) */ + 3, /* rf64(3) */ + 0 /* rf8(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_mch_SchedulingPeriod_r9_specs_4 = { + asn_MAP_mch_SchedulingPeriod_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_mch_SchedulingPeriod_r9_enum2value_4, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_mch_SchedulingPeriod_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mch_SchedulingPeriod_r9_4 = { + "mch-SchedulingPeriod-r9", + "mch-SchedulingPeriod-r9", + mch_SchedulingPeriod_r9_4_free, + mch_SchedulingPeriod_r9_4_print, + mch_SchedulingPeriod_r9_4_constraint, + mch_SchedulingPeriod_r9_4_decode_ber, + mch_SchedulingPeriod_r9_4_encode_der, + mch_SchedulingPeriod_r9_4_decode_xer, + mch_SchedulingPeriod_r9_4_encode_xer, + mch_SchedulingPeriod_r9_4_decode_uper, + mch_SchedulingPeriod_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mch_SchedulingPeriod_r9_tags_4, + sizeof(asn_DEF_mch_SchedulingPeriod_r9_tags_4) + /sizeof(asn_DEF_mch_SchedulingPeriod_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_mch_SchedulingPeriod_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_mch_SchedulingPeriod_r9_tags_4) + /sizeof(asn_DEF_mch_SchedulingPeriod_r9_tags_4[0]), /* 2 */ + &asn_PER_type_mch_SchedulingPeriod_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_mch_SchedulingPeriod_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PMCH_Config_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PMCH_Config_r9, sf_AllocEnd_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sf_AllocEnd_r9_constraint_1, + &asn_PER_memb_sf_AllocEnd_r9_constr_2, + 0, + "sf-AllocEnd-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct PMCH_Config_r9, dataMCS_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_dataMCS_r9_constraint_1, + &asn_PER_memb_dataMCS_r9_constr_3, + 0, + "dataMCS-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct PMCH_Config_r9, mch_SchedulingPeriod_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_mch_SchedulingPeriod_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mch-SchedulingPeriod-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_PMCH_Config_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PMCH_Config_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sf-AllocEnd-r9 at 4085 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dataMCS-r9 at 4086 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* mch-SchedulingPeriod-r9 at 4088 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PMCH_Config_r9_specs_1 = { + sizeof(struct PMCH_Config_r9), + offsetof(struct PMCH_Config_r9, _asn_ctx), + asn_MAP_PMCH_Config_r9_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PMCH_Config_r9 = { + "PMCH-Config-r9", + "PMCH-Config-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PMCH_Config_r9_tags_1, + sizeof(asn_DEF_PMCH_Config_r9_tags_1) + /sizeof(asn_DEF_PMCH_Config_r9_tags_1[0]), /* 1 */ + asn_DEF_PMCH_Config_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_PMCH_Config_r9_tags_1) + /sizeof(asn_DEF_PMCH_Config_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PMCH_Config_r9_1, + 3, /* Elements count */ + &asn_SPC_PMCH_Config_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PMCH-Config-r9.h b/lte/rrc/asn/PMCH-Config-r9.h new file mode 100644 index 000000000..bb22f5a00 --- /dev/null +++ b/lte/rrc/asn/PMCH-Config-r9.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PMCH_Config_r9_H_ +#define _PMCH_Config_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PMCH_Config_r9__mch_SchedulingPeriod_r9 { + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf8 = 0, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf16 = 1, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf32 = 2, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf64 = 3, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf128 = 4, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf256 = 5, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf512 = 6, + PMCH_Config_r9__mch_SchedulingPeriod_r9_rf1024 = 7 +} e_PMCH_Config_r9__mch_SchedulingPeriod_r9; + +/* PMCH-Config-r9 */ +typedef struct PMCH_Config_r9 { + long sf_AllocEnd_r9; + long dataMCS_r9; + long mch_SchedulingPeriod_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PMCH_Config_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_mch_SchedulingPeriod_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PMCH_Config_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _PMCH_Config_r9_H_ */ +#include diff --git a/lte/rrc/asn/PMCH-Info-r9.c b/lte/rrc/asn/PMCH-Info-r9.c new file mode 100644 index 000000000..786089131 --- /dev/null +++ b/lte/rrc/asn/PMCH-Info-r9.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PMCH-Info-r9.h" + +static asn_TYPE_member_t asn_MBR_PMCH_Info_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PMCH_Info_r9, pmch_Config_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PMCH_Config_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pmch-Config-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct PMCH_Info_r9, mbms_SessionInfoList_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBMS_SessionInfoList_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbms-SessionInfoList-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_PMCH_Info_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PMCH_Info_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pmch-Config-r9 at 4070 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* mbms-SessionInfoList-r9 at 4071 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PMCH_Info_r9_specs_1 = { + sizeof(struct PMCH_Info_r9), + offsetof(struct PMCH_Info_r9, _asn_ctx), + asn_MAP_PMCH_Info_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PMCH_Info_r9 = { + "PMCH-Info-r9", + "PMCH-Info-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PMCH_Info_r9_tags_1, + sizeof(asn_DEF_PMCH_Info_r9_tags_1) + /sizeof(asn_DEF_PMCH_Info_r9_tags_1[0]), /* 1 */ + asn_DEF_PMCH_Info_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_PMCH_Info_r9_tags_1) + /sizeof(asn_DEF_PMCH_Info_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PMCH_Info_r9_1, + 2, /* Elements count */ + &asn_SPC_PMCH_Info_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PMCH-Info-r9.h b/lte/rrc/asn/PMCH-Info-r9.h new file mode 100644 index 000000000..5af76ab0a --- /dev/null +++ b/lte/rrc/asn/PMCH-Info-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PMCH_Info_r9_H_ +#define _PMCH_Info_r9_H_ + + +#include + +/* Including external dependencies */ +#include "PMCH-Config-r9.h" +#include "MBMS-SessionInfoList-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PMCH-Info-r9 */ +typedef struct PMCH_Info_r9 { + PMCH_Config_r9_t pmch_Config_r9; + MBMS_SessionInfoList_r9_t mbms_SessionInfoList_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PMCH_Info_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PMCH_Info_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _PMCH_Info_r9_H_ */ +#include diff --git a/lte/rrc/asn/PMCH-InfoList-r9.c b/lte/rrc/asn/PMCH-InfoList-r9.c new file mode 100644 index 000000000..29374718a --- /dev/null +++ b/lte/rrc/asn/PMCH-InfoList-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PMCH-InfoList-r9.h" + +static asn_per_constraints_t asn_PER_type_PMCH_InfoList_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (SIZE(0..15)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PMCH_InfoList_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PMCH_Info_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_PMCH_InfoList_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PMCH_InfoList_r9_specs_1 = { + sizeof(struct PMCH_InfoList_r9), + offsetof(struct PMCH_InfoList_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PMCH_InfoList_r9 = { + "PMCH-InfoList-r9", + "PMCH-InfoList-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PMCH_InfoList_r9_tags_1, + sizeof(asn_DEF_PMCH_InfoList_r9_tags_1) + /sizeof(asn_DEF_PMCH_InfoList_r9_tags_1[0]), /* 1 */ + asn_DEF_PMCH_InfoList_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_PMCH_InfoList_r9_tags_1) + /sizeof(asn_DEF_PMCH_InfoList_r9_tags_1[0]), /* 1 */ + &asn_PER_type_PMCH_InfoList_r9_constr_1, + asn_MBR_PMCH_InfoList_r9_1, + 1, /* Single element */ + &asn_SPC_PMCH_InfoList_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PMCH-InfoList-r9.h b/lte/rrc/asn/PMCH-InfoList-r9.h new file mode 100644 index 000000000..8cc2e407e --- /dev/null +++ b/lte/rrc/asn/PMCH-InfoList-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PMCH_InfoList_r9_H_ +#define _PMCH_InfoList_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PMCH_Info_r9; + +/* PMCH-InfoList-r9 */ +typedef struct PMCH_InfoList_r9 { + A_SEQUENCE_OF(struct PMCH_Info_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PMCH_InfoList_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PMCH_InfoList_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PMCH-Info-r9.h" + +#endif /* _PMCH_InfoList_r9_H_ */ +#include diff --git a/lte/rrc/asn/PRACH-Config.c b/lte/rrc/asn/PRACH-Config.c new file mode 100644 index 000000000..a4994fcee --- /dev/null +++ b/lte/rrc/asn/PRACH-Config.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PRACH-Config.h" + +static int +memb_rootSequenceIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 837)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_rootSequenceIndex_constr_2 = { + { APC_CONSTRAINED, 10, 10, 0, 837 } /* (0..837) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PRACH_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PRACH_Config, rootSequenceIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_rootSequenceIndex_constraint_1, + &asn_PER_memb_rootSequenceIndex_constr_2, + 0, + "rootSequenceIndex" + }, + { ATF_POINTER, 1, offsetof(struct PRACH_Config, prach_ConfigInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PRACH_ConfigInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prach-ConfigInfo" + }, +}; +static int asn_MAP_PRACH_Config_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_PRACH_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PRACH_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rootSequenceIndex at 2210 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* prach-ConfigInfo at 2211 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PRACH_Config_specs_1 = { + sizeof(struct PRACH_Config), + offsetof(struct PRACH_Config, _asn_ctx), + asn_MAP_PRACH_Config_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PRACH_Config_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PRACH_Config = { + "PRACH-Config", + "PRACH-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PRACH_Config_tags_1, + sizeof(asn_DEF_PRACH_Config_tags_1) + /sizeof(asn_DEF_PRACH_Config_tags_1[0]), /* 1 */ + asn_DEF_PRACH_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_PRACH_Config_tags_1) + /sizeof(asn_DEF_PRACH_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PRACH_Config_1, + 2, /* Elements count */ + &asn_SPC_PRACH_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PRACH-Config.h b/lte/rrc/asn/PRACH-Config.h new file mode 100644 index 000000000..ab7331649 --- /dev/null +++ b/lte/rrc/asn/PRACH-Config.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PRACH_Config_H_ +#define _PRACH_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PRACH_ConfigInfo; + +/* PRACH-Config */ +typedef struct PRACH_Config { + long rootSequenceIndex; + struct PRACH_ConfigInfo *prach_ConfigInfo /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PRACH_Config_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PRACH_Config; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PRACH-ConfigInfo.h" + +#endif /* _PRACH_Config_H_ */ +#include diff --git a/lte/rrc/asn/PRACH-ConfigInfo.c b/lte/rrc/asn/PRACH-ConfigInfo.c new file mode 100644 index 000000000..31d41a997 --- /dev/null +++ b/lte/rrc/asn/PRACH-ConfigInfo.c @@ -0,0 +1,180 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PRACH-ConfigInfo.h" + +static int +memb_prach_ConfigIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_zeroCorrelationZoneConfig_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_prach_FreqOffset_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 94)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_prach_ConfigIndex_constr_2 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_zeroCorrelationZoneConfig_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_prach_FreqOffset_constr_5 = { + { APC_CONSTRAINED, 7, 7, 0, 94 } /* (0..94) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PRACH_ConfigInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigInfo, prach_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_prach_ConfigIndex_constraint_1, + &asn_PER_memb_prach_ConfigIndex_constr_2, + 0, + "prach-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigInfo, highSpeedFlag), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "highSpeedFlag" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigInfo, zeroCorrelationZoneConfig), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_zeroCorrelationZoneConfig_constraint_1, + &asn_PER_memb_zeroCorrelationZoneConfig_constr_4, + 0, + "zeroCorrelationZoneConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigInfo, prach_FreqOffset), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_prach_FreqOffset_constraint_1, + &asn_PER_memb_prach_FreqOffset_constr_5, + 0, + "prach-FreqOffset" + }, +}; +static ber_tlv_tag_t asn_DEF_PRACH_ConfigInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PRACH_ConfigInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* prach-ConfigIndex at 2219 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* highSpeedFlag at 2220 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* zeroCorrelationZoneConfig at 2221 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* prach-FreqOffset at 2222 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PRACH_ConfigInfo_specs_1 = { + sizeof(struct PRACH_ConfigInfo), + offsetof(struct PRACH_ConfigInfo, _asn_ctx), + asn_MAP_PRACH_ConfigInfo_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PRACH_ConfigInfo = { + "PRACH-ConfigInfo", + "PRACH-ConfigInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PRACH_ConfigInfo_tags_1, + sizeof(asn_DEF_PRACH_ConfigInfo_tags_1) + /sizeof(asn_DEF_PRACH_ConfigInfo_tags_1[0]), /* 1 */ + asn_DEF_PRACH_ConfigInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_PRACH_ConfigInfo_tags_1) + /sizeof(asn_DEF_PRACH_ConfigInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PRACH_ConfigInfo_1, + 4, /* Elements count */ + &asn_SPC_PRACH_ConfigInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PRACH-ConfigInfo.h b/lte/rrc/asn/PRACH-ConfigInfo.h new file mode 100644 index 000000000..fc84b42b9 --- /dev/null +++ b/lte/rrc/asn/PRACH-ConfigInfo.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PRACH_ConfigInfo_H_ +#define _PRACH_ConfigInfo_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PRACH-ConfigInfo */ +typedef struct PRACH_ConfigInfo { + long prach_ConfigIndex; + BOOLEAN_t highSpeedFlag; + long zeroCorrelationZoneConfig; + long prach_FreqOffset; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PRACH_ConfigInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PRACH_ConfigInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _PRACH_ConfigInfo_H_ */ +#include diff --git a/lte/rrc/asn/PRACH-ConfigSCell-r10.c b/lte/rrc/asn/PRACH-ConfigSCell-r10.c new file mode 100644 index 000000000..800bb7356 --- /dev/null +++ b/lte/rrc/asn/PRACH-ConfigSCell-r10.c @@ -0,0 +1,90 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PRACH-ConfigSCell-r10.h" + +static int +memb_prach_ConfigIndex_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_prach_ConfigIndex_r10_constr_2 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PRACH_ConfigSCell_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigSCell_r10, prach_ConfigIndex_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_prach_ConfigIndex_r10_constraint_1, + &asn_PER_memb_prach_ConfigIndex_r10_constr_2, + 0, + "prach-ConfigIndex-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_PRACH_ConfigSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PRACH_ConfigSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* prach-ConfigIndex-r10 at 2215 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PRACH_ConfigSCell_r10_specs_1 = { + sizeof(struct PRACH_ConfigSCell_r10), + offsetof(struct PRACH_ConfigSCell_r10, _asn_ctx), + asn_MAP_PRACH_ConfigSCell_r10_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PRACH_ConfigSCell_r10 = { + "PRACH-ConfigSCell-r10", + "PRACH-ConfigSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PRACH_ConfigSCell_r10_tags_1, + sizeof(asn_DEF_PRACH_ConfigSCell_r10_tags_1) + /sizeof(asn_DEF_PRACH_ConfigSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_PRACH_ConfigSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_PRACH_ConfigSCell_r10_tags_1) + /sizeof(asn_DEF_PRACH_ConfigSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PRACH_ConfigSCell_r10_1, + 1, /* Elements count */ + &asn_SPC_PRACH_ConfigSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PRACH-ConfigSCell-r10.h b/lte/rrc/asn/PRACH-ConfigSCell-r10.h new file mode 100644 index 000000000..69d611a39 --- /dev/null +++ b/lte/rrc/asn/PRACH-ConfigSCell-r10.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PRACH_ConfigSCell_r10_H_ +#define _PRACH_ConfigSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PRACH-ConfigSCell-r10 */ +typedef struct PRACH_ConfigSCell_r10 { + long prach_ConfigIndex_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PRACH_ConfigSCell_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PRACH_ConfigSCell_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _PRACH_ConfigSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/PRACH-ConfigSIB.c b/lte/rrc/asn/PRACH-ConfigSIB.c new file mode 100644 index 000000000..a7b209b22 --- /dev/null +++ b/lte/rrc/asn/PRACH-ConfigSIB.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PRACH-ConfigSIB.h" + +static int +memb_rootSequenceIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 837)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_rootSequenceIndex_constr_2 = { + { APC_CONSTRAINED, 10, 10, 0, 837 } /* (0..837) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PRACH_ConfigSIB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigSIB, rootSequenceIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_rootSequenceIndex_constraint_1, + &asn_PER_memb_rootSequenceIndex_constr_2, + 0, + "rootSequenceIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct PRACH_ConfigSIB, prach_ConfigInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PRACH_ConfigInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prach-ConfigInfo" + }, +}; +static ber_tlv_tag_t asn_DEF_PRACH_ConfigSIB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PRACH_ConfigSIB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rootSequenceIndex at 2205 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* prach-ConfigInfo at 2207 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PRACH_ConfigSIB_specs_1 = { + sizeof(struct PRACH_ConfigSIB), + offsetof(struct PRACH_ConfigSIB, _asn_ctx), + asn_MAP_PRACH_ConfigSIB_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PRACH_ConfigSIB = { + "PRACH-ConfigSIB", + "PRACH-ConfigSIB", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PRACH_ConfigSIB_tags_1, + sizeof(asn_DEF_PRACH_ConfigSIB_tags_1) + /sizeof(asn_DEF_PRACH_ConfigSIB_tags_1[0]), /* 1 */ + asn_DEF_PRACH_ConfigSIB_tags_1, /* Same as above */ + sizeof(asn_DEF_PRACH_ConfigSIB_tags_1) + /sizeof(asn_DEF_PRACH_ConfigSIB_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PRACH_ConfigSIB_1, + 2, /* Elements count */ + &asn_SPC_PRACH_ConfigSIB_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PRACH-ConfigSIB.h b/lte/rrc/asn/PRACH-ConfigSIB.h new file mode 100644 index 000000000..91c2e9bd2 --- /dev/null +++ b/lte/rrc/asn/PRACH-ConfigSIB.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PRACH_ConfigSIB_H_ +#define _PRACH_ConfigSIB_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PRACH-ConfigInfo.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PRACH-ConfigSIB */ +typedef struct PRACH_ConfigSIB { + long rootSequenceIndex; + PRACH_ConfigInfo_t prach_ConfigInfo; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PRACH_ConfigSIB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PRACH_ConfigSIB; + +#ifdef __cplusplus +} +#endif + +#endif /* _PRACH_ConfigSIB_H_ */ +#include diff --git a/lte/rrc/asn/PUCCH-ConfigCommon.c b/lte/rrc/asn/PUCCH-ConfigCommon.c new file mode 100644 index 000000000..7218233b8 --- /dev/null +++ b/lte/rrc/asn/PUCCH-ConfigCommon.c @@ -0,0 +1,321 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUCCH-ConfigCommon.h" + +static int +deltaPUCCH_Shift_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaPUCCH_Shift_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaPUCCH_Shift_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaPUCCH_Shift_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaPUCCH_Shift_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaPUCCH_Shift_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaPUCCH_Shift_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaPUCCH_Shift_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaPUCCH_Shift_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaPUCCH_Shift_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaPUCCH_Shift_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_nRB_CQI_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 98)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nCS_AN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n1PUCCH_AN_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_deltaPUCCH_Shift_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nRB_CQI_constr_6 = { + { APC_CONSTRAINED, 7, 7, 0, 98 } /* (0..98) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nCS_AN_constr_7 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n1PUCCH_AN_constr_8 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deltaPUCCH_Shift_value2enum_2[] = { + { 0, 3, "ds1" }, + { 1, 3, "ds2" }, + { 2, 3, "ds3" } +}; +static unsigned int asn_MAP_deltaPUCCH_Shift_enum2value_2[] = { + 0, /* ds1(0) */ + 1, /* ds2(1) */ + 2 /* ds3(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaPUCCH_Shift_specs_2 = { + asn_MAP_deltaPUCCH_Shift_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_deltaPUCCH_Shift_enum2value_2, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaPUCCH_Shift_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaPUCCH_Shift_2 = { + "deltaPUCCH-Shift", + "deltaPUCCH-Shift", + deltaPUCCH_Shift_2_free, + deltaPUCCH_Shift_2_print, + deltaPUCCH_Shift_2_constraint, + deltaPUCCH_Shift_2_decode_ber, + deltaPUCCH_Shift_2_encode_der, + deltaPUCCH_Shift_2_decode_xer, + deltaPUCCH_Shift_2_encode_xer, + deltaPUCCH_Shift_2_decode_uper, + deltaPUCCH_Shift_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaPUCCH_Shift_tags_2, + sizeof(asn_DEF_deltaPUCCH_Shift_tags_2) + /sizeof(asn_DEF_deltaPUCCH_Shift_tags_2[0]) - 1, /* 1 */ + asn_DEF_deltaPUCCH_Shift_tags_2, /* Same as above */ + sizeof(asn_DEF_deltaPUCCH_Shift_tags_2) + /sizeof(asn_DEF_deltaPUCCH_Shift_tags_2[0]), /* 2 */ + &asn_PER_type_deltaPUCCH_Shift_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaPUCCH_Shift_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PUCCH_ConfigCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigCommon, deltaPUCCH_Shift), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaPUCCH_Shift_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaPUCCH-Shift" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigCommon, nRB_CQI), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_nRB_CQI_constraint_1, + &asn_PER_memb_nRB_CQI_constr_6, + 0, + "nRB-CQI" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigCommon, nCS_AN), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_nCS_AN_constraint_1, + &asn_PER_memb_nCS_AN_constr_7, + 0, + "nCS-AN" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigCommon, n1PUCCH_AN), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n1PUCCH_AN_constraint_1, + &asn_PER_memb_n1PUCCH_AN_constr_8, + 0, + "n1PUCCH-AN" + }, +}; +static ber_tlv_tag_t asn_DEF_PUCCH_ConfigCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUCCH_ConfigCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* deltaPUCCH-Shift at 2230 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nRB-CQI at 2231 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nCS-AN at 2232 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* n1PUCCH-AN at 2233 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUCCH_ConfigCommon_specs_1 = { + sizeof(struct PUCCH_ConfigCommon), + offsetof(struct PUCCH_ConfigCommon, _asn_ctx), + asn_MAP_PUCCH_ConfigCommon_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUCCH_ConfigCommon = { + "PUCCH-ConfigCommon", + "PUCCH-ConfigCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUCCH_ConfigCommon_tags_1, + sizeof(asn_DEF_PUCCH_ConfigCommon_tags_1) + /sizeof(asn_DEF_PUCCH_ConfigCommon_tags_1[0]), /* 1 */ + asn_DEF_PUCCH_ConfigCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_PUCCH_ConfigCommon_tags_1) + /sizeof(asn_DEF_PUCCH_ConfigCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUCCH_ConfigCommon_1, + 4, /* Elements count */ + &asn_SPC_PUCCH_ConfigCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUCCH-ConfigCommon.h b/lte/rrc/asn/PUCCH-ConfigCommon.h new file mode 100644 index 000000000..1b527a4a4 --- /dev/null +++ b/lte/rrc/asn/PUCCH-ConfigCommon.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUCCH_ConfigCommon_H_ +#define _PUCCH_ConfigCommon_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PUCCH_ConfigCommon__deltaPUCCH_Shift { + PUCCH_ConfigCommon__deltaPUCCH_Shift_ds1 = 0, + PUCCH_ConfigCommon__deltaPUCCH_Shift_ds2 = 1, + PUCCH_ConfigCommon__deltaPUCCH_Shift_ds3 = 2 +} e_PUCCH_ConfigCommon__deltaPUCCH_Shift; + +/* PUCCH-ConfigCommon */ +typedef struct PUCCH_ConfigCommon { + long deltaPUCCH_Shift; + long nRB_CQI; + long nCS_AN; + long n1PUCCH_AN; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUCCH_ConfigCommon_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaPUCCH_Shift_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PUCCH_ConfigCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUCCH_ConfigCommon_H_ */ +#include diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c b/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c new file mode 100644 index 000000000..0d721a739 --- /dev/null +++ b/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c @@ -0,0 +1,1117 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUCCH-ConfigDedicated-v1020.h" + +static int +memb_NativeInteger_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 549)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_NativeInteger_constraint_9(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 549)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n3PUCCH_AN_ListP1_r10_constraint_8(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 4)) { + /* Perform validation of the inner elements */ + return td->check_constraints(td, sptr, ctfailcb, app_key); + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n3PUCCH_AN_List_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 4)) { + /* Perform validation of the inner elements */ + return td->check_constraints(td, sptr, ctfailcb, app_key); + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n1PUCCH_AN_CS_List_r10_constraint_14(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 2)) { + /* Perform validation of the inner elements */ + return td->check_constraints(td, sptr, ctfailcb, app_key); + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +simultaneousPUCCH_PUSCH_r10_19_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +simultaneousPUCCH_PUSCH_r10_19_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +simultaneousPUCCH_PUSCH_r10_19_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +simultaneousPUCCH_PUSCH_r10_19_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +simultaneousPUCCH_PUSCH_r10_19_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +simultaneousPUCCH_PUSCH_r10_19_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +simultaneousPUCCH_PUSCH_r10_19_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +simultaneousPUCCH_PUSCH_r10_19_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +simultaneousPUCCH_PUSCH_r10_19_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + simultaneousPUCCH_PUSCH_r10_19_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_n1PUCCH_AN_RepP1_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_Member_constr_5 = { + { APC_CONSTRAINED, 10, 10, 0, 549 } /* (0..549) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n3PUCCH_AN_List_r10_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_Member_constr_10 = { + { APC_CONSTRAINED, 10, 10, 0, 549 } /* (0..549) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n3PUCCH_AN_ListP1_r10_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n3PUCCH_AN_ListP1_r10_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_twoAntennaPortActivatedPUCCH_Format3_r10_constr_6 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n3PUCCH_AN_List_r10_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n1PUCCH_AN_CS_List_r10_constr_15 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n1PUCCH_AN_CS_List_r10_constr_15 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n1PUCCH_AN_CS_r10_constr_12 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_pucch_Format_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_twoAntennaPortActivatedPUCCH_Format1a1b_r10_constr_17 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_simultaneousPUCCH_PUSCH_r10_constr_19 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n1PUCCH_AN_RepP1_r10_constr_21 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_n3PUCCH_AN_List_r10_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_NativeInteger, + memb_NativeInteger_constraint_4, + &asn_PER_memb_Member_constr_5, + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_n3PUCCH_AN_List_r10_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_n3PUCCH_AN_List_r10_specs_4 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__n3PUCCH_AN_List_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__n3PUCCH_AN_List_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n3PUCCH_AN_List_r10_4 = { + "n3PUCCH-AN-List-r10", + "n3PUCCH-AN-List-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n3PUCCH_AN_List_r10_tags_4, + sizeof(asn_DEF_n3PUCCH_AN_List_r10_tags_4) + /sizeof(asn_DEF_n3PUCCH_AN_List_r10_tags_4[0]) - 1, /* 1 */ + asn_DEF_n3PUCCH_AN_List_r10_tags_4, /* Same as above */ + sizeof(asn_DEF_n3PUCCH_AN_List_r10_tags_4) + /sizeof(asn_DEF_n3PUCCH_AN_List_r10_tags_4[0]), /* 2 */ + &asn_PER_type_n3PUCCH_AN_List_r10_constr_4, + asn_MBR_n3PUCCH_AN_List_r10_4, + 1, /* Single element */ + &asn_SPC_n3PUCCH_AN_List_r10_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_n3PUCCH_AN_ListP1_r10_9[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_NativeInteger, + memb_NativeInteger_constraint_9, + &asn_PER_memb_Member_constr_10, + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_n3PUCCH_AN_ListP1_r10_specs_9 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup__n3PUCCH_AN_ListP1_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup__n3PUCCH_AN_ListP1_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n3PUCCH_AN_ListP1_r10_9 = { + "n3PUCCH-AN-ListP1-r10", + "n3PUCCH-AN-ListP1-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9, + sizeof(asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9) + /sizeof(asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9[0]) - 1, /* 1 */ + asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9, /* Same as above */ + sizeof(asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9) + /sizeof(asn_DEF_n3PUCCH_AN_ListP1_r10_tags_9[0]), /* 2 */ + &asn_PER_type_n3PUCCH_AN_ListP1_r10_constr_9, + asn_MBR_n3PUCCH_AN_ListP1_r10_9, + 1, /* Single element */ + &asn_SPC_n3PUCCH_AN_ListP1_r10_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup, n3PUCCH_AN_ListP1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_n3PUCCH_AN_ListP1_r10_9, + memb_n3PUCCH_AN_ListP1_r10_constraint_8, + &asn_PER_memb_n3PUCCH_AN_ListP1_r10_constr_9, + 0, + "n3PUCCH-AN-ListP1-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* n3PUCCH-AN-ListP1-r10 at 2254 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_8 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_8 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_8, + sizeof(asn_DEF_setup_tags_8) + /sizeof(asn_DEF_setup_tags_8[0]) - 1, /* 1 */ + asn_DEF_setup_tags_8, /* Same as above */ + sizeof(asn_DEF_setup_tags_8) + /sizeof(asn_DEF_setup_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_8, + 1, /* Elements count */ + &asn_SPC_setup_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_twoAntennaPortActivatedPUCCH_Format3_r10_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_twoAntennaPortActivatedPUCCH_Format3_r10_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2252 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2255 */ +}; +static asn_CHOICE_specifics_t asn_SPC_twoAntennaPortActivatedPUCCH_Format3_r10_specs_6 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10, _asn_ctx), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10, present), + sizeof(((struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10 *)0)->present), + asn_MAP_twoAntennaPortActivatedPUCCH_Format3_r10_tag2el_6, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_twoAntennaPortActivatedPUCCH_Format3_r10_6 = { + "twoAntennaPortActivatedPUCCH-Format3-r10", + "twoAntennaPortActivatedPUCCH-Format3-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_twoAntennaPortActivatedPUCCH_Format3_r10_constr_6, + asn_MBR_twoAntennaPortActivatedPUCCH_Format3_r10_6, + 2, /* Elements count */ + &asn_SPC_twoAntennaPortActivatedPUCCH_Format3_r10_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_format3_r10_3[] = { + { ATF_POINTER, 2, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10, n3PUCCH_AN_List_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_n3PUCCH_AN_List_r10_4, + memb_n3PUCCH_AN_List_r10_constraint_3, + &asn_PER_memb_n3PUCCH_AN_List_r10_constr_4, + 0, + "n3PUCCH-AN-List-r10" + }, + { ATF_POINTER, 1, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10, twoAntennaPortActivatedPUCCH_Format3_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_twoAntennaPortActivatedPUCCH_Format3_r10_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "twoAntennaPortActivatedPUCCH-Format3-r10" + }, +}; +static int asn_MAP_format3_r10_oms_3[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_format3_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_format3_r10_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* n3PUCCH-AN-List-r10 at 2250 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* twoAntennaPortActivatedPUCCH-Format3-r10 at 2252 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_format3_r10_specs_3 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10, _asn_ctx), + asn_MAP_format3_r10_tag2el_3, + 2, /* Count of tags in the map */ + asn_MAP_format3_r10_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_format3_r10_3 = { + "format3-r10", + "format3-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_format3_r10_tags_3, + sizeof(asn_DEF_format3_r10_tags_3) + /sizeof(asn_DEF_format3_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_format3_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_format3_r10_tags_3) + /sizeof(asn_DEF_format3_r10_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_format3_r10_3, + 2, /* Elements count */ + &asn_SPC_format3_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_n1PUCCH_AN_CS_List_r10_15[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_N1PUCCH_AN_CS_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_n1PUCCH_AN_CS_List_r10_specs_15 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup__n1PUCCH_AN_CS_List_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup__n1PUCCH_AN_CS_List_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n1PUCCH_AN_CS_List_r10_15 = { + "n1PUCCH-AN-CS-List-r10", + "n1PUCCH-AN-CS-List-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15, + sizeof(asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15) + /sizeof(asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15[0]) - 1, /* 1 */ + asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15, /* Same as above */ + sizeof(asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15) + /sizeof(asn_DEF_n1PUCCH_AN_CS_List_r10_tags_15[0]), /* 2 */ + &asn_PER_type_n1PUCCH_AN_CS_List_r10_constr_15, + asn_MBR_n1PUCCH_AN_CS_List_r10_15, + 1, /* Single element */ + &asn_SPC_n1PUCCH_AN_CS_List_r10_specs_15 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_14[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup, n1PUCCH_AN_CS_List_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_n1PUCCH_AN_CS_List_r10_15, + memb_n1PUCCH_AN_CS_List_r10_constraint_14, + &asn_PER_memb_n1PUCCH_AN_CS_List_r10_constr_15, + 0, + "n1PUCCH-AN-CS-List-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_14[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* n1PUCCH-AN-CS-List-r10 at 2263 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_14 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_14, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_14 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_14, + sizeof(asn_DEF_setup_tags_14) + /sizeof(asn_DEF_setup_tags_14[0]) - 1, /* 1 */ + asn_DEF_setup_tags_14, /* Same as above */ + sizeof(asn_DEF_setup_tags_14) + /sizeof(asn_DEF_setup_tags_14[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_14, + 1, /* Elements count */ + &asn_SPC_setup_specs_14 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_n1PUCCH_AN_CS_r10_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_n1PUCCH_AN_CS_r10_tag2el_12[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2260 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2263 */ +}; +static asn_CHOICE_specifics_t asn_SPC_n1PUCCH_AN_CS_r10_specs_12 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10, _asn_ctx), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10, present), + sizeof(((struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10 *)0)->present), + asn_MAP_n1PUCCH_AN_CS_r10_tag2el_12, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n1PUCCH_AN_CS_r10_12 = { + "n1PUCCH-AN-CS-r10", + "n1PUCCH-AN-CS-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_n1PUCCH_AN_CS_r10_constr_12, + asn_MBR_n1PUCCH_AN_CS_r10_12, + 2, /* Elements count */ + &asn_SPC_n1PUCCH_AN_CS_r10_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_channelSelection_r10_11[] = { + { ATF_POINTER, 1, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10, n1PUCCH_AN_CS_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_n1PUCCH_AN_CS_r10_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n1PUCCH-AN-CS-r10" + }, +}; +static int asn_MAP_channelSelection_r10_oms_11[] = { 0 }; +static ber_tlv_tag_t asn_DEF_channelSelection_r10_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_channelSelection_r10_tag2el_11[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* n1PUCCH-AN-CS-r10 at 2260 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_channelSelection_r10_specs_11 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10, _asn_ctx), + asn_MAP_channelSelection_r10_tag2el_11, + 1, /* Count of tags in the map */ + asn_MAP_channelSelection_r10_oms_11, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_channelSelection_r10_11 = { + "channelSelection-r10", + "channelSelection-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_channelSelection_r10_tags_11, + sizeof(asn_DEF_channelSelection_r10_tags_11) + /sizeof(asn_DEF_channelSelection_r10_tags_11[0]) - 1, /* 1 */ + asn_DEF_channelSelection_r10_tags_11, /* Same as above */ + sizeof(asn_DEF_channelSelection_r10_tags_11) + /sizeof(asn_DEF_channelSelection_r10_tags_11[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_channelSelection_r10_11, + 1, /* Elements count */ + &asn_SPC_channelSelection_r10_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_pucch_Format_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10, choice.format3_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_format3_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "format3-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10, choice.channelSelection_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_channelSelection_r10_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "channelSelection-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_pucch_Format_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* format3-r10 at 2250 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* channelSelection-r10 at 2264 */ +}; +static asn_CHOICE_specifics_t asn_SPC_pucch_Format_r10_specs_2 = { + sizeof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10, _asn_ctx), + offsetof(struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10, present), + sizeof(((struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10 *)0)->present), + asn_MAP_pucch_Format_r10_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pucch_Format_r10_2 = { + "pucch-Format-r10", + "pucch-Format-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_pucch_Format_r10_constr_2, + asn_MBR_pucch_Format_r10_2, + 2, /* Elements count */ + &asn_SPC_pucch_Format_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_twoAntennaPortActivatedPUCCH_Format1a1b_r10_value2enum_17[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_twoAntennaPortActivatedPUCCH_Format1a1b_r10_enum2value_17[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_twoAntennaPortActivatedPUCCH_Format1a1b_r10_specs_17 = { + asn_MAP_twoAntennaPortActivatedPUCCH_Format1a1b_r10_value2enum_17, /* "tag" => N; sorted by tag */ + asn_MAP_twoAntennaPortActivatedPUCCH_Format1a1b_r10_enum2value_17, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_17 = { + "twoAntennaPortActivatedPUCCH-Format1a1b-r10", + "twoAntennaPortActivatedPUCCH-Format1a1b-r10", + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_free, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_print, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_constraint, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_decode_ber, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_encode_der, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_decode_xer, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_encode_xer, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_decode_uper, + twoAntennaPortActivatedPUCCH_Format1a1b_r10_17_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17, + sizeof(asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17) + /sizeof(asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17[0]) - 1, /* 1 */ + asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17, /* Same as above */ + sizeof(asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17) + /sizeof(asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_tags_17[0]), /* 2 */ + &asn_PER_type_twoAntennaPortActivatedPUCCH_Format1a1b_r10_constr_17, + 0, 0, /* Defined elsewhere */ + &asn_SPC_twoAntennaPortActivatedPUCCH_Format1a1b_r10_specs_17 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_simultaneousPUCCH_PUSCH_r10_value2enum_19[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_simultaneousPUCCH_PUSCH_r10_enum2value_19[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_simultaneousPUCCH_PUSCH_r10_specs_19 = { + asn_MAP_simultaneousPUCCH_PUSCH_r10_value2enum_19, /* "tag" => N; sorted by tag */ + asn_MAP_simultaneousPUCCH_PUSCH_r10_enum2value_19, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_simultaneousPUCCH_PUSCH_r10_19 = { + "simultaneousPUCCH-PUSCH-r10", + "simultaneousPUCCH-PUSCH-r10", + simultaneousPUCCH_PUSCH_r10_19_free, + simultaneousPUCCH_PUSCH_r10_19_print, + simultaneousPUCCH_PUSCH_r10_19_constraint, + simultaneousPUCCH_PUSCH_r10_19_decode_ber, + simultaneousPUCCH_PUSCH_r10_19_encode_der, + simultaneousPUCCH_PUSCH_r10_19_decode_xer, + simultaneousPUCCH_PUSCH_r10_19_encode_xer, + simultaneousPUCCH_PUSCH_r10_19_decode_uper, + simultaneousPUCCH_PUSCH_r10_19_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19, + sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19) + /sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19[0]) - 1, /* 1 */ + asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19, /* Same as above */ + sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19) + /sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_19[0]), /* 2 */ + &asn_PER_type_simultaneousPUCCH_PUSCH_r10_constr_19, + 0, 0, /* Defined elsewhere */ + &asn_SPC_simultaneousPUCCH_PUSCH_r10_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PUCCH_ConfigDedicated_v1020_1[] = { + { ATF_POINTER, 4, offsetof(struct PUCCH_ConfigDedicated_v1020, pucch_Format_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_pucch_Format_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pucch-Format-r10" + }, + { ATF_POINTER, 3, offsetof(struct PUCCH_ConfigDedicated_v1020, twoAntennaPortActivatedPUCCH_Format1a1b_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_17, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "twoAntennaPortActivatedPUCCH-Format1a1b-r10" + }, + { ATF_POINTER, 2, offsetof(struct PUCCH_ConfigDedicated_v1020, simultaneousPUCCH_PUSCH_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_simultaneousPUCCH_PUSCH_r10_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "simultaneousPUCCH-PUSCH-r10" + }, + { ATF_POINTER, 1, offsetof(struct PUCCH_ConfigDedicated_v1020, n1PUCCH_AN_RepP1_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n1PUCCH_AN_RepP1_r10_constraint_1, + &asn_PER_memb_n1PUCCH_AN_RepP1_r10_constr_21, + 0, + "n1PUCCH-AN-RepP1-r10" + }, +}; +static int asn_MAP_PUCCH_ConfigDedicated_v1020_oms_1[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUCCH_ConfigDedicated_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pucch-Format-r10 at 2257 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* twoAntennaPortActivatedPUCCH-Format1a1b-r10 at 2267 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* simultaneousPUCCH-PUSCH-r10 at 2268 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* n1PUCCH-AN-RepP1-r10 at 2269 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUCCH_ConfigDedicated_v1020_specs_1 = { + sizeof(struct PUCCH_ConfigDedicated_v1020), + offsetof(struct PUCCH_ConfigDedicated_v1020, _asn_ctx), + asn_MAP_PUCCH_ConfigDedicated_v1020_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_PUCCH_ConfigDedicated_v1020_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUCCH_ConfigDedicated_v1020 = { + "PUCCH-ConfigDedicated-v1020", + "PUCCH-ConfigDedicated-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1, + sizeof(asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1) + /sizeof(asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1[0]), /* 1 */ + asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1) + /sizeof(asn_DEF_PUCCH_ConfigDedicated_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUCCH_ConfigDedicated_v1020_1, + 4, /* Elements count */ + &asn_SPC_PUCCH_ConfigDedicated_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h b/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h new file mode 100644 index 000000000..e8ac23096 --- /dev/null +++ b/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUCCH_ConfigDedicated_v1020_H_ +#define _PUCCH_ConfigDedicated_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PUCCH_ConfigDedicated_v1020__pucch_Format_r10_PR { + PUCCH_ConfigDedicated_v1020__pucch_Format_r10_PR_NOTHING, /* No components present */ + PUCCH_ConfigDedicated_v1020__pucch_Format_r10_PR_format3_r10, + PUCCH_ConfigDedicated_v1020__pucch_Format_r10_PR_channelSelection_r10 +} PUCCH_ConfigDedicated_v1020__pucch_Format_r10_PR; +typedef enum PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_PR { + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_PR_NOTHING, /* No components present */ + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_PR_release, + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_PR_setup +} PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_PR; +typedef enum PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_PR { + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_PR_NOTHING, /* No components present */ + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_PR_release, + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_PR_setup +} PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_PR; +typedef enum PUCCH_ConfigDedicated_v1020__twoAntennaPortActivatedPUCCH_Format1a1b_r10 { + PUCCH_ConfigDedicated_v1020__twoAntennaPortActivatedPUCCH_Format1a1b_r10_true = 0 +} e_PUCCH_ConfigDedicated_v1020__twoAntennaPortActivatedPUCCH_Format1a1b_r10; +typedef enum PUCCH_ConfigDedicated_v1020__simultaneousPUCCH_PUSCH_r10 { + PUCCH_ConfigDedicated_v1020__simultaneousPUCCH_PUSCH_r10_true = 0 +} e_PUCCH_ConfigDedicated_v1020__simultaneousPUCCH_PUSCH_r10; + +/* Forward declarations */ +struct N1PUCCH_AN_CS_r10; + +/* PUCCH-ConfigDedicated-v1020 */ +typedef struct PUCCH_ConfigDedicated_v1020 { + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10 { + PUCCH_ConfigDedicated_v1020__pucch_Format_r10_PR present; + union PUCCH_ConfigDedicated_v1020__pucch_Format_r10_u { + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10 { + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__n3PUCCH_AN_List_r10 { + A_SEQUENCE_OF(long) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *n3PUCCH_AN_List_r10; + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10 { + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_PR present; + union PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10_u { + NULL_t release; + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup { + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__format3_r10__twoAntennaPortActivatedPUCCH_Format3_r10__setup__n3PUCCH_AN_ListP1_r10 { + A_SEQUENCE_OF(long) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } n3PUCCH_AN_ListP1_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *twoAntennaPortActivatedPUCCH_Format3_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } format3_r10; + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10 { + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10 { + PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_PR present; + union PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10_u { + NULL_t release; + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup { + struct PUCCH_ConfigDedicated_v1020__pucch_Format_r10__channelSelection_r10__n1PUCCH_AN_CS_r10__setup__n1PUCCH_AN_CS_List_r10 { + A_SEQUENCE_OF(struct N1PUCCH_AN_CS_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } n1PUCCH_AN_CS_List_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *n1PUCCH_AN_CS_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } channelSelection_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *pucch_Format_r10; + long *twoAntennaPortActivatedPUCCH_Format1a1b_r10 /* OPTIONAL */; + long *simultaneousPUCCH_PUSCH_r10 /* OPTIONAL */; + long *n1PUCCH_AN_RepP1_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUCCH_ConfigDedicated_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_twoAntennaPortActivatedPUCCH_Format1a1b_r10_17; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_simultaneousPUCCH_PUSCH_r10_19; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PUCCH_ConfigDedicated_v1020; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "N1PUCCH-AN-CS-r10.h" + +#endif /* _PUCCH_ConfigDedicated_v1020_H_ */ +#include diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated.c b/lte/rrc/asn/PUCCH-ConfigDedicated.c new file mode 100644 index 000000000..5fbda1b38 --- /dev/null +++ b/lte/rrc/asn/PUCCH-ConfigDedicated.c @@ -0,0 +1,510 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUCCH-ConfigDedicated.h" + +static int +repetitionFactor_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +repetitionFactor_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +repetitionFactor_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +repetitionFactor_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +repetitionFactor_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +repetitionFactor_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +repetitionFactor_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +repetitionFactor_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +repetitionFactor_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +repetitionFactor_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + repetitionFactor_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_n1PUCCH_AN_Rep_constraint_4(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +tdd_AckNackFeedbackMode_11_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +tdd_AckNackFeedbackMode_11_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +tdd_AckNackFeedbackMode_11_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +tdd_AckNackFeedbackMode_11_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +tdd_AckNackFeedbackMode_11_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +tdd_AckNackFeedbackMode_11_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +tdd_AckNackFeedbackMode_11_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +tdd_AckNackFeedbackMode_11_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +tdd_AckNackFeedbackMode_11_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + tdd_AckNackFeedbackMode_11_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_repetitionFactor_constr_5 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n1PUCCH_AN_Rep_constr_10 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ackNackRepetition_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_tdd_AckNackFeedbackMode_constr_11 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_repetitionFactor_value2enum_5[] = { + { 0, 2, "n2" }, + { 1, 2, "n4" }, + { 2, 2, "n6" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_repetitionFactor_enum2value_5[] = { + 0, /* n2(0) */ + 1, /* n4(1) */ + 2, /* n6(2) */ + 3 /* spare1(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_repetitionFactor_specs_5 = { + asn_MAP_repetitionFactor_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_repetitionFactor_enum2value_5, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_repetitionFactor_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_repetitionFactor_5 = { + "repetitionFactor", + "repetitionFactor", + repetitionFactor_5_free, + repetitionFactor_5_print, + repetitionFactor_5_constraint, + repetitionFactor_5_decode_ber, + repetitionFactor_5_encode_der, + repetitionFactor_5_decode_xer, + repetitionFactor_5_encode_xer, + repetitionFactor_5_decode_uper, + repetitionFactor_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_repetitionFactor_tags_5, + sizeof(asn_DEF_repetitionFactor_tags_5) + /sizeof(asn_DEF_repetitionFactor_tags_5[0]) - 1, /* 1 */ + asn_DEF_repetitionFactor_tags_5, /* Same as above */ + sizeof(asn_DEF_repetitionFactor_tags_5) + /sizeof(asn_DEF_repetitionFactor_tags_5[0]), /* 2 */ + &asn_PER_type_repetitionFactor_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_repetitionFactor_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition__setup, repetitionFactor), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_repetitionFactor_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "repetitionFactor" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition__setup, n1PUCCH_AN_Rep), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n1PUCCH_AN_Rep_constraint_4, + &asn_PER_memb_n1PUCCH_AN_Rep_constr_10, + 0, + "n1PUCCH-AN-Rep" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* repetitionFactor at 2240 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* n1PUCCH-AN-Rep at 2241 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_4 = { + sizeof(struct PUCCH_ConfigDedicated__ackNackRepetition__setup), + offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition__setup, _asn_ctx), + asn_MAP_setup_tag2el_4, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_4 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_4, + sizeof(asn_DEF_setup_tags_4) + /sizeof(asn_DEF_setup_tags_4[0]) - 1, /* 1 */ + asn_DEF_setup_tags_4, /* Same as above */ + sizeof(asn_DEF_setup_tags_4) + /sizeof(asn_DEF_setup_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_4, + 2, /* Elements count */ + &asn_SPC_setup_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ackNackRepetition_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_ackNackRepetition_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2238 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2240 */ +}; +static asn_CHOICE_specifics_t asn_SPC_ackNackRepetition_specs_2 = { + sizeof(struct PUCCH_ConfigDedicated__ackNackRepetition), + offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition, _asn_ctx), + offsetof(struct PUCCH_ConfigDedicated__ackNackRepetition, present), + sizeof(((struct PUCCH_ConfigDedicated__ackNackRepetition *)0)->present), + asn_MAP_ackNackRepetition_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ackNackRepetition_2 = { + "ackNackRepetition", + "ackNackRepetition", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_ackNackRepetition_constr_2, + asn_MBR_ackNackRepetition_2, + 2, /* Elements count */ + &asn_SPC_ackNackRepetition_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_tdd_AckNackFeedbackMode_value2enum_11[] = { + { 0, 8, "bundling" }, + { 1, 12, "multiplexing" } +}; +static unsigned int asn_MAP_tdd_AckNackFeedbackMode_enum2value_11[] = { + 0, /* bundling(0) */ + 1 /* multiplexing(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_tdd_AckNackFeedbackMode_specs_11 = { + asn_MAP_tdd_AckNackFeedbackMode_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_tdd_AckNackFeedbackMode_enum2value_11, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_tdd_AckNackFeedbackMode_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_tdd_AckNackFeedbackMode_11 = { + "tdd-AckNackFeedbackMode", + "tdd-AckNackFeedbackMode", + tdd_AckNackFeedbackMode_11_free, + tdd_AckNackFeedbackMode_11_print, + tdd_AckNackFeedbackMode_11_constraint, + tdd_AckNackFeedbackMode_11_decode_ber, + tdd_AckNackFeedbackMode_11_encode_der, + tdd_AckNackFeedbackMode_11_decode_xer, + tdd_AckNackFeedbackMode_11_encode_xer, + tdd_AckNackFeedbackMode_11_decode_uper, + tdd_AckNackFeedbackMode_11_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_tdd_AckNackFeedbackMode_tags_11, + sizeof(asn_DEF_tdd_AckNackFeedbackMode_tags_11) + /sizeof(asn_DEF_tdd_AckNackFeedbackMode_tags_11[0]) - 1, /* 1 */ + asn_DEF_tdd_AckNackFeedbackMode_tags_11, /* Same as above */ + sizeof(asn_DEF_tdd_AckNackFeedbackMode_tags_11) + /sizeof(asn_DEF_tdd_AckNackFeedbackMode_tags_11[0]), /* 2 */ + &asn_PER_type_tdd_AckNackFeedbackMode_constr_11, + 0, 0, /* Defined elsewhere */ + &asn_SPC_tdd_AckNackFeedbackMode_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PUCCH_ConfigDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUCCH_ConfigDedicated, ackNackRepetition), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ackNackRepetition_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ackNackRepetition" + }, + { ATF_POINTER, 1, offsetof(struct PUCCH_ConfigDedicated, tdd_AckNackFeedbackMode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_tdd_AckNackFeedbackMode_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tdd-AckNackFeedbackMode" + }, +}; +static int asn_MAP_PUCCH_ConfigDedicated_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_PUCCH_ConfigDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUCCH_ConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ackNackRepetition at 2238 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tdd-AckNackFeedbackMode at 2244 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUCCH_ConfigDedicated_specs_1 = { + sizeof(struct PUCCH_ConfigDedicated), + offsetof(struct PUCCH_ConfigDedicated, _asn_ctx), + asn_MAP_PUCCH_ConfigDedicated_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PUCCH_ConfigDedicated_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUCCH_ConfigDedicated = { + "PUCCH-ConfigDedicated", + "PUCCH-ConfigDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUCCH_ConfigDedicated_tags_1, + sizeof(asn_DEF_PUCCH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_PUCCH_ConfigDedicated_tags_1[0]), /* 1 */ + asn_DEF_PUCCH_ConfigDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_PUCCH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_PUCCH_ConfigDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUCCH_ConfigDedicated_1, + 2, /* Elements count */ + &asn_SPC_PUCCH_ConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated.h b/lte/rrc/asn/PUCCH-ConfigDedicated.h new file mode 100644 index 000000000..3369beac5 --- /dev/null +++ b/lte/rrc/asn/PUCCH-ConfigDedicated.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUCCH_ConfigDedicated_H_ +#define _PUCCH_ConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PUCCH_ConfigDedicated__ackNackRepetition_PR { + PUCCH_ConfigDedicated__ackNackRepetition_PR_NOTHING, /* No components present */ + PUCCH_ConfigDedicated__ackNackRepetition_PR_release, + PUCCH_ConfigDedicated__ackNackRepetition_PR_setup +} PUCCH_ConfigDedicated__ackNackRepetition_PR; +typedef enum PUCCH_ConfigDedicated__ackNackRepetition__setup__repetitionFactor { + PUCCH_ConfigDedicated__ackNackRepetition__setup__repetitionFactor_n2 = 0, + PUCCH_ConfigDedicated__ackNackRepetition__setup__repetitionFactor_n4 = 1, + PUCCH_ConfigDedicated__ackNackRepetition__setup__repetitionFactor_n6 = 2, + PUCCH_ConfigDedicated__ackNackRepetition__setup__repetitionFactor_spare1 = 3 +} e_PUCCH_ConfigDedicated__ackNackRepetition__setup__repetitionFactor; +typedef enum PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode { + PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_bundling = 0, + PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode_multiplexing = 1 +} e_PUCCH_ConfigDedicated__tdd_AckNackFeedbackMode; + +/* PUCCH-ConfigDedicated */ +typedef struct PUCCH_ConfigDedicated { + struct PUCCH_ConfigDedicated__ackNackRepetition { + PUCCH_ConfigDedicated__ackNackRepetition_PR present; + union PUCCH_ConfigDedicated__ackNackRepetition_u { + NULL_t release; + struct PUCCH_ConfigDedicated__ackNackRepetition__setup { + long repetitionFactor; + long n1PUCCH_AN_Rep; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ackNackRepetition; + long *tdd_AckNackFeedbackMode /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUCCH_ConfigDedicated_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_repetitionFactor_5; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_tdd_AckNackFeedbackMode_11; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PUCCH_ConfigDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUCCH_ConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c b/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c new file mode 100644 index 000000000..995a2f7ec --- /dev/null +++ b/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUSCH-CAConfigDedicated-vlola.h" + +static asn_TYPE_member_t asn_MBR_PUSCH_CAConfigDedicated_vlola_1[] = { + { ATF_POINTER, 2, offsetof(struct PUSCH_CAConfigDedicated_vlola, betaOffset_CA_Index), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BetaOffset_CA_Index, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "betaOffset-CA-Index" + }, + { ATF_POINTER, 1, offsetof(struct PUSCH_CAConfigDedicated_vlola, cShift), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CShift, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cShift" + }, +}; +static int asn_MAP_PUSCH_CAConfigDedicated_vlola_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUSCH_CAConfigDedicated_vlola_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* betaOffset-CA-Index at 2170 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cShift at 2171 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUSCH_CAConfigDedicated_vlola_specs_1 = { + sizeof(struct PUSCH_CAConfigDedicated_vlola), + offsetof(struct PUSCH_CAConfigDedicated_vlola, _asn_ctx), + asn_MAP_PUSCH_CAConfigDedicated_vlola_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PUSCH_CAConfigDedicated_vlola_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUSCH_CAConfigDedicated_vlola = { + "PUSCH-CAConfigDedicated-vlola", + "PUSCH-CAConfigDedicated-vlola", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1, + sizeof(asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1) + /sizeof(asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1[0]), /* 1 */ + asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1, /* Same as above */ + sizeof(asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1) + /sizeof(asn_DEF_PUSCH_CAConfigDedicated_vlola_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUSCH_CAConfigDedicated_vlola_1, + 2, /* Elements count */ + &asn_SPC_PUSCH_CAConfigDedicated_vlola_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h b/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h new file mode 100644 index 000000000..e127f1929 --- /dev/null +++ b/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUSCH_CAConfigDedicated_vlola_H_ +#define _PUSCH_CAConfigDedicated_vlola_H_ + + +#include + +/* Including external dependencies */ +#include "BetaOffset-CA-Index.h" +#include "CShift.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PUSCH-CAConfigDedicated-vlola */ +typedef struct PUSCH_CAConfigDedicated_vlola { + BetaOffset_CA_Index_t *betaOffset_CA_Index /* OPTIONAL */; + CShift_t *cShift /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUSCH_CAConfigDedicated_vlola_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PUSCH_CAConfigDedicated_vlola; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUSCH_CAConfigDedicated_vlola_H_ */ +#include diff --git a/lte/rrc/asn/PUSCH-ConfigCommon.c b/lte/rrc/asn/PUSCH-ConfigCommon.c new file mode 100644 index 000000000..427fef7d4 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigCommon.c @@ -0,0 +1,352 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUSCH-ConfigCommon.h" + +static int +hoppingMode_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +hoppingMode_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +hoppingMode_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + hoppingMode_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +hoppingMode_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +hoppingMode_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +hoppingMode_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +hoppingMode_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +hoppingMode_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +hoppingMode_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +hoppingMode_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + hoppingMode_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_n_SB_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 4)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pusch_HoppingOffset_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 98)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_hoppingMode_constr_4 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n_SB_constr_3 = { + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (1..4) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pusch_HoppingOffset_constr_7 = { + { APC_CONSTRAINED, 7, 7, 0, 98 } /* (0..98) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_hoppingMode_value2enum_4[] = { + { 0, 13, "interSubFrame" }, + { 1, 21, "intraAndInterSubFrame" } +}; +static unsigned int asn_MAP_hoppingMode_enum2value_4[] = { + 0, /* interSubFrame(0) */ + 1 /* intraAndInterSubFrame(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_hoppingMode_specs_4 = { + asn_MAP_hoppingMode_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_hoppingMode_enum2value_4, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_hoppingMode_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_hoppingMode_4 = { + "hoppingMode", + "hoppingMode", + hoppingMode_4_free, + hoppingMode_4_print, + hoppingMode_4_constraint, + hoppingMode_4_decode_ber, + hoppingMode_4_encode_der, + hoppingMode_4_decode_xer, + hoppingMode_4_encode_xer, + hoppingMode_4_decode_uper, + hoppingMode_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_hoppingMode_tags_4, + sizeof(asn_DEF_hoppingMode_tags_4) + /sizeof(asn_DEF_hoppingMode_tags_4[0]) - 1, /* 1 */ + asn_DEF_hoppingMode_tags_4, /* Same as above */ + sizeof(asn_DEF_hoppingMode_tags_4) + /sizeof(asn_DEF_hoppingMode_tags_4[0]), /* 2 */ + &asn_PER_type_hoppingMode_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_hoppingMode_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_pusch_ConfigBasic_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigCommon__pusch_ConfigBasic, n_SB), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n_SB_constraint_2, + &asn_PER_memb_n_SB_constr_3, + 0, + "n-SB" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigCommon__pusch_ConfigBasic, hoppingMode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_hoppingMode_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "hoppingMode" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigCommon__pusch_ConfigBasic, pusch_HoppingOffset), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pusch_HoppingOffset_constraint_2, + &asn_PER_memb_pusch_HoppingOffset_constr_7, + 0, + "pusch-HoppingOffset" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigCommon__pusch_ConfigBasic, enable64QAM), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "enable64QAM" + }, +}; +static ber_tlv_tag_t asn_DEF_pusch_ConfigBasic_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_pusch_ConfigBasic_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* n-SB at 2277 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hoppingMode at 2278 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pusch-HoppingOffset at 2279 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* enable64QAM at 2280 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_pusch_ConfigBasic_specs_2 = { + sizeof(struct PUSCH_ConfigCommon__pusch_ConfigBasic), + offsetof(struct PUSCH_ConfigCommon__pusch_ConfigBasic, _asn_ctx), + asn_MAP_pusch_ConfigBasic_tag2el_2, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pusch_ConfigBasic_2 = { + "pusch-ConfigBasic", + "pusch-ConfigBasic", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pusch_ConfigBasic_tags_2, + sizeof(asn_DEF_pusch_ConfigBasic_tags_2) + /sizeof(asn_DEF_pusch_ConfigBasic_tags_2[0]) - 1, /* 1 */ + asn_DEF_pusch_ConfigBasic_tags_2, /* Same as above */ + sizeof(asn_DEF_pusch_ConfigBasic_tags_2) + /sizeof(asn_DEF_pusch_ConfigBasic_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_pusch_ConfigBasic_2, + 4, /* Elements count */ + &asn_SPC_pusch_ConfigBasic_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PUSCH_ConfigCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigCommon, pusch_ConfigBasic), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_pusch_ConfigBasic_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigBasic" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigCommon, ul_ReferenceSignalsPUSCH), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_ReferenceSignalsPUSCH, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-ReferenceSignalsPUSCH" + }, +}; +static ber_tlv_tag_t asn_DEF_PUSCH_ConfigCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUSCH_ConfigCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pusch-ConfigBasic at 2277 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ul-ReferenceSignalsPUSCH at 2283 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUSCH_ConfigCommon_specs_1 = { + sizeof(struct PUSCH_ConfigCommon), + offsetof(struct PUSCH_ConfigCommon, _asn_ctx), + asn_MAP_PUSCH_ConfigCommon_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigCommon = { + "PUSCH-ConfigCommon", + "PUSCH-ConfigCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUSCH_ConfigCommon_tags_1, + sizeof(asn_DEF_PUSCH_ConfigCommon_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigCommon_tags_1[0]), /* 1 */ + asn_DEF_PUSCH_ConfigCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_PUSCH_ConfigCommon_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUSCH_ConfigCommon_1, + 2, /* Elements count */ + &asn_SPC_PUSCH_ConfigCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUSCH-ConfigCommon.h b/lte/rrc/asn/PUSCH-ConfigCommon.h new file mode 100644 index 000000000..40985a525 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigCommon.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUSCH_ConfigCommon_H_ +#define _PUSCH_ConfigCommon_H_ + + +#include + +/* Including external dependencies */ +#include "UL-ReferenceSignalsPUSCH.h" +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode { + PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_interSubFrame = 0, + PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode_intraAndInterSubFrame = 1 +} e_PUSCH_ConfigCommon__pusch_ConfigBasic__hoppingMode; + +/* PUSCH-ConfigCommon */ +typedef struct PUSCH_ConfigCommon { + struct PUSCH_ConfigCommon__pusch_ConfigBasic { + long n_SB; + long hoppingMode; + long pusch_HoppingOffset; + BOOLEAN_t enable64QAM; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pusch_ConfigBasic; + UL_ReferenceSignalsPUSCH_t ul_ReferenceSignalsPUSCH; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUSCH_ConfigCommon_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_hoppingMode_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUSCH_ConfigCommon_H_ */ +#include diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c b/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c new file mode 100644 index 000000000..91c9207b3 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c @@ -0,0 +1,519 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUSCH-ConfigDedicated-v1020.h" + +static int +memb_betaOffset_ACK_Index_MC_r10_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_betaOffset_RI_Index_MC_r10_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_betaOffset_CQI_Index_MC_r10_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +groupHoppingDisabled_r10_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +groupHoppingDisabled_r10_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +groupHoppingDisabled_r10_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +groupHoppingDisabled_r10_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +groupHoppingDisabled_r10_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +groupHoppingDisabled_r10_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +groupHoppingDisabled_r10_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +groupHoppingDisabled_r10_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +groupHoppingDisabled_r10_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + groupHoppingDisabled_r10_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +dmrs_WithOCC_Activated_r10_8_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dmrs_WithOCC_Activated_r10_8_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dmrs_WithOCC_Activated_r10_8_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dmrs_WithOCC_Activated_r10_8_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dmrs_WithOCC_Activated_r10_8_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dmrs_WithOCC_Activated_r10_8_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dmrs_WithOCC_Activated_r10_8_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dmrs_WithOCC_Activated_r10_8_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dmrs_WithOCC_Activated_r10_8_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dmrs_WithOCC_Activated_r10_8_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_memb_betaOffset_ACK_Index_MC_r10_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_betaOffset_RI_Index_MC_r10_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_betaOffset_CQI_Index_MC_r10_constr_5 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_groupHoppingDisabled_r10_constr_6 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_dmrs_WithOCC_Activated_r10_constr_8 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_betaOffsetMC_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigDedicated_v1020__betaOffsetMC_r10, betaOffset_ACK_Index_MC_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_betaOffset_ACK_Index_MC_r10_constraint_2, + &asn_PER_memb_betaOffset_ACK_Index_MC_r10_constr_3, + 0, + "betaOffset-ACK-Index-MC-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigDedicated_v1020__betaOffsetMC_r10, betaOffset_RI_Index_MC_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_betaOffset_RI_Index_MC_r10_constraint_2, + &asn_PER_memb_betaOffset_RI_Index_MC_r10_constr_4, + 0, + "betaOffset-RI-Index-MC-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigDedicated_v1020__betaOffsetMC_r10, betaOffset_CQI_Index_MC_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_betaOffset_CQI_Index_MC_r10_constraint_2, + &asn_PER_memb_betaOffset_CQI_Index_MC_r10_constr_5, + 0, + "betaOffset-CQI-Index-MC-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_betaOffsetMC_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_betaOffsetMC_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* betaOffset-ACK-Index-MC-r10 at 2293 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* betaOffset-RI-Index-MC-r10 at 2294 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* betaOffset-CQI-Index-MC-r10 at 2295 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_betaOffsetMC_r10_specs_2 = { + sizeof(struct PUSCH_ConfigDedicated_v1020__betaOffsetMC_r10), + offsetof(struct PUSCH_ConfigDedicated_v1020__betaOffsetMC_r10, _asn_ctx), + asn_MAP_betaOffsetMC_r10_tag2el_2, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_betaOffsetMC_r10_2 = { + "betaOffsetMC-r10", + "betaOffsetMC-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_betaOffsetMC_r10_tags_2, + sizeof(asn_DEF_betaOffsetMC_r10_tags_2) + /sizeof(asn_DEF_betaOffsetMC_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_betaOffsetMC_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_betaOffsetMC_r10_tags_2) + /sizeof(asn_DEF_betaOffsetMC_r10_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_betaOffsetMC_r10_2, + 3, /* Elements count */ + &asn_SPC_betaOffsetMC_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_groupHoppingDisabled_r10_value2enum_6[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_groupHoppingDisabled_r10_enum2value_6[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_groupHoppingDisabled_r10_specs_6 = { + asn_MAP_groupHoppingDisabled_r10_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_groupHoppingDisabled_r10_enum2value_6, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_groupHoppingDisabled_r10_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_groupHoppingDisabled_r10_6 = { + "groupHoppingDisabled-r10", + "groupHoppingDisabled-r10", + groupHoppingDisabled_r10_6_free, + groupHoppingDisabled_r10_6_print, + groupHoppingDisabled_r10_6_constraint, + groupHoppingDisabled_r10_6_decode_ber, + groupHoppingDisabled_r10_6_encode_der, + groupHoppingDisabled_r10_6_decode_xer, + groupHoppingDisabled_r10_6_encode_xer, + groupHoppingDisabled_r10_6_decode_uper, + groupHoppingDisabled_r10_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_groupHoppingDisabled_r10_tags_6, + sizeof(asn_DEF_groupHoppingDisabled_r10_tags_6) + /sizeof(asn_DEF_groupHoppingDisabled_r10_tags_6[0]) - 1, /* 1 */ + asn_DEF_groupHoppingDisabled_r10_tags_6, /* Same as above */ + sizeof(asn_DEF_groupHoppingDisabled_r10_tags_6) + /sizeof(asn_DEF_groupHoppingDisabled_r10_tags_6[0]), /* 2 */ + &asn_PER_type_groupHoppingDisabled_r10_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_groupHoppingDisabled_r10_specs_6 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_dmrs_WithOCC_Activated_r10_value2enum_8[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_dmrs_WithOCC_Activated_r10_enum2value_8[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dmrs_WithOCC_Activated_r10_specs_8 = { + asn_MAP_dmrs_WithOCC_Activated_r10_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_dmrs_WithOCC_Activated_r10_enum2value_8, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dmrs_WithOCC_Activated_r10_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dmrs_WithOCC_Activated_r10_8 = { + "dmrs-WithOCC-Activated-r10", + "dmrs-WithOCC-Activated-r10", + dmrs_WithOCC_Activated_r10_8_free, + dmrs_WithOCC_Activated_r10_8_print, + dmrs_WithOCC_Activated_r10_8_constraint, + dmrs_WithOCC_Activated_r10_8_decode_ber, + dmrs_WithOCC_Activated_r10_8_encode_der, + dmrs_WithOCC_Activated_r10_8_decode_xer, + dmrs_WithOCC_Activated_r10_8_encode_xer, + dmrs_WithOCC_Activated_r10_8_decode_uper, + dmrs_WithOCC_Activated_r10_8_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dmrs_WithOCC_Activated_r10_tags_8, + sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_8) + /sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_8[0]) - 1, /* 1 */ + asn_DEF_dmrs_WithOCC_Activated_r10_tags_8, /* Same as above */ + sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_8) + /sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_8[0]), /* 2 */ + &asn_PER_type_dmrs_WithOCC_Activated_r10_constr_8, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dmrs_WithOCC_Activated_r10_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PUSCH_ConfigDedicated_v1020_1[] = { + { ATF_POINTER, 3, offsetof(struct PUSCH_ConfigDedicated_v1020, betaOffsetMC_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_betaOffsetMC_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "betaOffsetMC-r10" + }, + { ATF_POINTER, 2, offsetof(struct PUSCH_ConfigDedicated_v1020, groupHoppingDisabled_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_groupHoppingDisabled_r10_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "groupHoppingDisabled-r10" + }, + { ATF_POINTER, 1, offsetof(struct PUSCH_ConfigDedicated_v1020, dmrs_WithOCC_Activated_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dmrs_WithOCC_Activated_r10_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dmrs-WithOCC-Activated-r10" + }, +}; +static int asn_MAP_PUSCH_ConfigDedicated_v1020_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUSCH_ConfigDedicated_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* betaOffsetMC-r10 at 2293 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* groupHoppingDisabled-r10 at 2297 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* dmrs-WithOCC-Activated-r10 at 2298 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUSCH_ConfigDedicated_v1020_specs_1 = { + sizeof(struct PUSCH_ConfigDedicated_v1020), + offsetof(struct PUSCH_ConfigDedicated_v1020, _asn_ctx), + asn_MAP_PUSCH_ConfigDedicated_v1020_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PUSCH_ConfigDedicated_v1020_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigDedicated_v1020 = { + "PUSCH-ConfigDedicated-v1020", + "PUSCH-ConfigDedicated-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1, + sizeof(asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1[0]), /* 1 */ + asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigDedicated_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUSCH_ConfigDedicated_v1020_1, + 3, /* Elements count */ + &asn_SPC_PUSCH_ConfigDedicated_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h b/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h new file mode 100644 index 000000000..05c1ad7a5 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUSCH_ConfigDedicated_v1020_H_ +#define _PUSCH_ConfigDedicated_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PUSCH_ConfigDedicated_v1020__groupHoppingDisabled_r10 { + PUSCH_ConfigDedicated_v1020__groupHoppingDisabled_r10_true = 0 +} e_PUSCH_ConfigDedicated_v1020__groupHoppingDisabled_r10; +typedef enum PUSCH_ConfigDedicated_v1020__dmrs_WithOCC_Activated_r10 { + PUSCH_ConfigDedicated_v1020__dmrs_WithOCC_Activated_r10_true = 0 +} e_PUSCH_ConfigDedicated_v1020__dmrs_WithOCC_Activated_r10; + +/* PUSCH-ConfigDedicated-v1020 */ +typedef struct PUSCH_ConfigDedicated_v1020 { + struct PUSCH_ConfigDedicated_v1020__betaOffsetMC_r10 { + long betaOffset_ACK_Index_MC_r10; + long betaOffset_RI_Index_MC_r10; + long betaOffset_CQI_Index_MC_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *betaOffsetMC_r10; + long *groupHoppingDisabled_r10 /* OPTIONAL */; + long *dmrs_WithOCC_Activated_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUSCH_ConfigDedicated_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_groupHoppingDisabled_r10_6; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_dmrs_WithOCC_Activated_r10_8; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigDedicated_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUSCH_ConfigDedicated_v1020_H_ */ +#include diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated.c b/lte/rrc/asn/PUSCH-ConfigDedicated.c new file mode 100644 index 000000000..91533eebb --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigDedicated.c @@ -0,0 +1,170 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUSCH-ConfigDedicated.h" + +static int +memb_betaOffset_ACK_Index_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_betaOffset_RI_Index_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_betaOffset_CQI_Index_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_betaOffset_ACK_Index_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_betaOffset_RI_Index_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_betaOffset_CQI_Index_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PUSCH_ConfigDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigDedicated, betaOffset_ACK_Index), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_betaOffset_ACK_Index_constraint_1, + &asn_PER_memb_betaOffset_ACK_Index_constr_2, + 0, + "betaOffset-ACK-Index" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigDedicated, betaOffset_RI_Index), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_betaOffset_RI_Index_constraint_1, + &asn_PER_memb_betaOffset_RI_Index_constr_3, + 0, + "betaOffset-RI-Index" + }, + { ATF_NOFLAGS, 0, offsetof(struct PUSCH_ConfigDedicated, betaOffset_CQI_Index), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_betaOffset_CQI_Index_constraint_1, + &asn_PER_memb_betaOffset_CQI_Index_constr_4, + 0, + "betaOffset-CQI-Index" + }, +}; +static ber_tlv_tag_t asn_DEF_PUSCH_ConfigDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUSCH_ConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* betaOffset-ACK-Index at 2286 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* betaOffset-RI-Index at 2287 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* betaOffset-CQI-Index at 2288 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUSCH_ConfigDedicated_specs_1 = { + sizeof(struct PUSCH_ConfigDedicated), + offsetof(struct PUSCH_ConfigDedicated, _asn_ctx), + asn_MAP_PUSCH_ConfigDedicated_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigDedicated = { + "PUSCH-ConfigDedicated", + "PUSCH-ConfigDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUSCH_ConfigDedicated_tags_1, + sizeof(asn_DEF_PUSCH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigDedicated_tags_1[0]), /* 1 */ + asn_DEF_PUSCH_ConfigDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_PUSCH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUSCH_ConfigDedicated_1, + 3, /* Elements count */ + &asn_SPC_PUSCH_ConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated.h b/lte/rrc/asn/PUSCH-ConfigDedicated.h new file mode 100644 index 000000000..e08259275 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigDedicated.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUSCH_ConfigDedicated_H_ +#define _PUSCH_ConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PUSCH-ConfigDedicated */ +typedef struct PUSCH_ConfigDedicated { + long betaOffset_ACK_Index; + long betaOffset_RI_Index; + long betaOffset_CQI_Index; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUSCH_ConfigDedicated_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUSCH_ConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c b/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c new file mode 100644 index 000000000..3f50b4887 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PUSCH-ConfigDedicatedSCell-r10.h" + +static int +groupHoppingDisabled_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +groupHoppingDisabled_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +groupHoppingDisabled_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +groupHoppingDisabled_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +groupHoppingDisabled_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +groupHoppingDisabled_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +groupHoppingDisabled_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +groupHoppingDisabled_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +groupHoppingDisabled_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + groupHoppingDisabled_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +dmrs_WithOCC_Activated_r10_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dmrs_WithOCC_Activated_r10_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dmrs_WithOCC_Activated_r10_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dmrs_WithOCC_Activated_r10_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dmrs_WithOCC_Activated_r10_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dmrs_WithOCC_Activated_r10_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dmrs_WithOCC_Activated_r10_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dmrs_WithOCC_Activated_r10_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dmrs_WithOCC_Activated_r10_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dmrs_WithOCC_Activated_r10_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_groupHoppingDisabled_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_dmrs_WithOCC_Activated_r10_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_groupHoppingDisabled_r10_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_groupHoppingDisabled_r10_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_groupHoppingDisabled_r10_specs_2 = { + asn_MAP_groupHoppingDisabled_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_groupHoppingDisabled_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_groupHoppingDisabled_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_groupHoppingDisabled_r10_2 = { + "groupHoppingDisabled-r10", + "groupHoppingDisabled-r10", + groupHoppingDisabled_r10_2_free, + groupHoppingDisabled_r10_2_print, + groupHoppingDisabled_r10_2_constraint, + groupHoppingDisabled_r10_2_decode_ber, + groupHoppingDisabled_r10_2_encode_der, + groupHoppingDisabled_r10_2_decode_xer, + groupHoppingDisabled_r10_2_encode_xer, + groupHoppingDisabled_r10_2_decode_uper, + groupHoppingDisabled_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_groupHoppingDisabled_r10_tags_2, + sizeof(asn_DEF_groupHoppingDisabled_r10_tags_2) + /sizeof(asn_DEF_groupHoppingDisabled_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_groupHoppingDisabled_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_groupHoppingDisabled_r10_tags_2) + /sizeof(asn_DEF_groupHoppingDisabled_r10_tags_2[0]), /* 2 */ + &asn_PER_type_groupHoppingDisabled_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_groupHoppingDisabled_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_dmrs_WithOCC_Activated_r10_value2enum_4[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_dmrs_WithOCC_Activated_r10_enum2value_4[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dmrs_WithOCC_Activated_r10_specs_4 = { + asn_MAP_dmrs_WithOCC_Activated_r10_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_dmrs_WithOCC_Activated_r10_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dmrs_WithOCC_Activated_r10_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dmrs_WithOCC_Activated_r10_4 = { + "dmrs-WithOCC-Activated-r10", + "dmrs-WithOCC-Activated-r10", + dmrs_WithOCC_Activated_r10_4_free, + dmrs_WithOCC_Activated_r10_4_print, + dmrs_WithOCC_Activated_r10_4_constraint, + dmrs_WithOCC_Activated_r10_4_decode_ber, + dmrs_WithOCC_Activated_r10_4_encode_der, + dmrs_WithOCC_Activated_r10_4_decode_xer, + dmrs_WithOCC_Activated_r10_4_encode_xer, + dmrs_WithOCC_Activated_r10_4_decode_uper, + dmrs_WithOCC_Activated_r10_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dmrs_WithOCC_Activated_r10_tags_4, + sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_4) + /sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_4[0]) - 1, /* 1 */ + asn_DEF_dmrs_WithOCC_Activated_r10_tags_4, /* Same as above */ + sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_4) + /sizeof(asn_DEF_dmrs_WithOCC_Activated_r10_tags_4[0]), /* 2 */ + &asn_PER_type_dmrs_WithOCC_Activated_r10_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dmrs_WithOCC_Activated_r10_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PUSCH_ConfigDedicatedSCell_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct PUSCH_ConfigDedicatedSCell_r10, groupHoppingDisabled_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_groupHoppingDisabled_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "groupHoppingDisabled-r10" + }, + { ATF_POINTER, 1, offsetof(struct PUSCH_ConfigDedicatedSCell_r10, dmrs_WithOCC_Activated_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dmrs_WithOCC_Activated_r10_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dmrs-WithOCC-Activated-r10" + }, +}; +static int asn_MAP_PUSCH_ConfigDedicatedSCell_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PUSCH_ConfigDedicatedSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* groupHoppingDisabled-r10 at 2302 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dmrs-WithOCC-Activated-r10 at 2303 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PUSCH_ConfigDedicatedSCell_r10_specs_1 = { + sizeof(struct PUSCH_ConfigDedicatedSCell_r10), + offsetof(struct PUSCH_ConfigDedicatedSCell_r10, _asn_ctx), + asn_MAP_PUSCH_ConfigDedicatedSCell_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PUSCH_ConfigDedicatedSCell_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigDedicatedSCell_r10 = { + "PUSCH-ConfigDedicatedSCell-r10", + "PUSCH-ConfigDedicatedSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1, + sizeof(asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_PUSCH_ConfigDedicatedSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PUSCH_ConfigDedicatedSCell_r10_1, + 2, /* Elements count */ + &asn_SPC_PUSCH_ConfigDedicatedSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h b/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h new file mode 100644 index 000000000..c874ca3f4 --- /dev/null +++ b/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PUSCH_ConfigDedicatedSCell_r10_H_ +#define _PUSCH_ConfigDedicatedSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PUSCH_ConfigDedicatedSCell_r10__groupHoppingDisabled_r10 { + PUSCH_ConfigDedicatedSCell_r10__groupHoppingDisabled_r10_true = 0 +} e_PUSCH_ConfigDedicatedSCell_r10__groupHoppingDisabled_r10; +typedef enum PUSCH_ConfigDedicatedSCell_r10__dmrs_WithOCC_Activated_r10 { + PUSCH_ConfigDedicatedSCell_r10__dmrs_WithOCC_Activated_r10_true = 0 +} e_PUSCH_ConfigDedicatedSCell_r10__dmrs_WithOCC_Activated_r10; + +/* PUSCH-ConfigDedicatedSCell-r10 */ +typedef struct PUSCH_ConfigDedicatedSCell_r10 { + long *groupHoppingDisabled_r10 /* OPTIONAL */; + long *dmrs_WithOCC_Activated_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PUSCH_ConfigDedicatedSCell_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_groupHoppingDisabled_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_dmrs_WithOCC_Activated_r10_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PUSCH_ConfigDedicatedSCell_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _PUSCH_ConfigDedicatedSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/Paging-v890-IEs.c b/lte/rrc/asn/Paging-v890-IEs.c new file mode 100644 index 000000000..46004fb43 --- /dev/null +++ b/lte/rrc/asn/Paging-v890-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Paging-v890-IEs.h" + +static asn_TYPE_member_t asn_MBR_Paging_v890_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct Paging_v890_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct Paging_v890_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Paging_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_Paging_v890_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_Paging_v890_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_Paging_v890_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 532 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 533 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Paging_v890_IEs_specs_1 = { + sizeof(struct Paging_v890_IEs), + offsetof(struct Paging_v890_IEs, _asn_ctx), + asn_MAP_Paging_v890_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_Paging_v890_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_Paging_v890_IEs = { + "Paging-v890-IEs", + "Paging-v890-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Paging_v890_IEs_tags_1, + sizeof(asn_DEF_Paging_v890_IEs_tags_1) + /sizeof(asn_DEF_Paging_v890_IEs_tags_1[0]), /* 1 */ + asn_DEF_Paging_v890_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_Paging_v890_IEs_tags_1) + /sizeof(asn_DEF_Paging_v890_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_Paging_v890_IEs_1, + 2, /* Elements count */ + &asn_SPC_Paging_v890_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/Paging-v890-IEs.h b/lte/rrc/asn/Paging-v890-IEs.h new file mode 100644 index 000000000..c5fdaca1f --- /dev/null +++ b/lte/rrc/asn/Paging-v890-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Paging_v890_IEs_H_ +#define _Paging_v890_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct Paging_v920_IEs; + +/* Paging-v890-IEs */ +typedef struct Paging_v890_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct Paging_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Paging_v890_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Paging_v890_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "Paging-v920-IEs.h" + +#endif /* _Paging_v890_IEs_H_ */ +#include diff --git a/lte/rrc/asn/Paging-v920-IEs.c b/lte/rrc/asn/Paging-v920-IEs.c new file mode 100644 index 000000000..f36dc451e --- /dev/null +++ b/lte/rrc/asn/Paging-v920-IEs.c @@ -0,0 +1,247 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Paging-v920-IEs.h" + +static int +cmas_Indication_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cmas_Indication_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cmas_Indication_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cmas_Indication_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cmas_Indication_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cmas_Indication_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cmas_Indication_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cmas_Indication_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cmas_Indication_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cmas_Indication_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cmas_Indication_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_cmas_Indication_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_cmas_Indication_r9_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_cmas_Indication_r9_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cmas_Indication_r9_specs_2 = { + asn_MAP_cmas_Indication_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_cmas_Indication_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cmas_Indication_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cmas_Indication_r9_2 = { + "cmas-Indication-r9", + "cmas-Indication-r9", + cmas_Indication_r9_2_free, + cmas_Indication_r9_2_print, + cmas_Indication_r9_2_constraint, + cmas_Indication_r9_2_decode_ber, + cmas_Indication_r9_2_encode_der, + cmas_Indication_r9_2_decode_xer, + cmas_Indication_r9_2_encode_xer, + cmas_Indication_r9_2_decode_uper, + cmas_Indication_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cmas_Indication_r9_tags_2, + sizeof(asn_DEF_cmas_Indication_r9_tags_2) + /sizeof(asn_DEF_cmas_Indication_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_cmas_Indication_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_cmas_Indication_r9_tags_2) + /sizeof(asn_DEF_cmas_Indication_r9_tags_2[0]), /* 2 */ + &asn_PER_type_cmas_Indication_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cmas_Indication_r9_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_4 = { + sizeof(struct Paging_v920_IEs__nonCriticalExtension), + offsetof(struct Paging_v920_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_4 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_4, + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_4, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_Paging_v920_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct Paging_v920_IEs, cmas_Indication_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cmas_Indication_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cmas-Indication-r9" + }, + { ATF_POINTER, 1, offsetof(struct Paging_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_Paging_v920_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_Paging_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_Paging_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cmas-Indication-r9 at 537 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 538 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Paging_v920_IEs_specs_1 = { + sizeof(struct Paging_v920_IEs), + offsetof(struct Paging_v920_IEs, _asn_ctx), + asn_MAP_Paging_v920_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_Paging_v920_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_Paging_v920_IEs = { + "Paging-v920-IEs", + "Paging-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Paging_v920_IEs_tags_1, + sizeof(asn_DEF_Paging_v920_IEs_tags_1) + /sizeof(asn_DEF_Paging_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_Paging_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_Paging_v920_IEs_tags_1) + /sizeof(asn_DEF_Paging_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_Paging_v920_IEs_1, + 2, /* Elements count */ + &asn_SPC_Paging_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/Paging-v920-IEs.h b/lte/rrc/asn/Paging-v920-IEs.h new file mode 100644 index 000000000..c1fdeb298 --- /dev/null +++ b/lte/rrc/asn/Paging-v920-IEs.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Paging_v920_IEs_H_ +#define _Paging_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Paging_v920_IEs__cmas_Indication_r9 { + Paging_v920_IEs__cmas_Indication_r9_true = 0 +} e_Paging_v920_IEs__cmas_Indication_r9; + +/* Paging-v920-IEs */ +typedef struct Paging_v920_IEs { + long *cmas_Indication_r9 /* OPTIONAL */; + struct Paging_v920_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Paging_v920_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cmas_Indication_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_Paging_v920_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _Paging_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/Paging.c b/lte/rrc/asn/Paging.c new file mode 100644 index 000000000..1e828cfcf --- /dev/null +++ b/lte/rrc/asn/Paging.c @@ -0,0 +1,366 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Paging.h" + +static int +systemInfoModification_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +systemInfoModification_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +systemInfoModification_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +systemInfoModification_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +systemInfoModification_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +systemInfoModification_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +systemInfoModification_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +systemInfoModification_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +systemInfoModification_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +systemInfoModification_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + systemInfoModification_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +etws_Indication_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +etws_Indication_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +etws_Indication_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + etws_Indication_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +etws_Indication_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +etws_Indication_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +etws_Indication_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +etws_Indication_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +etws_Indication_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +etws_Indication_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +etws_Indication_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + etws_Indication_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_systemInfoModification_constr_3 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_etws_Indication_constr_5 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_systemInfoModification_value2enum_3[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_systemInfoModification_enum2value_3[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_systemInfoModification_specs_3 = { + asn_MAP_systemInfoModification_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_systemInfoModification_enum2value_3, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_systemInfoModification_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_systemInfoModification_3 = { + "systemInfoModification", + "systemInfoModification", + systemInfoModification_3_free, + systemInfoModification_3_print, + systemInfoModification_3_constraint, + systemInfoModification_3_decode_ber, + systemInfoModification_3_encode_der, + systemInfoModification_3_decode_xer, + systemInfoModification_3_encode_xer, + systemInfoModification_3_decode_uper, + systemInfoModification_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_systemInfoModification_tags_3, + sizeof(asn_DEF_systemInfoModification_tags_3) + /sizeof(asn_DEF_systemInfoModification_tags_3[0]) - 1, /* 1 */ + asn_DEF_systemInfoModification_tags_3, /* Same as above */ + sizeof(asn_DEF_systemInfoModification_tags_3) + /sizeof(asn_DEF_systemInfoModification_tags_3[0]), /* 2 */ + &asn_PER_type_systemInfoModification_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_systemInfoModification_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_etws_Indication_value2enum_5[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_etws_Indication_enum2value_5[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_etws_Indication_specs_5 = { + asn_MAP_etws_Indication_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_etws_Indication_enum2value_5, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_etws_Indication_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_etws_Indication_5 = { + "etws-Indication", + "etws-Indication", + etws_Indication_5_free, + etws_Indication_5_print, + etws_Indication_5_constraint, + etws_Indication_5_decode_ber, + etws_Indication_5_encode_der, + etws_Indication_5_decode_xer, + etws_Indication_5_encode_xer, + etws_Indication_5_decode_uper, + etws_Indication_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_etws_Indication_tags_5, + sizeof(asn_DEF_etws_Indication_tags_5) + /sizeof(asn_DEF_etws_Indication_tags_5[0]) - 1, /* 1 */ + asn_DEF_etws_Indication_tags_5, /* Same as above */ + sizeof(asn_DEF_etws_Indication_tags_5) + /sizeof(asn_DEF_etws_Indication_tags_5[0]), /* 2 */ + &asn_PER_type_etws_Indication_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_etws_Indication_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_Paging_1[] = { + { ATF_POINTER, 4, offsetof(struct Paging, pagingRecordList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PagingRecordList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pagingRecordList" + }, + { ATF_POINTER, 3, offsetof(struct Paging, systemInfoModification), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_systemInfoModification_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInfoModification" + }, + { ATF_POINTER, 2, offsetof(struct Paging, etws_Indication), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_etws_Indication_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "etws-Indication" + }, + { ATF_POINTER, 1, offsetof(struct Paging, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Paging_v890_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_Paging_oms_1[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_Paging_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_Paging_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pagingRecordList at 525 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* systemInfoModification at 526 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* etws-Indication at 527 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 528 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_Paging_specs_1 = { + sizeof(struct Paging), + offsetof(struct Paging, _asn_ctx), + asn_MAP_Paging_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_Paging_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_Paging = { + "Paging", + "Paging", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Paging_tags_1, + sizeof(asn_DEF_Paging_tags_1) + /sizeof(asn_DEF_Paging_tags_1[0]), /* 1 */ + asn_DEF_Paging_tags_1, /* Same as above */ + sizeof(asn_DEF_Paging_tags_1) + /sizeof(asn_DEF_Paging_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_Paging_1, + 4, /* Elements count */ + &asn_SPC_Paging_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/Paging.h b/lte/rrc/asn/Paging.h new file mode 100644 index 000000000..26e8b2fcb --- /dev/null +++ b/lte/rrc/asn/Paging.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Paging_H_ +#define _Paging_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Paging__systemInfoModification { + Paging__systemInfoModification_true = 0 +} e_Paging__systemInfoModification; +typedef enum Paging__etws_Indication { + Paging__etws_Indication_true = 0 +} e_Paging__etws_Indication; + +/* Forward declarations */ +struct PagingRecordList; +struct Paging_v890_IEs; + +/* Paging */ +typedef struct Paging { + struct PagingRecordList *pagingRecordList /* OPTIONAL */; + long *systemInfoModification /* OPTIONAL */; + long *etws_Indication /* OPTIONAL */; + struct Paging_v890_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} Paging_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_systemInfoModification_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_etws_Indication_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_Paging; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PagingRecordList.h" +#include "Paging-v890-IEs.h" + +#endif /* _Paging_H_ */ +#include diff --git a/lte/rrc/asn/PagingRecord.c b/lte/rrc/asn/PagingRecord.c new file mode 100644 index 000000000..0a4991d6f --- /dev/null +++ b/lte/rrc/asn/PagingRecord.c @@ -0,0 +1,209 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PagingRecord.h" + +static int +cn_Domain_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cn_Domain_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cn_Domain_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cn_Domain_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cn_Domain_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cn_Domain_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cn_Domain_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cn_Domain_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cn_Domain_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cn_Domain_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cn_Domain_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cn_Domain_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_cn_Domain_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_cn_Domain_value2enum_3[] = { + { 0, 2, "ps" }, + { 1, 2, "cs" } +}; +static unsigned int asn_MAP_cn_Domain_enum2value_3[] = { + 1, /* cs(1) */ + 0 /* ps(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cn_Domain_specs_3 = { + asn_MAP_cn_Domain_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_cn_Domain_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cn_Domain_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cn_Domain_3 = { + "cn-Domain", + "cn-Domain", + cn_Domain_3_free, + cn_Domain_3_print, + cn_Domain_3_constraint, + cn_Domain_3_decode_ber, + cn_Domain_3_encode_der, + cn_Domain_3_decode_xer, + cn_Domain_3_encode_xer, + cn_Domain_3_decode_uper, + cn_Domain_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cn_Domain_tags_3, + sizeof(asn_DEF_cn_Domain_tags_3) + /sizeof(asn_DEF_cn_Domain_tags_3[0]) - 1, /* 1 */ + asn_DEF_cn_Domain_tags_3, /* Same as above */ + sizeof(asn_DEF_cn_Domain_tags_3) + /sizeof(asn_DEF_cn_Domain_tags_3[0]), /* 2 */ + &asn_PER_type_cn_Domain_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cn_Domain_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PagingRecord_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PagingRecord, ue_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_PagingUE_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct PagingRecord, cn_Domain), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cn_Domain_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cn-Domain" + }, +}; +static ber_tlv_tag_t asn_DEF_PagingRecord_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PagingRecord_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-Identity at 544 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cn-Domain at 545 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PagingRecord_specs_1 = { + sizeof(struct PagingRecord), + offsetof(struct PagingRecord, _asn_ctx), + asn_MAP_PagingRecord_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PagingRecord = { + "PagingRecord", + "PagingRecord", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PagingRecord_tags_1, + sizeof(asn_DEF_PagingRecord_tags_1) + /sizeof(asn_DEF_PagingRecord_tags_1[0]), /* 1 */ + asn_DEF_PagingRecord_tags_1, /* Same as above */ + sizeof(asn_DEF_PagingRecord_tags_1) + /sizeof(asn_DEF_PagingRecord_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PagingRecord_1, + 2, /* Elements count */ + &asn_SPC_PagingRecord_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PagingRecord.h b/lte/rrc/asn/PagingRecord.h new file mode 100644 index 000000000..00f44094f --- /dev/null +++ b/lte/rrc/asn/PagingRecord.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PagingRecord_H_ +#define _PagingRecord_H_ + + +#include + +/* Including external dependencies */ +#include "PagingUE-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PagingRecord__cn_Domain { + PagingRecord__cn_Domain_ps = 0, + PagingRecord__cn_Domain_cs = 1 +} e_PagingRecord__cn_Domain; + +/* PagingRecord */ +typedef struct PagingRecord { + PagingUE_Identity_t ue_Identity; + long cn_Domain; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PagingRecord_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cn_Domain_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PagingRecord; + +#ifdef __cplusplus +} +#endif + +#endif /* _PagingRecord_H_ */ +#include diff --git a/lte/rrc/asn/PagingRecordList.c b/lte/rrc/asn/PagingRecordList.c new file mode 100644 index 000000000..ffc77551f --- /dev/null +++ b/lte/rrc/asn/PagingRecordList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PagingRecordList.h" + +static asn_per_constraints_t asn_PER_type_PagingRecordList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PagingRecordList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PagingRecord, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_PagingRecordList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PagingRecordList_specs_1 = { + sizeof(struct PagingRecordList), + offsetof(struct PagingRecordList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PagingRecordList = { + "PagingRecordList", + "PagingRecordList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PagingRecordList_tags_1, + sizeof(asn_DEF_PagingRecordList_tags_1) + /sizeof(asn_DEF_PagingRecordList_tags_1[0]), /* 1 */ + asn_DEF_PagingRecordList_tags_1, /* Same as above */ + sizeof(asn_DEF_PagingRecordList_tags_1) + /sizeof(asn_DEF_PagingRecordList_tags_1[0]), /* 1 */ + &asn_PER_type_PagingRecordList_constr_1, + asn_MBR_PagingRecordList_1, + 1, /* Single element */ + &asn_SPC_PagingRecordList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PagingRecordList.h b/lte/rrc/asn/PagingRecordList.h new file mode 100644 index 000000000..069a69980 --- /dev/null +++ b/lte/rrc/asn/PagingRecordList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PagingRecordList_H_ +#define _PagingRecordList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PagingRecord; + +/* PagingRecordList */ +typedef struct PagingRecordList { + A_SEQUENCE_OF(struct PagingRecord) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PagingRecordList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PagingRecordList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PagingRecord.h" + +#endif /* _PagingRecordList_H_ */ +#include diff --git a/lte/rrc/asn/PagingUE-Identity.c b/lte/rrc/asn/PagingUE-Identity.c new file mode 100644 index 000000000..8fcfb9c30 --- /dev/null +++ b/lte/rrc/asn/PagingUE-Identity.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PagingUE-Identity.h" + +static asn_per_constraints_t asn_PER_type_PagingUE_Identity_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PagingUE_Identity_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PagingUE_Identity, choice.s_TMSI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_S_TMSI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-TMSI" + }, + { ATF_NOFLAGS, 0, offsetof(struct PagingUE_Identity, choice.imsi), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IMSI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "imsi" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_PagingUE_Identity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-TMSI at 550 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* imsi at 551 */ +}; +static asn_CHOICE_specifics_t asn_SPC_PagingUE_Identity_specs_1 = { + sizeof(struct PagingUE_Identity), + offsetof(struct PagingUE_Identity, _asn_ctx), + offsetof(struct PagingUE_Identity, present), + sizeof(((struct PagingUE_Identity *)0)->present), + asn_MAP_PagingUE_Identity_tag2el_1, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_PagingUE_Identity = { + "PagingUE-Identity", + "PagingUE-Identity", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_PagingUE_Identity_constr_1, + asn_MBR_PagingUE_Identity_1, + 2, /* Elements count */ + &asn_SPC_PagingUE_Identity_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PagingUE-Identity.h b/lte/rrc/asn/PagingUE-Identity.h new file mode 100644 index 000000000..3b0b39a6e --- /dev/null +++ b/lte/rrc/asn/PagingUE-Identity.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PagingUE_Identity_H_ +#define _PagingUE_Identity_H_ + + +#include + +/* Including external dependencies */ +#include "S-TMSI.h" +#include "IMSI.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PagingUE_Identity_PR { + PagingUE_Identity_PR_NOTHING, /* No components present */ + PagingUE_Identity_PR_s_TMSI, + PagingUE_Identity_PR_imsi, + /* Extensions may appear below */ + +} PagingUE_Identity_PR; + +/* PagingUE-Identity */ +typedef struct PagingUE_Identity { + PagingUE_Identity_PR present; + union PagingUE_Identity_u { + S_TMSI_t s_TMSI; + IMSI_t imsi; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PagingUE_Identity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PagingUE_Identity; + +#ifdef __cplusplus +} +#endif + +#endif /* _PagingUE_Identity_H_ */ +#include diff --git a/lte/rrc/asn/PhyLayerParameters-v1020.c b/lte/rrc/asn/PhyLayerParameters-v1020.c new file mode 100644 index 000000000..f3eb0af01 --- /dev/null +++ b/lte/rrc/asn/PhyLayerParameters-v1020.c @@ -0,0 +1,944 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhyLayerParameters-v1020.h" + +static int +twoAntennaPortsForPUCCH_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +twoAntennaPortsForPUCCH_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +twoAntennaPortsForPUCCH_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +twoAntennaPortsForPUCCH_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +twoAntennaPortsForPUCCH_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +twoAntennaPortsForPUCCH_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +twoAntennaPortsForPUCCH_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +twoAntennaPortsForPUCCH_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +twoAntennaPortsForPUCCH_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + twoAntennaPortsForPUCCH_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +tm9_With_8Tx_FDD_r10_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +tm9_With_8Tx_FDD_r10_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +tm9_With_8Tx_FDD_r10_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +tm9_With_8Tx_FDD_r10_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +tm9_With_8Tx_FDD_r10_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +tm9_With_8Tx_FDD_r10_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +tm9_With_8Tx_FDD_r10_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +tm9_With_8Tx_FDD_r10_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +tm9_With_8Tx_FDD_r10_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + tm9_With_8Tx_FDD_r10_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +pmi_Disabling_r10_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +pmi_Disabling_r10_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +pmi_Disabling_r10_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +pmi_Disabling_r10_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +pmi_Disabling_r10_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +pmi_Disabling_r10_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +pmi_Disabling_r10_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +pmi_Disabling_r10_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +pmi_Disabling_r10_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +pmi_Disabling_r10_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + pmi_Disabling_r10_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +crossCarrierScheduling_r10_8_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +crossCarrierScheduling_r10_8_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +crossCarrierScheduling_r10_8_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +crossCarrierScheduling_r10_8_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +crossCarrierScheduling_r10_8_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +crossCarrierScheduling_r10_8_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +crossCarrierScheduling_r10_8_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +crossCarrierScheduling_r10_8_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +crossCarrierScheduling_r10_8_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + crossCarrierScheduling_r10_8_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +simultaneousPUCCH_PUSCH_r10_10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +simultaneousPUCCH_PUSCH_r10_10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +simultaneousPUCCH_PUSCH_r10_10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +simultaneousPUCCH_PUSCH_r10_10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +simultaneousPUCCH_PUSCH_r10_10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +simultaneousPUCCH_PUSCH_r10_10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +simultaneousPUCCH_PUSCH_r10_10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +simultaneousPUCCH_PUSCH_r10_10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +simultaneousPUCCH_PUSCH_r10_10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + simultaneousPUCCH_PUSCH_r10_10_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +multiClusterPUSCH_WithinCC_r10_12_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +multiClusterPUSCH_WithinCC_r10_12_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +multiClusterPUSCH_WithinCC_r10_12_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +multiClusterPUSCH_WithinCC_r10_12_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +multiClusterPUSCH_WithinCC_r10_12_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +multiClusterPUSCH_WithinCC_r10_12_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +multiClusterPUSCH_WithinCC_r10_12_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +multiClusterPUSCH_WithinCC_r10_12_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +multiClusterPUSCH_WithinCC_r10_12_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + multiClusterPUSCH_WithinCC_r10_12_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_twoAntennaPortsForPUCCH_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_tm9_With_8Tx_FDD_r10_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_pmi_Disabling_r10_constr_6 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_crossCarrierScheduling_r10_constr_8 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_simultaneousPUCCH_PUSCH_r10_constr_10 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_multiClusterPUSCH_WithinCC_r10_constr_12 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_twoAntennaPortsForPUCCH_r10_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_twoAntennaPortsForPUCCH_r10_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_twoAntennaPortsForPUCCH_r10_specs_2 = { + asn_MAP_twoAntennaPortsForPUCCH_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_twoAntennaPortsForPUCCH_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_twoAntennaPortsForPUCCH_r10_2 = { + "twoAntennaPortsForPUCCH-r10", + "twoAntennaPortsForPUCCH-r10", + twoAntennaPortsForPUCCH_r10_2_free, + twoAntennaPortsForPUCCH_r10_2_print, + twoAntennaPortsForPUCCH_r10_2_constraint, + twoAntennaPortsForPUCCH_r10_2_decode_ber, + twoAntennaPortsForPUCCH_r10_2_encode_der, + twoAntennaPortsForPUCCH_r10_2_decode_xer, + twoAntennaPortsForPUCCH_r10_2_encode_xer, + twoAntennaPortsForPUCCH_r10_2_decode_uper, + twoAntennaPortsForPUCCH_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2, + sizeof(asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2) + /sizeof(asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2) + /sizeof(asn_DEF_twoAntennaPortsForPUCCH_r10_tags_2[0]), /* 2 */ + &asn_PER_type_twoAntennaPortsForPUCCH_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_twoAntennaPortsForPUCCH_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_tm9_With_8Tx_FDD_r10_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_tm9_With_8Tx_FDD_r10_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_tm9_With_8Tx_FDD_r10_specs_4 = { + asn_MAP_tm9_With_8Tx_FDD_r10_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_tm9_With_8Tx_FDD_r10_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_tm9_With_8Tx_FDD_r10_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_tm9_With_8Tx_FDD_r10_4 = { + "tm9-With-8Tx-FDD-r10", + "tm9-With-8Tx-FDD-r10", + tm9_With_8Tx_FDD_r10_4_free, + tm9_With_8Tx_FDD_r10_4_print, + tm9_With_8Tx_FDD_r10_4_constraint, + tm9_With_8Tx_FDD_r10_4_decode_ber, + tm9_With_8Tx_FDD_r10_4_encode_der, + tm9_With_8Tx_FDD_r10_4_decode_xer, + tm9_With_8Tx_FDD_r10_4_encode_xer, + tm9_With_8Tx_FDD_r10_4_decode_uper, + tm9_With_8Tx_FDD_r10_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_tm9_With_8Tx_FDD_r10_tags_4, + sizeof(asn_DEF_tm9_With_8Tx_FDD_r10_tags_4) + /sizeof(asn_DEF_tm9_With_8Tx_FDD_r10_tags_4[0]) - 1, /* 1 */ + asn_DEF_tm9_With_8Tx_FDD_r10_tags_4, /* Same as above */ + sizeof(asn_DEF_tm9_With_8Tx_FDD_r10_tags_4) + /sizeof(asn_DEF_tm9_With_8Tx_FDD_r10_tags_4[0]), /* 2 */ + &asn_PER_type_tm9_With_8Tx_FDD_r10_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_tm9_With_8Tx_FDD_r10_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_pmi_Disabling_r10_value2enum_6[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_pmi_Disabling_r10_enum2value_6[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_pmi_Disabling_r10_specs_6 = { + asn_MAP_pmi_Disabling_r10_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_pmi_Disabling_r10_enum2value_6, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_pmi_Disabling_r10_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pmi_Disabling_r10_6 = { + "pmi-Disabling-r10", + "pmi-Disabling-r10", + pmi_Disabling_r10_6_free, + pmi_Disabling_r10_6_print, + pmi_Disabling_r10_6_constraint, + pmi_Disabling_r10_6_decode_ber, + pmi_Disabling_r10_6_encode_der, + pmi_Disabling_r10_6_decode_xer, + pmi_Disabling_r10_6_encode_xer, + pmi_Disabling_r10_6_decode_uper, + pmi_Disabling_r10_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pmi_Disabling_r10_tags_6, + sizeof(asn_DEF_pmi_Disabling_r10_tags_6) + /sizeof(asn_DEF_pmi_Disabling_r10_tags_6[0]) - 1, /* 1 */ + asn_DEF_pmi_Disabling_r10_tags_6, /* Same as above */ + sizeof(asn_DEF_pmi_Disabling_r10_tags_6) + /sizeof(asn_DEF_pmi_Disabling_r10_tags_6[0]), /* 2 */ + &asn_PER_type_pmi_Disabling_r10_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pmi_Disabling_r10_specs_6 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_crossCarrierScheduling_r10_value2enum_8[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_crossCarrierScheduling_r10_enum2value_8[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_crossCarrierScheduling_r10_specs_8 = { + asn_MAP_crossCarrierScheduling_r10_value2enum_8, /* "tag" => N; sorted by tag */ + asn_MAP_crossCarrierScheduling_r10_enum2value_8, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_crossCarrierScheduling_r10_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_crossCarrierScheduling_r10_8 = { + "crossCarrierScheduling-r10", + "crossCarrierScheduling-r10", + crossCarrierScheduling_r10_8_free, + crossCarrierScheduling_r10_8_print, + crossCarrierScheduling_r10_8_constraint, + crossCarrierScheduling_r10_8_decode_ber, + crossCarrierScheduling_r10_8_encode_der, + crossCarrierScheduling_r10_8_decode_xer, + crossCarrierScheduling_r10_8_encode_xer, + crossCarrierScheduling_r10_8_decode_uper, + crossCarrierScheduling_r10_8_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_crossCarrierScheduling_r10_tags_8, + sizeof(asn_DEF_crossCarrierScheduling_r10_tags_8) + /sizeof(asn_DEF_crossCarrierScheduling_r10_tags_8[0]) - 1, /* 1 */ + asn_DEF_crossCarrierScheduling_r10_tags_8, /* Same as above */ + sizeof(asn_DEF_crossCarrierScheduling_r10_tags_8) + /sizeof(asn_DEF_crossCarrierScheduling_r10_tags_8[0]), /* 2 */ + &asn_PER_type_crossCarrierScheduling_r10_constr_8, + 0, 0, /* Defined elsewhere */ + &asn_SPC_crossCarrierScheduling_r10_specs_8 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_simultaneousPUCCH_PUSCH_r10_value2enum_10[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_simultaneousPUCCH_PUSCH_r10_enum2value_10[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_simultaneousPUCCH_PUSCH_r10_specs_10 = { + asn_MAP_simultaneousPUCCH_PUSCH_r10_value2enum_10, /* "tag" => N; sorted by tag */ + asn_MAP_simultaneousPUCCH_PUSCH_r10_enum2value_10, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_simultaneousPUCCH_PUSCH_r10_10 = { + "simultaneousPUCCH-PUSCH-r10", + "simultaneousPUCCH-PUSCH-r10", + simultaneousPUCCH_PUSCH_r10_10_free, + simultaneousPUCCH_PUSCH_r10_10_print, + simultaneousPUCCH_PUSCH_r10_10_constraint, + simultaneousPUCCH_PUSCH_r10_10_decode_ber, + simultaneousPUCCH_PUSCH_r10_10_encode_der, + simultaneousPUCCH_PUSCH_r10_10_decode_xer, + simultaneousPUCCH_PUSCH_r10_10_encode_xer, + simultaneousPUCCH_PUSCH_r10_10_decode_uper, + simultaneousPUCCH_PUSCH_r10_10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10, + sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10) + /sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10[0]) - 1, /* 1 */ + asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10, /* Same as above */ + sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10) + /sizeof(asn_DEF_simultaneousPUCCH_PUSCH_r10_tags_10[0]), /* 2 */ + &asn_PER_type_simultaneousPUCCH_PUSCH_r10_constr_10, + 0, 0, /* Defined elsewhere */ + &asn_SPC_simultaneousPUCCH_PUSCH_r10_specs_10 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_multiClusterPUSCH_WithinCC_r10_value2enum_12[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_multiClusterPUSCH_WithinCC_r10_enum2value_12[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_multiClusterPUSCH_WithinCC_r10_specs_12 = { + asn_MAP_multiClusterPUSCH_WithinCC_r10_value2enum_12, /* "tag" => N; sorted by tag */ + asn_MAP_multiClusterPUSCH_WithinCC_r10_enum2value_12, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_multiClusterPUSCH_WithinCC_r10_12 = { + "multiClusterPUSCH-WithinCC-r10", + "multiClusterPUSCH-WithinCC-r10", + multiClusterPUSCH_WithinCC_r10_12_free, + multiClusterPUSCH_WithinCC_r10_12_print, + multiClusterPUSCH_WithinCC_r10_12_constraint, + multiClusterPUSCH_WithinCC_r10_12_decode_ber, + multiClusterPUSCH_WithinCC_r10_12_encode_der, + multiClusterPUSCH_WithinCC_r10_12_decode_xer, + multiClusterPUSCH_WithinCC_r10_12_encode_xer, + multiClusterPUSCH_WithinCC_r10_12_decode_uper, + multiClusterPUSCH_WithinCC_r10_12_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12, + sizeof(asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12) + /sizeof(asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12[0]) - 1, /* 1 */ + asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12, /* Same as above */ + sizeof(asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12) + /sizeof(asn_DEF_multiClusterPUSCH_WithinCC_r10_tags_12[0]), /* 2 */ + &asn_PER_type_multiClusterPUSCH_WithinCC_r10_constr_12, + 0, 0, /* Defined elsewhere */ + &asn_SPC_multiClusterPUSCH_WithinCC_r10_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PhyLayerParameters_v1020_1[] = { + { ATF_POINTER, 7, offsetof(struct PhyLayerParameters_v1020, twoAntennaPortsForPUCCH_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_twoAntennaPortsForPUCCH_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "twoAntennaPortsForPUCCH-r10" + }, + { ATF_POINTER, 6, offsetof(struct PhyLayerParameters_v1020, tm9_With_8Tx_FDD_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_tm9_With_8Tx_FDD_r10_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tm9-With-8Tx-FDD-r10" + }, + { ATF_POINTER, 5, offsetof(struct PhyLayerParameters_v1020, pmi_Disabling_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pmi_Disabling_r10_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pmi-Disabling-r10" + }, + { ATF_POINTER, 4, offsetof(struct PhyLayerParameters_v1020, crossCarrierScheduling_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_crossCarrierScheduling_r10_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "crossCarrierScheduling-r10" + }, + { ATF_POINTER, 3, offsetof(struct PhyLayerParameters_v1020, simultaneousPUCCH_PUSCH_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_simultaneousPUCCH_PUSCH_r10_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "simultaneousPUCCH-PUSCH-r10" + }, + { ATF_POINTER, 2, offsetof(struct PhyLayerParameters_v1020, multiClusterPUSCH_WithinCC_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_multiClusterPUSCH_WithinCC_r10_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "multiClusterPUSCH-WithinCC-r10" + }, + { ATF_POINTER, 1, offsetof(struct PhyLayerParameters_v1020, nonContiguousUL_RA_WithinCC_List_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NonContiguousUL_RA_WithinCC_List_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonContiguousUL-RA-WithinCC-List-r10" + }, +}; +static int asn_MAP_PhyLayerParameters_v1020_oms_1[] = { 0, 1, 2, 3, 4, 5, 6 }; +static ber_tlv_tag_t asn_DEF_PhyLayerParameters_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhyLayerParameters_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* twoAntennaPortsForPUCCH-r10 at 3808 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* tm9-With-8Tx-FDD-r10 at 3809 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pmi-Disabling-r10 at 3810 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* crossCarrierScheduling-r10 at 3811 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* simultaneousPUCCH-PUSCH-r10 at 3812 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* multiClusterPUSCH-WithinCC-r10 at 3813 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* nonContiguousUL-RA-WithinCC-List-r10 at 3814 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhyLayerParameters_v1020_specs_1 = { + sizeof(struct PhyLayerParameters_v1020), + offsetof(struct PhyLayerParameters_v1020, _asn_ctx), + asn_MAP_PhyLayerParameters_v1020_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_PhyLayerParameters_v1020_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhyLayerParameters_v1020 = { + "PhyLayerParameters-v1020", + "PhyLayerParameters-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhyLayerParameters_v1020_tags_1, + sizeof(asn_DEF_PhyLayerParameters_v1020_tags_1) + /sizeof(asn_DEF_PhyLayerParameters_v1020_tags_1[0]), /* 1 */ + asn_DEF_PhyLayerParameters_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_PhyLayerParameters_v1020_tags_1) + /sizeof(asn_DEF_PhyLayerParameters_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhyLayerParameters_v1020_1, + 7, /* Elements count */ + &asn_SPC_PhyLayerParameters_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhyLayerParameters-v1020.h b/lte/rrc/asn/PhyLayerParameters-v1020.h new file mode 100644 index 000000000..059ad8336 --- /dev/null +++ b/lte/rrc/asn/PhyLayerParameters-v1020.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhyLayerParameters_v1020_H_ +#define _PhyLayerParameters_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PhyLayerParameters_v1020__twoAntennaPortsForPUCCH_r10 { + PhyLayerParameters_v1020__twoAntennaPortsForPUCCH_r10_supported = 0 +} e_PhyLayerParameters_v1020__twoAntennaPortsForPUCCH_r10; +typedef enum PhyLayerParameters_v1020__tm9_With_8Tx_FDD_r10 { + PhyLayerParameters_v1020__tm9_With_8Tx_FDD_r10_supported = 0 +} e_PhyLayerParameters_v1020__tm9_With_8Tx_FDD_r10; +typedef enum PhyLayerParameters_v1020__pmi_Disabling_r10 { + PhyLayerParameters_v1020__pmi_Disabling_r10_supported = 0 +} e_PhyLayerParameters_v1020__pmi_Disabling_r10; +typedef enum PhyLayerParameters_v1020__crossCarrierScheduling_r10 { + PhyLayerParameters_v1020__crossCarrierScheduling_r10_supported = 0 +} e_PhyLayerParameters_v1020__crossCarrierScheduling_r10; +typedef enum PhyLayerParameters_v1020__simultaneousPUCCH_PUSCH_r10 { + PhyLayerParameters_v1020__simultaneousPUCCH_PUSCH_r10_supported = 0 +} e_PhyLayerParameters_v1020__simultaneousPUCCH_PUSCH_r10; +typedef enum PhyLayerParameters_v1020__multiClusterPUSCH_WithinCC_r10 { + PhyLayerParameters_v1020__multiClusterPUSCH_WithinCC_r10_supported = 0 +} e_PhyLayerParameters_v1020__multiClusterPUSCH_WithinCC_r10; + +/* Forward declarations */ +struct NonContiguousUL_RA_WithinCC_List_r10; + +/* PhyLayerParameters-v1020 */ +typedef struct PhyLayerParameters_v1020 { + long *twoAntennaPortsForPUCCH_r10 /* OPTIONAL */; + long *tm9_With_8Tx_FDD_r10 /* OPTIONAL */; + long *pmi_Disabling_r10 /* OPTIONAL */; + long *crossCarrierScheduling_r10 /* OPTIONAL */; + long *simultaneousPUCCH_PUSCH_r10 /* OPTIONAL */; + long *multiClusterPUSCH_WithinCC_r10 /* OPTIONAL */; + struct NonContiguousUL_RA_WithinCC_List_r10 *nonContiguousUL_RA_WithinCC_List_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhyLayerParameters_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_twoAntennaPortsForPUCCH_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_tm9_With_8Tx_FDD_r10_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_pmi_Disabling_r10_6; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_crossCarrierScheduling_r10_8; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_simultaneousPUCCH_PUSCH_r10_10; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_multiClusterPUSCH_WithinCC_r10_12; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PhyLayerParameters_v1020; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "NonContiguousUL-RA-WithinCC-List-r10.h" + +#endif /* _PhyLayerParameters_v1020_H_ */ +#include diff --git a/lte/rrc/asn/PhyLayerParameters-v920.c b/lte/rrc/asn/PhyLayerParameters-v920.c new file mode 100644 index 000000000..a2d4f3469 --- /dev/null +++ b/lte/rrc/asn/PhyLayerParameters-v920.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhyLayerParameters-v920.h" + +static int +enhancedDualLayerFDD_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +enhancedDualLayerFDD_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +enhancedDualLayerFDD_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +enhancedDualLayerFDD_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +enhancedDualLayerFDD_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +enhancedDualLayerFDD_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +enhancedDualLayerFDD_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +enhancedDualLayerFDD_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +enhancedDualLayerFDD_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + enhancedDualLayerFDD_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +enhancedDualLayerTDD_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +enhancedDualLayerTDD_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +enhancedDualLayerTDD_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +enhancedDualLayerTDD_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +enhancedDualLayerTDD_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +enhancedDualLayerTDD_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +enhancedDualLayerTDD_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +enhancedDualLayerTDD_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +enhancedDualLayerTDD_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + enhancedDualLayerTDD_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_enhancedDualLayerFDD_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_enhancedDualLayerTDD_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_enhancedDualLayerFDD_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_enhancedDualLayerFDD_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_enhancedDualLayerFDD_r9_specs_2 = { + asn_MAP_enhancedDualLayerFDD_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_enhancedDualLayerFDD_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_enhancedDualLayerFDD_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_enhancedDualLayerFDD_r9_2 = { + "enhancedDualLayerFDD-r9", + "enhancedDualLayerFDD-r9", + enhancedDualLayerFDD_r9_2_free, + enhancedDualLayerFDD_r9_2_print, + enhancedDualLayerFDD_r9_2_constraint, + enhancedDualLayerFDD_r9_2_decode_ber, + enhancedDualLayerFDD_r9_2_encode_der, + enhancedDualLayerFDD_r9_2_decode_xer, + enhancedDualLayerFDD_r9_2_encode_xer, + enhancedDualLayerFDD_r9_2_decode_uper, + enhancedDualLayerFDD_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_enhancedDualLayerFDD_r9_tags_2, + sizeof(asn_DEF_enhancedDualLayerFDD_r9_tags_2) + /sizeof(asn_DEF_enhancedDualLayerFDD_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_enhancedDualLayerFDD_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_enhancedDualLayerFDD_r9_tags_2) + /sizeof(asn_DEF_enhancedDualLayerFDD_r9_tags_2[0]), /* 2 */ + &asn_PER_type_enhancedDualLayerFDD_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_enhancedDualLayerFDD_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_enhancedDualLayerTDD_r9_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_enhancedDualLayerTDD_r9_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_enhancedDualLayerTDD_r9_specs_4 = { + asn_MAP_enhancedDualLayerTDD_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_enhancedDualLayerTDD_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_enhancedDualLayerTDD_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_enhancedDualLayerTDD_r9_4 = { + "enhancedDualLayerTDD-r9", + "enhancedDualLayerTDD-r9", + enhancedDualLayerTDD_r9_4_free, + enhancedDualLayerTDD_r9_4_print, + enhancedDualLayerTDD_r9_4_constraint, + enhancedDualLayerTDD_r9_4_decode_ber, + enhancedDualLayerTDD_r9_4_encode_der, + enhancedDualLayerTDD_r9_4_decode_xer, + enhancedDualLayerTDD_r9_4_encode_xer, + enhancedDualLayerTDD_r9_4_decode_uper, + enhancedDualLayerTDD_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_enhancedDualLayerTDD_r9_tags_4, + sizeof(asn_DEF_enhancedDualLayerTDD_r9_tags_4) + /sizeof(asn_DEF_enhancedDualLayerTDD_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_enhancedDualLayerTDD_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_enhancedDualLayerTDD_r9_tags_4) + /sizeof(asn_DEF_enhancedDualLayerTDD_r9_tags_4[0]), /* 2 */ + &asn_PER_type_enhancedDualLayerTDD_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_enhancedDualLayerTDD_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PhyLayerParameters_v920_1[] = { + { ATF_POINTER, 2, offsetof(struct PhyLayerParameters_v920, enhancedDualLayerFDD_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_enhancedDualLayerFDD_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "enhancedDualLayerFDD-r9" + }, + { ATF_POINTER, 1, offsetof(struct PhyLayerParameters_v920, enhancedDualLayerTDD_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_enhancedDualLayerTDD_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "enhancedDualLayerTDD-r9" + }, +}; +static int asn_MAP_PhyLayerParameters_v920_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_PhyLayerParameters_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhyLayerParameters_v920_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* enhancedDualLayerFDD-r9 at 3803 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* enhancedDualLayerTDD-r9 at 3804 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhyLayerParameters_v920_specs_1 = { + sizeof(struct PhyLayerParameters_v920), + offsetof(struct PhyLayerParameters_v920, _asn_ctx), + asn_MAP_PhyLayerParameters_v920_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PhyLayerParameters_v920_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhyLayerParameters_v920 = { + "PhyLayerParameters-v920", + "PhyLayerParameters-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhyLayerParameters_v920_tags_1, + sizeof(asn_DEF_PhyLayerParameters_v920_tags_1) + /sizeof(asn_DEF_PhyLayerParameters_v920_tags_1[0]), /* 1 */ + asn_DEF_PhyLayerParameters_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_PhyLayerParameters_v920_tags_1) + /sizeof(asn_DEF_PhyLayerParameters_v920_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhyLayerParameters_v920_1, + 2, /* Elements count */ + &asn_SPC_PhyLayerParameters_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhyLayerParameters-v920.h b/lte/rrc/asn/PhyLayerParameters-v920.h new file mode 100644 index 000000000..5261010b6 --- /dev/null +++ b/lte/rrc/asn/PhyLayerParameters-v920.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhyLayerParameters_v920_H_ +#define _PhyLayerParameters_v920_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PhyLayerParameters_v920__enhancedDualLayerFDD_r9 { + PhyLayerParameters_v920__enhancedDualLayerFDD_r9_supported = 0 +} e_PhyLayerParameters_v920__enhancedDualLayerFDD_r9; +typedef enum PhyLayerParameters_v920__enhancedDualLayerTDD_r9 { + PhyLayerParameters_v920__enhancedDualLayerTDD_r9_supported = 0 +} e_PhyLayerParameters_v920__enhancedDualLayerTDD_r9; + +/* PhyLayerParameters-v920 */ +typedef struct PhyLayerParameters_v920 { + long *enhancedDualLayerFDD_r9 /* OPTIONAL */; + long *enhancedDualLayerTDD_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhyLayerParameters_v920_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_enhancedDualLayerFDD_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_enhancedDualLayerTDD_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PhyLayerParameters_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhyLayerParameters_v920_H_ */ +#include diff --git a/lte/rrc/asn/PhyLayerParameters.c b/lte/rrc/asn/PhyLayerParameters.c new file mode 100644 index 000000000..140f8d3df --- /dev/null +++ b/lte/rrc/asn/PhyLayerParameters.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhyLayerParameters.h" + +static asn_TYPE_member_t asn_MBR_PhyLayerParameters_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PhyLayerParameters, ue_TxAntennaSelectionSupported), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-TxAntennaSelectionSupported" + }, + { ATF_NOFLAGS, 0, offsetof(struct PhyLayerParameters, ue_SpecificRefSigsSupported), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-SpecificRefSigsSupported" + }, +}; +static ber_tlv_tag_t asn_DEF_PhyLayerParameters_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhyLayerParameters_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-TxAntennaSelectionSupported at 3798 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ue-SpecificRefSigsSupported at 3799 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhyLayerParameters_specs_1 = { + sizeof(struct PhyLayerParameters), + offsetof(struct PhyLayerParameters, _asn_ctx), + asn_MAP_PhyLayerParameters_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhyLayerParameters = { + "PhyLayerParameters", + "PhyLayerParameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhyLayerParameters_tags_1, + sizeof(asn_DEF_PhyLayerParameters_tags_1) + /sizeof(asn_DEF_PhyLayerParameters_tags_1[0]), /* 1 */ + asn_DEF_PhyLayerParameters_tags_1, /* Same as above */ + sizeof(asn_DEF_PhyLayerParameters_tags_1) + /sizeof(asn_DEF_PhyLayerParameters_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhyLayerParameters_1, + 2, /* Elements count */ + &asn_SPC_PhyLayerParameters_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhyLayerParameters.h b/lte/rrc/asn/PhyLayerParameters.h new file mode 100644 index 000000000..49ad5dd18 --- /dev/null +++ b/lte/rrc/asn/PhyLayerParameters.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhyLayerParameters_H_ +#define _PhyLayerParameters_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhyLayerParameters */ +typedef struct PhyLayerParameters { + BOOLEAN_t ue_TxAntennaSelectionSupported; + BOOLEAN_t ue_SpecificRefSigsSupported; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhyLayerParameters_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhyLayerParameters; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhyLayerParameters_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellId.c b/lte/rrc/asn/PhysCellId.c new file mode 100644 index 000000000..9127ad54c --- /dev/null +++ b/lte/rrc/asn/PhysCellId.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellId.h" + +int +PhysCellId_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 503)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +PhysCellId_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +PhysCellId_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PhysCellId_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PhysCellId_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PhysCellId_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PhysCellId_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PhysCellId_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PhysCellId_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PhysCellId_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PhysCellId_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PhysCellId_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PhysCellId_constr_1 = { + { APC_CONSTRAINED, 9, 9, 0, 503 } /* (0..503) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_PhysCellId_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellId = { + "PhysCellId", + "PhysCellId", + PhysCellId_free, + PhysCellId_print, + PhysCellId_constraint, + PhysCellId_decode_ber, + PhysCellId_encode_der, + PhysCellId_decode_xer, + PhysCellId_encode_xer, + PhysCellId_decode_uper, + PhysCellId_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellId_tags_1, + sizeof(asn_DEF_PhysCellId_tags_1) + /sizeof(asn_DEF_PhysCellId_tags_1[0]), /* 1 */ + asn_DEF_PhysCellId_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellId_tags_1) + /sizeof(asn_DEF_PhysCellId_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellId_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/PhysCellId.h b/lte/rrc/asn/PhysCellId.h new file mode 100644 index 000000000..6eff85006 --- /dev/null +++ b/lte/rrc/asn/PhysCellId.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellId_H_ +#define _PhysCellId_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellId */ +typedef long PhysCellId_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellId; +asn_struct_free_f PhysCellId_free; +asn_struct_print_f PhysCellId_print; +asn_constr_check_f PhysCellId_constraint; +ber_type_decoder_f PhysCellId_decode_ber; +der_type_encoder_f PhysCellId_encode_der; +xer_type_decoder_f PhysCellId_decode_xer; +xer_type_encoder_f PhysCellId_encode_xer; +per_type_decoder_f PhysCellId_decode_uper; +per_type_encoder_f PhysCellId_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellId_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdCDMA2000.c b/lte/rrc/asn/PhysCellIdCDMA2000.c new file mode 100644 index 000000000..4ceabae0f --- /dev/null +++ b/lte/rrc/asn/PhysCellIdCDMA2000.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdCDMA2000.h" + +int +PhysCellIdCDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 511)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +PhysCellIdCDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PhysCellIdCDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdCDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PhysCellIdCDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdCDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PhysCellIdCDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdCDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PhysCellIdCDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PhysCellIdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PhysCellIdCDMA2000_constr_1 = { + { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdCDMA2000 = { + "PhysCellIdCDMA2000", + "PhysCellIdCDMA2000", + PhysCellIdCDMA2000_free, + PhysCellIdCDMA2000_print, + PhysCellIdCDMA2000_constraint, + PhysCellIdCDMA2000_decode_ber, + PhysCellIdCDMA2000_encode_der, + PhysCellIdCDMA2000_decode_xer, + PhysCellIdCDMA2000_encode_xer, + PhysCellIdCDMA2000_decode_uper, + PhysCellIdCDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdCDMA2000_tags_1, + sizeof(asn_DEF_PhysCellIdCDMA2000_tags_1) + /sizeof(asn_DEF_PhysCellIdCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdCDMA2000_tags_1) + /sizeof(asn_DEF_PhysCellIdCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellIdCDMA2000_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/PhysCellIdCDMA2000.h b/lte/rrc/asn/PhysCellIdCDMA2000.h new file mode 100644 index 000000000..b8c20ab0a --- /dev/null +++ b/lte/rrc/asn/PhysCellIdCDMA2000.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdCDMA2000_H_ +#define _PhysCellIdCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdCDMA2000 */ +typedef long PhysCellIdCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdCDMA2000; +asn_struct_free_f PhysCellIdCDMA2000_free; +asn_struct_print_f PhysCellIdCDMA2000_print; +asn_constr_check_f PhysCellIdCDMA2000_constraint; +ber_type_decoder_f PhysCellIdCDMA2000_decode_ber; +der_type_encoder_f PhysCellIdCDMA2000_encode_der; +xer_type_decoder_f PhysCellIdCDMA2000_decode_xer; +xer_type_encoder_f PhysCellIdCDMA2000_encode_xer; +per_type_decoder_f PhysCellIdCDMA2000_decode_uper; +per_type_encoder_f PhysCellIdCDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdGERAN.c b/lte/rrc/asn/PhysCellIdGERAN.c new file mode 100644 index 000000000..f4e43e7f9 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdGERAN.c @@ -0,0 +1,142 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdGERAN.h" + +static int +memb_networkColourCode_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_baseStationColourCode_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_networkColourCode_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_baseStationColourCode_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PhysCellIdGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PhysCellIdGERAN, networkColourCode), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_networkColourCode_constraint_1, + &asn_PER_memb_networkColourCode_constr_2, + 0, + "networkColourCode" + }, + { ATF_NOFLAGS, 0, offsetof(struct PhysCellIdGERAN, baseStationColourCode), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_baseStationColourCode_constraint_1, + &asn_PER_memb_baseStationColourCode_constr_3, + 0, + "baseStationColourCode" + }, +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhysCellIdGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* networkColourCode at 3060 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* baseStationColourCode at 3061 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhysCellIdGERAN_specs_1 = { + sizeof(struct PhysCellIdGERAN), + offsetof(struct PhysCellIdGERAN, _asn_ctx), + asn_MAP_PhysCellIdGERAN_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdGERAN = { + "PhysCellIdGERAN", + "PhysCellIdGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdGERAN_tags_1, + sizeof(asn_DEF_PhysCellIdGERAN_tags_1) + /sizeof(asn_DEF_PhysCellIdGERAN_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdGERAN_tags_1) + /sizeof(asn_DEF_PhysCellIdGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhysCellIdGERAN_1, + 2, /* Elements count */ + &asn_SPC_PhysCellIdGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysCellIdGERAN.h b/lte/rrc/asn/PhysCellIdGERAN.h new file mode 100644 index 000000000..dafb3ee7f --- /dev/null +++ b/lte/rrc/asn/PhysCellIdGERAN.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdGERAN_H_ +#define _PhysCellIdGERAN_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdGERAN */ +typedef struct PhysCellIdGERAN { + BIT_STRING_t networkColourCode; + BIT_STRING_t baseStationColourCode; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysCellIdGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdGERAN_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000-v920.c b/lte/rrc/asn/PhysCellIdListCDMA2000-v920.c new file mode 100644 index 000000000..14289bbdc --- /dev/null +++ b/lte/rrc/asn/PhysCellIdListCDMA2000-v920.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdListCDMA2000-v920.h" + +static asn_per_constraints_t asn_PER_type_PhysCellIdListCDMA2000_v920_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 0, 24 } /* (SIZE(0..24)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PhysCellIdListCDMA2000_v920_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_PhysCellIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdListCDMA2000_v920_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PhysCellIdListCDMA2000_v920_specs_1 = { + sizeof(struct PhysCellIdListCDMA2000_v920), + offsetof(struct PhysCellIdListCDMA2000_v920, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdListCDMA2000_v920 = { + "PhysCellIdListCDMA2000-v920", + "PhysCellIdListCDMA2000-v920", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdListCDMA2000_v920_tags_1, + sizeof(asn_DEF_PhysCellIdListCDMA2000_v920_tags_1) + /sizeof(asn_DEF_PhysCellIdListCDMA2000_v920_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdListCDMA2000_v920_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdListCDMA2000_v920_tags_1) + /sizeof(asn_DEF_PhysCellIdListCDMA2000_v920_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellIdListCDMA2000_v920_constr_1, + asn_MBR_PhysCellIdListCDMA2000_v920_1, + 1, /* Single element */ + &asn_SPC_PhysCellIdListCDMA2000_v920_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000-v920.h b/lte/rrc/asn/PhysCellIdListCDMA2000-v920.h new file mode 100644 index 000000000..b8763752f --- /dev/null +++ b/lte/rrc/asn/PhysCellIdListCDMA2000-v920.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdListCDMA2000_v920_H_ +#define _PhysCellIdListCDMA2000_v920_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdListCDMA2000-v920 */ +typedef struct PhysCellIdListCDMA2000_v920 { + A_SEQUENCE_OF(PhysCellIdCDMA2000_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysCellIdListCDMA2000_v920_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdListCDMA2000_v920; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdListCDMA2000_v920_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000.c b/lte/rrc/asn/PhysCellIdListCDMA2000.c new file mode 100644 index 000000000..53712ad4f --- /dev/null +++ b/lte/rrc/asn/PhysCellIdListCDMA2000.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdListCDMA2000.h" + +static asn_per_constraints_t asn_PER_type_PhysCellIdListCDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (SIZE(1..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PhysCellIdListCDMA2000_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_PhysCellIdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdListCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PhysCellIdListCDMA2000_specs_1 = { + sizeof(struct PhysCellIdListCDMA2000), + offsetof(struct PhysCellIdListCDMA2000, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdListCDMA2000 = { + "PhysCellIdListCDMA2000", + "PhysCellIdListCDMA2000", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdListCDMA2000_tags_1, + sizeof(asn_DEF_PhysCellIdListCDMA2000_tags_1) + /sizeof(asn_DEF_PhysCellIdListCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdListCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdListCDMA2000_tags_1) + /sizeof(asn_DEF_PhysCellIdListCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellIdListCDMA2000_constr_1, + asn_MBR_PhysCellIdListCDMA2000_1, + 1, /* Single element */ + &asn_SPC_PhysCellIdListCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000.h b/lte/rrc/asn/PhysCellIdListCDMA2000.h new file mode 100644 index 000000000..6961cce1d --- /dev/null +++ b/lte/rrc/asn/PhysCellIdListCDMA2000.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdListCDMA2000_H_ +#define _PhysCellIdListCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdListCDMA2000 */ +typedef struct PhysCellIdListCDMA2000 { + A_SEQUENCE_OF(PhysCellIdCDMA2000_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysCellIdListCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdListCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdListCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdRange.c b/lte/rrc/asn/PhysCellIdRange.c new file mode 100644 index 000000000..125cbe0f6 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdRange.c @@ -0,0 +1,239 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdRange.h" + +static int +range_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +range_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +range_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + range_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +range_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + range_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +range_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + range_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +range_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + range_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +range_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + range_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +range_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + range_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +range_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + range_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +range_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + range_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_range_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_range_value2enum_3[] = { + { 0, 2, "n4" }, + { 1, 2, "n8" }, + { 2, 3, "n12" }, + { 3, 3, "n16" }, + { 4, 3, "n24" }, + { 5, 3, "n32" }, + { 6, 3, "n48" }, + { 7, 3, "n64" }, + { 8, 3, "n84" }, + { 9, 3, "n96" }, + { 10, 4, "n128" }, + { 11, 4, "n168" }, + { 12, 4, "n252" }, + { 13, 4, "n504" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_range_enum2value_3[] = { + 2, /* n12(2) */ + 10, /* n128(10) */ + 3, /* n16(3) */ + 11, /* n168(11) */ + 4, /* n24(4) */ + 12, /* n252(12) */ + 5, /* n32(5) */ + 0, /* n4(0) */ + 6, /* n48(6) */ + 13, /* n504(13) */ + 7, /* n64(7) */ + 1, /* n8(1) */ + 8, /* n84(8) */ + 9, /* n96(9) */ + 15, /* spare1(15) */ + 14 /* spare2(14) */ +}; +static asn_INTEGER_specifics_t asn_SPC_range_specs_3 = { + asn_MAP_range_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_range_enum2value_3, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_range_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_range_3 = { + "range", + "range", + range_3_free, + range_3_print, + range_3_constraint, + range_3_decode_ber, + range_3_encode_der, + range_3_decode_xer, + range_3_encode_xer, + range_3_decode_uper, + range_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_range_tags_3, + sizeof(asn_DEF_range_tags_3) + /sizeof(asn_DEF_range_tags_3[0]) - 1, /* 1 */ + asn_DEF_range_tags_3, /* Same as above */ + sizeof(asn_DEF_range_tags_3) + /sizeof(asn_DEF_range_tags_3[0]), /* 2 */ + &asn_PER_type_range_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_range_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PhysCellIdRange_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PhysCellIdRange, start), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "start" + }, + { ATF_POINTER, 1, offsetof(struct PhysCellIdRange, range), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_range_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "range" + }, +}; +static int asn_MAP_PhysCellIdRange_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_PhysCellIdRange_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhysCellIdRange_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* start at 3040 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* range at 3042 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhysCellIdRange_specs_1 = { + sizeof(struct PhysCellIdRange), + offsetof(struct PhysCellIdRange, _asn_ctx), + asn_MAP_PhysCellIdRange_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PhysCellIdRange_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdRange = { + "PhysCellIdRange", + "PhysCellIdRange", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdRange_tags_1, + sizeof(asn_DEF_PhysCellIdRange_tags_1) + /sizeof(asn_DEF_PhysCellIdRange_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdRange_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdRange_tags_1) + /sizeof(asn_DEF_PhysCellIdRange_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhysCellIdRange_1, + 2, /* Elements count */ + &asn_SPC_PhysCellIdRange_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysCellIdRange.h b/lte/rrc/asn/PhysCellIdRange.h new file mode 100644 index 000000000..45e7ab1c9 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdRange.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdRange_H_ +#define _PhysCellIdRange_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellId.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PhysCellIdRange__range { + PhysCellIdRange__range_n4 = 0, + PhysCellIdRange__range_n8 = 1, + PhysCellIdRange__range_n12 = 2, + PhysCellIdRange__range_n16 = 3, + PhysCellIdRange__range_n24 = 4, + PhysCellIdRange__range_n32 = 5, + PhysCellIdRange__range_n48 = 6, + PhysCellIdRange__range_n64 = 7, + PhysCellIdRange__range_n84 = 8, + PhysCellIdRange__range_n96 = 9, + PhysCellIdRange__range_n128 = 10, + PhysCellIdRange__range_n168 = 11, + PhysCellIdRange__range_n252 = 12, + PhysCellIdRange__range_n504 = 13, + PhysCellIdRange__range_spare2 = 14, + PhysCellIdRange__range_spare1 = 15 +} e_PhysCellIdRange__range; + +/* PhysCellIdRange */ +typedef struct PhysCellIdRange { + PhysCellId_t start; + long *range /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysCellIdRange_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_range_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdRange; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdRange_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c b/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c new file mode 100644 index 000000000..4cb631dba --- /dev/null +++ b/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdRangeUTRA-FDD-r9.h" + +static int +memb_range_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 2 && value <= 512)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_range_r9_constr_3 = { + { APC_CONSTRAINED, 9, 9, 2, 512 } /* (2..512) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PhysCellIdRangeUTRA_FDD_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PhysCellIdRangeUTRA_FDD_r9, start_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "start-r9" + }, + { ATF_POINTER, 1, offsetof(struct PhysCellIdRangeUTRA_FDD_r9, range_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_range_r9_constraint_1, + &asn_PER_memb_range_r9_constr_3, + 0, + "range-r9" + }, +}; +static int asn_MAP_PhysCellIdRangeUTRA_FDD_r9_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhysCellIdRangeUTRA_FDD_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* start-r9 at 3051 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* range-r9 at 3052 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhysCellIdRangeUTRA_FDD_r9_specs_1 = { + sizeof(struct PhysCellIdRangeUTRA_FDD_r9), + offsetof(struct PhysCellIdRangeUTRA_FDD_r9, _asn_ctx), + asn_MAP_PhysCellIdRangeUTRA_FDD_r9_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PhysCellIdRangeUTRA_FDD_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdRangeUTRA_FDD_r9 = { + "PhysCellIdRangeUTRA-FDD-r9", + "PhysCellIdRangeUTRA-FDD-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1, + sizeof(asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1) + /sizeof(asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1) + /sizeof(asn_DEF_PhysCellIdRangeUTRA_FDD_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhysCellIdRangeUTRA_FDD_r9_1, + 2, /* Elements count */ + &asn_SPC_PhysCellIdRangeUTRA_FDD_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h b/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h new file mode 100644 index 000000000..333f29979 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdRangeUTRA_FDD_r9_H_ +#define _PhysCellIdRangeUTRA_FDD_r9_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellIdUTRA-FDD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdRangeUTRA-FDD-r9 */ +typedef struct PhysCellIdRangeUTRA_FDD_r9 { + PhysCellIdUTRA_FDD_t start_r9; + long *range_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysCellIdRangeUTRA_FDD_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdRangeUTRA_FDD_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdRangeUTRA_FDD_r9_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c b/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c new file mode 100644 index 000000000..0c8be0db8 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdRangeUTRA-FDDList-r9.h" + +static asn_per_constraints_t asn_PER_type_PhysCellIdRangeUTRA_FDDList_r9_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_PhysCellIdRangeUTRA_FDDList_r9_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_PhysCellIdRangeUTRA_FDD_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_PhysCellIdRangeUTRA_FDDList_r9_specs_1 = { + sizeof(struct PhysCellIdRangeUTRA_FDDList_r9), + offsetof(struct PhysCellIdRangeUTRA_FDDList_r9, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdRangeUTRA_FDDList_r9 = { + "PhysCellIdRangeUTRA-FDDList-r9", + "PhysCellIdRangeUTRA-FDDList-r9", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1, + sizeof(asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1) + /sizeof(asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1) + /sizeof(asn_DEF_PhysCellIdRangeUTRA_FDDList_r9_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellIdRangeUTRA_FDDList_r9_constr_1, + asn_MBR_PhysCellIdRangeUTRA_FDDList_r9_1, + 1, /* Single element */ + &asn_SPC_PhysCellIdRangeUTRA_FDDList_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h b/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h new file mode 100644 index 000000000..a9e4b3f9b --- /dev/null +++ b/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdRangeUTRA_FDDList_r9_H_ +#define _PhysCellIdRangeUTRA_FDDList_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysCellIdRangeUTRA_FDD_r9; + +/* PhysCellIdRangeUTRA-FDDList-r9 */ +typedef struct PhysCellIdRangeUTRA_FDDList_r9 { + A_SEQUENCE_OF(struct PhysCellIdRangeUTRA_FDD_r9) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysCellIdRangeUTRA_FDDList_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdRangeUTRA_FDDList_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysCellIdRangeUTRA-FDD-r9.h" + +#endif /* _PhysCellIdRangeUTRA_FDDList_r9_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdUTRA-FDD.c b/lte/rrc/asn/PhysCellIdUTRA-FDD.c new file mode 100644 index 000000000..5329dc49c --- /dev/null +++ b/lte/rrc/asn/PhysCellIdUTRA-FDD.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdUTRA-FDD.h" + +int +PhysCellIdUTRA_FDD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 511)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +PhysCellIdUTRA_FDD_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PhysCellIdUTRA_FDD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdUTRA_FDD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PhysCellIdUTRA_FDD_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdUTRA_FDD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PhysCellIdUTRA_FDD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdUTRA_FDD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PhysCellIdUTRA_FDD_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PhysCellIdUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PhysCellIdUTRA_FDD_constr_1 = { + { APC_CONSTRAINED, 9, 9, 0, 511 } /* (0..511) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdUTRA_FDD = { + "PhysCellIdUTRA-FDD", + "PhysCellIdUTRA-FDD", + PhysCellIdUTRA_FDD_free, + PhysCellIdUTRA_FDD_print, + PhysCellIdUTRA_FDD_constraint, + PhysCellIdUTRA_FDD_decode_ber, + PhysCellIdUTRA_FDD_encode_der, + PhysCellIdUTRA_FDD_decode_xer, + PhysCellIdUTRA_FDD_encode_xer, + PhysCellIdUTRA_FDD_decode_uper, + PhysCellIdUTRA_FDD_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdUTRA_FDD_tags_1, + sizeof(asn_DEF_PhysCellIdUTRA_FDD_tags_1) + /sizeof(asn_DEF_PhysCellIdUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdUTRA_FDD_tags_1) + /sizeof(asn_DEF_PhysCellIdUTRA_FDD_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellIdUTRA_FDD_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/PhysCellIdUTRA-FDD.h b/lte/rrc/asn/PhysCellIdUTRA-FDD.h new file mode 100644 index 000000000..dee399e2a --- /dev/null +++ b/lte/rrc/asn/PhysCellIdUTRA-FDD.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdUTRA_FDD_H_ +#define _PhysCellIdUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdUTRA-FDD */ +typedef long PhysCellIdUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdUTRA_FDD; +asn_struct_free_f PhysCellIdUTRA_FDD_free; +asn_struct_print_f PhysCellIdUTRA_FDD_print; +asn_constr_check_f PhysCellIdUTRA_FDD_constraint; +ber_type_decoder_f PhysCellIdUTRA_FDD_decode_ber; +der_type_encoder_f PhysCellIdUTRA_FDD_encode_der; +xer_type_decoder_f PhysCellIdUTRA_FDD_decode_xer; +xer_type_encoder_f PhysCellIdUTRA_FDD_encode_xer; +per_type_decoder_f PhysCellIdUTRA_FDD_decode_uper; +per_type_encoder_f PhysCellIdUTRA_FDD_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/PhysCellIdUTRA-TDD.c b/lte/rrc/asn/PhysCellIdUTRA-TDD.c new file mode 100644 index 000000000..fe14014f4 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdUTRA-TDD.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysCellIdUTRA-TDD.h" + +int +PhysCellIdUTRA_TDD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 127)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +PhysCellIdUTRA_TDD_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PhysCellIdUTRA_TDD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdUTRA_TDD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PhysCellIdUTRA_TDD_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdUTRA_TDD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PhysCellIdUTRA_TDD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PhysCellIdUTRA_TDD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PhysCellIdUTRA_TDD_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PhysCellIdUTRA_TDD_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PhysCellIdUTRA_TDD_constr_1 = { + { APC_CONSTRAINED, 7, 7, 0, 127 } /* (0..127) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_PhysCellIdUTRA_TDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PhysCellIdUTRA_TDD = { + "PhysCellIdUTRA-TDD", + "PhysCellIdUTRA-TDD", + PhysCellIdUTRA_TDD_free, + PhysCellIdUTRA_TDD_print, + PhysCellIdUTRA_TDD_constraint, + PhysCellIdUTRA_TDD_decode_ber, + PhysCellIdUTRA_TDD_encode_der, + PhysCellIdUTRA_TDD_decode_xer, + PhysCellIdUTRA_TDD_encode_xer, + PhysCellIdUTRA_TDD_decode_uper, + PhysCellIdUTRA_TDD_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysCellIdUTRA_TDD_tags_1, + sizeof(asn_DEF_PhysCellIdUTRA_TDD_tags_1) + /sizeof(asn_DEF_PhysCellIdUTRA_TDD_tags_1[0]), /* 1 */ + asn_DEF_PhysCellIdUTRA_TDD_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysCellIdUTRA_TDD_tags_1) + /sizeof(asn_DEF_PhysCellIdUTRA_TDD_tags_1[0]), /* 1 */ + &asn_PER_type_PhysCellIdUTRA_TDD_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/PhysCellIdUTRA-TDD.h b/lte/rrc/asn/PhysCellIdUTRA-TDD.h new file mode 100644 index 000000000..b9d3f6f83 --- /dev/null +++ b/lte/rrc/asn/PhysCellIdUTRA-TDD.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysCellIdUTRA_TDD_H_ +#define _PhysCellIdUTRA_TDD_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PhysCellIdUTRA-TDD */ +typedef long PhysCellIdUTRA_TDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysCellIdUTRA_TDD; +asn_struct_free_f PhysCellIdUTRA_TDD_free; +asn_struct_print_f PhysCellIdUTRA_TDD_print; +asn_constr_check_f PhysCellIdUTRA_TDD_constraint; +ber_type_decoder_f PhysCellIdUTRA_TDD_decode_ber; +der_type_encoder_f PhysCellIdUTRA_TDD_encode_der; +xer_type_decoder_f PhysCellIdUTRA_TDD_decode_xer; +xer_type_encoder_f PhysCellIdUTRA_TDD_encode_xer; +per_type_decoder_f PhysCellIdUTRA_TDD_decode_uper; +per_type_encoder_f PhysCellIdUTRA_TDD_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PhysCellIdUTRA_TDD_H_ */ +#include diff --git a/lte/rrc/asn/PhysicalConfigDedicated.c b/lte/rrc/asn/PhysicalConfigDedicated.c new file mode 100644 index 000000000..bc4eb12fe --- /dev/null +++ b/lte/rrc/asn/PhysicalConfigDedicated.c @@ -0,0 +1,418 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysicalConfigDedicated.h" + +static asn_per_constraints_t asn_PER_type_antennaInfo_constr_10 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_antennaInfo_r10_constr_16 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_antennaInfo_10[] = { + { ATF_NOFLAGS, 0, offsetof(struct PhysicalConfigDedicated__antennaInfo, choice.explicitValue), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitValue" + }, + { ATF_NOFLAGS, 0, offsetof(struct PhysicalConfigDedicated__antennaInfo, choice.defaultValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "defaultValue" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_antennaInfo_tag2el_10[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* explicitValue at 2145 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* defaultValue at 2146 */ +}; +static asn_CHOICE_specifics_t asn_SPC_antennaInfo_specs_10 = { + sizeof(struct PhysicalConfigDedicated__antennaInfo), + offsetof(struct PhysicalConfigDedicated__antennaInfo, _asn_ctx), + offsetof(struct PhysicalConfigDedicated__antennaInfo, present), + sizeof(((struct PhysicalConfigDedicated__antennaInfo *)0)->present), + asn_MAP_antennaInfo_tag2el_10, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_antennaInfo_10 = { + "antennaInfo", + "antennaInfo", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_antennaInfo_constr_10, + asn_MBR_antennaInfo_10, + 2, /* Elements count */ + &asn_SPC_antennaInfo_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_antennaInfo_r10_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct PhysicalConfigDedicated__antennaInfo_r10, choice.explicitValue_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoDedicated_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitValue-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct PhysicalConfigDedicated__antennaInfo_r10, choice.defaultValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "defaultValue" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_antennaInfo_r10_tag2el_16[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* explicitValue-r10 at 2152 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* defaultValue at 2153 */ +}; +static asn_CHOICE_specifics_t asn_SPC_antennaInfo_r10_specs_16 = { + sizeof(struct PhysicalConfigDedicated__antennaInfo_r10), + offsetof(struct PhysicalConfigDedicated__antennaInfo_r10, _asn_ctx), + offsetof(struct PhysicalConfigDedicated__antennaInfo_r10, present), + sizeof(((struct PhysicalConfigDedicated__antennaInfo_r10 *)0)->present), + asn_MAP_antennaInfo_r10_tag2el_16, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_antennaInfo_r10_16 = { + "antennaInfo-r10", + "antennaInfo-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_antennaInfo_r10_constr_16, + asn_MBR_antennaInfo_r10_16, + 2, /* Elements count */ + &asn_SPC_antennaInfo_r10_specs_16 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PhysicalConfigDedicated_1[] = { + { ATF_POINTER, 24, offsetof(struct PhysicalConfigDedicated, pdsch_ConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDSCH_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdsch-ConfigDedicated" + }, + { ATF_POINTER, 23, offsetof(struct PhysicalConfigDedicated, pucch_ConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUCCH_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pucch-ConfigDedicated" + }, + { ATF_POINTER, 22, offsetof(struct PhysicalConfigDedicated, pusch_ConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigDedicated" + }, + { ATF_POINTER, 21, offsetof(struct PhysicalConfigDedicated, uplinkPowerControlDedicated), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlDedicated" + }, + { ATF_POINTER, 20, offsetof(struct PhysicalConfigDedicated, tpc_PDCCH_ConfigPUCCH), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_TPC_PDCCH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tpc-PDCCH-ConfigPUCCH" + }, + { ATF_POINTER, 19, offsetof(struct PhysicalConfigDedicated, tpc_PDCCH_ConfigPUSCH), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_TPC_PDCCH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tpc-PDCCH-ConfigPUSCH" + }, + { ATF_POINTER, 18, offsetof(struct PhysicalConfigDedicated, cqi_ReportConfig), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CQI_ReportConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportConfig" + }, + { ATF_POINTER, 17, offsetof(struct PhysicalConfigDedicated, soundingRS_UL_ConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigDedicated" + }, + { ATF_POINTER, 16, offsetof(struct PhysicalConfigDedicated, antennaInfo), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_antennaInfo_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfo" + }, + { ATF_POINTER, 15, offsetof(struct PhysicalConfigDedicated, schedulingRequestConfig), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SchedulingRequestConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "schedulingRequestConfig" + }, + { ATF_POINTER, 14, offsetof(struct PhysicalConfigDedicated, cqi_ReportConfig_v920), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CQI_ReportConfig_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportConfig-v920" + }, + { ATF_POINTER, 13, offsetof(struct PhysicalConfigDedicated, antennaInfo_v920), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoDedicated_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfo-v920" + }, + { ATF_POINTER, 12, offsetof(struct PhysicalConfigDedicated, antennaInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_antennaInfo_r10_16, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfo-r10" + }, + { ATF_POINTER, 11, offsetof(struct PhysicalConfigDedicated, antennaInfoUL_r10), + (ASN_TAG_CLASS_CONTEXT | (13 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoUL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfoUL-r10" + }, + { ATF_POINTER, 10, offsetof(struct PhysicalConfigDedicated, cif_Presence_r10), + (ASN_TAG_CLASS_CONTEXT | (14 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cif-Presence-r10" + }, + { ATF_POINTER, 9, offsetof(struct PhysicalConfigDedicated, cqi_ReportConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CQI_ReportConfig_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportConfig-r10" + }, + { ATF_POINTER, 8, offsetof(struct PhysicalConfigDedicated, csi_RS_Config_r10), + (ASN_TAG_CLASS_CONTEXT | (16 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSI_RS_Config_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-RS-Config-r10" + }, + { ATF_POINTER, 7, offsetof(struct PhysicalConfigDedicated, pucch_ConfigDedicated_v1020), + (ASN_TAG_CLASS_CONTEXT | (17 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUCCH_ConfigDedicated_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pucch-ConfigDedicated-v1020" + }, + { ATF_POINTER, 6, offsetof(struct PhysicalConfigDedicated, pusch_ConfigDedicated_v1020), + (ASN_TAG_CLASS_CONTEXT | (18 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_ConfigDedicated_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigDedicated-v1020" + }, + { ATF_POINTER, 5, offsetof(struct PhysicalConfigDedicated, schedulingRequestConfig_v1020), + (ASN_TAG_CLASS_CONTEXT | (19 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SchedulingRequestConfig_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "schedulingRequestConfig-v1020" + }, + { ATF_POINTER, 4, offsetof(struct PhysicalConfigDedicated, soundingRS_UL_ConfigDedicated_v1020), + (ASN_TAG_CLASS_CONTEXT | (20 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigDedicated_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigDedicated-v1020" + }, + { ATF_POINTER, 3, offsetof(struct PhysicalConfigDedicated, soundingRS_UL_ConfigDedicatedAperiodic_r10), + (ASN_TAG_CLASS_CONTEXT | (21 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigDedicatedAperiodic_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigDedicatedAperiodic-r10" + }, + { ATF_POINTER, 2, offsetof(struct PhysicalConfigDedicated, uplinkPowerControlDedicated_v1020), + (ASN_TAG_CLASS_CONTEXT | (22 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlDedicated_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlDedicated-v1020" + }, + { ATF_POINTER, 1, offsetof(struct PhysicalConfigDedicated, pusch_CAConfigDedicated_vlola), + (ASN_TAG_CLASS_CONTEXT | (23 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_CAConfigDedicated_vlola, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-CAConfigDedicated-vlola" + }, +}; +static int asn_MAP_PhysicalConfigDedicated_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; +static ber_tlv_tag_t asn_DEF_PhysicalConfigDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhysicalConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* pdsch-ConfigDedicated at 2136 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pucch-ConfigDedicated at 2137 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pusch-ConfigDedicated at 2138 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* uplinkPowerControlDedicated at 2139 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* tpc-PDCCH-ConfigPUCCH at 2140 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* tpc-PDCCH-ConfigPUSCH at 2141 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* cqi-ReportConfig at 2142 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* soundingRS-UL-ConfigDedicated at 2143 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* antennaInfo at 2145 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* schedulingRequestConfig at 2148 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* cqi-ReportConfig-v920 at 2149 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* antennaInfo-v920 at 2150 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* antennaInfo-r10 at 2152 */ + { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* antennaInfoUL-r10 at 2155 */ + { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* cif-Presence-r10 at 2156 */ + { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 }, /* cqi-ReportConfig-r10 at 2157 */ + { (ASN_TAG_CLASS_CONTEXT | (16 << 2)), 16, 0, 0 }, /* csi-RS-Config-r10 at 2158 */ + { (ASN_TAG_CLASS_CONTEXT | (17 << 2)), 17, 0, 0 }, /* pucch-ConfigDedicated-v1020 at 2159 */ + { (ASN_TAG_CLASS_CONTEXT | (18 << 2)), 18, 0, 0 }, /* pusch-ConfigDedicated-v1020 at 2160 */ + { (ASN_TAG_CLASS_CONTEXT | (19 << 2)), 19, 0, 0 }, /* schedulingRequestConfig-v1020 at 2161 */ + { (ASN_TAG_CLASS_CONTEXT | (20 << 2)), 20, 0, 0 }, /* soundingRS-UL-ConfigDedicated-v1020 at 2163 */ + { (ASN_TAG_CLASS_CONTEXT | (21 << 2)), 21, 0, 0 }, /* soundingRS-UL-ConfigDedicatedAperiodic-r10 at 2165 */ + { (ASN_TAG_CLASS_CONTEXT | (22 << 2)), 22, 0, 0 }, /* uplinkPowerControlDedicated-v1020 at 2166 */ + { (ASN_TAG_CLASS_CONTEXT | (23 << 2)), 23, 0, 0 } /* pusch-CAConfigDedicated-vlola at 2167 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhysicalConfigDedicated_specs_1 = { + sizeof(struct PhysicalConfigDedicated), + offsetof(struct PhysicalConfigDedicated, _asn_ctx), + asn_MAP_PhysicalConfigDedicated_tag2el_1, + 24, /* Count of tags in the map */ + asn_MAP_PhysicalConfigDedicated_oms_1, /* Optional members */ + 24, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysicalConfigDedicated = { + "PhysicalConfigDedicated", + "PhysicalConfigDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysicalConfigDedicated_tags_1, + sizeof(asn_DEF_PhysicalConfigDedicated_tags_1) + /sizeof(asn_DEF_PhysicalConfigDedicated_tags_1[0]), /* 1 */ + asn_DEF_PhysicalConfigDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysicalConfigDedicated_tags_1) + /sizeof(asn_DEF_PhysicalConfigDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhysicalConfigDedicated_1, + 24, /* Elements count */ + &asn_SPC_PhysicalConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysicalConfigDedicated.h b/lte/rrc/asn/PhysicalConfigDedicated.h new file mode 100644 index 000000000..c14aff355 --- /dev/null +++ b/lte/rrc/asn/PhysicalConfigDedicated.h @@ -0,0 +1,139 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysicalConfigDedicated_H_ +#define _PhysicalConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include "AntennaInfoDedicated.h" +#include +#include +#include "AntennaInfoDedicated-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PhysicalConfigDedicated__antennaInfo_PR { + PhysicalConfigDedicated__antennaInfo_PR_NOTHING, /* No components present */ + PhysicalConfigDedicated__antennaInfo_PR_explicitValue, + PhysicalConfigDedicated__antennaInfo_PR_defaultValue +} PhysicalConfigDedicated__antennaInfo_PR; +typedef enum PhysicalConfigDedicated__antennaInfo_r10_PR { + PhysicalConfigDedicated__antennaInfo_r10_PR_NOTHING, /* No components present */ + PhysicalConfigDedicated__antennaInfo_r10_PR_explicitValue_r10, + PhysicalConfigDedicated__antennaInfo_r10_PR_defaultValue +} PhysicalConfigDedicated__antennaInfo_r10_PR; + +/* Forward declarations */ +struct PDSCH_ConfigDedicated; +struct PUCCH_ConfigDedicated; +struct PUSCH_ConfigDedicated; +struct UplinkPowerControlDedicated; +struct TPC_PDCCH_Config; +struct CQI_ReportConfig; +struct SoundingRS_UL_ConfigDedicated; +struct SchedulingRequestConfig; +struct CQI_ReportConfig_v920; +struct AntennaInfoDedicated_v920; +struct AntennaInfoUL_r10; +struct CQI_ReportConfig_r10; +struct CSI_RS_Config_r10; +struct PUCCH_ConfigDedicated_v1020; +struct PUSCH_ConfigDedicated_v1020; +struct SchedulingRequestConfig_v1020; +struct SoundingRS_UL_ConfigDedicated_v1020; +struct SoundingRS_UL_ConfigDedicatedAperiodic_r10; +struct UplinkPowerControlDedicated_v1020; +struct PUSCH_CAConfigDedicated_vlola; + +/* PhysicalConfigDedicated */ +typedef struct PhysicalConfigDedicated { + struct PDSCH_ConfigDedicated *pdsch_ConfigDedicated /* OPTIONAL */; + struct PUCCH_ConfigDedicated *pucch_ConfigDedicated /* OPTIONAL */; + struct PUSCH_ConfigDedicated *pusch_ConfigDedicated /* OPTIONAL */; + struct UplinkPowerControlDedicated *uplinkPowerControlDedicated /* OPTIONAL */; + struct TPC_PDCCH_Config *tpc_PDCCH_ConfigPUCCH /* OPTIONAL */; + struct TPC_PDCCH_Config *tpc_PDCCH_ConfigPUSCH /* OPTIONAL */; + struct CQI_ReportConfig *cqi_ReportConfig /* OPTIONAL */; + struct SoundingRS_UL_ConfigDedicated *soundingRS_UL_ConfigDedicated /* OPTIONAL */; + struct PhysicalConfigDedicated__antennaInfo { + PhysicalConfigDedicated__antennaInfo_PR present; + union PhysicalConfigDedicated__antennaInfo_u { + AntennaInfoDedicated_t explicitValue; + NULL_t defaultValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *antennaInfo; + struct SchedulingRequestConfig *schedulingRequestConfig /* OPTIONAL */; + struct CQI_ReportConfig_v920 *cqi_ReportConfig_v920 /* OPTIONAL */; + struct AntennaInfoDedicated_v920 *antennaInfo_v920 /* OPTIONAL */; + struct PhysicalConfigDedicated__antennaInfo_r10 { + PhysicalConfigDedicated__antennaInfo_r10_PR present; + union PhysicalConfigDedicated__antennaInfo_r10_u { + AntennaInfoDedicated_r10_t explicitValue_r10; + NULL_t defaultValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *antennaInfo_r10; + struct AntennaInfoUL_r10 *antennaInfoUL_r10 /* OPTIONAL */; + BOOLEAN_t *cif_Presence_r10 /* OPTIONAL */; + struct CQI_ReportConfig_r10 *cqi_ReportConfig_r10 /* OPTIONAL */; + struct CSI_RS_Config_r10 *csi_RS_Config_r10 /* OPTIONAL */; + struct PUCCH_ConfigDedicated_v1020 *pucch_ConfigDedicated_v1020 /* OPTIONAL */; + struct PUSCH_ConfigDedicated_v1020 *pusch_ConfigDedicated_v1020 /* OPTIONAL */; + struct SchedulingRequestConfig_v1020 *schedulingRequestConfig_v1020 /* OPTIONAL */; + struct SoundingRS_UL_ConfigDedicated_v1020 *soundingRS_UL_ConfigDedicated_v1020 /* OPTIONAL */; + struct SoundingRS_UL_ConfigDedicatedAperiodic_r10 *soundingRS_UL_ConfigDedicatedAperiodic_r10 /* OPTIONAL */; + struct UplinkPowerControlDedicated_v1020 *uplinkPowerControlDedicated_v1020 /* OPTIONAL */; + struct PUSCH_CAConfigDedicated_vlola *pusch_CAConfigDedicated_vlola /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysicalConfigDedicated_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysicalConfigDedicated; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PDSCH-ConfigDedicated.h" +#include "PUCCH-ConfigDedicated.h" +#include "PUSCH-ConfigDedicated.h" +#include "UplinkPowerControlDedicated.h" +#include "TPC-PDCCH-Config.h" +#include "CQI-ReportConfig.h" +#include "SoundingRS-UL-ConfigDedicated.h" +#include "SchedulingRequestConfig.h" +#include "CQI-ReportConfig-v920.h" +#include "AntennaInfoDedicated-v920.h" +#include "AntennaInfoUL-r10.h" +#include "CQI-ReportConfig-r10.h" +#include "CSI-RS-Config-r10.h" +#include "PUCCH-ConfigDedicated-v1020.h" +#include "PUSCH-ConfigDedicated-v1020.h" +#include "SchedulingRequestConfig-v1020.h" +#include "SoundingRS-UL-ConfigDedicated-v1020.h" +#include "SoundingRS-UL-ConfigDedicatedAperiodic-r10.h" +#include "UplinkPowerControlDedicated-v1020.h" +#include "PUSCH-CAConfigDedicated-vlola.h" + +#endif /* _PhysicalConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.c b/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.c new file mode 100644 index 000000000..0f3cdf150 --- /dev/null +++ b/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.c @@ -0,0 +1,272 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PhysicalConfigDedicatedSCell-r10.h" + +static asn_TYPE_member_t asn_MBR_nonUL_Configuration_r10_2[] = { + { ATF_POINTER, 4, offsetof(struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10, antennaInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoDedicated_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfo-r10" + }, + { ATF_POINTER, 3, offsetof(struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10, crossCarrierSchedulingConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CrossCarrierSchedulingConfig_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "crossCarrierSchedulingConfig-r10" + }, + { ATF_POINTER, 2, offsetof(struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10, csi_RS_Config_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSI_RS_Config_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csi-RS-Config-r10" + }, + { ATF_POINTER, 1, offsetof(struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10, pdsch_ConfigDedicated_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDSCH_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdsch-ConfigDedicated-r10" + }, +}; +static int asn_MAP_nonUL_Configuration_r10_oms_2[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_nonUL_Configuration_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_nonUL_Configuration_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* antennaInfo-r10 at 2180 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* crossCarrierSchedulingConfig-r10 at 2181 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* csi-RS-Config-r10 at 2182 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* pdsch-ConfigDedicated-r10 at 2183 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonUL_Configuration_r10_specs_2 = { + sizeof(struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10), + offsetof(struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10, _asn_ctx), + asn_MAP_nonUL_Configuration_r10_tag2el_2, + 4, /* Count of tags in the map */ + asn_MAP_nonUL_Configuration_r10_oms_2, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonUL_Configuration_r10_2 = { + "nonUL-Configuration-r10", + "nonUL-Configuration-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonUL_Configuration_r10_tags_2, + sizeof(asn_DEF_nonUL_Configuration_r10_tags_2) + /sizeof(asn_DEF_nonUL_Configuration_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_nonUL_Configuration_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_nonUL_Configuration_r10_tags_2) + /sizeof(asn_DEF_nonUL_Configuration_r10_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_nonUL_Configuration_r10_2, + 4, /* Elements count */ + &asn_SPC_nonUL_Configuration_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ul_Configuration_r10_7[] = { + { ATF_POINTER, 7, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, antennaInfoUL_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoUL_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfoUL-r10" + }, + { ATF_POINTER, 6, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, pusch_ConfigDedicatedSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_ConfigDedicatedSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigDedicatedSCell-r10" + }, + { ATF_POINTER, 5, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, uplinkPowerControlDedicatedSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlDedicatedSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlDedicatedSCell-r10" + }, + { ATF_POINTER, 4, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, cqi_ReportConfigSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CQI_ReportConfigSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cqi-ReportConfigSCell-r10" + }, + { ATF_POINTER, 3, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, soundingRS_UL_ConfigDedicated_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigDedicated-r10" + }, + { ATF_POINTER, 2, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, soundingRS_UL_ConfigDedicated_v1020), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigDedicated_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigDedicated-v1020" + }, + { ATF_POINTER, 1, offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, soundingRS_UL_ConfigDedicatedAperiodic_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigDedicatedAperiodic_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigDedicatedAperiodic-r10" + }, +}; +static int asn_MAP_ul_Configuration_r10_oms_7[] = { 0, 1, 2, 3, 4, 5, 6 }; +static ber_tlv_tag_t asn_DEF_ul_Configuration_r10_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ul_Configuration_r10_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* antennaInfoUL-r10 at 2187 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pusch-ConfigDedicatedSCell-r10 at 2188 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uplinkPowerControlDedicatedSCell-r10 at 2189 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* cqi-ReportConfigSCell-r10 at 2190 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* soundingRS-UL-ConfigDedicated-r10 at 2191 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* soundingRS-UL-ConfigDedicated-v1020 at 2193 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* soundingRS-UL-ConfigDedicatedAperiodic-r10 at 2195 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ul_Configuration_r10_specs_7 = { + sizeof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10), + offsetof(struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10, _asn_ctx), + asn_MAP_ul_Configuration_r10_tag2el_7, + 7, /* Count of tags in the map */ + asn_MAP_ul_Configuration_r10_oms_7, /* Optional members */ + 7, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_Configuration_r10_7 = { + "ul-Configuration-r10", + "ul-Configuration-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_Configuration_r10_tags_7, + sizeof(asn_DEF_ul_Configuration_r10_tags_7) + /sizeof(asn_DEF_ul_Configuration_r10_tags_7[0]) - 1, /* 1 */ + asn_DEF_ul_Configuration_r10_tags_7, /* Same as above */ + sizeof(asn_DEF_ul_Configuration_r10_tags_7) + /sizeof(asn_DEF_ul_Configuration_r10_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ul_Configuration_r10_7, + 7, /* Elements count */ + &asn_SPC_ul_Configuration_r10_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_PhysicalConfigDedicatedSCell_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct PhysicalConfigDedicatedSCell_r10, nonUL_Configuration_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_nonUL_Configuration_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonUL-Configuration-r10" + }, + { ATF_POINTER, 1, offsetof(struct PhysicalConfigDedicatedSCell_r10, ul_Configuration_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ul_Configuration_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-Configuration-r10" + }, +}; +static int asn_MAP_PhysicalConfigDedicatedSCell_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PhysicalConfigDedicatedSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nonUL-Configuration-r10 at 2180 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ul-Configuration-r10 at 2187 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PhysicalConfigDedicatedSCell_r10_specs_1 = { + sizeof(struct PhysicalConfigDedicatedSCell_r10), + offsetof(struct PhysicalConfigDedicatedSCell_r10, _asn_ctx), + asn_MAP_PhysicalConfigDedicatedSCell_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_PhysicalConfigDedicatedSCell_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PhysicalConfigDedicatedSCell_r10 = { + "PhysicalConfigDedicatedSCell-r10", + "PhysicalConfigDedicatedSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1, + sizeof(asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_PhysicalConfigDedicatedSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PhysicalConfigDedicatedSCell_r10_1, + 2, /* Elements count */ + &asn_SPC_PhysicalConfigDedicatedSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h b/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h new file mode 100644 index 000000000..acd727ba6 --- /dev/null +++ b/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PhysicalConfigDedicatedSCell_r10_H_ +#define _PhysicalConfigDedicatedSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct AntennaInfoDedicated_r10; +struct CrossCarrierSchedulingConfig_r10; +struct CSI_RS_Config_r10; +struct PDSCH_ConfigDedicated; +struct AntennaInfoUL_r10; +struct PUSCH_ConfigDedicatedSCell_r10; +struct UplinkPowerControlDedicatedSCell_r10; +struct CQI_ReportConfigSCell_r10; +struct SoundingRS_UL_ConfigDedicated; +struct SoundingRS_UL_ConfigDedicated_v1020; +struct SoundingRS_UL_ConfigDedicatedAperiodic_r10; + +/* PhysicalConfigDedicatedSCell-r10 */ +typedef struct PhysicalConfigDedicatedSCell_r10 { + struct PhysicalConfigDedicatedSCell_r10__nonUL_Configuration_r10 { + struct AntennaInfoDedicated_r10 *antennaInfo_r10 /* OPTIONAL */; + struct CrossCarrierSchedulingConfig_r10 *crossCarrierSchedulingConfig_r10 /* OPTIONAL */; + struct CSI_RS_Config_r10 *csi_RS_Config_r10 /* OPTIONAL */; + struct PDSCH_ConfigDedicated *pdsch_ConfigDedicated_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonUL_Configuration_r10; + struct PhysicalConfigDedicatedSCell_r10__ul_Configuration_r10 { + struct AntennaInfoUL_r10 *antennaInfoUL_r10 /* OPTIONAL */; + struct PUSCH_ConfigDedicatedSCell_r10 *pusch_ConfigDedicatedSCell_r10 /* OPTIONAL */; + struct UplinkPowerControlDedicatedSCell_r10 *uplinkPowerControlDedicatedSCell_r10 /* OPTIONAL */; + struct CQI_ReportConfigSCell_r10 *cqi_ReportConfigSCell_r10 /* OPTIONAL */; + struct SoundingRS_UL_ConfigDedicated *soundingRS_UL_ConfigDedicated_r10 /* OPTIONAL */; + struct SoundingRS_UL_ConfigDedicated_v1020 *soundingRS_UL_ConfigDedicated_v1020 /* OPTIONAL */; + struct SoundingRS_UL_ConfigDedicatedAperiodic_r10 *soundingRS_UL_ConfigDedicatedAperiodic_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ul_Configuration_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PhysicalConfigDedicatedSCell_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PhysicalConfigDedicatedSCell_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "AntennaInfoDedicated-r10.h" +#include "CrossCarrierSchedulingConfig-r10.h" +#include "CSI-RS-Config-r10.h" +#include "PDSCH-ConfigDedicated.h" +#include "AntennaInfoUL-r10.h" +#include "PUSCH-ConfigDedicatedSCell-r10.h" +#include "UplinkPowerControlDedicatedSCell-r10.h" +#include "CQI-ReportConfigSCell-r10.h" +#include "SoundingRS-UL-ConfigDedicated.h" +#include "SoundingRS-UL-ConfigDedicated-v1020.h" +#include "SoundingRS-UL-ConfigDedicatedAperiodic-r10.h" + +#endif /* _PhysicalConfigDedicatedSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/PollByte.c b/lte/rrc/asn/PollByte.c new file mode 100644 index 000000000..f5afefd28 --- /dev/null +++ b/lte/rrc/asn/PollByte.c @@ -0,0 +1,174 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PollByte.h" + +int +PollByte_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +PollByte_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +PollByte_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PollByte_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PollByte_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PollByte_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PollByte_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PollByte_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PollByte_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PollByte_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PollByte_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PollByte_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PollByte_constr_1 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_PollByte_value2enum_1[] = { + { 0, 4, "kB25" }, + { 1, 4, "kB50" }, + { 2, 4, "kB75" }, + { 3, 5, "kB100" }, + { 4, 5, "kB125" }, + { 5, 5, "kB250" }, + { 6, 5, "kB375" }, + { 7, 5, "kB500" }, + { 8, 5, "kB750" }, + { 9, 6, "kB1000" }, + { 10, 6, "kB1250" }, + { 11, 6, "kB1500" }, + { 12, 6, "kB2000" }, + { 13, 6, "kB3000" }, + { 14, 10, "kBinfinity" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_PollByte_enum2value_1[] = { + 3, /* kB100(3) */ + 9, /* kB1000(9) */ + 4, /* kB125(4) */ + 10, /* kB1250(10) */ + 11, /* kB1500(11) */ + 12, /* kB2000(12) */ + 0, /* kB25(0) */ + 5, /* kB250(5) */ + 13, /* kB3000(13) */ + 6, /* kB375(6) */ + 1, /* kB50(1) */ + 7, /* kB500(7) */ + 2, /* kB75(2) */ + 8, /* kB750(8) */ + 14, /* kBinfinity(14) */ + 15 /* spare1(15) */ +}; +static asn_INTEGER_specifics_t asn_SPC_PollByte_specs_1 = { + asn_MAP_PollByte_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PollByte_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_PollByte_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PollByte = { + "PollByte", + "PollByte", + PollByte_free, + PollByte_print, + PollByte_constraint, + PollByte_decode_ber, + PollByte_encode_der, + PollByte_decode_xer, + PollByte_encode_xer, + PollByte_decode_uper, + PollByte_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PollByte_tags_1, + sizeof(asn_DEF_PollByte_tags_1) + /sizeof(asn_DEF_PollByte_tags_1[0]), /* 1 */ + asn_DEF_PollByte_tags_1, /* Same as above */ + sizeof(asn_DEF_PollByte_tags_1) + /sizeof(asn_DEF_PollByte_tags_1[0]), /* 1 */ + &asn_PER_type_PollByte_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PollByte_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PollByte.h b/lte/rrc/asn/PollByte.h new file mode 100644 index 000000000..bd815c4a7 --- /dev/null +++ b/lte/rrc/asn/PollByte.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PollByte_H_ +#define _PollByte_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PollByte { + PollByte_kB25 = 0, + PollByte_kB50 = 1, + PollByte_kB75 = 2, + PollByte_kB100 = 3, + PollByte_kB125 = 4, + PollByte_kB250 = 5, + PollByte_kB375 = 6, + PollByte_kB500 = 7, + PollByte_kB750 = 8, + PollByte_kB1000 = 9, + PollByte_kB1250 = 10, + PollByte_kB1500 = 11, + PollByte_kB2000 = 12, + PollByte_kB3000 = 13, + PollByte_kBinfinity = 14, + PollByte_spare1 = 15 +} e_PollByte; + +/* PollByte */ +typedef long PollByte_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PollByte; +asn_struct_free_f PollByte_free; +asn_struct_print_f PollByte_print; +asn_constr_check_f PollByte_constraint; +ber_type_decoder_f PollByte_decode_ber; +der_type_encoder_f PollByte_encode_der; +xer_type_decoder_f PollByte_decode_xer; +xer_type_encoder_f PollByte_encode_xer; +per_type_decoder_f PollByte_decode_uper; +per_type_encoder_f PollByte_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PollByte_H_ */ +#include diff --git a/lte/rrc/asn/PollPDU.c b/lte/rrc/asn/PollPDU.c new file mode 100644 index 000000000..9c20e784f --- /dev/null +++ b/lte/rrc/asn/PollPDU.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PollPDU.h" + +int +PollPDU_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +PollPDU_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +PollPDU_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PollPDU_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PollPDU_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PollPDU_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PollPDU_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PollPDU_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PollPDU_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PollPDU_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PollPDU_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PollPDU_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PollPDU_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_PollPDU_value2enum_1[] = { + { 0, 2, "p4" }, + { 1, 2, "p8" }, + { 2, 3, "p16" }, + { 3, 3, "p32" }, + { 4, 3, "p64" }, + { 5, 4, "p128" }, + { 6, 4, "p256" }, + { 7, 9, "pInfinity" } +}; +static unsigned int asn_MAP_PollPDU_enum2value_1[] = { + 5, /* p128(5) */ + 2, /* p16(2) */ + 6, /* p256(6) */ + 3, /* p32(3) */ + 0, /* p4(0) */ + 4, /* p64(4) */ + 1, /* p8(1) */ + 7 /* pInfinity(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_PollPDU_specs_1 = { + asn_MAP_PollPDU_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_PollPDU_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_PollPDU_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PollPDU = { + "PollPDU", + "PollPDU", + PollPDU_free, + PollPDU_print, + PollPDU_constraint, + PollPDU_decode_ber, + PollPDU_encode_der, + PollPDU_decode_xer, + PollPDU_encode_xer, + PollPDU_decode_uper, + PollPDU_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PollPDU_tags_1, + sizeof(asn_DEF_PollPDU_tags_1) + /sizeof(asn_DEF_PollPDU_tags_1[0]), /* 1 */ + asn_DEF_PollPDU_tags_1, /* Same as above */ + sizeof(asn_DEF_PollPDU_tags_1) + /sizeof(asn_DEF_PollPDU_tags_1[0]), /* 1 */ + &asn_PER_type_PollPDU_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_PollPDU_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PollPDU.h b/lte/rrc/asn/PollPDU.h new file mode 100644 index 000000000..214339ee9 --- /dev/null +++ b/lte/rrc/asn/PollPDU.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PollPDU_H_ +#define _PollPDU_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum PollPDU { + PollPDU_p4 = 0, + PollPDU_p8 = 1, + PollPDU_p16 = 2, + PollPDU_p32 = 3, + PollPDU_p64 = 4, + PollPDU_p128 = 5, + PollPDU_p256 = 6, + PollPDU_pInfinity = 7 +} e_PollPDU; + +/* PollPDU */ +typedef long PollPDU_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PollPDU; +asn_struct_free_f PollPDU_free; +asn_struct_print_f PollPDU_print; +asn_constr_check_f PollPDU_constraint; +ber_type_decoder_f PollPDU_decode_ber; +der_type_encoder_f PollPDU_encode_der; +xer_type_decoder_f PollPDU_decode_xer; +xer_type_encoder_f PollPDU_encode_xer; +per_type_decoder_f PollPDU_decode_uper; +per_type_encoder_f PollPDU_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PollPDU_H_ */ +#include diff --git a/lte/rrc/asn/PreRegistrationInfoHRPD.c b/lte/rrc/asn/PreRegistrationInfoHRPD.c new file mode 100644 index 000000000..1fcc9d2c3 --- /dev/null +++ b/lte/rrc/asn/PreRegistrationInfoHRPD.c @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PreRegistrationInfoHRPD.h" + +static asn_TYPE_member_t asn_MBR_PreRegistrationInfoHRPD_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct PreRegistrationInfoHRPD, preRegistrationAllowed), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preRegistrationAllowed" + }, + { ATF_POINTER, 2, offsetof(struct PreRegistrationInfoHRPD, preRegistrationZoneId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PreRegistrationZoneIdHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preRegistrationZoneId" + }, + { ATF_POINTER, 1, offsetof(struct PreRegistrationInfoHRPD, secondaryPreRegistrationZoneIdList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecondaryPreRegistrationZoneIdListHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "secondaryPreRegistrationZoneIdList" + }, +}; +static int asn_MAP_PreRegistrationInfoHRPD_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_PreRegistrationInfoHRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_PreRegistrationInfoHRPD_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* preRegistrationAllowed at 3087 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* preRegistrationZoneId at 3088 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* secondaryPreRegistrationZoneIdList at 3089 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_PreRegistrationInfoHRPD_specs_1 = { + sizeof(struct PreRegistrationInfoHRPD), + offsetof(struct PreRegistrationInfoHRPD, _asn_ctx), + asn_MAP_PreRegistrationInfoHRPD_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_PreRegistrationInfoHRPD_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_PreRegistrationInfoHRPD = { + "PreRegistrationInfoHRPD", + "PreRegistrationInfoHRPD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PreRegistrationInfoHRPD_tags_1, + sizeof(asn_DEF_PreRegistrationInfoHRPD_tags_1) + /sizeof(asn_DEF_PreRegistrationInfoHRPD_tags_1[0]), /* 1 */ + asn_DEF_PreRegistrationInfoHRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_PreRegistrationInfoHRPD_tags_1) + /sizeof(asn_DEF_PreRegistrationInfoHRPD_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_PreRegistrationInfoHRPD_1, + 3, /* Elements count */ + &asn_SPC_PreRegistrationInfoHRPD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/PreRegistrationInfoHRPD.h b/lte/rrc/asn/PreRegistrationInfoHRPD.h new file mode 100644 index 000000000..98e374572 --- /dev/null +++ b/lte/rrc/asn/PreRegistrationInfoHRPD.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PreRegistrationInfoHRPD_H_ +#define _PreRegistrationInfoHRPD_H_ + + +#include + +/* Including external dependencies */ +#include +#include "PreRegistrationZoneIdHRPD.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SecondaryPreRegistrationZoneIdListHRPD; + +/* PreRegistrationInfoHRPD */ +typedef struct PreRegistrationInfoHRPD { + BOOLEAN_t preRegistrationAllowed; + PreRegistrationZoneIdHRPD_t *preRegistrationZoneId /* OPTIONAL */; + struct SecondaryPreRegistrationZoneIdListHRPD *secondaryPreRegistrationZoneIdList /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} PreRegistrationInfoHRPD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PreRegistrationInfoHRPD; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SecondaryPreRegistrationZoneIdListHRPD.h" + +#endif /* _PreRegistrationInfoHRPD_H_ */ +#include diff --git a/lte/rrc/asn/PreRegistrationZoneIdHRPD.c b/lte/rrc/asn/PreRegistrationZoneIdHRPD.c new file mode 100644 index 000000000..0ac602268 --- /dev/null +++ b/lte/rrc/asn/PreRegistrationZoneIdHRPD.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PreRegistrationZoneIdHRPD.h" + +int +PreRegistrationZoneIdHRPD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 255)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +PreRegistrationZoneIdHRPD_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PreRegistrationZoneIdHRPD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PreRegistrationZoneIdHRPD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PreRegistrationZoneIdHRPD_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PreRegistrationZoneIdHRPD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PreRegistrationZoneIdHRPD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PreRegistrationZoneIdHRPD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PreRegistrationZoneIdHRPD_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PreRegistrationZoneIdHRPD_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_PreRegistrationZoneIdHRPD_constr_1 = { + { APC_CONSTRAINED, 8, 8, 0, 255 } /* (0..255) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_PreRegistrationZoneIdHRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PreRegistrationZoneIdHRPD = { + "PreRegistrationZoneIdHRPD", + "PreRegistrationZoneIdHRPD", + PreRegistrationZoneIdHRPD_free, + PreRegistrationZoneIdHRPD_print, + PreRegistrationZoneIdHRPD_constraint, + PreRegistrationZoneIdHRPD_decode_ber, + PreRegistrationZoneIdHRPD_encode_der, + PreRegistrationZoneIdHRPD_decode_xer, + PreRegistrationZoneIdHRPD_encode_xer, + PreRegistrationZoneIdHRPD_decode_uper, + PreRegistrationZoneIdHRPD_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PreRegistrationZoneIdHRPD_tags_1, + sizeof(asn_DEF_PreRegistrationZoneIdHRPD_tags_1) + /sizeof(asn_DEF_PreRegistrationZoneIdHRPD_tags_1[0]), /* 1 */ + asn_DEF_PreRegistrationZoneIdHRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_PreRegistrationZoneIdHRPD_tags_1) + /sizeof(asn_DEF_PreRegistrationZoneIdHRPD_tags_1[0]), /* 1 */ + &asn_PER_type_PreRegistrationZoneIdHRPD_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/PreRegistrationZoneIdHRPD.h b/lte/rrc/asn/PreRegistrationZoneIdHRPD.h new file mode 100644 index 000000000..8cf0111a5 --- /dev/null +++ b/lte/rrc/asn/PreRegistrationZoneIdHRPD.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PreRegistrationZoneIdHRPD_H_ +#define _PreRegistrationZoneIdHRPD_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PreRegistrationZoneIdHRPD */ +typedef long PreRegistrationZoneIdHRPD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PreRegistrationZoneIdHRPD; +asn_struct_free_f PreRegistrationZoneIdHRPD_free; +asn_struct_print_f PreRegistrationZoneIdHRPD_print; +asn_constr_check_f PreRegistrationZoneIdHRPD_constraint; +ber_type_decoder_f PreRegistrationZoneIdHRPD_decode_ber; +der_type_encoder_f PreRegistrationZoneIdHRPD_encode_der; +xer_type_decoder_f PreRegistrationZoneIdHRPD_decode_xer; +xer_type_encoder_f PreRegistrationZoneIdHRPD_encode_xer; +per_type_decoder_f PreRegistrationZoneIdHRPD_decode_uper; +per_type_encoder_f PreRegistrationZoneIdHRPD_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PreRegistrationZoneIdHRPD_H_ */ +#include diff --git a/lte/rrc/asn/PresenceAntennaPort1.c b/lte/rrc/asn/PresenceAntennaPort1.c new file mode 100644 index 000000000..fe6cc7d2f --- /dev/null +++ b/lte/rrc/asn/PresenceAntennaPort1.c @@ -0,0 +1,124 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "PresenceAntennaPort1.h" + +int +PresenceAntennaPort1_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_BOOLEAN.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using BOOLEAN, + * so here we adjust the DEF accordingly. + */ +static void +PresenceAntennaPort1_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BOOLEAN.free_struct; + td->print_struct = asn_DEF_BOOLEAN.print_struct; + td->ber_decoder = asn_DEF_BOOLEAN.ber_decoder; + td->der_encoder = asn_DEF_BOOLEAN.der_encoder; + td->xer_decoder = asn_DEF_BOOLEAN.xer_decoder; + td->xer_encoder = asn_DEF_BOOLEAN.xer_encoder; + td->uper_decoder = asn_DEF_BOOLEAN.uper_decoder; + td->uper_encoder = asn_DEF_BOOLEAN.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BOOLEAN.per_constraints; + td->elements = asn_DEF_BOOLEAN.elements; + td->elements_count = asn_DEF_BOOLEAN.elements_count; + td->specifics = asn_DEF_BOOLEAN.specifics; +} + +void +PresenceAntennaPort1_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +PresenceAntennaPort1_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +PresenceAntennaPort1_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +PresenceAntennaPort1_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +PresenceAntennaPort1_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +PresenceAntennaPort1_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +PresenceAntennaPort1_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +PresenceAntennaPort1_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + PresenceAntennaPort1_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static ber_tlv_tag_t asn_DEF_PresenceAntennaPort1_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_PresenceAntennaPort1 = { + "PresenceAntennaPort1", + "PresenceAntennaPort1", + PresenceAntennaPort1_free, + PresenceAntennaPort1_print, + PresenceAntennaPort1_constraint, + PresenceAntennaPort1_decode_ber, + PresenceAntennaPort1_encode_der, + PresenceAntennaPort1_decode_xer, + PresenceAntennaPort1_encode_xer, + PresenceAntennaPort1_decode_uper, + PresenceAntennaPort1_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_PresenceAntennaPort1_tags_1, + sizeof(asn_DEF_PresenceAntennaPort1_tags_1) + /sizeof(asn_DEF_PresenceAntennaPort1_tags_1[0]), /* 1 */ + asn_DEF_PresenceAntennaPort1_tags_1, /* Same as above */ + sizeof(asn_DEF_PresenceAntennaPort1_tags_1) + /sizeof(asn_DEF_PresenceAntennaPort1_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/PresenceAntennaPort1.h b/lte/rrc/asn/PresenceAntennaPort1.h new file mode 100644 index 000000000..d130aa726 --- /dev/null +++ b/lte/rrc/asn/PresenceAntennaPort1.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _PresenceAntennaPort1_H_ +#define _PresenceAntennaPort1_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* PresenceAntennaPort1 */ +typedef BOOLEAN_t PresenceAntennaPort1_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_PresenceAntennaPort1; +asn_struct_free_f PresenceAntennaPort1_free; +asn_struct_print_f PresenceAntennaPort1_print; +asn_constr_check_f PresenceAntennaPort1_constraint; +ber_type_decoder_f PresenceAntennaPort1_decode_ber; +der_type_encoder_f PresenceAntennaPort1_encode_der; +xer_type_decoder_f PresenceAntennaPort1_decode_xer; +xer_type_encoder_f PresenceAntennaPort1_encode_xer; +per_type_decoder_f PresenceAntennaPort1_decode_uper; +per_type_encoder_f PresenceAntennaPort1_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _PresenceAntennaPort1_H_ */ +#include diff --git a/lte/rrc/asn/ProximityIndication-r9-IEs.c b/lte/rrc/asn/ProximityIndication-r9-IEs.c new file mode 100644 index 000000000..d7b8a9e87 --- /dev/null +++ b/lte/rrc/asn/ProximityIndication-r9-IEs.c @@ -0,0 +1,284 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ProximityIndication-r9-IEs.h" + +static int +type_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +type_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +type_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + type_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +type_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +type_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +type_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +type_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +type_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +type_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +type_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + type_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_type_r9_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_carrierFreq_r9_constr_5 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_type_r9_value2enum_2[] = { + { 0, 8, "entering" }, + { 1, 7, "leaving" } +}; +static unsigned int asn_MAP_type_r9_enum2value_2[] = { + 0, /* entering(0) */ + 1 /* leaving(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_type_r9_specs_2 = { + asn_MAP_type_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_type_r9_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_type_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_type_r9_2 = { + "type-r9", + "type-r9", + type_r9_2_free, + type_r9_2_print, + type_r9_2_constraint, + type_r9_2_decode_ber, + type_r9_2_encode_der, + type_r9_2_decode_xer, + type_r9_2_encode_xer, + type_r9_2_decode_uper, + type_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_type_r9_tags_2, + sizeof(asn_DEF_type_r9_tags_2) + /sizeof(asn_DEF_type_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_type_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_type_r9_tags_2) + /sizeof(asn_DEF_type_r9_tags_2[0]), /* 2 */ + &asn_PER_type_type_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_type_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_carrierFreq_r9_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9_IEs__carrierFreq_r9, choice.eutra_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eutra-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9_IEs__carrierFreq_r9, choice.utra_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-r9" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_carrierFreq_r9_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eutra-r9 at 573 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* utra-r9 at 574 */ +}; +static asn_CHOICE_specifics_t asn_SPC_carrierFreq_r9_specs_5 = { + sizeof(struct ProximityIndication_r9_IEs__carrierFreq_r9), + offsetof(struct ProximityIndication_r9_IEs__carrierFreq_r9, _asn_ctx), + offsetof(struct ProximityIndication_r9_IEs__carrierFreq_r9, present), + sizeof(((struct ProximityIndication_r9_IEs__carrierFreq_r9 *)0)->present), + asn_MAP_carrierFreq_r9_tag2el_5, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_carrierFreq_r9_5 = { + "carrierFreq-r9", + "carrierFreq-r9", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_carrierFreq_r9_constr_5, + asn_MBR_carrierFreq_r9_5, + 2, /* Elements count */ + &asn_SPC_carrierFreq_r9_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ProximityIndication_r9_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9_IEs, type_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_type_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "type-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9_IEs, carrierFreq_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_carrierFreq_r9_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r9" + }, + { ATF_POINTER, 1, offsetof(struct ProximityIndication_r9_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProximityIndication_v930_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_ProximityIndication_r9_IEs_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_ProximityIndication_r9_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ProximityIndication_r9_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* type-r9 at 571 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreq-r9 at 573 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 577 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ProximityIndication_r9_IEs_specs_1 = { + sizeof(struct ProximityIndication_r9_IEs), + offsetof(struct ProximityIndication_r9_IEs, _asn_ctx), + asn_MAP_ProximityIndication_r9_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ProximityIndication_r9_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ProximityIndication_r9_IEs = { + "ProximityIndication-r9-IEs", + "ProximityIndication-r9-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ProximityIndication_r9_IEs_tags_1, + sizeof(asn_DEF_ProximityIndication_r9_IEs_tags_1) + /sizeof(asn_DEF_ProximityIndication_r9_IEs_tags_1[0]), /* 1 */ + asn_DEF_ProximityIndication_r9_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_ProximityIndication_r9_IEs_tags_1) + /sizeof(asn_DEF_ProximityIndication_r9_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ProximityIndication_r9_IEs_1, + 3, /* Elements count */ + &asn_SPC_ProximityIndication_r9_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ProximityIndication-r9-IEs.h b/lte/rrc/asn/ProximityIndication-r9-IEs.h new file mode 100644 index 000000000..8a0c1c678 --- /dev/null +++ b/lte/rrc/asn/ProximityIndication-r9-IEs.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ProximityIndication_r9_IEs_H_ +#define _ProximityIndication_r9_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include "ARFCN-ValueEUTRA.h" +#include "ARFCN-ValueUTRA.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ProximityIndication_r9_IEs__type_r9 { + ProximityIndication_r9_IEs__type_r9_entering = 0, + ProximityIndication_r9_IEs__type_r9_leaving = 1 +} e_ProximityIndication_r9_IEs__type_r9; +typedef enum ProximityIndication_r9_IEs__carrierFreq_r9_PR { + ProximityIndication_r9_IEs__carrierFreq_r9_PR_NOTHING, /* No components present */ + ProximityIndication_r9_IEs__carrierFreq_r9_PR_eutra_r9, + ProximityIndication_r9_IEs__carrierFreq_r9_PR_utra_r9, + /* Extensions may appear below */ + +} ProximityIndication_r9_IEs__carrierFreq_r9_PR; + +/* Forward declarations */ +struct ProximityIndication_v930_IEs; + +/* ProximityIndication-r9-IEs */ +typedef struct ProximityIndication_r9_IEs { + long type_r9; + struct ProximityIndication_r9_IEs__carrierFreq_r9 { + ProximityIndication_r9_IEs__carrierFreq_r9_PR present; + union ProximityIndication_r9_IEs__carrierFreq_r9_u { + ARFCN_ValueEUTRA_t eutra_r9; + ARFCN_ValueUTRA_t utra_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } carrierFreq_r9; + struct ProximityIndication_v930_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProximityIndication_r9_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_type_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_ProximityIndication_r9_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ProximityIndication-v930-IEs.h" + +#endif /* _ProximityIndication_r9_IEs_H_ */ +#include diff --git a/lte/rrc/asn/ProximityIndication-r9.c b/lte/rrc/asn/ProximityIndication-r9.c new file mode 100644 index 000000000..c75c16468 --- /dev/null +++ b/lte/rrc/asn/ProximityIndication-r9.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ProximityIndication-r9.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9__criticalExtensions__c1, choice.proximityIndication_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProximityIndication_r9_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "proximityIndication-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* proximityIndication-r9 at 563 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 564 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 564 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 564 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct ProximityIndication_r9__criticalExtensions__c1), + offsetof(struct ProximityIndication_r9__criticalExtensions__c1, _asn_ctx), + offsetof(struct ProximityIndication_r9__criticalExtensions__c1, present), + sizeof(((struct ProximityIndication_r9__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct ProximityIndication_r9__criticalExtensions__criticalExtensionsFuture), + offsetof(struct ProximityIndication_r9__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 563 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 566 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct ProximityIndication_r9__criticalExtensions), + offsetof(struct ProximityIndication_r9__criticalExtensions, _asn_ctx), + offsetof(struct ProximityIndication_r9__criticalExtensions, present), + sizeof(((struct ProximityIndication_r9__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ProximityIndication_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ProximityIndication_r9, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_ProximityIndication_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ProximityIndication_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 565 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ProximityIndication_r9_specs_1 = { + sizeof(struct ProximityIndication_r9), + offsetof(struct ProximityIndication_r9, _asn_ctx), + asn_MAP_ProximityIndication_r9_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ProximityIndication_r9 = { + "ProximityIndication-r9", + "ProximityIndication-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ProximityIndication_r9_tags_1, + sizeof(asn_DEF_ProximityIndication_r9_tags_1) + /sizeof(asn_DEF_ProximityIndication_r9_tags_1[0]), /* 1 */ + asn_DEF_ProximityIndication_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_ProximityIndication_r9_tags_1) + /sizeof(asn_DEF_ProximityIndication_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ProximityIndication_r9_1, + 1, /* Elements count */ + &asn_SPC_ProximityIndication_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ProximityIndication-r9.h b/lte/rrc/asn/ProximityIndication-r9.h new file mode 100644 index 000000000..551ac1ce6 --- /dev/null +++ b/lte/rrc/asn/ProximityIndication-r9.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ProximityIndication_r9_H_ +#define _ProximityIndication_r9_H_ + + +#include + +/* Including external dependencies */ +#include "ProximityIndication-r9-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ProximityIndication_r9__criticalExtensions_PR { + ProximityIndication_r9__criticalExtensions_PR_NOTHING, /* No components present */ + ProximityIndication_r9__criticalExtensions_PR_c1, + ProximityIndication_r9__criticalExtensions_PR_criticalExtensionsFuture +} ProximityIndication_r9__criticalExtensions_PR; +typedef enum ProximityIndication_r9__criticalExtensions__c1_PR { + ProximityIndication_r9__criticalExtensions__c1_PR_NOTHING, /* No components present */ + ProximityIndication_r9__criticalExtensions__c1_PR_proximityIndication_r9, + ProximityIndication_r9__criticalExtensions__c1_PR_spare3, + ProximityIndication_r9__criticalExtensions__c1_PR_spare2, + ProximityIndication_r9__criticalExtensions__c1_PR_spare1 +} ProximityIndication_r9__criticalExtensions__c1_PR; + +/* ProximityIndication-r9 */ +typedef struct ProximityIndication_r9 { + struct ProximityIndication_r9__criticalExtensions { + ProximityIndication_r9__criticalExtensions_PR present; + union ProximityIndication_r9__criticalExtensions_u { + struct ProximityIndication_r9__criticalExtensions__c1 { + ProximityIndication_r9__criticalExtensions__c1_PR present; + union ProximityIndication_r9__criticalExtensions__c1_u { + ProximityIndication_r9_IEs_t proximityIndication_r9; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct ProximityIndication_r9__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProximityIndication_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProximityIndication_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProximityIndication_r9_H_ */ +#include diff --git a/lte/rrc/asn/ProximityIndication-v930-IEs.c b/lte/rrc/asn/ProximityIndication-v930-IEs.c new file mode 100644 index 000000000..9d2954b4a --- /dev/null +++ b/lte/rrc/asn/ProximityIndication-v930-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ProximityIndication-v930-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct ProximityIndication_v930_IEs__nonCriticalExtension), + offsetof(struct ProximityIndication_v930_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ProximityIndication_v930_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct ProximityIndication_v930_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct ProximityIndication_v930_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_ProximityIndication_v930_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_ProximityIndication_v930_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ProximityIndication_v930_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 581 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 582 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ProximityIndication_v930_IEs_specs_1 = { + sizeof(struct ProximityIndication_v930_IEs), + offsetof(struct ProximityIndication_v930_IEs, _asn_ctx), + asn_MAP_ProximityIndication_v930_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ProximityIndication_v930_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ProximityIndication_v930_IEs = { + "ProximityIndication-v930-IEs", + "ProximityIndication-v930-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ProximityIndication_v930_IEs_tags_1, + sizeof(asn_DEF_ProximityIndication_v930_IEs_tags_1) + /sizeof(asn_DEF_ProximityIndication_v930_IEs_tags_1[0]), /* 1 */ + asn_DEF_ProximityIndication_v930_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_ProximityIndication_v930_IEs_tags_1) + /sizeof(asn_DEF_ProximityIndication_v930_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ProximityIndication_v930_IEs_1, + 2, /* Elements count */ + &asn_SPC_ProximityIndication_v930_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ProximityIndication-v930-IEs.h b/lte/rrc/asn/ProximityIndication-v930-IEs.h new file mode 100644 index 000000000..a7a59503f --- /dev/null +++ b/lte/rrc/asn/ProximityIndication-v930-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ProximityIndication_v930_IEs_H_ +#define _ProximityIndication_v930_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ProximityIndication-v930-IEs */ +typedef struct ProximityIndication_v930_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct ProximityIndication_v930_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ProximityIndication_v930_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ProximityIndication_v930_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _ProximityIndication_v930_IEs_H_ */ +#include diff --git a/lte/rrc/asn/Q-OffsetRange.c b/lte/rrc/asn/Q-OffsetRange.c new file mode 100644 index 000000000..4dc643739 --- /dev/null +++ b/lte/rrc/asn/Q-OffsetRange.c @@ -0,0 +1,204 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Q-OffsetRange.h" + +int +Q_OffsetRange_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +Q_OffsetRange_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +Q_OffsetRange_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +Q_OffsetRange_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +Q_OffsetRange_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +Q_OffsetRange_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +Q_OffsetRange_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +Q_OffsetRange_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +Q_OffsetRange_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +Q_OffsetRange_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + Q_OffsetRange_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_Q_OffsetRange_constr_1 = { + { APC_CONSTRAINED, 5, 5, 0, 30 } /* (0..30) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_Q_OffsetRange_value2enum_1[] = { + { 0, 5, "dB-24" }, + { 1, 5, "dB-22" }, + { 2, 5, "dB-20" }, + { 3, 5, "dB-18" }, + { 4, 5, "dB-16" }, + { 5, 5, "dB-14" }, + { 6, 5, "dB-12" }, + { 7, 5, "dB-10" }, + { 8, 4, "dB-8" }, + { 9, 4, "dB-6" }, + { 10, 4, "dB-5" }, + { 11, 4, "dB-4" }, + { 12, 4, "dB-3" }, + { 13, 4, "dB-2" }, + { 14, 4, "dB-1" }, + { 15, 3, "dB0" }, + { 16, 3, "dB1" }, + { 17, 3, "dB2" }, + { 18, 3, "dB3" }, + { 19, 3, "dB4" }, + { 20, 3, "dB5" }, + { 21, 3, "dB6" }, + { 22, 3, "dB8" }, + { 23, 4, "dB10" }, + { 24, 4, "dB12" }, + { 25, 4, "dB14" }, + { 26, 4, "dB16" }, + { 27, 4, "dB18" }, + { 28, 4, "dB20" }, + { 29, 4, "dB22" }, + { 30, 4, "dB24" } +}; +static unsigned int asn_MAP_Q_OffsetRange_enum2value_1[] = { + 14, /* dB-1(14) */ + 7, /* dB-10(7) */ + 6, /* dB-12(6) */ + 5, /* dB-14(5) */ + 4, /* dB-16(4) */ + 3, /* dB-18(3) */ + 13, /* dB-2(13) */ + 2, /* dB-20(2) */ + 1, /* dB-22(1) */ + 0, /* dB-24(0) */ + 12, /* dB-3(12) */ + 11, /* dB-4(11) */ + 10, /* dB-5(10) */ + 9, /* dB-6(9) */ + 8, /* dB-8(8) */ + 15, /* dB0(15) */ + 16, /* dB1(16) */ + 23, /* dB10(23) */ + 24, /* dB12(24) */ + 25, /* dB14(25) */ + 26, /* dB16(26) */ + 27, /* dB18(27) */ + 17, /* dB2(17) */ + 28, /* dB20(28) */ + 29, /* dB22(29) */ + 30, /* dB24(30) */ + 18, /* dB3(18) */ + 19, /* dB4(19) */ + 20, /* dB5(20) */ + 21, /* dB6(21) */ + 22 /* dB8(22) */ +}; +static asn_INTEGER_specifics_t asn_SPC_Q_OffsetRange_specs_1 = { + asn_MAP_Q_OffsetRange_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_Q_OffsetRange_enum2value_1, /* N => "tag"; sorted by N */ + 31, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_Q_OffsetRange_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Q_OffsetRange = { + "Q-OffsetRange", + "Q-OffsetRange", + Q_OffsetRange_free, + Q_OffsetRange_print, + Q_OffsetRange_constraint, + Q_OffsetRange_decode_ber, + Q_OffsetRange_encode_der, + Q_OffsetRange_decode_xer, + Q_OffsetRange_encode_xer, + Q_OffsetRange_decode_uper, + Q_OffsetRange_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Q_OffsetRange_tags_1, + sizeof(asn_DEF_Q_OffsetRange_tags_1) + /sizeof(asn_DEF_Q_OffsetRange_tags_1[0]), /* 1 */ + asn_DEF_Q_OffsetRange_tags_1, /* Same as above */ + sizeof(asn_DEF_Q_OffsetRange_tags_1) + /sizeof(asn_DEF_Q_OffsetRange_tags_1[0]), /* 1 */ + &asn_PER_type_Q_OffsetRange_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_Q_OffsetRange_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/Q-OffsetRange.h b/lte/rrc/asn/Q-OffsetRange.h new file mode 100644 index 000000000..12d78d102 --- /dev/null +++ b/lte/rrc/asn/Q-OffsetRange.h @@ -0,0 +1,76 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Q_OffsetRange_H_ +#define _Q_OffsetRange_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum Q_OffsetRange { + Q_OffsetRange_dB_24 = 0, + Q_OffsetRange_dB_22 = 1, + Q_OffsetRange_dB_20 = 2, + Q_OffsetRange_dB_18 = 3, + Q_OffsetRange_dB_16 = 4, + Q_OffsetRange_dB_14 = 5, + Q_OffsetRange_dB_12 = 6, + Q_OffsetRange_dB_10 = 7, + Q_OffsetRange_dB_8 = 8, + Q_OffsetRange_dB_6 = 9, + Q_OffsetRange_dB_5 = 10, + Q_OffsetRange_dB_4 = 11, + Q_OffsetRange_dB_3 = 12, + Q_OffsetRange_dB_2 = 13, + Q_OffsetRange_dB_1 = 14, + Q_OffsetRange_dB0 = 15, + Q_OffsetRange_dB1 = 16, + Q_OffsetRange_dB2 = 17, + Q_OffsetRange_dB3 = 18, + Q_OffsetRange_dB4 = 19, + Q_OffsetRange_dB5 = 20, + Q_OffsetRange_dB6 = 21, + Q_OffsetRange_dB8 = 22, + Q_OffsetRange_dB10 = 23, + Q_OffsetRange_dB12 = 24, + Q_OffsetRange_dB14 = 25, + Q_OffsetRange_dB16 = 26, + Q_OffsetRange_dB18 = 27, + Q_OffsetRange_dB20 = 28, + Q_OffsetRange_dB22 = 29, + Q_OffsetRange_dB24 = 30 +} e_Q_OffsetRange; + +/* Q-OffsetRange */ +typedef long Q_OffsetRange_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Q_OffsetRange; +asn_struct_free_f Q_OffsetRange_free; +asn_struct_print_f Q_OffsetRange_print; +asn_constr_check_f Q_OffsetRange_constraint; +ber_type_decoder_f Q_OffsetRange_decode_ber; +der_type_encoder_f Q_OffsetRange_encode_der; +xer_type_decoder_f Q_OffsetRange_decode_xer; +xer_type_encoder_f Q_OffsetRange_encode_xer; +per_type_decoder_f Q_OffsetRange_decode_uper; +per_type_encoder_f Q_OffsetRange_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Q_OffsetRange_H_ */ +#include diff --git a/lte/rrc/asn/Q-OffsetRangeInterRAT.c b/lte/rrc/asn/Q-OffsetRangeInterRAT.c new file mode 100644 index 000000000..edd07059d --- /dev/null +++ b/lte/rrc/asn/Q-OffsetRangeInterRAT.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "Q-OffsetRangeInterRAT.h" + +int +Q_OffsetRangeInterRAT_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -15 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +Q_OffsetRangeInterRAT_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +Q_OffsetRangeInterRAT_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +Q_OffsetRangeInterRAT_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +Q_OffsetRangeInterRAT_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +Q_OffsetRangeInterRAT_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +Q_OffsetRangeInterRAT_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +Q_OffsetRangeInterRAT_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +Q_OffsetRangeInterRAT_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + Q_OffsetRangeInterRAT_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_Q_OffsetRangeInterRAT_constr_1 = { + { APC_CONSTRAINED, 5, 5, -15, 15 } /* (-15..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_Q_OffsetRangeInterRAT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_Q_OffsetRangeInterRAT = { + "Q-OffsetRangeInterRAT", + "Q-OffsetRangeInterRAT", + Q_OffsetRangeInterRAT_free, + Q_OffsetRangeInterRAT_print, + Q_OffsetRangeInterRAT_constraint, + Q_OffsetRangeInterRAT_decode_ber, + Q_OffsetRangeInterRAT_encode_der, + Q_OffsetRangeInterRAT_decode_xer, + Q_OffsetRangeInterRAT_encode_xer, + Q_OffsetRangeInterRAT_decode_uper, + Q_OffsetRangeInterRAT_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_Q_OffsetRangeInterRAT_tags_1, + sizeof(asn_DEF_Q_OffsetRangeInterRAT_tags_1) + /sizeof(asn_DEF_Q_OffsetRangeInterRAT_tags_1[0]), /* 1 */ + asn_DEF_Q_OffsetRangeInterRAT_tags_1, /* Same as above */ + sizeof(asn_DEF_Q_OffsetRangeInterRAT_tags_1) + /sizeof(asn_DEF_Q_OffsetRangeInterRAT_tags_1[0]), /* 1 */ + &asn_PER_type_Q_OffsetRangeInterRAT_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/Q-OffsetRangeInterRAT.h b/lte/rrc/asn/Q-OffsetRangeInterRAT.h new file mode 100644 index 000000000..5b9fbcca5 --- /dev/null +++ b/lte/rrc/asn/Q-OffsetRangeInterRAT.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _Q_OffsetRangeInterRAT_H_ +#define _Q_OffsetRangeInterRAT_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Q-OffsetRangeInterRAT */ +typedef long Q_OffsetRangeInterRAT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_Q_OffsetRangeInterRAT; +asn_struct_free_f Q_OffsetRangeInterRAT_free; +asn_struct_print_f Q_OffsetRangeInterRAT_print; +asn_constr_check_f Q_OffsetRangeInterRAT_constraint; +ber_type_decoder_f Q_OffsetRangeInterRAT_decode_ber; +der_type_encoder_f Q_OffsetRangeInterRAT_encode_der; +xer_type_decoder_f Q_OffsetRangeInterRAT_decode_xer; +xer_type_encoder_f Q_OffsetRangeInterRAT_encode_xer; +per_type_decoder_f Q_OffsetRangeInterRAT_decode_uper; +per_type_encoder_f Q_OffsetRangeInterRAT_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _Q_OffsetRangeInterRAT_H_ */ +#include diff --git a/lte/rrc/asn/Q-QualMin-r9.c b/lte/rrc/asn/Q-QualMin-r9.c index d78750fdd..f4cfbcc01 100644 --- a/lte/rrc/asn/Q-QualMin-r9.c +++ b/lte/rrc/asn/Q-QualMin-r9.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "Q-QualMin-r9.h" @@ -39,7 +40,6 @@ static void Q_QualMin_r9_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; - td->check_constraints = asn_DEF_NativeInteger.check_constraints; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; @@ -112,12 +112,12 @@ Q_QualMin_r9_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_Q_QualMin_r9_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_Q_QualMin_r9_constr_1 = { { APC_CONSTRAINED, 5, 5, -34, -3 } /* (-34..-3) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_Q_QualMin_r9_tags_1[] = { +static ber_tlv_tag_t asn_DEF_Q_QualMin_r9_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Q_QualMin_r9 = { diff --git a/lte/rrc/asn/Q-QualMin-r9.h b/lte/rrc/asn/Q-QualMin-r9.h index c6178bf83..f391737d3 100644 --- a/lte/rrc/asn/Q-QualMin-r9.h +++ b/lte/rrc/asn/Q-QualMin-r9.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _Q_QualMin_r9_H_ diff --git a/lte/rrc/asn/Q-RxLevMin.c b/lte/rrc/asn/Q-RxLevMin.c index 25eb90031..09fe8ad9f 100644 --- a/lte/rrc/asn/Q-RxLevMin.c +++ b/lte/rrc/asn/Q-RxLevMin.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "Q-RxLevMin.h" @@ -39,7 +40,6 @@ static void Q_RxLevMin_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeInteger.free_struct; td->print_struct = asn_DEF_NativeInteger.print_struct; - td->check_constraints = asn_DEF_NativeInteger.check_constraints; td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; td->der_encoder = asn_DEF_NativeInteger.der_encoder; td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; @@ -112,12 +112,12 @@ Q_RxLevMin_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_Q_RxLevMin_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_Q_RxLevMin_constr_1 = { { APC_CONSTRAINED, 6, 6, -70, -22 } /* (-70..-22) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_Q_RxLevMin_tags_1[] = { +static ber_tlv_tag_t asn_DEF_Q_RxLevMin_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) }; asn_TYPE_descriptor_t asn_DEF_Q_RxLevMin = { diff --git a/lte/rrc/asn/Q-RxLevMin.h b/lte/rrc/asn/Q-RxLevMin.h index 1d6a4d979..16daa393b 100644 --- a/lte/rrc/asn/Q-RxLevMin.h +++ b/lte/rrc/asn/Q-RxLevMin.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _Q_RxLevMin_H_ diff --git a/lte/rrc/asn/QuantityConfig.c b/lte/rrc/asn/QuantityConfig.c new file mode 100644 index 000000000..9f1ee8fc1 --- /dev/null +++ b/lte/rrc/asn/QuantityConfig.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "QuantityConfig.h" + +static asn_TYPE_member_t asn_MBR_QuantityConfig_1[] = { + { ATF_POINTER, 5, offsetof(struct QuantityConfig, quantityConfigEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfigEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfigEUTRA" + }, + { ATF_POINTER, 4, offsetof(struct QuantityConfig, quantityConfigUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfigUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfigUTRA" + }, + { ATF_POINTER, 3, offsetof(struct QuantityConfig, quantityConfigGERAN), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfigGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfigGERAN" + }, + { ATF_POINTER, 2, offsetof(struct QuantityConfig, quantityConfigCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfigCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfigCDMA2000" + }, + { ATF_POINTER, 1, offsetof(struct QuantityConfig, quantityConfigUTRA_v1020), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfigUTRA_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfigUTRA-v1020" + }, +}; +static int asn_MAP_QuantityConfig_oms_1[] = { 0, 1, 2, 3, 4 }; +static ber_tlv_tag_t asn_DEF_QuantityConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_QuantityConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* quantityConfigEUTRA at 3464 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* quantityConfigUTRA at 3465 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* quantityConfigGERAN at 3466 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* quantityConfigCDMA2000 at 3467 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* quantityConfigUTRA-v1020 at 3468 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_QuantityConfig_specs_1 = { + sizeof(struct QuantityConfig), + offsetof(struct QuantityConfig, _asn_ctx), + asn_MAP_QuantityConfig_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_QuantityConfig_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_QuantityConfig = { + "QuantityConfig", + "QuantityConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_QuantityConfig_tags_1, + sizeof(asn_DEF_QuantityConfig_tags_1) + /sizeof(asn_DEF_QuantityConfig_tags_1[0]), /* 1 */ + asn_DEF_QuantityConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_QuantityConfig_tags_1) + /sizeof(asn_DEF_QuantityConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_QuantityConfig_1, + 5, /* Elements count */ + &asn_SPC_QuantityConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/QuantityConfig.h b/lte/rrc/asn/QuantityConfig.h new file mode 100644 index 000000000..bad073b2d --- /dev/null +++ b/lte/rrc/asn/QuantityConfig.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _QuantityConfig_H_ +#define _QuantityConfig_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct QuantityConfigEUTRA; +struct QuantityConfigUTRA; +struct QuantityConfigGERAN; +struct QuantityConfigCDMA2000; +struct QuantityConfigUTRA_v1020; + +/* QuantityConfig */ +typedef struct QuantityConfig { + struct QuantityConfigEUTRA *quantityConfigEUTRA /* OPTIONAL */; + struct QuantityConfigUTRA *quantityConfigUTRA /* OPTIONAL */; + struct QuantityConfigGERAN *quantityConfigGERAN /* OPTIONAL */; + struct QuantityConfigCDMA2000 *quantityConfigCDMA2000 /* OPTIONAL */; + struct QuantityConfigUTRA_v1020 *quantityConfigUTRA_v1020 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QuantityConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_QuantityConfig; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "QuantityConfigEUTRA.h" +#include "QuantityConfigUTRA.h" +#include "QuantityConfigGERAN.h" +#include "QuantityConfigCDMA2000.h" +#include "QuantityConfigUTRA-v1020.h" + +#endif /* _QuantityConfig_H_ */ +#include diff --git a/lte/rrc/asn/QuantityConfigCDMA2000.c b/lte/rrc/asn/QuantityConfigCDMA2000.c new file mode 100644 index 000000000..c6e963df9 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigCDMA2000.c @@ -0,0 +1,199 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "QuantityConfigCDMA2000.h" + +static int +measQuantityCDMA2000_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +measQuantityCDMA2000_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +measQuantityCDMA2000_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +measQuantityCDMA2000_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +measQuantityCDMA2000_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +measQuantityCDMA2000_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +measQuantityCDMA2000_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +measQuantityCDMA2000_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +measQuantityCDMA2000_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +measQuantityCDMA2000_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + measQuantityCDMA2000_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_measQuantityCDMA2000_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_measQuantityCDMA2000_value2enum_2[] = { + { 0, 13, "pilotStrength" }, + { 1, 28, "pilotPnPhaseAndPilotStrength" } +}; +static unsigned int asn_MAP_measQuantityCDMA2000_enum2value_2[] = { + 1, /* pilotPnPhaseAndPilotStrength(1) */ + 0 /* pilotStrength(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_measQuantityCDMA2000_specs_2 = { + asn_MAP_measQuantityCDMA2000_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_measQuantityCDMA2000_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_measQuantityCDMA2000_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measQuantityCDMA2000_2 = { + "measQuantityCDMA2000", + "measQuantityCDMA2000", + measQuantityCDMA2000_2_free, + measQuantityCDMA2000_2_print, + measQuantityCDMA2000_2_constraint, + measQuantityCDMA2000_2_decode_ber, + measQuantityCDMA2000_2_encode_der, + measQuantityCDMA2000_2_decode_xer, + measQuantityCDMA2000_2_encode_xer, + measQuantityCDMA2000_2_decode_uper, + measQuantityCDMA2000_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measQuantityCDMA2000_tags_2, + sizeof(asn_DEF_measQuantityCDMA2000_tags_2) + /sizeof(asn_DEF_measQuantityCDMA2000_tags_2[0]) - 1, /* 1 */ + asn_DEF_measQuantityCDMA2000_tags_2, /* Same as above */ + sizeof(asn_DEF_measQuantityCDMA2000_tags_2) + /sizeof(asn_DEF_measQuantityCDMA2000_tags_2[0]), /* 2 */ + &asn_PER_type_measQuantityCDMA2000_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_measQuantityCDMA2000_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_QuantityConfigCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct QuantityConfigCDMA2000, measQuantityCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_measQuantityCDMA2000_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measQuantityCDMA2000" + }, +}; +static ber_tlv_tag_t asn_DEF_QuantityConfigCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_QuantityConfigCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* measQuantityCDMA2000 at 3492 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_QuantityConfigCDMA2000_specs_1 = { + sizeof(struct QuantityConfigCDMA2000), + offsetof(struct QuantityConfigCDMA2000, _asn_ctx), + asn_MAP_QuantityConfigCDMA2000_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_QuantityConfigCDMA2000 = { + "QuantityConfigCDMA2000", + "QuantityConfigCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_QuantityConfigCDMA2000_tags_1, + sizeof(asn_DEF_QuantityConfigCDMA2000_tags_1) + /sizeof(asn_DEF_QuantityConfigCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_QuantityConfigCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_QuantityConfigCDMA2000_tags_1) + /sizeof(asn_DEF_QuantityConfigCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_QuantityConfigCDMA2000_1, + 1, /* Elements count */ + &asn_SPC_QuantityConfigCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/QuantityConfigCDMA2000.h b/lte/rrc/asn/QuantityConfigCDMA2000.h new file mode 100644 index 000000000..43af2a9b6 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigCDMA2000.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _QuantityConfigCDMA2000_H_ +#define _QuantityConfigCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum QuantityConfigCDMA2000__measQuantityCDMA2000 { + QuantityConfigCDMA2000__measQuantityCDMA2000_pilotStrength = 0, + QuantityConfigCDMA2000__measQuantityCDMA2000_pilotPnPhaseAndPilotStrength = 1 +} e_QuantityConfigCDMA2000__measQuantityCDMA2000; + +/* QuantityConfigCDMA2000 */ +typedef struct QuantityConfigCDMA2000 { + long measQuantityCDMA2000; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QuantityConfigCDMA2000_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_measQuantityCDMA2000_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_QuantityConfigCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _QuantityConfigCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/QuantityConfigEUTRA.c b/lte/rrc/asn/QuantityConfigEUTRA.c new file mode 100644 index 000000000..0194fddf2 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigEUTRA.c @@ -0,0 +1,108 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "QuantityConfigEUTRA.h" + +static int asn_DFL_2_set_4(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static int asn_DFL_3_set_4(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static asn_TYPE_member_t asn_MBR_QuantityConfigEUTRA_1[] = { + { ATF_POINTER, 2, offsetof(struct QuantityConfigEUTRA, filterCoefficientRSRP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_2_set_4, /* DEFAULT 4 */ + "filterCoefficientRSRP" + }, + { ATF_POINTER, 1, offsetof(struct QuantityConfigEUTRA, filterCoefficientRSRQ), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_3_set_4, /* DEFAULT 4 */ + "filterCoefficientRSRQ" + }, +}; +static int asn_MAP_QuantityConfigEUTRA_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_QuantityConfigEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_QuantityConfigEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* filterCoefficientRSRP at 3472 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* filterCoefficientRSRQ at 3473 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_QuantityConfigEUTRA_specs_1 = { + sizeof(struct QuantityConfigEUTRA), + offsetof(struct QuantityConfigEUTRA, _asn_ctx), + asn_MAP_QuantityConfigEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_QuantityConfigEUTRA_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_QuantityConfigEUTRA = { + "QuantityConfigEUTRA", + "QuantityConfigEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_QuantityConfigEUTRA_tags_1, + sizeof(asn_DEF_QuantityConfigEUTRA_tags_1) + /sizeof(asn_DEF_QuantityConfigEUTRA_tags_1[0]), /* 1 */ + asn_DEF_QuantityConfigEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_QuantityConfigEUTRA_tags_1) + /sizeof(asn_DEF_QuantityConfigEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_QuantityConfigEUTRA_1, + 2, /* Elements count */ + &asn_SPC_QuantityConfigEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/QuantityConfigEUTRA.h b/lte/rrc/asn/QuantityConfigEUTRA.h new file mode 100644 index 000000000..c7e83b463 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigEUTRA.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _QuantityConfigEUTRA_H_ +#define _QuantityConfigEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "FilterCoefficient.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* QuantityConfigEUTRA */ +typedef struct QuantityConfigEUTRA { + FilterCoefficient_t *filterCoefficientRSRP /* DEFAULT 4 */; + FilterCoefficient_t *filterCoefficientRSRQ /* DEFAULT 4 */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QuantityConfigEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_QuantityConfigEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _QuantityConfigEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/QuantityConfigGERAN.c b/lte/rrc/asn/QuantityConfigGERAN.c new file mode 100644 index 000000000..bad5251aa --- /dev/null +++ b/lte/rrc/asn/QuantityConfigGERAN.c @@ -0,0 +1,227 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "QuantityConfigGERAN.h" + +static int +measQuantityGERAN_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +measQuantityGERAN_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +measQuantityGERAN_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +measQuantityGERAN_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +measQuantityGERAN_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +measQuantityGERAN_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +measQuantityGERAN_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +measQuantityGERAN_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +measQuantityGERAN_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +measQuantityGERAN_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + measQuantityGERAN_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_measQuantityGERAN_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_measQuantityGERAN_value2enum_2[] = { + { 0, 4, "rssi" } +}; +static unsigned int asn_MAP_measQuantityGERAN_enum2value_2[] = { + 0 /* rssi(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_measQuantityGERAN_specs_2 = { + asn_MAP_measQuantityGERAN_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_measQuantityGERAN_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_measQuantityGERAN_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measQuantityGERAN_2 = { + "measQuantityGERAN", + "measQuantityGERAN", + measQuantityGERAN_2_free, + measQuantityGERAN_2_print, + measQuantityGERAN_2_constraint, + measQuantityGERAN_2_decode_ber, + measQuantityGERAN_2_encode_der, + measQuantityGERAN_2_decode_xer, + measQuantityGERAN_2_encode_xer, + measQuantityGERAN_2_decode_uper, + measQuantityGERAN_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measQuantityGERAN_tags_2, + sizeof(asn_DEF_measQuantityGERAN_tags_2) + /sizeof(asn_DEF_measQuantityGERAN_tags_2[0]) - 1, /* 1 */ + asn_DEF_measQuantityGERAN_tags_2, /* Same as above */ + sizeof(asn_DEF_measQuantityGERAN_tags_2) + /sizeof(asn_DEF_measQuantityGERAN_tags_2[0]), /* 2 */ + &asn_PER_type_measQuantityGERAN_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_measQuantityGERAN_specs_2 /* Additional specs */ +}; + +static int asn_DFL_4_set_2(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 2 */ + *st = 2; + return 0; + } else { + /* Test default value 2 */ + return (*st == 2); + } +} +static asn_TYPE_member_t asn_MBR_QuantityConfigGERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct QuantityConfigGERAN, measQuantityGERAN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_measQuantityGERAN_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measQuantityGERAN" + }, + { ATF_POINTER, 1, offsetof(struct QuantityConfigGERAN, filterCoefficient), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_4_set_2, /* DEFAULT 2 */ + "filterCoefficient" + }, +}; +static int asn_MAP_QuantityConfigGERAN_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_QuantityConfigGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_QuantityConfigGERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measQuantityGERAN at 3487 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* filterCoefficient at 3488 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_QuantityConfigGERAN_specs_1 = { + sizeof(struct QuantityConfigGERAN), + offsetof(struct QuantityConfigGERAN, _asn_ctx), + asn_MAP_QuantityConfigGERAN_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_QuantityConfigGERAN_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_QuantityConfigGERAN = { + "QuantityConfigGERAN", + "QuantityConfigGERAN", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_QuantityConfigGERAN_tags_1, + sizeof(asn_DEF_QuantityConfigGERAN_tags_1) + /sizeof(asn_DEF_QuantityConfigGERAN_tags_1[0]), /* 1 */ + asn_DEF_QuantityConfigGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_QuantityConfigGERAN_tags_1) + /sizeof(asn_DEF_QuantityConfigGERAN_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_QuantityConfigGERAN_1, + 2, /* Elements count */ + &asn_SPC_QuantityConfigGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/QuantityConfigGERAN.h b/lte/rrc/asn/QuantityConfigGERAN.h new file mode 100644 index 000000000..f0b133df9 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigGERAN.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _QuantityConfigGERAN_H_ +#define _QuantityConfigGERAN_H_ + + +#include + +/* Including external dependencies */ +#include +#include "FilterCoefficient.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum QuantityConfigGERAN__measQuantityGERAN { + QuantityConfigGERAN__measQuantityGERAN_rssi = 0 +} e_QuantityConfigGERAN__measQuantityGERAN; + +/* QuantityConfigGERAN */ +typedef struct QuantityConfigGERAN { + long measQuantityGERAN; + FilterCoefficient_t *filterCoefficient /* DEFAULT 2 */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QuantityConfigGERAN_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_measQuantityGERAN_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_QuantityConfigGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _QuantityConfigGERAN_H_ */ +#include diff --git a/lte/rrc/asn/QuantityConfigUTRA-v1020.c b/lte/rrc/asn/QuantityConfigUTRA-v1020.c new file mode 100644 index 000000000..a38302cee --- /dev/null +++ b/lte/rrc/asn/QuantityConfigUTRA-v1020.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "QuantityConfigUTRA-v1020.h" + +static int asn_DFL_2_set_4(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static asn_TYPE_member_t asn_MBR_QuantityConfigUTRA_v1020_1[] = { + { ATF_POINTER, 1, offsetof(struct QuantityConfigUTRA_v1020, filterCoefficient2_FDD_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_2_set_4, /* DEFAULT 4 */ + "filterCoefficient2-FDD-r10" + }, +}; +static int asn_MAP_QuantityConfigUTRA_v1020_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_QuantityConfigUTRA_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_QuantityConfigUTRA_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* filterCoefficient2-FDD-r10 at 3483 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_QuantityConfigUTRA_v1020_specs_1 = { + sizeof(struct QuantityConfigUTRA_v1020), + offsetof(struct QuantityConfigUTRA_v1020, _asn_ctx), + asn_MAP_QuantityConfigUTRA_v1020_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_QuantityConfigUTRA_v1020_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_QuantityConfigUTRA_v1020 = { + "QuantityConfigUTRA-v1020", + "QuantityConfigUTRA-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_QuantityConfigUTRA_v1020_tags_1, + sizeof(asn_DEF_QuantityConfigUTRA_v1020_tags_1) + /sizeof(asn_DEF_QuantityConfigUTRA_v1020_tags_1[0]), /* 1 */ + asn_DEF_QuantityConfigUTRA_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_QuantityConfigUTRA_v1020_tags_1) + /sizeof(asn_DEF_QuantityConfigUTRA_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_QuantityConfigUTRA_v1020_1, + 1, /* Elements count */ + &asn_SPC_QuantityConfigUTRA_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/QuantityConfigUTRA-v1020.h b/lte/rrc/asn/QuantityConfigUTRA-v1020.h new file mode 100644 index 000000000..d3c27df6d --- /dev/null +++ b/lte/rrc/asn/QuantityConfigUTRA-v1020.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _QuantityConfigUTRA_v1020_H_ +#define _QuantityConfigUTRA_v1020_H_ + + +#include + +/* Including external dependencies */ +#include "FilterCoefficient.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* QuantityConfigUTRA-v1020 */ +typedef struct QuantityConfigUTRA_v1020 { + FilterCoefficient_t *filterCoefficient2_FDD_r10 /* DEFAULT 4 */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QuantityConfigUTRA_v1020_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_QuantityConfigUTRA_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _QuantityConfigUTRA_v1020_H_ */ +#include diff --git a/lte/rrc/asn/QuantityConfigUTRA.c b/lte/rrc/asn/QuantityConfigUTRA.c new file mode 100644 index 000000000..a0cc0f681 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigUTRA.c @@ -0,0 +1,376 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "QuantityConfigUTRA.h" + +static int +measQuantityUTRA_FDD_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +measQuantityUTRA_FDD_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +measQuantityUTRA_FDD_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +measQuantityUTRA_FDD_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +measQuantityUTRA_FDD_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +measQuantityUTRA_FDD_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +measQuantityUTRA_FDD_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +measQuantityUTRA_FDD_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +measQuantityUTRA_FDD_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + measQuantityUTRA_FDD_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +measQuantityUTRA_TDD_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +measQuantityUTRA_TDD_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +measQuantityUTRA_TDD_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +measQuantityUTRA_TDD_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +measQuantityUTRA_TDD_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +measQuantityUTRA_TDD_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +measQuantityUTRA_TDD_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +measQuantityUTRA_TDD_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +measQuantityUTRA_TDD_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + measQuantityUTRA_TDD_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_measQuantityUTRA_FDD_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_measQuantityUTRA_TDD_constr_5 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_measQuantityUTRA_FDD_value2enum_2[] = { + { 0, 10, "cpich-RSCP" }, + { 1, 10, "cpich-EcN0" } +}; +static unsigned int asn_MAP_measQuantityUTRA_FDD_enum2value_2[] = { + 1, /* cpich-EcN0(1) */ + 0 /* cpich-RSCP(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_measQuantityUTRA_FDD_specs_2 = { + asn_MAP_measQuantityUTRA_FDD_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_measQuantityUTRA_FDD_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_measQuantityUTRA_FDD_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measQuantityUTRA_FDD_2 = { + "measQuantityUTRA-FDD", + "measQuantityUTRA-FDD", + measQuantityUTRA_FDD_2_free, + measQuantityUTRA_FDD_2_print, + measQuantityUTRA_FDD_2_constraint, + measQuantityUTRA_FDD_2_decode_ber, + measQuantityUTRA_FDD_2_encode_der, + measQuantityUTRA_FDD_2_decode_xer, + measQuantityUTRA_FDD_2_encode_xer, + measQuantityUTRA_FDD_2_decode_uper, + measQuantityUTRA_FDD_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measQuantityUTRA_FDD_tags_2, + sizeof(asn_DEF_measQuantityUTRA_FDD_tags_2) + /sizeof(asn_DEF_measQuantityUTRA_FDD_tags_2[0]) - 1, /* 1 */ + asn_DEF_measQuantityUTRA_FDD_tags_2, /* Same as above */ + sizeof(asn_DEF_measQuantityUTRA_FDD_tags_2) + /sizeof(asn_DEF_measQuantityUTRA_FDD_tags_2[0]), /* 2 */ + &asn_PER_type_measQuantityUTRA_FDD_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_measQuantityUTRA_FDD_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_measQuantityUTRA_TDD_value2enum_5[] = { + { 0, 11, "pccpch-RSCP" } +}; +static unsigned int asn_MAP_measQuantityUTRA_TDD_enum2value_5[] = { + 0 /* pccpch-RSCP(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_measQuantityUTRA_TDD_specs_5 = { + asn_MAP_measQuantityUTRA_TDD_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_measQuantityUTRA_TDD_enum2value_5, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_measQuantityUTRA_TDD_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measQuantityUTRA_TDD_5 = { + "measQuantityUTRA-TDD", + "measQuantityUTRA-TDD", + measQuantityUTRA_TDD_5_free, + measQuantityUTRA_TDD_5_print, + measQuantityUTRA_TDD_5_constraint, + measQuantityUTRA_TDD_5_decode_ber, + measQuantityUTRA_TDD_5_encode_der, + measQuantityUTRA_TDD_5_decode_xer, + measQuantityUTRA_TDD_5_encode_xer, + measQuantityUTRA_TDD_5_decode_uper, + measQuantityUTRA_TDD_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measQuantityUTRA_TDD_tags_5, + sizeof(asn_DEF_measQuantityUTRA_TDD_tags_5) + /sizeof(asn_DEF_measQuantityUTRA_TDD_tags_5[0]) - 1, /* 1 */ + asn_DEF_measQuantityUTRA_TDD_tags_5, /* Same as above */ + sizeof(asn_DEF_measQuantityUTRA_TDD_tags_5) + /sizeof(asn_DEF_measQuantityUTRA_TDD_tags_5[0]), /* 2 */ + &asn_PER_type_measQuantityUTRA_TDD_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_measQuantityUTRA_TDD_specs_5 /* Additional specs */ +}; + +static int asn_DFL_7_set_4(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static asn_TYPE_member_t asn_MBR_QuantityConfigUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct QuantityConfigUTRA, measQuantityUTRA_FDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_measQuantityUTRA_FDD_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measQuantityUTRA-FDD" + }, + { ATF_NOFLAGS, 0, offsetof(struct QuantityConfigUTRA, measQuantityUTRA_TDD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_measQuantityUTRA_TDD_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measQuantityUTRA-TDD" + }, + { ATF_POINTER, 1, offsetof(struct QuantityConfigUTRA, filterCoefficient), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_7_set_4, /* DEFAULT 4 */ + "filterCoefficient" + }, +}; +static int asn_MAP_QuantityConfigUTRA_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_QuantityConfigUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_QuantityConfigUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measQuantityUTRA-FDD at 3477 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measQuantityUTRA-TDD at 3478 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* filterCoefficient at 3479 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_QuantityConfigUTRA_specs_1 = { + sizeof(struct QuantityConfigUTRA), + offsetof(struct QuantityConfigUTRA, _asn_ctx), + asn_MAP_QuantityConfigUTRA_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_QuantityConfigUTRA_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_QuantityConfigUTRA = { + "QuantityConfigUTRA", + "QuantityConfigUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_QuantityConfigUTRA_tags_1, + sizeof(asn_DEF_QuantityConfigUTRA_tags_1) + /sizeof(asn_DEF_QuantityConfigUTRA_tags_1[0]), /* 1 */ + asn_DEF_QuantityConfigUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_QuantityConfigUTRA_tags_1) + /sizeof(asn_DEF_QuantityConfigUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_QuantityConfigUTRA_1, + 3, /* Elements count */ + &asn_SPC_QuantityConfigUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/QuantityConfigUTRA.h b/lte/rrc/asn/QuantityConfigUTRA.h new file mode 100644 index 000000000..70d09e7d8 --- /dev/null +++ b/lte/rrc/asn/QuantityConfigUTRA.h @@ -0,0 +1,52 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _QuantityConfigUTRA_H_ +#define _QuantityConfigUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include "FilterCoefficient.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum QuantityConfigUTRA__measQuantityUTRA_FDD { + QuantityConfigUTRA__measQuantityUTRA_FDD_cpich_RSCP = 0, + QuantityConfigUTRA__measQuantityUTRA_FDD_cpich_EcN0 = 1 +} e_QuantityConfigUTRA__measQuantityUTRA_FDD; +typedef enum QuantityConfigUTRA__measQuantityUTRA_TDD { + QuantityConfigUTRA__measQuantityUTRA_TDD_pccpch_RSCP = 0 +} e_QuantityConfigUTRA__measQuantityUTRA_TDD; + +/* QuantityConfigUTRA */ +typedef struct QuantityConfigUTRA { + long measQuantityUTRA_FDD; + long measQuantityUTRA_TDD; + FilterCoefficient_t *filterCoefficient /* DEFAULT 4 */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} QuantityConfigUTRA_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_measQuantityUTRA_FDD_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_measQuantityUTRA_TDD_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_QuantityConfigUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _QuantityConfigUTRA_H_ */ +#include diff --git a/lte/rrc/asn/RACH-ConfigCommon.c b/lte/rrc/asn/RACH-ConfigCommon.c new file mode 100644 index 000000000..0621948be --- /dev/null +++ b/lte/rrc/asn/RACH-ConfigCommon.c @@ -0,0 +1,1789 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RACH-ConfigCommon.h" + +static int +numberOfRA_Preambles_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +numberOfRA_Preambles_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +numberOfRA_Preambles_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +numberOfRA_Preambles_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +numberOfRA_Preambles_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +numberOfRA_Preambles_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +numberOfRA_Preambles_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +numberOfRA_Preambles_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +numberOfRA_Preambles_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +numberOfRA_Preambles_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + numberOfRA_Preambles_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +sizeOfRA_PreamblesGroupA_21_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +sizeOfRA_PreamblesGroupA_21_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +sizeOfRA_PreamblesGroupA_21_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +sizeOfRA_PreamblesGroupA_21_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +sizeOfRA_PreamblesGroupA_21_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +sizeOfRA_PreamblesGroupA_21_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +sizeOfRA_PreamblesGroupA_21_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +sizeOfRA_PreamblesGroupA_21_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +sizeOfRA_PreamblesGroupA_21_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + sizeOfRA_PreamblesGroupA_21_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +messageSizeGroupA_37_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +messageSizeGroupA_37_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +messageSizeGroupA_37_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +messageSizeGroupA_37_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +messageSizeGroupA_37_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +messageSizeGroupA_37_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +messageSizeGroupA_37_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +messageSizeGroupA_37_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +messageSizeGroupA_37_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +messageSizeGroupA_37_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + messageSizeGroupA_37_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +messagePowerOffsetGroupB_42_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +messagePowerOffsetGroupB_42_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +messagePowerOffsetGroupB_42_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +messagePowerOffsetGroupB_42_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +messagePowerOffsetGroupB_42_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +messagePowerOffsetGroupB_42_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +messagePowerOffsetGroupB_42_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +messagePowerOffsetGroupB_42_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +messagePowerOffsetGroupB_42_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + messagePowerOffsetGroupB_42_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +powerRampingStep_53_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +powerRampingStep_53_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +powerRampingStep_53_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +powerRampingStep_53_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +powerRampingStep_53_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +powerRampingStep_53_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +powerRampingStep_53_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +powerRampingStep_53_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +powerRampingStep_53_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +powerRampingStep_53_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + powerRampingStep_53_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +preambleInitialReceivedTargetPower_58_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +preambleInitialReceivedTargetPower_58_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +preambleInitialReceivedTargetPower_58_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +preambleInitialReceivedTargetPower_58_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +preambleInitialReceivedTargetPower_58_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +preambleInitialReceivedTargetPower_58_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +preambleInitialReceivedTargetPower_58_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +preambleInitialReceivedTargetPower_58_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +preambleInitialReceivedTargetPower_58_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + preambleInitialReceivedTargetPower_58_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +preambleTransMax_76_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +preambleTransMax_76_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +preambleTransMax_76_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +preambleTransMax_76_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +preambleTransMax_76_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +preambleTransMax_76_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +preambleTransMax_76_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +preambleTransMax_76_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +preambleTransMax_76_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +preambleTransMax_76_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + preambleTransMax_76_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +ra_ResponseWindowSize_88_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ra_ResponseWindowSize_88_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ra_ResponseWindowSize_88_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ra_ResponseWindowSize_88_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ra_ResponseWindowSize_88_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ra_ResponseWindowSize_88_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ra_ResponseWindowSize_88_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ra_ResponseWindowSize_88_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ra_ResponseWindowSize_88_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ra_ResponseWindowSize_88_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ra_ResponseWindowSize_88_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +mac_ContentionResolutionTimer_97_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +mac_ContentionResolutionTimer_97_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +mac_ContentionResolutionTimer_97_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +mac_ContentionResolutionTimer_97_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +mac_ContentionResolutionTimer_97_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +mac_ContentionResolutionTimer_97_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +mac_ContentionResolutionTimer_97_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +mac_ContentionResolutionTimer_97_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +mac_ContentionResolutionTimer_97_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + mac_ContentionResolutionTimer_97_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_maxHARQ_Msg3Tx_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_numberOfRA_Preambles_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sizeOfRA_PreamblesGroupA_constr_21 = { + { APC_CONSTRAINED, 4, 4, 0, 14 } /* (0..14) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_messageSizeGroupA_constr_37 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_messagePowerOffsetGroupB_constr_42 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_powerRampingStep_constr_53 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_preambleInitialReceivedTargetPower_constr_58 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_preambleTransMax_constr_76 = { + { APC_CONSTRAINED, 4, 4, 0, 10 } /* (0..10) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ra_ResponseWindowSize_constr_88 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_mac_ContentionResolutionTimer_constr_97 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_maxHARQ_Msg3Tx_constr_106 = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_numberOfRA_Preambles_value2enum_3[] = { + { 0, 2, "n4" }, + { 1, 2, "n8" }, + { 2, 3, "n12" }, + { 3, 3, "n16" }, + { 4, 3, "n20" }, + { 5, 3, "n24" }, + { 6, 3, "n28" }, + { 7, 3, "n32" }, + { 8, 3, "n36" }, + { 9, 3, "n40" }, + { 10, 3, "n44" }, + { 11, 3, "n48" }, + { 12, 3, "n52" }, + { 13, 3, "n56" }, + { 14, 3, "n60" }, + { 15, 3, "n64" } +}; +static unsigned int asn_MAP_numberOfRA_Preambles_enum2value_3[] = { + 2, /* n12(2) */ + 3, /* n16(3) */ + 4, /* n20(4) */ + 5, /* n24(5) */ + 6, /* n28(6) */ + 7, /* n32(7) */ + 8, /* n36(8) */ + 0, /* n4(0) */ + 9, /* n40(9) */ + 10, /* n44(10) */ + 11, /* n48(11) */ + 12, /* n52(12) */ + 13, /* n56(13) */ + 14, /* n60(14) */ + 15, /* n64(15) */ + 1 /* n8(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_numberOfRA_Preambles_specs_3 = { + asn_MAP_numberOfRA_Preambles_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_numberOfRA_Preambles_enum2value_3, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_numberOfRA_Preambles_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_numberOfRA_Preambles_3 = { + "numberOfRA-Preambles", + "numberOfRA-Preambles", + numberOfRA_Preambles_3_free, + numberOfRA_Preambles_3_print, + numberOfRA_Preambles_3_constraint, + numberOfRA_Preambles_3_decode_ber, + numberOfRA_Preambles_3_encode_der, + numberOfRA_Preambles_3_decode_xer, + numberOfRA_Preambles_3_encode_xer, + numberOfRA_Preambles_3_decode_uper, + numberOfRA_Preambles_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_numberOfRA_Preambles_tags_3, + sizeof(asn_DEF_numberOfRA_Preambles_tags_3) + /sizeof(asn_DEF_numberOfRA_Preambles_tags_3[0]) - 1, /* 1 */ + asn_DEF_numberOfRA_Preambles_tags_3, /* Same as above */ + sizeof(asn_DEF_numberOfRA_Preambles_tags_3) + /sizeof(asn_DEF_numberOfRA_Preambles_tags_3[0]), /* 2 */ + &asn_PER_type_numberOfRA_Preambles_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_numberOfRA_Preambles_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_sizeOfRA_PreamblesGroupA_value2enum_21[] = { + { 0, 2, "n4" }, + { 1, 2, "n8" }, + { 2, 3, "n12" }, + { 3, 3, "n16" }, + { 4, 3, "n20" }, + { 5, 3, "n24" }, + { 6, 3, "n28" }, + { 7, 3, "n32" }, + { 8, 3, "n36" }, + { 9, 3, "n40" }, + { 10, 3, "n44" }, + { 11, 3, "n48" }, + { 12, 3, "n52" }, + { 13, 3, "n56" }, + { 14, 3, "n60" } +}; +static unsigned int asn_MAP_sizeOfRA_PreamblesGroupA_enum2value_21[] = { + 2, /* n12(2) */ + 3, /* n16(3) */ + 4, /* n20(4) */ + 5, /* n24(5) */ + 6, /* n28(6) */ + 7, /* n32(7) */ + 8, /* n36(8) */ + 0, /* n4(0) */ + 9, /* n40(9) */ + 10, /* n44(10) */ + 11, /* n48(11) */ + 12, /* n52(12) */ + 13, /* n56(13) */ + 14, /* n60(14) */ + 1 /* n8(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_sizeOfRA_PreamblesGroupA_specs_21 = { + asn_MAP_sizeOfRA_PreamblesGroupA_value2enum_21, /* "tag" => N; sorted by tag */ + asn_MAP_sizeOfRA_PreamblesGroupA_enum2value_21, /* N => "tag"; sorted by N */ + 15, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_sizeOfRA_PreamblesGroupA_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sizeOfRA_PreamblesGroupA_21 = { + "sizeOfRA-PreamblesGroupA", + "sizeOfRA-PreamblesGroupA", + sizeOfRA_PreamblesGroupA_21_free, + sizeOfRA_PreamblesGroupA_21_print, + sizeOfRA_PreamblesGroupA_21_constraint, + sizeOfRA_PreamblesGroupA_21_decode_ber, + sizeOfRA_PreamblesGroupA_21_encode_der, + sizeOfRA_PreamblesGroupA_21_decode_xer, + sizeOfRA_PreamblesGroupA_21_encode_xer, + sizeOfRA_PreamblesGroupA_21_decode_uper, + sizeOfRA_PreamblesGroupA_21_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sizeOfRA_PreamblesGroupA_tags_21, + sizeof(asn_DEF_sizeOfRA_PreamblesGroupA_tags_21) + /sizeof(asn_DEF_sizeOfRA_PreamblesGroupA_tags_21[0]) - 1, /* 1 */ + asn_DEF_sizeOfRA_PreamblesGroupA_tags_21, /* Same as above */ + sizeof(asn_DEF_sizeOfRA_PreamblesGroupA_tags_21) + /sizeof(asn_DEF_sizeOfRA_PreamblesGroupA_tags_21[0]), /* 2 */ + &asn_PER_type_sizeOfRA_PreamblesGroupA_constr_21, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sizeOfRA_PreamblesGroupA_specs_21 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_messageSizeGroupA_value2enum_37[] = { + { 0, 3, "b56" }, + { 1, 4, "b144" }, + { 2, 4, "b208" }, + { 3, 4, "b256" } +}; +static unsigned int asn_MAP_messageSizeGroupA_enum2value_37[] = { + 1, /* b144(1) */ + 2, /* b208(2) */ + 3, /* b256(3) */ + 0 /* b56(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_messageSizeGroupA_specs_37 = { + asn_MAP_messageSizeGroupA_value2enum_37, /* "tag" => N; sorted by tag */ + asn_MAP_messageSizeGroupA_enum2value_37, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_messageSizeGroupA_tags_37[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageSizeGroupA_37 = { + "messageSizeGroupA", + "messageSizeGroupA", + messageSizeGroupA_37_free, + messageSizeGroupA_37_print, + messageSizeGroupA_37_constraint, + messageSizeGroupA_37_decode_ber, + messageSizeGroupA_37_encode_der, + messageSizeGroupA_37_decode_xer, + messageSizeGroupA_37_encode_xer, + messageSizeGroupA_37_decode_uper, + messageSizeGroupA_37_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageSizeGroupA_tags_37, + sizeof(asn_DEF_messageSizeGroupA_tags_37) + /sizeof(asn_DEF_messageSizeGroupA_tags_37[0]) - 1, /* 1 */ + asn_DEF_messageSizeGroupA_tags_37, /* Same as above */ + sizeof(asn_DEF_messageSizeGroupA_tags_37) + /sizeof(asn_DEF_messageSizeGroupA_tags_37[0]), /* 2 */ + &asn_PER_type_messageSizeGroupA_constr_37, + 0, 0, /* Defined elsewhere */ + &asn_SPC_messageSizeGroupA_specs_37 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_messagePowerOffsetGroupB_value2enum_42[] = { + { 0, 13, "minusinfinity" }, + { 1, 3, "dB0" }, + { 2, 3, "dB5" }, + { 3, 3, "dB8" }, + { 4, 4, "dB10" }, + { 5, 4, "dB12" }, + { 6, 4, "dB15" }, + { 7, 4, "dB18" } +}; +static unsigned int asn_MAP_messagePowerOffsetGroupB_enum2value_42[] = { + 1, /* dB0(1) */ + 4, /* dB10(4) */ + 5, /* dB12(5) */ + 6, /* dB15(6) */ + 7, /* dB18(7) */ + 2, /* dB5(2) */ + 3, /* dB8(3) */ + 0 /* minusinfinity(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_messagePowerOffsetGroupB_specs_42 = { + asn_MAP_messagePowerOffsetGroupB_value2enum_42, /* "tag" => N; sorted by tag */ + asn_MAP_messagePowerOffsetGroupB_enum2value_42, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_messagePowerOffsetGroupB_tags_42[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messagePowerOffsetGroupB_42 = { + "messagePowerOffsetGroupB", + "messagePowerOffsetGroupB", + messagePowerOffsetGroupB_42_free, + messagePowerOffsetGroupB_42_print, + messagePowerOffsetGroupB_42_constraint, + messagePowerOffsetGroupB_42_decode_ber, + messagePowerOffsetGroupB_42_encode_der, + messagePowerOffsetGroupB_42_decode_xer, + messagePowerOffsetGroupB_42_encode_xer, + messagePowerOffsetGroupB_42_decode_uper, + messagePowerOffsetGroupB_42_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messagePowerOffsetGroupB_tags_42, + sizeof(asn_DEF_messagePowerOffsetGroupB_tags_42) + /sizeof(asn_DEF_messagePowerOffsetGroupB_tags_42[0]) - 1, /* 1 */ + asn_DEF_messagePowerOffsetGroupB_tags_42, /* Same as above */ + sizeof(asn_DEF_messagePowerOffsetGroupB_tags_42) + /sizeof(asn_DEF_messagePowerOffsetGroupB_tags_42[0]), /* 2 */ + &asn_PER_type_messagePowerOffsetGroupB_constr_42, + 0, 0, /* Defined elsewhere */ + &asn_SPC_messagePowerOffsetGroupB_specs_42 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_preamblesGroupAConfig_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig, sizeOfRA_PreamblesGroupA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sizeOfRA_PreamblesGroupA_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sizeOfRA-PreamblesGroupA" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig, messageSizeGroupA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_messageSizeGroupA_37, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageSizeGroupA" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig, messagePowerOffsetGroupB), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_messagePowerOffsetGroupB_42, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messagePowerOffsetGroupB" + }, +}; +static ber_tlv_tag_t asn_DEF_preamblesGroupAConfig_tags_20[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_preamblesGroupAConfig_tag2el_20[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sizeOfRA-PreamblesGroupA at 2322 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* messageSizeGroupA at 2325 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* messagePowerOffsetGroupB at 2327 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_preamblesGroupAConfig_specs_20 = { + sizeof(struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig), + offsetof(struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig, _asn_ctx), + asn_MAP_preamblesGroupAConfig_tag2el_20, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_preamblesGroupAConfig_20 = { + "preamblesGroupAConfig", + "preamblesGroupAConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_preamblesGroupAConfig_tags_20, + sizeof(asn_DEF_preamblesGroupAConfig_tags_20) + /sizeof(asn_DEF_preamblesGroupAConfig_tags_20[0]) - 1, /* 1 */ + asn_DEF_preamblesGroupAConfig_tags_20, /* Same as above */ + sizeof(asn_DEF_preamblesGroupAConfig_tags_20) + /sizeof(asn_DEF_preamblesGroupAConfig_tags_20[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_preamblesGroupAConfig_20, + 3, /* Elements count */ + &asn_SPC_preamblesGroupAConfig_specs_20 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_preambleInfo_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__preambleInfo, numberOfRA_Preambles), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_numberOfRA_Preambles_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "numberOfRA-Preambles" + }, + { ATF_POINTER, 1, offsetof(struct RACH_ConfigCommon__preambleInfo, preamblesGroupAConfig), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_preamblesGroupAConfig_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preamblesGroupAConfig" + }, +}; +static int asn_MAP_preambleInfo_oms_2[] = { 1 }; +static ber_tlv_tag_t asn_DEF_preambleInfo_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_preambleInfo_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* numberOfRA-Preambles at 2317 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* preamblesGroupAConfig at 2324 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_preambleInfo_specs_2 = { + sizeof(struct RACH_ConfigCommon__preambleInfo), + offsetof(struct RACH_ConfigCommon__preambleInfo, _asn_ctx), + asn_MAP_preambleInfo_tag2el_2, + 2, /* Count of tags in the map */ + asn_MAP_preambleInfo_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_preambleInfo_2 = { + "preambleInfo", + "preambleInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_preambleInfo_tags_2, + sizeof(asn_DEF_preambleInfo_tags_2) + /sizeof(asn_DEF_preambleInfo_tags_2[0]) - 1, /* 1 */ + asn_DEF_preambleInfo_tags_2, /* Same as above */ + sizeof(asn_DEF_preambleInfo_tags_2) + /sizeof(asn_DEF_preambleInfo_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_preambleInfo_2, + 2, /* Elements count */ + &asn_SPC_preambleInfo_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_powerRampingStep_value2enum_53[] = { + { 0, 3, "dB0" }, + { 1, 3, "dB2" }, + { 2, 3, "dB4" }, + { 3, 3, "dB6" } +}; +static unsigned int asn_MAP_powerRampingStep_enum2value_53[] = { + 0, /* dB0(0) */ + 1, /* dB2(1) */ + 2, /* dB4(2) */ + 3 /* dB6(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_powerRampingStep_specs_53 = { + asn_MAP_powerRampingStep_value2enum_53, /* "tag" => N; sorted by tag */ + asn_MAP_powerRampingStep_enum2value_53, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_powerRampingStep_tags_53[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_powerRampingStep_53 = { + "powerRampingStep", + "powerRampingStep", + powerRampingStep_53_free, + powerRampingStep_53_print, + powerRampingStep_53_constraint, + powerRampingStep_53_decode_ber, + powerRampingStep_53_encode_der, + powerRampingStep_53_decode_xer, + powerRampingStep_53_encode_xer, + powerRampingStep_53_decode_uper, + powerRampingStep_53_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_powerRampingStep_tags_53, + sizeof(asn_DEF_powerRampingStep_tags_53) + /sizeof(asn_DEF_powerRampingStep_tags_53[0]) - 1, /* 1 */ + asn_DEF_powerRampingStep_tags_53, /* Same as above */ + sizeof(asn_DEF_powerRampingStep_tags_53) + /sizeof(asn_DEF_powerRampingStep_tags_53[0]), /* 2 */ + &asn_PER_type_powerRampingStep_constr_53, + 0, 0, /* Defined elsewhere */ + &asn_SPC_powerRampingStep_specs_53 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_preambleInitialReceivedTargetPower_value2enum_58[] = { + { 0, 7, "dBm-120" }, + { 1, 7, "dBm-118" }, + { 2, 7, "dBm-116" }, + { 3, 7, "dBm-114" }, + { 4, 7, "dBm-112" }, + { 5, 7, "dBm-110" }, + { 6, 7, "dBm-108" }, + { 7, 7, "dBm-106" }, + { 8, 7, "dBm-104" }, + { 9, 7, "dBm-102" }, + { 10, 7, "dBm-100" }, + { 11, 6, "dBm-98" }, + { 12, 6, "dBm-96" }, + { 13, 6, "dBm-94" }, + { 14, 6, "dBm-92" }, + { 15, 6, "dBm-90" } +}; +static unsigned int asn_MAP_preambleInitialReceivedTargetPower_enum2value_58[] = { + 10, /* dBm-100(10) */ + 9, /* dBm-102(9) */ + 8, /* dBm-104(8) */ + 7, /* dBm-106(7) */ + 6, /* dBm-108(6) */ + 5, /* dBm-110(5) */ + 4, /* dBm-112(4) */ + 3, /* dBm-114(3) */ + 2, /* dBm-116(2) */ + 1, /* dBm-118(1) */ + 0, /* dBm-120(0) */ + 15, /* dBm-90(15) */ + 14, /* dBm-92(14) */ + 13, /* dBm-94(13) */ + 12, /* dBm-96(12) */ + 11 /* dBm-98(11) */ +}; +static asn_INTEGER_specifics_t asn_SPC_preambleInitialReceivedTargetPower_specs_58 = { + asn_MAP_preambleInitialReceivedTargetPower_value2enum_58, /* "tag" => N; sorted by tag */ + asn_MAP_preambleInitialReceivedTargetPower_enum2value_58, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_preambleInitialReceivedTargetPower_tags_58[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_preambleInitialReceivedTargetPower_58 = { + "preambleInitialReceivedTargetPower", + "preambleInitialReceivedTargetPower", + preambleInitialReceivedTargetPower_58_free, + preambleInitialReceivedTargetPower_58_print, + preambleInitialReceivedTargetPower_58_constraint, + preambleInitialReceivedTargetPower_58_decode_ber, + preambleInitialReceivedTargetPower_58_encode_der, + preambleInitialReceivedTargetPower_58_decode_xer, + preambleInitialReceivedTargetPower_58_encode_xer, + preambleInitialReceivedTargetPower_58_decode_uper, + preambleInitialReceivedTargetPower_58_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_preambleInitialReceivedTargetPower_tags_58, + sizeof(asn_DEF_preambleInitialReceivedTargetPower_tags_58) + /sizeof(asn_DEF_preambleInitialReceivedTargetPower_tags_58[0]) - 1, /* 1 */ + asn_DEF_preambleInitialReceivedTargetPower_tags_58, /* Same as above */ + sizeof(asn_DEF_preambleInitialReceivedTargetPower_tags_58) + /sizeof(asn_DEF_preambleInitialReceivedTargetPower_tags_58[0]), /* 2 */ + &asn_PER_type_preambleInitialReceivedTargetPower_constr_58, + 0, 0, /* Defined elsewhere */ + &asn_SPC_preambleInitialReceivedTargetPower_specs_58 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_powerRampingParameters_52[] = { + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__powerRampingParameters, powerRampingStep), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_powerRampingStep_53, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "powerRampingStep" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__powerRampingParameters, preambleInitialReceivedTargetPower), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_preambleInitialReceivedTargetPower_58, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preambleInitialReceivedTargetPower" + }, +}; +static ber_tlv_tag_t asn_DEF_powerRampingParameters_tags_52[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_powerRampingParameters_tag2el_52[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* powerRampingStep at 2333 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* preambleInitialReceivedTargetPower at 2335 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_powerRampingParameters_specs_52 = { + sizeof(struct RACH_ConfigCommon__powerRampingParameters), + offsetof(struct RACH_ConfigCommon__powerRampingParameters, _asn_ctx), + asn_MAP_powerRampingParameters_tag2el_52, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_powerRampingParameters_52 = { + "powerRampingParameters", + "powerRampingParameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_powerRampingParameters_tags_52, + sizeof(asn_DEF_powerRampingParameters_tags_52) + /sizeof(asn_DEF_powerRampingParameters_tags_52[0]) - 1, /* 1 */ + asn_DEF_powerRampingParameters_tags_52, /* Same as above */ + sizeof(asn_DEF_powerRampingParameters_tags_52) + /sizeof(asn_DEF_powerRampingParameters_tags_52[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_powerRampingParameters_52, + 2, /* Elements count */ + &asn_SPC_powerRampingParameters_specs_52 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_preambleTransMax_value2enum_76[] = { + { 0, 2, "n3" }, + { 1, 2, "n4" }, + { 2, 2, "n5" }, + { 3, 2, "n6" }, + { 4, 2, "n7" }, + { 5, 2, "n8" }, + { 6, 3, "n10" }, + { 7, 3, "n20" }, + { 8, 3, "n50" }, + { 9, 4, "n100" }, + { 10, 4, "n200" } +}; +static unsigned int asn_MAP_preambleTransMax_enum2value_76[] = { + 6, /* n10(6) */ + 9, /* n100(9) */ + 7, /* n20(7) */ + 10, /* n200(10) */ + 0, /* n3(0) */ + 1, /* n4(1) */ + 2, /* n5(2) */ + 8, /* n50(8) */ + 3, /* n6(3) */ + 4, /* n7(4) */ + 5 /* n8(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_preambleTransMax_specs_76 = { + asn_MAP_preambleTransMax_value2enum_76, /* "tag" => N; sorted by tag */ + asn_MAP_preambleTransMax_enum2value_76, /* N => "tag"; sorted by N */ + 11, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_preambleTransMax_tags_76[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_preambleTransMax_76 = { + "preambleTransMax", + "preambleTransMax", + preambleTransMax_76_free, + preambleTransMax_76_print, + preambleTransMax_76_constraint, + preambleTransMax_76_decode_ber, + preambleTransMax_76_encode_der, + preambleTransMax_76_decode_xer, + preambleTransMax_76_encode_xer, + preambleTransMax_76_decode_uper, + preambleTransMax_76_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_preambleTransMax_tags_76, + sizeof(asn_DEF_preambleTransMax_tags_76) + /sizeof(asn_DEF_preambleTransMax_tags_76[0]) - 1, /* 1 */ + asn_DEF_preambleTransMax_tags_76, /* Same as above */ + sizeof(asn_DEF_preambleTransMax_tags_76) + /sizeof(asn_DEF_preambleTransMax_tags_76[0]), /* 2 */ + &asn_PER_type_preambleTransMax_constr_76, + 0, 0, /* Defined elsewhere */ + &asn_SPC_preambleTransMax_specs_76 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_ra_ResponseWindowSize_value2enum_88[] = { + { 0, 3, "sf2" }, + { 1, 3, "sf3" }, + { 2, 3, "sf4" }, + { 3, 3, "sf5" }, + { 4, 3, "sf6" }, + { 5, 3, "sf7" }, + { 6, 3, "sf8" }, + { 7, 4, "sf10" } +}; +static unsigned int asn_MAP_ra_ResponseWindowSize_enum2value_88[] = { + 7, /* sf10(7) */ + 0, /* sf2(0) */ + 1, /* sf3(1) */ + 2, /* sf4(2) */ + 3, /* sf5(3) */ + 4, /* sf6(4) */ + 5, /* sf7(5) */ + 6 /* sf8(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ra_ResponseWindowSize_specs_88 = { + asn_MAP_ra_ResponseWindowSize_value2enum_88, /* "tag" => N; sorted by tag */ + asn_MAP_ra_ResponseWindowSize_enum2value_88, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ra_ResponseWindowSize_tags_88[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ra_ResponseWindowSize_88 = { + "ra-ResponseWindowSize", + "ra-ResponseWindowSize", + ra_ResponseWindowSize_88_free, + ra_ResponseWindowSize_88_print, + ra_ResponseWindowSize_88_constraint, + ra_ResponseWindowSize_88_decode_ber, + ra_ResponseWindowSize_88_encode_der, + ra_ResponseWindowSize_88_decode_xer, + ra_ResponseWindowSize_88_encode_xer, + ra_ResponseWindowSize_88_decode_uper, + ra_ResponseWindowSize_88_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ra_ResponseWindowSize_tags_88, + sizeof(asn_DEF_ra_ResponseWindowSize_tags_88) + /sizeof(asn_DEF_ra_ResponseWindowSize_tags_88[0]) - 1, /* 1 */ + asn_DEF_ra_ResponseWindowSize_tags_88, /* Same as above */ + sizeof(asn_DEF_ra_ResponseWindowSize_tags_88) + /sizeof(asn_DEF_ra_ResponseWindowSize_tags_88[0]), /* 2 */ + &asn_PER_type_ra_ResponseWindowSize_constr_88, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ra_ResponseWindowSize_specs_88 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_mac_ContentionResolutionTimer_value2enum_97[] = { + { 0, 3, "sf8" }, + { 1, 4, "sf16" }, + { 2, 4, "sf24" }, + { 3, 4, "sf32" }, + { 4, 4, "sf40" }, + { 5, 4, "sf48" }, + { 6, 4, "sf56" }, + { 7, 4, "sf64" } +}; +static unsigned int asn_MAP_mac_ContentionResolutionTimer_enum2value_97[] = { + 1, /* sf16(1) */ + 2, /* sf24(2) */ + 3, /* sf32(3) */ + 4, /* sf40(4) */ + 5, /* sf48(5) */ + 6, /* sf56(6) */ + 7, /* sf64(7) */ + 0 /* sf8(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_mac_ContentionResolutionTimer_specs_97 = { + asn_MAP_mac_ContentionResolutionTimer_value2enum_97, /* "tag" => N; sorted by tag */ + asn_MAP_mac_ContentionResolutionTimer_enum2value_97, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_mac_ContentionResolutionTimer_tags_97[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mac_ContentionResolutionTimer_97 = { + "mac-ContentionResolutionTimer", + "mac-ContentionResolutionTimer", + mac_ContentionResolutionTimer_97_free, + mac_ContentionResolutionTimer_97_print, + mac_ContentionResolutionTimer_97_constraint, + mac_ContentionResolutionTimer_97_decode_ber, + mac_ContentionResolutionTimer_97_encode_der, + mac_ContentionResolutionTimer_97_decode_xer, + mac_ContentionResolutionTimer_97_encode_xer, + mac_ContentionResolutionTimer_97_decode_uper, + mac_ContentionResolutionTimer_97_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_mac_ContentionResolutionTimer_tags_97, + sizeof(asn_DEF_mac_ContentionResolutionTimer_tags_97) + /sizeof(asn_DEF_mac_ContentionResolutionTimer_tags_97[0]) - 1, /* 1 */ + asn_DEF_mac_ContentionResolutionTimer_tags_97, /* Same as above */ + sizeof(asn_DEF_mac_ContentionResolutionTimer_tags_97) + /sizeof(asn_DEF_mac_ContentionResolutionTimer_tags_97[0]), /* 2 */ + &asn_PER_type_mac_ContentionResolutionTimer_constr_97, + 0, 0, /* Defined elsewhere */ + &asn_SPC_mac_ContentionResolutionTimer_specs_97 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ra_SupervisionInfo_75[] = { + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__ra_SupervisionInfo, preambleTransMax), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_preambleTransMax_76, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preambleTransMax" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__ra_SupervisionInfo, ra_ResponseWindowSize), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ra_ResponseWindowSize_88, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ra-ResponseWindowSize" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon__ra_SupervisionInfo, mac_ContentionResolutionTimer), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_mac_ContentionResolutionTimer_97, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mac-ContentionResolutionTimer" + }, +}; +static ber_tlv_tag_t asn_DEF_ra_SupervisionInfo_tags_75[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ra_SupervisionInfo_tag2el_75[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* preambleTransMax at 2342 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ra-ResponseWindowSize at 2345 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* mac-ContentionResolutionTimer at 2348 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ra_SupervisionInfo_specs_75 = { + sizeof(struct RACH_ConfigCommon__ra_SupervisionInfo), + offsetof(struct RACH_ConfigCommon__ra_SupervisionInfo, _asn_ctx), + asn_MAP_ra_SupervisionInfo_tag2el_75, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ra_SupervisionInfo_75 = { + "ra-SupervisionInfo", + "ra-SupervisionInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ra_SupervisionInfo_tags_75, + sizeof(asn_DEF_ra_SupervisionInfo_tags_75) + /sizeof(asn_DEF_ra_SupervisionInfo_tags_75[0]) - 1, /* 1 */ + asn_DEF_ra_SupervisionInfo_tags_75, /* Same as above */ + sizeof(asn_DEF_ra_SupervisionInfo_tags_75) + /sizeof(asn_DEF_ra_SupervisionInfo_tags_75[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ra_SupervisionInfo_75, + 3, /* Elements count */ + &asn_SPC_ra_SupervisionInfo_specs_75 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RACH_ConfigCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon, preambleInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_preambleInfo_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preambleInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon, powerRampingParameters), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_powerRampingParameters_52, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "powerRampingParameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon, ra_SupervisionInfo), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_ra_SupervisionInfo_75, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ra-SupervisionInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigCommon, maxHARQ_Msg3Tx), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_maxHARQ_Msg3Tx_constraint_1, + &asn_PER_memb_maxHARQ_Msg3Tx_constr_106, + 0, + "maxHARQ-Msg3Tx" + }, +}; +static ber_tlv_tag_t asn_DEF_RACH_ConfigCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RACH_ConfigCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* preambleInfo at 2319 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* powerRampingParameters at 2333 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ra-SupervisionInfo at 2343 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* maxHARQ-Msg3Tx at 2351 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RACH_ConfigCommon_specs_1 = { + sizeof(struct RACH_ConfigCommon), + offsetof(struct RACH_ConfigCommon, _asn_ctx), + asn_MAP_RACH_ConfigCommon_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RACH_ConfigCommon = { + "RACH-ConfigCommon", + "RACH-ConfigCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RACH_ConfigCommon_tags_1, + sizeof(asn_DEF_RACH_ConfigCommon_tags_1) + /sizeof(asn_DEF_RACH_ConfigCommon_tags_1[0]), /* 1 */ + asn_DEF_RACH_ConfigCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_RACH_ConfigCommon_tags_1) + /sizeof(asn_DEF_RACH_ConfigCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RACH_ConfigCommon_1, + 4, /* Elements count */ + &asn_SPC_RACH_ConfigCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RACH-ConfigCommon.h b/lte/rrc/asn/RACH-ConfigCommon.h new file mode 100644 index 000000000..7705ca551 --- /dev/null +++ b/lte/rrc/asn/RACH-ConfigCommon.h @@ -0,0 +1,195 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RACH_ConfigCommon_H_ +#define _RACH_ConfigCommon_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles { + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n4 = 0, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n8 = 1, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n12 = 2, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n16 = 3, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n20 = 4, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n24 = 5, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n28 = 6, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n32 = 7, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n36 = 8, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n40 = 9, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n44 = 10, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n48 = 11, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n52 = 12, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n56 = 13, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n60 = 14, + RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles_n64 = 15 +} e_RACH_ConfigCommon__preambleInfo__numberOfRA_Preambles; +typedef enum RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA { + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n4 = 0, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n8 = 1, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n12 = 2, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n16 = 3, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n20 = 4, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n24 = 5, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n28 = 6, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n32 = 7, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n36 = 8, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n40 = 9, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n44 = 10, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n48 = 11, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n52 = 12, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n56 = 13, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA_n60 = 14 +} e_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__sizeOfRA_PreamblesGroupA; +typedef enum RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA { + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b56 = 0, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b144 = 1, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b208 = 2, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA_b256 = 3 +} e_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messageSizeGroupA; +typedef enum RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB { + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_minusinfinity = 0, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB0 = 1, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB5 = 2, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB8 = 3, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB10 = 4, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB12 = 5, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB15 = 6, + RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB_dB18 = 7 +} e_RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig__messagePowerOffsetGroupB; +typedef enum RACH_ConfigCommon__powerRampingParameters__powerRampingStep { + RACH_ConfigCommon__powerRampingParameters__powerRampingStep_dB0 = 0, + RACH_ConfigCommon__powerRampingParameters__powerRampingStep_dB2 = 1, + RACH_ConfigCommon__powerRampingParameters__powerRampingStep_dB4 = 2, + RACH_ConfigCommon__powerRampingParameters__powerRampingStep_dB6 = 3 +} e_RACH_ConfigCommon__powerRampingParameters__powerRampingStep; +typedef enum RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower { + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_120 = 0, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_118 = 1, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_116 = 2, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_114 = 3, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_112 = 4, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_110 = 5, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_108 = 6, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_106 = 7, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_104 = 8, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_102 = 9, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_100 = 10, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_98 = 11, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_96 = 12, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_94 = 13, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_92 = 14, + RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower_dBm_90 = 15 +} e_RACH_ConfigCommon__powerRampingParameters__preambleInitialReceivedTargetPower; +typedef enum RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax { + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n3 = 0, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n4 = 1, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n5 = 2, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n6 = 3, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n7 = 4, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n8 = 5, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n10 = 6, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n20 = 7, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n50 = 8, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n100 = 9, + RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax_n200 = 10 +} e_RACH_ConfigCommon__ra_SupervisionInfo__preambleTransMax; +typedef enum RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize { + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf2 = 0, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf3 = 1, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf4 = 2, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf5 = 3, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf6 = 4, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf7 = 5, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf8 = 6, + RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize_sf10 = 7 +} e_RACH_ConfigCommon__ra_SupervisionInfo__ra_ResponseWindowSize; +typedef enum RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer { + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf8 = 0, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf16 = 1, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf24 = 2, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf32 = 3, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf40 = 4, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf48 = 5, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf56 = 6, + RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer_sf64 = 7 +} e_RACH_ConfigCommon__ra_SupervisionInfo__mac_ContentionResolutionTimer; + +/* RACH-ConfigCommon */ +typedef struct RACH_ConfigCommon { + struct RACH_ConfigCommon__preambleInfo { + long numberOfRA_Preambles; + struct RACH_ConfigCommon__preambleInfo__preamblesGroupAConfig { + long sizeOfRA_PreamblesGroupA; + long messageSizeGroupA; + long messagePowerOffsetGroupB; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *preamblesGroupAConfig; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } preambleInfo; + struct RACH_ConfigCommon__powerRampingParameters { + long powerRampingStep; + long preambleInitialReceivedTargetPower; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } powerRampingParameters; + struct RACH_ConfigCommon__ra_SupervisionInfo { + long preambleTransMax; + long ra_ResponseWindowSize; + long mac_ContentionResolutionTimer; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ra_SupervisionInfo; + long maxHARQ_Msg3Tx; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RACH_ConfigCommon_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_numberOfRA_Preambles_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sizeOfRA_PreamblesGroupA_21; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_messageSizeGroupA_37; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_messagePowerOffsetGroupB_42; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_powerRampingStep_53; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_preambleInitialReceivedTargetPower_58; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_preambleTransMax_76; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_ra_ResponseWindowSize_88; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_mac_ContentionResolutionTimer_97; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RACH_ConfigCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _RACH_ConfigCommon_H_ */ +#include diff --git a/lte/rrc/asn/RACH-ConfigDedicated.c b/lte/rrc/asn/RACH-ConfigDedicated.c new file mode 100644 index 000000000..e740e07a5 --- /dev/null +++ b/lte/rrc/asn/RACH-ConfigDedicated.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RACH-ConfigDedicated.h" + +static int +memb_ra_PreambleIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_ra_PRACH_MaskIndex_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ra_PreambleIndex_constr_2 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_ra_PRACH_MaskIndex_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RACH_ConfigDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigDedicated, ra_PreambleIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ra_PreambleIndex_constraint_1, + &asn_PER_memb_ra_PreambleIndex_constr_2, + 0, + "ra-PreambleIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct RACH_ConfigDedicated, ra_PRACH_MaskIndex), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ra_PRACH_MaskIndex_constraint_1, + &asn_PER_memb_ra_PRACH_MaskIndex_constr_3, + 0, + "ra-PRACH-MaskIndex" + }, +}; +static ber_tlv_tag_t asn_DEF_RACH_ConfigDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RACH_ConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ra-PreambleIndex at 2357 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ra-PRACH-MaskIndex at 2358 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RACH_ConfigDedicated_specs_1 = { + sizeof(struct RACH_ConfigDedicated), + offsetof(struct RACH_ConfigDedicated, _asn_ctx), + asn_MAP_RACH_ConfigDedicated_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RACH_ConfigDedicated = { + "RACH-ConfigDedicated", + "RACH-ConfigDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RACH_ConfigDedicated_tags_1, + sizeof(asn_DEF_RACH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_RACH_ConfigDedicated_tags_1[0]), /* 1 */ + asn_DEF_RACH_ConfigDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_RACH_ConfigDedicated_tags_1) + /sizeof(asn_DEF_RACH_ConfigDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RACH_ConfigDedicated_1, + 2, /* Elements count */ + &asn_SPC_RACH_ConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RACH-ConfigDedicated.h b/lte/rrc/asn/RACH-ConfigDedicated.h new file mode 100644 index 000000000..2bb1a7cc8 --- /dev/null +++ b/lte/rrc/asn/RACH-ConfigDedicated.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RACH_ConfigDedicated_H_ +#define _RACH_ConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RACH-ConfigDedicated */ +typedef struct RACH_ConfigDedicated { + long ra_PreambleIndex; + long ra_PRACH_MaskIndex; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RACH_ConfigDedicated_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RACH_ConfigDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _RACH_ConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/RAND-CDMA2000.c b/lte/rrc/asn/RAND-CDMA2000.c new file mode 100644 index 000000000..ea8390523 --- /dev/null +++ b/lte/rrc/asn/RAND-CDMA2000.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RAND-CDMA2000.h" + +int +RAND_CDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +RAND_CDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +RAND_CDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +RAND_CDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +RAND_CDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +RAND_CDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +RAND_CDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +RAND_CDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +RAND_CDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +RAND_CDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + RAND_CDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_RAND_CDMA2000_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_RAND_CDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RAND_CDMA2000 = { + "RAND-CDMA2000", + "RAND-CDMA2000", + RAND_CDMA2000_free, + RAND_CDMA2000_print, + RAND_CDMA2000_constraint, + RAND_CDMA2000_decode_ber, + RAND_CDMA2000_encode_der, + RAND_CDMA2000_decode_xer, + RAND_CDMA2000_encode_xer, + RAND_CDMA2000_decode_uper, + RAND_CDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RAND_CDMA2000_tags_1, + sizeof(asn_DEF_RAND_CDMA2000_tags_1) + /sizeof(asn_DEF_RAND_CDMA2000_tags_1[0]), /* 1 */ + asn_DEF_RAND_CDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_RAND_CDMA2000_tags_1) + /sizeof(asn_DEF_RAND_CDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_RAND_CDMA2000_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/RAND-CDMA2000.h b/lte/rrc/asn/RAND-CDMA2000.h new file mode 100644 index 000000000..caf96d129 --- /dev/null +++ b/lte/rrc/asn/RAND-CDMA2000.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RAND_CDMA2000_H_ +#define _RAND_CDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RAND-CDMA2000 */ +typedef BIT_STRING_t RAND_CDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAND_CDMA2000; +asn_struct_free_f RAND_CDMA2000_free; +asn_struct_print_f RAND_CDMA2000_print; +asn_constr_check_f RAND_CDMA2000_constraint; +ber_type_decoder_f RAND_CDMA2000_decode_ber; +der_type_encoder_f RAND_CDMA2000_encode_der; +xer_type_decoder_f RAND_CDMA2000_decode_xer; +xer_type_encoder_f RAND_CDMA2000_encode_xer; +per_type_decoder_f RAND_CDMA2000_decode_uper; +per_type_encoder_f RAND_CDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAND_CDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/RAT-Type.c b/lte/rrc/asn/RAT-Type.c new file mode 100644 index 000000000..38c2f3067 --- /dev/null +++ b/lte/rrc/asn/RAT-Type.c @@ -0,0 +1,160 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RAT-Type.h" + +int +RAT_Type_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +RAT_Type_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +RAT_Type_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + RAT_Type_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +RAT_Type_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +RAT_Type_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +RAT_Type_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +RAT_Type_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +RAT_Type_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +RAT_Type_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +RAT_Type_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + RAT_Type_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_RAT_Type_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_RAT_Type_value2enum_1[] = { + { 0, 5, "eutra" }, + { 1, 4, "utra" }, + { 2, 8, "geran-cs" }, + { 3, 8, "geran-ps" }, + { 4, 14, "cdma2000-1XRTT" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_RAT_Type_enum2value_1[] = { + 4, /* cdma2000-1XRTT(4) */ + 0, /* eutra(0) */ + 2, /* geran-cs(2) */ + 3, /* geran-ps(3) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 1 /* utra(1) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_RAT_Type_specs_1 = { + asn_MAP_RAT_Type_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_RAT_Type_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_RAT_Type_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RAT_Type = { + "RAT-Type", + "RAT-Type", + RAT_Type_free, + RAT_Type_print, + RAT_Type_constraint, + RAT_Type_decode_ber, + RAT_Type_encode_der, + RAT_Type_decode_xer, + RAT_Type_encode_xer, + RAT_Type_decode_uper, + RAT_Type_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RAT_Type_tags_1, + sizeof(asn_DEF_RAT_Type_tags_1) + /sizeof(asn_DEF_RAT_Type_tags_1[0]), /* 1 */ + asn_DEF_RAT_Type_tags_1, /* Same as above */ + sizeof(asn_DEF_RAT_Type_tags_1) + /sizeof(asn_DEF_RAT_Type_tags_1[0]), /* 1 */ + &asn_PER_type_RAT_Type_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_RAT_Type_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RAT-Type.h b/lte/rrc/asn/RAT-Type.h new file mode 100644 index 000000000..822a44f97 --- /dev/null +++ b/lte/rrc/asn/RAT-Type.h @@ -0,0 +1,56 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RAT_Type_H_ +#define _RAT_Type_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RAT_Type { + RAT_Type_eutra = 0, + RAT_Type_utra = 1, + RAT_Type_geran_cs = 2, + RAT_Type_geran_ps = 3, + RAT_Type_cdma2000_1XRTT = 4, + RAT_Type_spare3 = 5, + RAT_Type_spare2 = 6, + RAT_Type_spare1 = 7 + /* + * Enumeration is extensible + */ +} e_RAT_Type; + +/* RAT-Type */ +typedef long RAT_Type_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RAT_Type; +asn_struct_free_f RAT_Type_free; +asn_struct_print_f RAT_Type_print; +asn_constr_check_f RAT_Type_constraint; +ber_type_decoder_f RAT_Type_decode_ber; +der_type_encoder_f RAT_Type_encode_der; +xer_type_decoder_f RAT_Type_decode_xer; +xer_type_encoder_f RAT_Type_encode_xer; +per_type_decoder_f RAT_Type_decode_uper; +per_type_encoder_f RAT_Type_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RAT_Type_H_ */ +#include diff --git a/lte/rrc/asn/RF-Parameters-v1020.c b/lte/rrc/asn/RF-Parameters-v1020.c new file mode 100644 index 000000000..1cf091b77 --- /dev/null +++ b/lte/rrc/asn/RF-Parameters-v1020.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RF-Parameters-v1020.h" + +static asn_TYPE_member_t asn_MBR_RF_Parameters_v1020_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RF_Parameters_v1020, supportedBandCombination_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandCombination_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandCombination-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_RF_Parameters_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RF_Parameters_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* supportedBandCombination-r10 at 3829 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RF_Parameters_v1020_specs_1 = { + sizeof(struct RF_Parameters_v1020), + offsetof(struct RF_Parameters_v1020, _asn_ctx), + asn_MAP_RF_Parameters_v1020_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RF_Parameters_v1020 = { + "RF-Parameters-v1020", + "RF-Parameters-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RF_Parameters_v1020_tags_1, + sizeof(asn_DEF_RF_Parameters_v1020_tags_1) + /sizeof(asn_DEF_RF_Parameters_v1020_tags_1[0]), /* 1 */ + asn_DEF_RF_Parameters_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_RF_Parameters_v1020_tags_1) + /sizeof(asn_DEF_RF_Parameters_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RF_Parameters_v1020_1, + 1, /* Elements count */ + &asn_SPC_RF_Parameters_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RF-Parameters-v1020.h b/lte/rrc/asn/RF-Parameters-v1020.h new file mode 100644 index 000000000..a2ae7e3e6 --- /dev/null +++ b/lte/rrc/asn/RF-Parameters-v1020.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RF_Parameters_v1020_H_ +#define _RF_Parameters_v1020_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandCombination-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RF-Parameters-v1020 */ +typedef struct RF_Parameters_v1020 { + SupportedBandCombination_r10_t supportedBandCombination_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RF_Parameters_v1020_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RF_Parameters_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _RF_Parameters_v1020_H_ */ +#include diff --git a/lte/rrc/asn/RF-Parameters.c b/lte/rrc/asn/RF-Parameters.c new file mode 100644 index 000000000..fbd8f856f --- /dev/null +++ b/lte/rrc/asn/RF-Parameters.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RF-Parameters.h" + +static asn_TYPE_member_t asn_MBR_RF_Parameters_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RF_Parameters, supportedBandListEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SupportedBandListEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "supportedBandListEUTRA" + }, +}; +static ber_tlv_tag_t asn_DEF_RF_Parameters_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RF_Parameters_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* supportedBandListEUTRA at 3825 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RF_Parameters_specs_1 = { + sizeof(struct RF_Parameters), + offsetof(struct RF_Parameters, _asn_ctx), + asn_MAP_RF_Parameters_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RF_Parameters = { + "RF-Parameters", + "RF-Parameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RF_Parameters_tags_1, + sizeof(asn_DEF_RF_Parameters_tags_1) + /sizeof(asn_DEF_RF_Parameters_tags_1[0]), /* 1 */ + asn_DEF_RF_Parameters_tags_1, /* Same as above */ + sizeof(asn_DEF_RF_Parameters_tags_1) + /sizeof(asn_DEF_RF_Parameters_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RF_Parameters_1, + 1, /* Elements count */ + &asn_SPC_RF_Parameters_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RF-Parameters.h b/lte/rrc/asn/RF-Parameters.h new file mode 100644 index 000000000..ea77725ea --- /dev/null +++ b/lte/rrc/asn/RF-Parameters.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RF_Parameters_H_ +#define _RF_Parameters_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandListEUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RF-Parameters */ +typedef struct RF_Parameters { + SupportedBandListEUTRA_t supportedBandListEUTRA; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RF_Parameters_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RF_Parameters; + +#ifdef __cplusplus +} +#endif + +#endif /* _RF_Parameters_H_ */ +#include diff --git a/lte/rrc/asn/RLC-Config.c b/lte/rrc/asn/RLC-Config.c new file mode 100644 index 000000000..8c1c2b190 --- /dev/null +++ b/lte/rrc/asn/RLC-Config.c @@ -0,0 +1,323 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RLC-Config.h" + +static asn_per_constraints_t asn_PER_type_RLC_Config_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 3 } /* (0..3,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_am_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config__am, ul_AM_RLC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_AM_RLC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-AM-RLC" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config__am, dl_AM_RLC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_AM_RLC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-AM-RLC" + }, +}; +static ber_tlv_tag_t asn_DEF_am_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_am_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-AM-RLC at 2513 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dl-AM-RLC at 2515 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_am_specs_2 = { + sizeof(struct RLC_Config__am), + offsetof(struct RLC_Config__am, _asn_ctx), + asn_MAP_am_tag2el_2, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_am_2 = { + "am", + "am", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_am_tags_2, + sizeof(asn_DEF_am_tags_2) + /sizeof(asn_DEF_am_tags_2[0]) - 1, /* 1 */ + asn_DEF_am_tags_2, /* Same as above */ + sizeof(asn_DEF_am_tags_2) + /sizeof(asn_DEF_am_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_am_2, + 2, /* Elements count */ + &asn_SPC_am_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_um_Bi_Directional_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config__um_Bi_Directional, ul_UM_RLC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_UM_RLC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-UM-RLC" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config__um_Bi_Directional, dl_UM_RLC), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_UM_RLC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-UM-RLC" + }, +}; +static ber_tlv_tag_t asn_DEF_um_Bi_Directional_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_um_Bi_Directional_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-UM-RLC at 2517 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dl-UM-RLC at 2519 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_um_Bi_Directional_specs_5 = { + sizeof(struct RLC_Config__um_Bi_Directional), + offsetof(struct RLC_Config__um_Bi_Directional, _asn_ctx), + asn_MAP_um_Bi_Directional_tag2el_5, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_um_Bi_Directional_5 = { + "um-Bi-Directional", + "um-Bi-Directional", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_um_Bi_Directional_tags_5, + sizeof(asn_DEF_um_Bi_Directional_tags_5) + /sizeof(asn_DEF_um_Bi_Directional_tags_5[0]) - 1, /* 1 */ + asn_DEF_um_Bi_Directional_tags_5, /* Same as above */ + sizeof(asn_DEF_um_Bi_Directional_tags_5) + /sizeof(asn_DEF_um_Bi_Directional_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_um_Bi_Directional_5, + 2, /* Elements count */ + &asn_SPC_um_Bi_Directional_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_um_Uni_Directional_UL_8[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config__um_Uni_Directional_UL, ul_UM_RLC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_UM_RLC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-UM-RLC" + }, +}; +static ber_tlv_tag_t asn_DEF_um_Uni_Directional_UL_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_um_Uni_Directional_UL_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ul-UM-RLC at 2522 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_um_Uni_Directional_UL_specs_8 = { + sizeof(struct RLC_Config__um_Uni_Directional_UL), + offsetof(struct RLC_Config__um_Uni_Directional_UL, _asn_ctx), + asn_MAP_um_Uni_Directional_UL_tag2el_8, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_um_Uni_Directional_UL_8 = { + "um-Uni-Directional-UL", + "um-Uni-Directional-UL", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_um_Uni_Directional_UL_tags_8, + sizeof(asn_DEF_um_Uni_Directional_UL_tags_8) + /sizeof(asn_DEF_um_Uni_Directional_UL_tags_8[0]) - 1, /* 1 */ + asn_DEF_um_Uni_Directional_UL_tags_8, /* Same as above */ + sizeof(asn_DEF_um_Uni_Directional_UL_tags_8) + /sizeof(asn_DEF_um_Uni_Directional_UL_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_um_Uni_Directional_UL_8, + 1, /* Elements count */ + &asn_SPC_um_Uni_Directional_UL_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_um_Uni_Directional_DL_10[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config__um_Uni_Directional_DL, dl_UM_RLC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DL_UM_RLC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-UM-RLC" + }, +}; +static ber_tlv_tag_t asn_DEF_um_Uni_Directional_DL_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_um_Uni_Directional_DL_tag2el_10[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* dl-UM-RLC at 2525 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_um_Uni_Directional_DL_specs_10 = { + sizeof(struct RLC_Config__um_Uni_Directional_DL), + offsetof(struct RLC_Config__um_Uni_Directional_DL, _asn_ctx), + asn_MAP_um_Uni_Directional_DL_tag2el_10, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_um_Uni_Directional_DL_10 = { + "um-Uni-Directional-DL", + "um-Uni-Directional-DL", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_um_Uni_Directional_DL_tags_10, + sizeof(asn_DEF_um_Uni_Directional_DL_tags_10) + /sizeof(asn_DEF_um_Uni_Directional_DL_tags_10[0]) - 1, /* 1 */ + asn_DEF_um_Uni_Directional_DL_tags_10, /* Same as above */ + sizeof(asn_DEF_um_Uni_Directional_DL_tags_10) + /sizeof(asn_DEF_um_Uni_Directional_DL_tags_10[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_um_Uni_Directional_DL_10, + 1, /* Elements count */ + &asn_SPC_um_Uni_Directional_DL_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RLC_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config, choice.am), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_am_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "am" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config, choice.um_Bi_Directional), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_um_Bi_Directional_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "um-Bi-Directional" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config, choice.um_Uni_Directional_UL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_um_Uni_Directional_UL_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "um-Uni-Directional-UL" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLC_Config, choice.um_Uni_Directional_DL), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_um_Uni_Directional_DL_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "um-Uni-Directional-DL" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_RLC_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* am at 2513 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* um-Bi-Directional at 2517 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* um-Uni-Directional-UL at 2522 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* um-Uni-Directional-DL at 2525 */ +}; +static asn_CHOICE_specifics_t asn_SPC_RLC_Config_specs_1 = { + sizeof(struct RLC_Config), + offsetof(struct RLC_Config, _asn_ctx), + offsetof(struct RLC_Config, present), + sizeof(((struct RLC_Config *)0)->present), + asn_MAP_RLC_Config_tag2el_1, + 4, /* Count of tags in the map */ + 0, + 4 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RLC_Config = { + "RLC-Config", + "RLC-Config", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_RLC_Config_constr_1, + asn_MBR_RLC_Config_1, + 4, /* Elements count */ + &asn_SPC_RLC_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RLC-Config.h b/lte/rrc/asn/RLC-Config.h new file mode 100644 index 000000000..7eb7d4a16 --- /dev/null +++ b/lte/rrc/asn/RLC-Config.h @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RLC_Config_H_ +#define _RLC_Config_H_ + + +#include + +/* Including external dependencies */ +#include "UL-AM-RLC.h" +#include "DL-AM-RLC.h" +#include +#include "UL-UM-RLC.h" +#include "DL-UM-RLC.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RLC_Config_PR { + RLC_Config_PR_NOTHING, /* No components present */ + RLC_Config_PR_am, + RLC_Config_PR_um_Bi_Directional, + RLC_Config_PR_um_Uni_Directional_UL, + RLC_Config_PR_um_Uni_Directional_DL, + /* Extensions may appear below */ + +} RLC_Config_PR; + +/* RLC-Config */ +typedef struct RLC_Config { + RLC_Config_PR present; + union RLC_Config_u { + struct RLC_Config__am { + UL_AM_RLC_t ul_AM_RLC; + DL_AM_RLC_t dl_AM_RLC; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } am; + struct RLC_Config__um_Bi_Directional { + UL_UM_RLC_t ul_UM_RLC; + DL_UM_RLC_t dl_UM_RLC; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } um_Bi_Directional; + struct RLC_Config__um_Uni_Directional_UL { + UL_UM_RLC_t ul_UM_RLC; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } um_Uni_Directional_UL; + struct RLC_Config__um_Uni_Directional_DL { + DL_UM_RLC_t dl_UM_RLC; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } um_Uni_Directional_DL; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLC_Config_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RLC_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _RLC_Config_H_ */ +#include diff --git a/lte/rrc/asn/RLF-Report-r9.c b/lte/rrc/asn/RLF-Report-r9.c new file mode 100644 index 000000000..ac1b7a63c --- /dev/null +++ b/lte/rrc/asn/RLF-Report-r9.c @@ -0,0 +1,577 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RLF-Report-r9.h" + +static int +connectionFailureType_r10_18_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +connectionFailureType_r10_18_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +connectionFailureType_r10_18_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +connectionFailureType_r10_18_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +connectionFailureType_r10_18_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +connectionFailureType_r10_18_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +connectionFailureType_r10_18_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +connectionFailureType_r10_18_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +connectionFailureType_r10_18_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +connectionFailureType_r10_18_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + connectionFailureType_r10_18_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_timeConnFailure_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_failedPCellId_r10_constr_11 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_connectionFailureType_r10_constr_18 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_timeConnFailure_r10_constr_17 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_measResultLastServCell_r9_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLF_Report_r9__measResultLastServCell_r9, rsrpResult_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrpResult-r9" + }, + { ATF_POINTER, 1, offsetof(struct RLF_Report_r9__measResultLastServCell_r9, rsrqResult_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rsrqResult-r9" + }, +}; +static int asn_MAP_measResultLastServCell_r9_oms_2[] = { 1 }; +static ber_tlv_tag_t asn_DEF_measResultLastServCell_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultLastServCell_r9_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rsrpResult-r9 at 1341 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rsrqResult-r9 at 1342 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultLastServCell_r9_specs_2 = { + sizeof(struct RLF_Report_r9__measResultLastServCell_r9), + offsetof(struct RLF_Report_r9__measResultLastServCell_r9, _asn_ctx), + asn_MAP_measResultLastServCell_r9_tag2el_2, + 2, /* Count of tags in the map */ + asn_MAP_measResultLastServCell_r9_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultLastServCell_r9_2 = { + "measResultLastServCell-r9", + "measResultLastServCell-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultLastServCell_r9_tags_2, + sizeof(asn_DEF_measResultLastServCell_r9_tags_2) + /sizeof(asn_DEF_measResultLastServCell_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_measResultLastServCell_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_measResultLastServCell_r9_tags_2) + /sizeof(asn_DEF_measResultLastServCell_r9_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultLastServCell_r9_2, + 2, /* Elements count */ + &asn_SPC_measResultLastServCell_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_measResultNeighCells_r9_5[] = { + { ATF_POINTER, 4, offsetof(struct RLF_Report_r9__measResultNeighCells_r9, measResultListEUTRA_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2EUTRA_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListEUTRA-r9" + }, + { ATF_POINTER, 3, offsetof(struct RLF_Report_r9__measResultNeighCells_r9, measResultListUTRA_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2UTRA_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListUTRA-r9" + }, + { ATF_POINTER, 2, offsetof(struct RLF_Report_r9__measResultNeighCells_r9, measResultListGERAN_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultListGERAN-r9" + }, + { ATF_POINTER, 1, offsetof(struct RLF_Report_r9__measResultNeighCells_r9, measResultsCDMA2000_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasResultList2CDMA2000_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultsCDMA2000-r9" + }, +}; +static int asn_MAP_measResultNeighCells_r9_oms_5[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_measResultNeighCells_r9_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_measResultNeighCells_r9_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measResultListEUTRA-r9 at 1345 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultListUTRA-r9 at 1346 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* measResultListGERAN-r9 at 1347 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* measResultsCDMA2000-r9 at 1348 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_measResultNeighCells_r9_specs_5 = { + sizeof(struct RLF_Report_r9__measResultNeighCells_r9), + offsetof(struct RLF_Report_r9__measResultNeighCells_r9, _asn_ctx), + asn_MAP_measResultNeighCells_r9_tag2el_5, + 4, /* Count of tags in the map */ + asn_MAP_measResultNeighCells_r9_oms_5, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_measResultNeighCells_r9_5 = { + "measResultNeighCells-r9", + "measResultNeighCells-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_measResultNeighCells_r9_tags_5, + sizeof(asn_DEF_measResultNeighCells_r9_tags_5) + /sizeof(asn_DEF_measResultNeighCells_r9_tags_5[0]) - 1, /* 1 */ + asn_DEF_measResultNeighCells_r9_tags_5, /* Same as above */ + sizeof(asn_DEF_measResultNeighCells_r9_tags_5) + /sizeof(asn_DEF_measResultNeighCells_r9_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_measResultNeighCells_r9_5, + 4, /* Elements count */ + &asn_SPC_measResultNeighCells_r9_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_pci_arfcn_r10_13[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLF_Report_r9__failedPCellId_r10__pci_arfcn_r10, physCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_Report_r9__failedPCellId_r10__pci_arfcn_r10, carrierFreq_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_pci_arfcn_r10_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_pci_arfcn_r10_tag2el_13[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r10 at 1354 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* carrierFreq-r10 at 1356 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_pci_arfcn_r10_specs_13 = { + sizeof(struct RLF_Report_r9__failedPCellId_r10__pci_arfcn_r10), + offsetof(struct RLF_Report_r9__failedPCellId_r10__pci_arfcn_r10, _asn_ctx), + asn_MAP_pci_arfcn_r10_tag2el_13, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pci_arfcn_r10_13 = { + "pci-arfcn-r10", + "pci-arfcn-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pci_arfcn_r10_tags_13, + sizeof(asn_DEF_pci_arfcn_r10_tags_13) + /sizeof(asn_DEF_pci_arfcn_r10_tags_13[0]) - 1, /* 1 */ + asn_DEF_pci_arfcn_r10_tags_13, /* Same as above */ + sizeof(asn_DEF_pci_arfcn_r10_tags_13) + /sizeof(asn_DEF_pci_arfcn_r10_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_pci_arfcn_r10_13, + 2, /* Elements count */ + &asn_SPC_pci_arfcn_r10_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_failedPCellId_r10_11[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLF_Report_r9__failedPCellId_r10, choice.cellGlobalId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellGlobalId-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_Report_r9__failedPCellId_r10, choice.pci_arfcn_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_pci_arfcn_r10_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pci-arfcn-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_failedPCellId_r10_tag2el_11[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellGlobalId-r10 at 1352 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pci-arfcn-r10 at 1354 */ +}; +static asn_CHOICE_specifics_t asn_SPC_failedPCellId_r10_specs_11 = { + sizeof(struct RLF_Report_r9__failedPCellId_r10), + offsetof(struct RLF_Report_r9__failedPCellId_r10, _asn_ctx), + offsetof(struct RLF_Report_r9__failedPCellId_r10, present), + sizeof(((struct RLF_Report_r9__failedPCellId_r10 *)0)->present), + asn_MAP_failedPCellId_r10_tag2el_11, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_failedPCellId_r10_11 = { + "failedPCellId-r10", + "failedPCellId-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_failedPCellId_r10_constr_11, + asn_MBR_failedPCellId_r10_11, + 2, /* Elements count */ + &asn_SPC_failedPCellId_r10_specs_11 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_connectionFailureType_r10_value2enum_18[] = { + { 0, 3, "rlf" }, + { 1, 3, "hof" } +}; +static unsigned int asn_MAP_connectionFailureType_r10_enum2value_18[] = { + 1, /* hof(1) */ + 0 /* rlf(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_connectionFailureType_r10_specs_18 = { + asn_MAP_connectionFailureType_r10_value2enum_18, /* "tag" => N; sorted by tag */ + asn_MAP_connectionFailureType_r10_enum2value_18, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_connectionFailureType_r10_tags_18[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_connectionFailureType_r10_18 = { + "connectionFailureType-r10", + "connectionFailureType-r10", + connectionFailureType_r10_18_free, + connectionFailureType_r10_18_print, + connectionFailureType_r10_18_constraint, + connectionFailureType_r10_18_decode_ber, + connectionFailureType_r10_18_encode_der, + connectionFailureType_r10_18_decode_xer, + connectionFailureType_r10_18_encode_xer, + connectionFailureType_r10_18_decode_uper, + connectionFailureType_r10_18_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_connectionFailureType_r10_tags_18, + sizeof(asn_DEF_connectionFailureType_r10_tags_18) + /sizeof(asn_DEF_connectionFailureType_r10_tags_18[0]) - 1, /* 1 */ + asn_DEF_connectionFailureType_r10_tags_18, /* Same as above */ + sizeof(asn_DEF_connectionFailureType_r10_tags_18) + /sizeof(asn_DEF_connectionFailureType_r10_tags_18[0]), /* 2 */ + &asn_PER_type_connectionFailureType_r10_constr_18, + 0, 0, /* Defined elsewhere */ + &asn_SPC_connectionFailureType_r10_specs_18 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RLF_Report_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLF_Report_r9, measResultLastServCell_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_measResultLastServCell_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultLastServCell-r9" + }, + { ATF_POINTER, 7, offsetof(struct RLF_Report_r9, measResultNeighCells_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_measResultNeighCells_r9_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measResultNeighCells-r9" + }, + { ATF_POINTER, 6, offsetof(struct RLF_Report_r9, locationInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LocationInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "locationInfo-r10" + }, + { ATF_POINTER, 5, offsetof(struct RLF_Report_r9, failedPCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_failedPCellId_r10_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "failedPCellId-r10" + }, + { ATF_POINTER, 4, offsetof(struct RLF_Report_r9, reestablishmentCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reestablishmentCellId-r10" + }, + { ATF_POINTER, 3, offsetof(struct RLF_Report_r9, timeConnFailure_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_timeConnFailure_r10_constraint_1, + &asn_PER_memb_timeConnFailure_r10_constr_17, + 0, + "timeConnFailure-r10" + }, + { ATF_POINTER, 2, offsetof(struct RLF_Report_r9, connectionFailureType_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_connectionFailureType_r10_18, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "connectionFailureType-r10" + }, + { ATF_POINTER, 1, offsetof(struct RLF_Report_r9, previousPCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellGlobalIdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "previousPCellId-r10" + }, +}; +static int asn_MAP_RLF_Report_r9_oms_1[] = { 1, 2, 3, 4, 5, 6, 7 }; +static ber_tlv_tag_t asn_DEF_RLF_Report_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RLF_Report_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measResultLastServCell-r9 at 1341 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measResultNeighCells-r9 at 1345 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* locationInfo-r10 at 1350 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* failedPCellId-r10 at 1352 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* reestablishmentCellId-r10 at 1358 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* timeConnFailure-r10 at 1359 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* connectionFailureType-r10 at 1360 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* previousPCellId-r10 at 1361 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RLF_Report_r9_specs_1 = { + sizeof(struct RLF_Report_r9), + offsetof(struct RLF_Report_r9, _asn_ctx), + asn_MAP_RLF_Report_r9_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_RLF_Report_r9_oms_1, /* Optional members */ + 7, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RLF_Report_r9 = { + "RLF-Report-r9", + "RLF-Report-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RLF_Report_r9_tags_1, + sizeof(asn_DEF_RLF_Report_r9_tags_1) + /sizeof(asn_DEF_RLF_Report_r9_tags_1[0]), /* 1 */ + asn_DEF_RLF_Report_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_RLF_Report_r9_tags_1) + /sizeof(asn_DEF_RLF_Report_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RLF_Report_r9_1, + 8, /* Elements count */ + &asn_SPC_RLF_Report_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RLF-Report-r9.h b/lte/rrc/asn/RLF-Report-r9.h new file mode 100644 index 000000000..b110d319a --- /dev/null +++ b/lte/rrc/asn/RLF-Report-r9.h @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RLF_Report_r9_H_ +#define _RLF_Report_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "RSRP-Range.h" +#include "RSRQ-Range.h" +#include +#include "CellGlobalIdEUTRA.h" +#include "PhysCellId.h" +#include "ARFCN-ValueEUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RLF_Report_r9__failedPCellId_r10_PR { + RLF_Report_r9__failedPCellId_r10_PR_NOTHING, /* No components present */ + RLF_Report_r9__failedPCellId_r10_PR_cellGlobalId_r10, + RLF_Report_r9__failedPCellId_r10_PR_pci_arfcn_r10 +} RLF_Report_r9__failedPCellId_r10_PR; +typedef enum RLF_Report_r9__connectionFailureType_r10 { + RLF_Report_r9__connectionFailureType_r10_rlf = 0, + RLF_Report_r9__connectionFailureType_r10_hof = 1 +} e_RLF_Report_r9__connectionFailureType_r10; + +/* Forward declarations */ +struct LocationInfo_r10; +struct CellGlobalIdEUTRA; +struct MeasResultList2EUTRA_r9; +struct MeasResultList2UTRA_r9; +struct MeasResultListGERAN; +struct MeasResultList2CDMA2000_r9; + +/* RLF-Report-r9 */ +typedef struct RLF_Report_r9 { + struct RLF_Report_r9__measResultLastServCell_r9 { + RSRP_Range_t rsrpResult_r9; + RSRQ_Range_t *rsrqResult_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } measResultLastServCell_r9; + struct RLF_Report_r9__measResultNeighCells_r9 { + struct MeasResultList2EUTRA_r9 *measResultListEUTRA_r9 /* OPTIONAL */; + struct MeasResultList2UTRA_r9 *measResultListUTRA_r9 /* OPTIONAL */; + struct MeasResultListGERAN *measResultListGERAN_r9 /* OPTIONAL */; + struct MeasResultList2CDMA2000_r9 *measResultsCDMA2000_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *measResultNeighCells_r9; + struct LocationInfo_r10 *locationInfo_r10 /* OPTIONAL */; + struct RLF_Report_r9__failedPCellId_r10 { + RLF_Report_r9__failedPCellId_r10_PR present; + union RLF_Report_r9__failedPCellId_r10_u { + CellGlobalIdEUTRA_t cellGlobalId_r10; + struct RLF_Report_r9__failedPCellId_r10__pci_arfcn_r10 { + PhysCellId_t physCellId_r10; + ARFCN_ValueEUTRA_t carrierFreq_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pci_arfcn_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *failedPCellId_r10; + struct CellGlobalIdEUTRA *reestablishmentCellId_r10 /* OPTIONAL */; + long *timeConnFailure_r10 /* OPTIONAL */; + long *connectionFailureType_r10 /* OPTIONAL */; + struct CellGlobalIdEUTRA *previousPCellId_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLF_Report_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_connectionFailureType_r10_18; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RLF_Report_r9; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "LocationInfo-r10.h" +#include "CellGlobalIdEUTRA.h" +#include "MeasResultList2EUTRA-r9.h" +#include "MeasResultList2UTRA-r9.h" +#include "MeasResultListGERAN.h" +#include "MeasResultList2CDMA2000-r9.h" + +#endif /* _RLF_Report_r9_H_ */ +#include diff --git a/lte/rrc/asn/RLF-TimersAndConstants-r9.c b/lte/rrc/asn/RLF-TimersAndConstants-r9.c new file mode 100644 index 000000000..c0a7016c0 --- /dev/null +++ b/lte/rrc/asn/RLF-TimersAndConstants-r9.c @@ -0,0 +1,915 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RLF-TimersAndConstants-r9.h" + +static int +t301_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t301_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t301_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t301_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t301_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t301_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t301_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t301_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t301_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t301_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t301_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t301_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +t310_r9_13_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t310_r9_13_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t310_r9_13_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t310_r9_13_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t310_r9_13_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t310_r9_13_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t310_r9_13_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t310_r9_13_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t310_r9_13_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t310_r9_13_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t310_r9_13_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t310_r9_13_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +n310_r9_21_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +n310_r9_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +n310_r9_21_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + n310_r9_21_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +n310_r9_21_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +n310_r9_21_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +n310_r9_21_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +n310_r9_21_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +n310_r9_21_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +n310_r9_21_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +n310_r9_21_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + n310_r9_21_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +t311_r9_30_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t311_r9_30_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t311_r9_30_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t311_r9_30_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t311_r9_30_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t311_r9_30_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t311_r9_30_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t311_r9_30_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t311_r9_30_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t311_r9_30_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t311_r9_30_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t311_r9_30_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +n311_r9_38_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +n311_r9_38_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +n311_r9_38_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + n311_r9_38_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +n311_r9_38_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +n311_r9_38_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +n311_r9_38_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +n311_r9_38_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +n311_r9_38_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +n311_r9_38_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +n311_r9_38_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + n311_r9_38_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_t301_r9_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_t310_r9_constr_13 = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n310_r9_constr_21 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_t311_r9_constr_30 = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n311_r9_constr_38 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_RLF_TimersAndConstants_r9_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_t301_r9_value2enum_4[] = { + { 0, 5, "ms100" }, + { 1, 5, "ms200" }, + { 2, 5, "ms300" }, + { 3, 5, "ms400" }, + { 4, 5, "ms600" }, + { 5, 6, "ms1000" }, + { 6, 6, "ms1500" }, + { 7, 6, "ms2000" } +}; +static unsigned int asn_MAP_t301_r9_enum2value_4[] = { + 0, /* ms100(0) */ + 5, /* ms1000(5) */ + 6, /* ms1500(6) */ + 1, /* ms200(1) */ + 7, /* ms2000(7) */ + 2, /* ms300(2) */ + 3, /* ms400(3) */ + 4 /* ms600(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t301_r9_specs_4 = { + asn_MAP_t301_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_t301_r9_enum2value_4, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t301_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t301_r9_4 = { + "t301-r9", + "t301-r9", + t301_r9_4_free, + t301_r9_4_print, + t301_r9_4_constraint, + t301_r9_4_decode_ber, + t301_r9_4_encode_der, + t301_r9_4_decode_xer, + t301_r9_4_encode_xer, + t301_r9_4_decode_uper, + t301_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t301_r9_tags_4, + sizeof(asn_DEF_t301_r9_tags_4) + /sizeof(asn_DEF_t301_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_t301_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_t301_r9_tags_4) + /sizeof(asn_DEF_t301_r9_tags_4[0]), /* 2 */ + &asn_PER_type_t301_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t301_r9_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_t310_r9_value2enum_13[] = { + { 0, 3, "ms0" }, + { 1, 4, "ms50" }, + { 2, 5, "ms100" }, + { 3, 5, "ms200" }, + { 4, 5, "ms500" }, + { 5, 6, "ms1000" }, + { 6, 6, "ms2000" } +}; +static unsigned int asn_MAP_t310_r9_enum2value_13[] = { + 0, /* ms0(0) */ + 2, /* ms100(2) */ + 5, /* ms1000(5) */ + 3, /* ms200(3) */ + 6, /* ms2000(6) */ + 1, /* ms50(1) */ + 4 /* ms500(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t310_r9_specs_13 = { + asn_MAP_t310_r9_value2enum_13, /* "tag" => N; sorted by tag */ + asn_MAP_t310_r9_enum2value_13, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t310_r9_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t310_r9_13 = { + "t310-r9", + "t310-r9", + t310_r9_13_free, + t310_r9_13_print, + t310_r9_13_constraint, + t310_r9_13_decode_ber, + t310_r9_13_encode_der, + t310_r9_13_decode_xer, + t310_r9_13_encode_xer, + t310_r9_13_decode_uper, + t310_r9_13_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t310_r9_tags_13, + sizeof(asn_DEF_t310_r9_tags_13) + /sizeof(asn_DEF_t310_r9_tags_13[0]) - 1, /* 1 */ + asn_DEF_t310_r9_tags_13, /* Same as above */ + sizeof(asn_DEF_t310_r9_tags_13) + /sizeof(asn_DEF_t310_r9_tags_13[0]), /* 2 */ + &asn_PER_type_t310_r9_constr_13, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t310_r9_specs_13 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_n310_r9_value2enum_21[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n3" }, + { 3, 2, "n4" }, + { 4, 2, "n6" }, + { 5, 2, "n8" }, + { 6, 3, "n10" }, + { 7, 3, "n20" } +}; +static unsigned int asn_MAP_n310_r9_enum2value_21[] = { + 0, /* n1(0) */ + 6, /* n10(6) */ + 1, /* n2(1) */ + 7, /* n20(7) */ + 2, /* n3(2) */ + 3, /* n4(3) */ + 4, /* n6(4) */ + 5 /* n8(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_n310_r9_specs_21 = { + asn_MAP_n310_r9_value2enum_21, /* "tag" => N; sorted by tag */ + asn_MAP_n310_r9_enum2value_21, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_n310_r9_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n310_r9_21 = { + "n310-r9", + "n310-r9", + n310_r9_21_free, + n310_r9_21_print, + n310_r9_21_constraint, + n310_r9_21_decode_ber, + n310_r9_21_encode_der, + n310_r9_21_decode_xer, + n310_r9_21_encode_xer, + n310_r9_21_decode_uper, + n310_r9_21_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n310_r9_tags_21, + sizeof(asn_DEF_n310_r9_tags_21) + /sizeof(asn_DEF_n310_r9_tags_21[0]) - 1, /* 1 */ + asn_DEF_n310_r9_tags_21, /* Same as above */ + sizeof(asn_DEF_n310_r9_tags_21) + /sizeof(asn_DEF_n310_r9_tags_21[0]), /* 2 */ + &asn_PER_type_n310_r9_constr_21, + 0, 0, /* Defined elsewhere */ + &asn_SPC_n310_r9_specs_21 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_t311_r9_value2enum_30[] = { + { 0, 6, "ms1000" }, + { 1, 6, "ms3000" }, + { 2, 6, "ms5000" }, + { 3, 7, "ms10000" }, + { 4, 7, "ms15000" }, + { 5, 7, "ms20000" }, + { 6, 7, "ms30000" } +}; +static unsigned int asn_MAP_t311_r9_enum2value_30[] = { + 0, /* ms1000(0) */ + 3, /* ms10000(3) */ + 4, /* ms15000(4) */ + 5, /* ms20000(5) */ + 1, /* ms3000(1) */ + 6, /* ms30000(6) */ + 2 /* ms5000(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t311_r9_specs_30 = { + asn_MAP_t311_r9_value2enum_30, /* "tag" => N; sorted by tag */ + asn_MAP_t311_r9_enum2value_30, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t311_r9_tags_30[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t311_r9_30 = { + "t311-r9", + "t311-r9", + t311_r9_30_free, + t311_r9_30_print, + t311_r9_30_constraint, + t311_r9_30_decode_ber, + t311_r9_30_encode_der, + t311_r9_30_decode_xer, + t311_r9_30_encode_xer, + t311_r9_30_decode_uper, + t311_r9_30_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t311_r9_tags_30, + sizeof(asn_DEF_t311_r9_tags_30) + /sizeof(asn_DEF_t311_r9_tags_30[0]) - 1, /* 1 */ + asn_DEF_t311_r9_tags_30, /* Same as above */ + sizeof(asn_DEF_t311_r9_tags_30) + /sizeof(asn_DEF_t311_r9_tags_30[0]), /* 2 */ + &asn_PER_type_t311_r9_constr_30, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t311_r9_specs_30 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_n311_r9_value2enum_38[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n3" }, + { 3, 2, "n4" }, + { 4, 2, "n5" }, + { 5, 2, "n6" }, + { 6, 2, "n8" }, + { 7, 3, "n10" } +}; +static unsigned int asn_MAP_n311_r9_enum2value_38[] = { + 0, /* n1(0) */ + 7, /* n10(7) */ + 1, /* n2(1) */ + 2, /* n3(2) */ + 3, /* n4(3) */ + 4, /* n5(4) */ + 5, /* n6(5) */ + 6 /* n8(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_n311_r9_specs_38 = { + asn_MAP_n311_r9_value2enum_38, /* "tag" => N; sorted by tag */ + asn_MAP_n311_r9_enum2value_38, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_n311_r9_tags_38[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n311_r9_38 = { + "n311-r9", + "n311-r9", + n311_r9_38_free, + n311_r9_38_print, + n311_r9_38_constraint, + n311_r9_38_decode_ber, + n311_r9_38_encode_der, + n311_r9_38_decode_xer, + n311_r9_38_encode_xer, + n311_r9_38_decode_uper, + n311_r9_38_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n311_r9_tags_38, + sizeof(asn_DEF_n311_r9_tags_38) + /sizeof(asn_DEF_n311_r9_tags_38[0]) - 1, /* 1 */ + asn_DEF_n311_r9_tags_38, /* Same as above */ + sizeof(asn_DEF_n311_r9_tags_38) + /sizeof(asn_DEF_n311_r9_tags_38[0]), /* 2 */ + &asn_PER_type_n311_r9_constr_38, + 0, 0, /* Defined elsewhere */ + &asn_SPC_n311_r9_specs_38 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9__setup, t301_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t301_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t301-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9__setup, t310_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t310_r9_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t310-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9__setup, n310_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_n310_r9_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n310-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9__setup, t311_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t311_r9_30, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t311-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9__setup, n311_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_n311_r9_38, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n311-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t301-r9 at 2599 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* t310-r9 at 2602 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* n310-r9 at 2604 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* t311-r9 at 2606 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* n311-r9 at 2609 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct RLF_TimersAndConstants_r9__setup), + offsetof(struct RLF_TimersAndConstants_r9__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 5, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* Start extensions */ + 6 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 5, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RLF_TimersAndConstants_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct RLF_TimersAndConstants_r9, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_RLF_TimersAndConstants_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2596 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2600 */ +}; +static asn_CHOICE_specifics_t asn_SPC_RLF_TimersAndConstants_r9_specs_1 = { + sizeof(struct RLF_TimersAndConstants_r9), + offsetof(struct RLF_TimersAndConstants_r9, _asn_ctx), + offsetof(struct RLF_TimersAndConstants_r9, present), + sizeof(((struct RLF_TimersAndConstants_r9 *)0)->present), + asn_MAP_RLF_TimersAndConstants_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RLF_TimersAndConstants_r9 = { + "RLF-TimersAndConstants-r9", + "RLF-TimersAndConstants-r9", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_RLF_TimersAndConstants_r9_constr_1, + asn_MBR_RLF_TimersAndConstants_r9_1, + 2, /* Elements count */ + &asn_SPC_RLF_TimersAndConstants_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RLF-TimersAndConstants-r9.h b/lte/rrc/asn/RLF-TimersAndConstants-r9.h new file mode 100644 index 000000000..df7e247d2 --- /dev/null +++ b/lte/rrc/asn/RLF-TimersAndConstants-r9.h @@ -0,0 +1,117 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RLF_TimersAndConstants_r9_H_ +#define _RLF_TimersAndConstants_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RLF_TimersAndConstants_r9_PR { + RLF_TimersAndConstants_r9_PR_NOTHING, /* No components present */ + RLF_TimersAndConstants_r9_PR_release, + RLF_TimersAndConstants_r9_PR_setup +} RLF_TimersAndConstants_r9_PR; +typedef enum RLF_TimersAndConstants_r9__setup__t301_r9 { + RLF_TimersAndConstants_r9__setup__t301_r9_ms100 = 0, + RLF_TimersAndConstants_r9__setup__t301_r9_ms200 = 1, + RLF_TimersAndConstants_r9__setup__t301_r9_ms300 = 2, + RLF_TimersAndConstants_r9__setup__t301_r9_ms400 = 3, + RLF_TimersAndConstants_r9__setup__t301_r9_ms600 = 4, + RLF_TimersAndConstants_r9__setup__t301_r9_ms1000 = 5, + RLF_TimersAndConstants_r9__setup__t301_r9_ms1500 = 6, + RLF_TimersAndConstants_r9__setup__t301_r9_ms2000 = 7 +} e_RLF_TimersAndConstants_r9__setup__t301_r9; +typedef enum RLF_TimersAndConstants_r9__setup__t310_r9 { + RLF_TimersAndConstants_r9__setup__t310_r9_ms0 = 0, + RLF_TimersAndConstants_r9__setup__t310_r9_ms50 = 1, + RLF_TimersAndConstants_r9__setup__t310_r9_ms100 = 2, + RLF_TimersAndConstants_r9__setup__t310_r9_ms200 = 3, + RLF_TimersAndConstants_r9__setup__t310_r9_ms500 = 4, + RLF_TimersAndConstants_r9__setup__t310_r9_ms1000 = 5, + RLF_TimersAndConstants_r9__setup__t310_r9_ms2000 = 6 +} e_RLF_TimersAndConstants_r9__setup__t310_r9; +typedef enum RLF_TimersAndConstants_r9__setup__n310_r9 { + RLF_TimersAndConstants_r9__setup__n310_r9_n1 = 0, + RLF_TimersAndConstants_r9__setup__n310_r9_n2 = 1, + RLF_TimersAndConstants_r9__setup__n310_r9_n3 = 2, + RLF_TimersAndConstants_r9__setup__n310_r9_n4 = 3, + RLF_TimersAndConstants_r9__setup__n310_r9_n6 = 4, + RLF_TimersAndConstants_r9__setup__n310_r9_n8 = 5, + RLF_TimersAndConstants_r9__setup__n310_r9_n10 = 6, + RLF_TimersAndConstants_r9__setup__n310_r9_n20 = 7 +} e_RLF_TimersAndConstants_r9__setup__n310_r9; +typedef enum RLF_TimersAndConstants_r9__setup__t311_r9 { + RLF_TimersAndConstants_r9__setup__t311_r9_ms1000 = 0, + RLF_TimersAndConstants_r9__setup__t311_r9_ms3000 = 1, + RLF_TimersAndConstants_r9__setup__t311_r9_ms5000 = 2, + RLF_TimersAndConstants_r9__setup__t311_r9_ms10000 = 3, + RLF_TimersAndConstants_r9__setup__t311_r9_ms15000 = 4, + RLF_TimersAndConstants_r9__setup__t311_r9_ms20000 = 5, + RLF_TimersAndConstants_r9__setup__t311_r9_ms30000 = 6 +} e_RLF_TimersAndConstants_r9__setup__t311_r9; +typedef enum RLF_TimersAndConstants_r9__setup__n311_r9 { + RLF_TimersAndConstants_r9__setup__n311_r9_n1 = 0, + RLF_TimersAndConstants_r9__setup__n311_r9_n2 = 1, + RLF_TimersAndConstants_r9__setup__n311_r9_n3 = 2, + RLF_TimersAndConstants_r9__setup__n311_r9_n4 = 3, + RLF_TimersAndConstants_r9__setup__n311_r9_n5 = 4, + RLF_TimersAndConstants_r9__setup__n311_r9_n6 = 5, + RLF_TimersAndConstants_r9__setup__n311_r9_n8 = 6, + RLF_TimersAndConstants_r9__setup__n311_r9_n10 = 7 +} e_RLF_TimersAndConstants_r9__setup__n311_r9; + +/* RLF-TimersAndConstants-r9 */ +typedef struct RLF_TimersAndConstants_r9 { + RLF_TimersAndConstants_r9_PR present; + union RLF_TimersAndConstants_r9_u { + NULL_t release; + struct RLF_TimersAndConstants_r9__setup { + long t301_r9; + long t310_r9; + long n310_r9; + long t311_r9; + long n311_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RLF_TimersAndConstants_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_t301_r9_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_t310_r9_13; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_n310_r9_21; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_t311_r9_30; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_n311_r9_38; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RLF_TimersAndConstants_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _RLF_TimersAndConstants_r9_H_ */ +#include diff --git a/lte/rrc/asn/RN-SubframeConfig-r10.c b/lte/rrc/asn/RN-SubframeConfig-r10.c new file mode 100644 index 000000000..23ba556be --- /dev/null +++ b/lte/rrc/asn/RN-SubframeConfig-r10.c @@ -0,0 +1,1638 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RN-SubframeConfig-r10.h" + +static int +memb_subframeConfigPatternFDD_r10_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_subframeConfigPatternTDD_r10_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +resourceAllocationType_r10_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +resourceAllocationType_r10_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +resourceAllocationType_r10_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +resourceAllocationType_r10_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +resourceAllocationType_r10_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +resourceAllocationType_r10_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +resourceAllocationType_r10_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +resourceAllocationType_r10_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +resourceAllocationType_r10_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +resourceAllocationType_r10_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + resourceAllocationType_r10_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_nrb6_r10_constraint_16(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb15_r10_constraint_16(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb25_r10_constraint_16(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 13)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb50_r10_constraint_16(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 17)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb75_r10_constraint_16(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 19)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb100_r10_constraint_16(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 25)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb6_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 5)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb15_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb25_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 9)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb50_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 11)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb75_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 12)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_nrb100_r10_constraint_23(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 13)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +interleaving_r10_32_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +interleaving_r10_32_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +interleaving_r10_32_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +interleaving_r10_32_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +interleaving_r10_32_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +interleaving_r10_32_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +interleaving_r10_32_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +interleaving_r10_32_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +interleaving_r10_32_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +interleaving_r10_32_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + interleaving_r10_32_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +noInterleaving_r10_34_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +noInterleaving_r10_34_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +noInterleaving_r10_34_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +noInterleaving_r10_34_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +noInterleaving_r10_34_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +noInterleaving_r10_34_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +noInterleaving_r10_34_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +noInterleaving_r10_34_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +noInterleaving_r10_34_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +noInterleaving_r10_34_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + noInterleaving_r10_34_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_n1PUCCH_AN_P0_r10_constraint_38(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_n1PUCCH_AN_P1_r10_constraint_38(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pdsch_Start_r10_constraint_5(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_subframeConfigPatternFDD_r10_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_subframeConfigPatternTDD_r10_constr_4 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_subframeConfigPattern_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_resourceAllocationType_r10_constr_6 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb6_r10_constr_17 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb15_r10_constr_18 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 8, 8 } /* (SIZE(8..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb25_r10_constr_19 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 13, 13 } /* (SIZE(13..13)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb50_r10_constr_20 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 17, 17 } /* (SIZE(17..17)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb75_r10_constr_21 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 19, 19 } /* (SIZE(19..19)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb100_r10_constr_22 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 25, 25 } /* (SIZE(25..25)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_type01_r10_constr_16 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb6_r10_constr_24 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 5, 5 } /* (SIZE(5..5)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb15_r10_constr_25 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 7, 7 } /* (SIZE(7..7)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb25_r10_constr_26 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 9, 9 } /* (SIZE(9..9)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb50_r10_constr_27 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 11, 11 } /* (SIZE(11..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb75_r10_constr_28 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 12, 12 } /* (SIZE(12..12)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_nrb100_r10_constr_29 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 13, 13 } /* (SIZE(13..13)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_type2_r10_constr_23 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_resourceBlockAssignment_r10_constr_15 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_interleaving_r10_constr_32 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_noInterleaving_r10_constr_34 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_demodulationRS_r10_constr_31 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n1PUCCH_AN_P0_r10_constr_39 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_n1PUCCH_AN_P1_r10_constr_40 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pdsch_Start_r10_constr_37 = { + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (1..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_subframeConfigPattern_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__subframeConfigPattern_r10, choice.subframeConfigPatternFDD_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_subframeConfigPatternFDD_r10_constraint_2, + &asn_PER_memb_subframeConfigPatternFDD_r10_constr_3, + 0, + "subframeConfigPatternFDD-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__subframeConfigPattern_r10, choice.subframeConfigPatternTDD_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_subframeConfigPatternTDD_r10_constraint_2, + &asn_PER_memb_subframeConfigPatternTDD_r10_constr_4, + 0, + "subframeConfigPatternTDD-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_subframeConfigPattern_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeConfigPatternFDD-r10 at 2617 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* subframeConfigPatternTDD-r10 at 2618 */ +}; +static asn_CHOICE_specifics_t asn_SPC_subframeConfigPattern_r10_specs_2 = { + sizeof(struct RN_SubframeConfig_r10__subframeConfigPattern_r10), + offsetof(struct RN_SubframeConfig_r10__subframeConfigPattern_r10, _asn_ctx), + offsetof(struct RN_SubframeConfig_r10__subframeConfigPattern_r10, present), + sizeof(((struct RN_SubframeConfig_r10__subframeConfigPattern_r10 *)0)->present), + asn_MAP_subframeConfigPattern_r10_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_subframeConfigPattern_r10_2 = { + "subframeConfigPattern-r10", + "subframeConfigPattern-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_subframeConfigPattern_r10_constr_2, + asn_MBR_subframeConfigPattern_r10_2, + 2, /* Elements count */ + &asn_SPC_subframeConfigPattern_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_resourceAllocationType_r10_value2enum_6[] = { + { 0, 5, "type0" }, + { 1, 5, "type1" }, + { 2, 14, "type2Localized" }, + { 3, 16, "type2Distributed" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_resourceAllocationType_r10_enum2value_6[] = { + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 0, /* type0(0) */ + 1, /* type1(1) */ + 3, /* type2Distributed(3) */ + 2 /* type2Localized(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_resourceAllocationType_r10_specs_6 = { + asn_MAP_resourceAllocationType_r10_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_resourceAllocationType_r10_enum2value_6, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_resourceAllocationType_r10_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resourceAllocationType_r10_6 = { + "resourceAllocationType-r10", + "resourceAllocationType-r10", + resourceAllocationType_r10_6_free, + resourceAllocationType_r10_6_print, + resourceAllocationType_r10_6_constraint, + resourceAllocationType_r10_6_decode_ber, + resourceAllocationType_r10_6_encode_der, + resourceAllocationType_r10_6_decode_xer, + resourceAllocationType_r10_6_encode_xer, + resourceAllocationType_r10_6_decode_uper, + resourceAllocationType_r10_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_resourceAllocationType_r10_tags_6, + sizeof(asn_DEF_resourceAllocationType_r10_tags_6) + /sizeof(asn_DEF_resourceAllocationType_r10_tags_6[0]) - 1, /* 1 */ + asn_DEF_resourceAllocationType_r10_tags_6, /* Same as above */ + sizeof(asn_DEF_resourceAllocationType_r10_tags_6) + /sizeof(asn_DEF_resourceAllocationType_r10_tags_6[0]), /* 2 */ + &asn_PER_type_resourceAllocationType_r10_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_resourceAllocationType_r10_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_type01_r10_16[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, choice.nrb6_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb6_r10_constraint_16, + &asn_PER_memb_nrb6_r10_constr_17, + 0, + "nrb6-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, choice.nrb15_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb15_r10_constraint_16, + &asn_PER_memb_nrb15_r10_constr_18, + 0, + "nrb15-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, choice.nrb25_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb25_r10_constraint_16, + &asn_PER_memb_nrb25_r10_constr_19, + 0, + "nrb25-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, choice.nrb50_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb50_r10_constraint_16, + &asn_PER_memb_nrb50_r10_constr_20, + 0, + "nrb50-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, choice.nrb75_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb75_r10_constraint_16, + &asn_PER_memb_nrb75_r10_constr_21, + 0, + "nrb75-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, choice.nrb100_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb100_r10_constraint_16, + &asn_PER_memb_nrb100_r10_constr_22, + 0, + "nrb100-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_type01_r10_tag2el_16[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrb6-r10 at 2625 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrb15-r10 at 2626 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nrb25-r10 at 2627 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* nrb50-r10 at 2628 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* nrb75-r10 at 2629 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* nrb100-r10 at 2630 */ +}; +static asn_CHOICE_specifics_t asn_SPC_type01_r10_specs_16 = { + sizeof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, _asn_ctx), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10, present), + sizeof(((struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10 *)0)->present), + asn_MAP_type01_r10_tag2el_16, + 6, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_type01_r10_16 = { + "type01-r10", + "type01-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_type01_r10_constr_16, + asn_MBR_type01_r10_16, + 6, /* Elements count */ + &asn_SPC_type01_r10_specs_16 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_type2_r10_23[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, choice.nrb6_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb6_r10_constraint_23, + &asn_PER_memb_nrb6_r10_constr_24, + 0, + "nrb6-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, choice.nrb15_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb15_r10_constraint_23, + &asn_PER_memb_nrb15_r10_constr_25, + 0, + "nrb15-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, choice.nrb25_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb25_r10_constraint_23, + &asn_PER_memb_nrb25_r10_constr_26, + 0, + "nrb25-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, choice.nrb50_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb50_r10_constraint_23, + &asn_PER_memb_nrb50_r10_constr_27, + 0, + "nrb50-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, choice.nrb75_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb75_r10_constraint_23, + &asn_PER_memb_nrb75_r10_constr_28, + 0, + "nrb75-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, choice.nrb100_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_nrb100_r10_constraint_23, + &asn_PER_memb_nrb100_r10_constr_29, + 0, + "nrb100-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_type2_r10_tag2el_23[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nrb6-r10 at 2633 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nrb15-r10 at 2634 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* nrb25-r10 at 2635 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* nrb50-r10 at 2636 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* nrb75-r10 at 2637 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* nrb100-r10 at 2638 */ +}; +static asn_CHOICE_specifics_t asn_SPC_type2_r10_specs_23 = { + sizeof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, _asn_ctx), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10, present), + sizeof(((struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10 *)0)->present), + asn_MAP_type2_r10_tag2el_23, + 6, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_type2_r10_23 = { + "type2-r10", + "type2-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_type2_r10_constr_23, + asn_MBR_type2_r10_23, + 6, /* Elements count */ + &asn_SPC_type2_r10_specs_23 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_resourceBlockAssignment_r10_15[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10, choice.type01_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_type01_r10_16, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "type01-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10, choice.type2_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_type2_r10_23, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "type2-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_resourceBlockAssignment_r10_tag2el_15[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* type01-r10 at 2625 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* type2-r10 at 2633 */ +}; +static asn_CHOICE_specifics_t asn_SPC_resourceBlockAssignment_r10_specs_15 = { + sizeof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10, _asn_ctx), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10, present), + sizeof(((struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10 *)0)->present), + asn_MAP_resourceBlockAssignment_r10_tag2el_15, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_resourceBlockAssignment_r10_15 = { + "resourceBlockAssignment-r10", + "resourceBlockAssignment-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_resourceBlockAssignment_r10_constr_15, + asn_MBR_resourceBlockAssignment_r10_15, + 2, /* Elements count */ + &asn_SPC_resourceBlockAssignment_r10_specs_15 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_interleaving_r10_value2enum_32[] = { + { 0, 3, "crs" } +}; +static unsigned int asn_MAP_interleaving_r10_enum2value_32[] = { + 0 /* crs(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_interleaving_r10_specs_32 = { + asn_MAP_interleaving_r10_value2enum_32, /* "tag" => N; sorted by tag */ + asn_MAP_interleaving_r10_enum2value_32, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_interleaving_r10_tags_32[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_interleaving_r10_32 = { + "interleaving-r10", + "interleaving-r10", + interleaving_r10_32_free, + interleaving_r10_32_print, + interleaving_r10_32_constraint, + interleaving_r10_32_decode_ber, + interleaving_r10_32_encode_der, + interleaving_r10_32_decode_xer, + interleaving_r10_32_encode_xer, + interleaving_r10_32_decode_uper, + interleaving_r10_32_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_interleaving_r10_tags_32, + sizeof(asn_DEF_interleaving_r10_tags_32) + /sizeof(asn_DEF_interleaving_r10_tags_32[0]) - 1, /* 1 */ + asn_DEF_interleaving_r10_tags_32, /* Same as above */ + sizeof(asn_DEF_interleaving_r10_tags_32) + /sizeof(asn_DEF_interleaving_r10_tags_32[0]), /* 2 */ + &asn_PER_type_interleaving_r10_constr_32, + 0, 0, /* Defined elsewhere */ + &asn_SPC_interleaving_r10_specs_32 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_noInterleaving_r10_value2enum_34[] = { + { 0, 3, "crs" }, + { 1, 4, "dmrs" } +}; +static unsigned int asn_MAP_noInterleaving_r10_enum2value_34[] = { + 0, /* crs(0) */ + 1 /* dmrs(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_noInterleaving_r10_specs_34 = { + asn_MAP_noInterleaving_r10_value2enum_34, /* "tag" => N; sorted by tag */ + asn_MAP_noInterleaving_r10_enum2value_34, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_noInterleaving_r10_tags_34[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_noInterleaving_r10_34 = { + "noInterleaving-r10", + "noInterleaving-r10", + noInterleaving_r10_34_free, + noInterleaving_r10_34_print, + noInterleaving_r10_34_constraint, + noInterleaving_r10_34_decode_ber, + noInterleaving_r10_34_encode_der, + noInterleaving_r10_34_decode_xer, + noInterleaving_r10_34_encode_xer, + noInterleaving_r10_34_decode_uper, + noInterleaving_r10_34_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_noInterleaving_r10_tags_34, + sizeof(asn_DEF_noInterleaving_r10_tags_34) + /sizeof(asn_DEF_noInterleaving_r10_tags_34[0]) - 1, /* 1 */ + asn_DEF_noInterleaving_r10_tags_34, /* Same as above */ + sizeof(asn_DEF_noInterleaving_r10_tags_34) + /sizeof(asn_DEF_noInterleaving_r10_tags_34[0]), /* 2 */ + &asn_PER_type_noInterleaving_r10_constr_34, + 0, 0, /* Defined elsewhere */ + &asn_SPC_noInterleaving_r10_specs_34 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_demodulationRS_r10_31[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10, choice.interleaving_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_interleaving_r10_32, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interleaving-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10, choice.noInterleaving_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_noInterleaving_r10_34, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "noInterleaving-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_demodulationRS_r10_tag2el_31[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interleaving-r10 at 2643 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* noInterleaving-r10 at 2644 */ +}; +static asn_CHOICE_specifics_t asn_SPC_demodulationRS_r10_specs_31 = { + sizeof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10, _asn_ctx), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10, present), + sizeof(((struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10 *)0)->present), + asn_MAP_demodulationRS_r10_tag2el_31, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_demodulationRS_r10_31 = { + "demodulationRS-r10", + "demodulationRS-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_demodulationRS_r10_constr_31, + asn_MBR_demodulationRS_r10_31, + 2, /* Elements count */ + &asn_SPC_demodulationRS_r10_specs_31 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_pucch_Config_r10_38[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__pucch_Config_r10, n1PUCCH_AN_P0_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n1PUCCH_AN_P0_r10_constraint_38, + &asn_PER_memb_n1PUCCH_AN_P0_r10_constr_39, + 0, + "n1PUCCH-AN-P0-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__pucch_Config_r10, n1PUCCH_AN_P1_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_n1PUCCH_AN_P1_r10_constraint_38, + &asn_PER_memb_n1PUCCH_AN_P1_r10_constr_40, + 0, + "n1PUCCH-AN-P1-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_pucch_Config_r10_tags_38[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_pucch_Config_r10_tag2el_38[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* n1PUCCH-AN-P0-r10 at 2648 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* n1PUCCH-AN-P1-r10 at 2649 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_pucch_Config_r10_specs_38 = { + sizeof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__pucch_Config_r10), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10__pucch_Config_r10, _asn_ctx), + asn_MAP_pucch_Config_r10_tag2el_38, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pucch_Config_r10_38 = { + "pucch-Config-r10", + "pucch-Config-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pucch_Config_r10_tags_38, + sizeof(asn_DEF_pucch_Config_r10_tags_38) + /sizeof(asn_DEF_pucch_Config_r10_tags_38[0]) - 1, /* 1 */ + asn_DEF_pucch_Config_r10_tags_38, /* Same as above */ + sizeof(asn_DEF_pucch_Config_r10_tags_38) + /sizeof(asn_DEF_pucch_Config_r10_tags_38[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_pucch_Config_r10_38, + 2, /* Elements count */ + &asn_SPC_pucch_Config_r10_specs_38 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_rpdcch_Config_r10_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10, resourceAllocationType_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_resourceAllocationType_r10_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "resourceAllocationType-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10, resourceBlockAssignment_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_resourceBlockAssignment_r10_15, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "resourceBlockAssignment-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10, demodulationRS_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_demodulationRS_r10_31, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "demodulationRS-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10, pdsch_Start_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pdsch_Start_r10_constraint_5, + &asn_PER_memb_pdsch_Start_r10_constr_37, + 0, + "pdsch-Start-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10, pucch_Config_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + 0, + &asn_DEF_pucch_Config_r10_38, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pucch-Config-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_rpdcch_Config_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_rpdcch_Config_r10_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* resourceAllocationType-r10 at 2621 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* resourceBlockAssignment-r10 at 2631 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* demodulationRS-r10 at 2643 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pdsch-Start-r10 at 2646 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* pucch-Config-r10 at 2648 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_rpdcch_Config_r10_specs_5 = { + sizeof(struct RN_SubframeConfig_r10__rpdcch_Config_r10), + offsetof(struct RN_SubframeConfig_r10__rpdcch_Config_r10, _asn_ctx), + asn_MAP_rpdcch_Config_r10_tag2el_5, + 5, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 4, /* Start extensions */ + 6 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rpdcch_Config_r10_5 = { + "rpdcch-Config-r10", + "rpdcch-Config-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rpdcch_Config_r10_tags_5, + sizeof(asn_DEF_rpdcch_Config_r10_tags_5) + /sizeof(asn_DEF_rpdcch_Config_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_rpdcch_Config_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_rpdcch_Config_r10_tags_5) + /sizeof(asn_DEF_rpdcch_Config_r10_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_rpdcch_Config_r10_5, + 5, /* Elements count */ + &asn_SPC_rpdcch_Config_r10_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RN_SubframeConfig_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct RN_SubframeConfig_r10, subframeConfigPattern_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_subframeConfigPattern_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "subframeConfigPattern-r10" + }, + { ATF_POINTER, 1, offsetof(struct RN_SubframeConfig_r10, rpdcch_Config_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_rpdcch_Config_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rpdcch-Config-r10" + }, +}; +static int asn_MAP_RN_SubframeConfig_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RN_SubframeConfig_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RN_SubframeConfig_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeConfigPattern-r10 at 2617 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rpdcch-Config-r10 at 2622 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RN_SubframeConfig_r10_specs_1 = { + sizeof(struct RN_SubframeConfig_r10), + offsetof(struct RN_SubframeConfig_r10, _asn_ctx), + asn_MAP_RN_SubframeConfig_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RN_SubframeConfig_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RN_SubframeConfig_r10 = { + "RN-SubframeConfig-r10", + "RN-SubframeConfig-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RN_SubframeConfig_r10_tags_1, + sizeof(asn_DEF_RN_SubframeConfig_r10_tags_1) + /sizeof(asn_DEF_RN_SubframeConfig_r10_tags_1[0]), /* 1 */ + asn_DEF_RN_SubframeConfig_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RN_SubframeConfig_r10_tags_1) + /sizeof(asn_DEF_RN_SubframeConfig_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RN_SubframeConfig_r10_1, + 2, /* Elements count */ + &asn_SPC_RN_SubframeConfig_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RN-SubframeConfig-r10.h b/lte/rrc/asn/RN-SubframeConfig-r10.h new file mode 100644 index 000000000..7f15edeeb --- /dev/null +++ b/lte/rrc/asn/RN-SubframeConfig-r10.h @@ -0,0 +1,179 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RN_SubframeConfig_r10_H_ +#define _RN_SubframeConfig_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RN_SubframeConfig_r10__subframeConfigPattern_r10_PR { + RN_SubframeConfig_r10__subframeConfigPattern_r10_PR_NOTHING, /* No components present */ + RN_SubframeConfig_r10__subframeConfigPattern_r10_PR_subframeConfigPatternFDD_r10, + RN_SubframeConfig_r10__subframeConfigPattern_r10_PR_subframeConfigPatternTDD_r10 +} RN_SubframeConfig_r10__subframeConfigPattern_r10_PR; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_type0 = 0, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_type1 = 1, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_type2Localized = 2, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_type2Distributed = 3, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_spare4 = 4, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_spare3 = 5, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_spare2 = 6, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10_spare1 = 7 +} e_RN_SubframeConfig_r10__rpdcch_Config_r10__resourceAllocationType_r10; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_PR { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_PR_NOTHING, /* No components present */ + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_PR_type01_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_PR_type2_r10, + /* Extensions may appear below */ + +} RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_PR; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_NOTHING, /* No components present */ + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_nrb6_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_nrb15_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_nrb25_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_nrb50_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_nrb75_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR_nrb100_r10 +} RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_NOTHING, /* No components present */ + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_nrb6_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_nrb15_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_nrb25_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_nrb50_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_nrb75_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR_nrb100_r10 +} RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_PR { + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_PR_NOTHING, /* No components present */ + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_PR_interleaving_r10, + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_PR_noInterleaving_r10 +} RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_PR; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__interleaving_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__interleaving_r10_crs = 0 +} e_RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__interleaving_r10; +typedef enum RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__noInterleaving_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__noInterleaving_r10_crs = 0, + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__noInterleaving_r10_dmrs = 1 +} e_RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10__noInterleaving_r10; + +/* RN-SubframeConfig-r10 */ +typedef struct RN_SubframeConfig_r10 { + struct RN_SubframeConfig_r10__subframeConfigPattern_r10 { + RN_SubframeConfig_r10__subframeConfigPattern_r10_PR present; + union RN_SubframeConfig_r10__subframeConfigPattern_r10_u { + BIT_STRING_t subframeConfigPatternFDD_r10; + long subframeConfigPatternTDD_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *subframeConfigPattern_r10; + struct RN_SubframeConfig_r10__rpdcch_Config_r10 { + long resourceAllocationType_r10; + struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_PR present; + union RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10_u { + struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_PR present; + union RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type01_r10_u { + BIT_STRING_t nrb6_r10; + BIT_STRING_t nrb15_r10; + BIT_STRING_t nrb25_r10; + BIT_STRING_t nrb50_r10; + BIT_STRING_t nrb75_r10; + BIT_STRING_t nrb100_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } type01_r10; + struct RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_PR present; + union RN_SubframeConfig_r10__rpdcch_Config_r10__resourceBlockAssignment_r10__type2_r10_u { + BIT_STRING_t nrb6_r10; + BIT_STRING_t nrb15_r10; + BIT_STRING_t nrb25_r10; + BIT_STRING_t nrb50_r10; + BIT_STRING_t nrb75_r10; + BIT_STRING_t nrb100_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } type2_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } resourceBlockAssignment_r10; + struct RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10 { + RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_PR present; + union RN_SubframeConfig_r10__rpdcch_Config_r10__demodulationRS_r10_u { + long interleaving_r10; + long noInterleaving_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } demodulationRS_r10; + long pdsch_Start_r10; + struct RN_SubframeConfig_r10__rpdcch_Config_r10__pucch_Config_r10 { + long n1PUCCH_AN_P0_r10; + long n1PUCCH_AN_P1_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } pucch_Config_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *rpdcch_Config_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RN_SubframeConfig_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_resourceAllocationType_r10_6; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_interleaving_r10_32; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_noInterleaving_r10_34; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RN_SubframeConfig_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _RN_SubframeConfig_r10_H_ */ +#include diff --git a/lte/rrc/asn/RN-SystemInfo-r10.c b/lte/rrc/asn/RN-SystemInfo-r10.c new file mode 100644 index 000000000..6bbf87801 --- /dev/null +++ b/lte/rrc/asn/RN-SystemInfo-r10.c @@ -0,0 +1,97 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RN-SystemInfo-r10.h" + +static int +memb_systemInformationBlockType1_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_systemInformationBlockType1_r10_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 } /* (SIZE(0..MAX)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RN_SystemInfo_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct RN_SystemInfo_r10, systemInformationBlockType1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_systemInformationBlockType1_r10_constraint_1, + &asn_PER_memb_systemInformationBlockType1_r10_constr_2, + 0, + "systemInformationBlockType1-r10" + }, + { ATF_POINTER, 1, offsetof(struct RN_SystemInfo_r10, systemInformationBlockType2_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformationBlockType2-r10" + }, +}; +static int asn_MAP_RN_SystemInfo_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RN_SystemInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RN_SystemInfo_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* systemInformationBlockType1-r10 at 605 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* systemInformationBlockType2-r10 at 606 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RN_SystemInfo_r10_specs_1 = { + sizeof(struct RN_SystemInfo_r10), + offsetof(struct RN_SystemInfo_r10, _asn_ctx), + asn_MAP_RN_SystemInfo_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RN_SystemInfo_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RN_SystemInfo_r10 = { + "RN-SystemInfo-r10", + "RN-SystemInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RN_SystemInfo_r10_tags_1, + sizeof(asn_DEF_RN_SystemInfo_r10_tags_1) + /sizeof(asn_DEF_RN_SystemInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_RN_SystemInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RN_SystemInfo_r10_tags_1) + /sizeof(asn_DEF_RN_SystemInfo_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RN_SystemInfo_r10_1, + 2, /* Elements count */ + &asn_SPC_RN_SystemInfo_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RN-SystemInfo-r10.h b/lte/rrc/asn/RN-SystemInfo-r10.h new file mode 100644 index 000000000..d5d644315 --- /dev/null +++ b/lte/rrc/asn/RN-SystemInfo-r10.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RN_SystemInfo_r10_H_ +#define _RN_SystemInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SystemInformationBlockType2; + +/* RN-SystemInfo-r10 */ +typedef struct RN_SystemInfo_r10 { + OCTET_STRING_t *systemInformationBlockType1_r10 /* OPTIONAL */; + struct SystemInformationBlockType2 *systemInformationBlockType2_r10 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RN_SystemInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RN_SystemInfo_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SystemInformationBlockType2.h" + +#endif /* _RN_SystemInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/RNReconfiguration-r10-IEs.c b/lte/rrc/asn/RNReconfiguration-r10-IEs.c new file mode 100644 index 000000000..94b6e0f97 --- /dev/null +++ b/lte/rrc/asn/RNReconfiguration-r10-IEs.c @@ -0,0 +1,130 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RNReconfiguration-r10-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_5 = { + sizeof(struct RNReconfiguration_r10_IEs__nonCriticalExtension), + offsetof(struct RNReconfiguration_r10_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_5 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_5, + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_5, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_5) + /sizeof(asn_DEF_nonCriticalExtension_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RNReconfiguration_r10_IEs_1[] = { + { ATF_POINTER, 4, offsetof(struct RNReconfiguration_r10_IEs, rn_SystemInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RN_SystemInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rn-SystemInfo-r10" + }, + { ATF_POINTER, 3, offsetof(struct RNReconfiguration_r10_IEs, rn_SubframeConfig_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RN_SubframeConfig_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rn-SubframeConfig-r10" + }, + { ATF_POINTER, 2, offsetof(struct RNReconfiguration_r10_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RNReconfiguration_r10_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_nonCriticalExtension_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RNReconfiguration_r10_IEs_oms_1[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_RNReconfiguration_r10_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RNReconfiguration_r10_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rn-SystemInfo-r10 at 598 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rn-SubframeConfig-r10 at 599 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* lateNonCriticalExtension at 600 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 601 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RNReconfiguration_r10_IEs_specs_1 = { + sizeof(struct RNReconfiguration_r10_IEs), + offsetof(struct RNReconfiguration_r10_IEs, _asn_ctx), + asn_MAP_RNReconfiguration_r10_IEs_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RNReconfiguration_r10_IEs_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RNReconfiguration_r10_IEs = { + "RNReconfiguration-r10-IEs", + "RNReconfiguration-r10-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RNReconfiguration_r10_IEs_tags_1, + sizeof(asn_DEF_RNReconfiguration_r10_IEs_tags_1) + /sizeof(asn_DEF_RNReconfiguration_r10_IEs_tags_1[0]), /* 1 */ + asn_DEF_RNReconfiguration_r10_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RNReconfiguration_r10_IEs_tags_1) + /sizeof(asn_DEF_RNReconfiguration_r10_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RNReconfiguration_r10_IEs_1, + 4, /* Elements count */ + &asn_SPC_RNReconfiguration_r10_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RNReconfiguration-r10-IEs.h b/lte/rrc/asn/RNReconfiguration-r10-IEs.h new file mode 100644 index 000000000..11a2e5d84 --- /dev/null +++ b/lte/rrc/asn/RNReconfiguration-r10-IEs.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RNReconfiguration_r10_IEs_H_ +#define _RNReconfiguration_r10_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RN_SystemInfo_r10; +struct RN_SubframeConfig_r10; + +/* RNReconfiguration-r10-IEs */ +typedef struct RNReconfiguration_r10_IEs { + struct RN_SystemInfo_r10 *rn_SystemInfo_r10 /* OPTIONAL */; + struct RN_SubframeConfig_r10 *rn_SubframeConfig_r10 /* OPTIONAL */; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RNReconfiguration_r10_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RNReconfiguration_r10_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RNReconfiguration_r10_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RN-SystemInfo-r10.h" +#include "RN-SubframeConfig-r10.h" + +#endif /* _RNReconfiguration_r10_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RNReconfiguration-r10.c b/lte/rrc/asn/RNReconfiguration-r10.c new file mode 100644 index 000000000..0eb22ad86 --- /dev/null +++ b/lte/rrc/asn/RNReconfiguration-r10.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RNReconfiguration-r10.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10__criticalExtensions__c1, choice.rnReconfiguration_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RNReconfiguration_r10_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rnReconfiguration-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rnReconfiguration-r10 at 590 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 591 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 591 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 591 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RNReconfiguration_r10__criticalExtensions__c1), + offsetof(struct RNReconfiguration_r10__criticalExtensions__c1, _asn_ctx), + offsetof(struct RNReconfiguration_r10__criticalExtensions__c1, present), + sizeof(((struct RNReconfiguration_r10__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct RNReconfiguration_r10__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RNReconfiguration_r10__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 590 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 593 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RNReconfiguration_r10__criticalExtensions), + offsetof(struct RNReconfiguration_r10__criticalExtensions, _asn_ctx), + offsetof(struct RNReconfiguration_r10__criticalExtensions, present), + sizeof(((struct RNReconfiguration_r10__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RNReconfiguration_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfiguration_r10, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RNReconfiguration_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RNReconfiguration_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 587 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 592 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RNReconfiguration_r10_specs_1 = { + sizeof(struct RNReconfiguration_r10), + offsetof(struct RNReconfiguration_r10, _asn_ctx), + asn_MAP_RNReconfiguration_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RNReconfiguration_r10 = { + "RNReconfiguration-r10", + "RNReconfiguration-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RNReconfiguration_r10_tags_1, + sizeof(asn_DEF_RNReconfiguration_r10_tags_1) + /sizeof(asn_DEF_RNReconfiguration_r10_tags_1[0]), /* 1 */ + asn_DEF_RNReconfiguration_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RNReconfiguration_r10_tags_1) + /sizeof(asn_DEF_RNReconfiguration_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RNReconfiguration_r10_1, + 2, /* Elements count */ + &asn_SPC_RNReconfiguration_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RNReconfiguration-r10.h b/lte/rrc/asn/RNReconfiguration-r10.h new file mode 100644 index 000000000..63d7c7003 --- /dev/null +++ b/lte/rrc/asn/RNReconfiguration-r10.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RNReconfiguration_r10_H_ +#define _RNReconfiguration_r10_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RNReconfiguration-r10-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RNReconfiguration_r10__criticalExtensions_PR { + RNReconfiguration_r10__criticalExtensions_PR_NOTHING, /* No components present */ + RNReconfiguration_r10__criticalExtensions_PR_c1, + RNReconfiguration_r10__criticalExtensions_PR_criticalExtensionsFuture +} RNReconfiguration_r10__criticalExtensions_PR; +typedef enum RNReconfiguration_r10__criticalExtensions__c1_PR { + RNReconfiguration_r10__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RNReconfiguration_r10__criticalExtensions__c1_PR_rnReconfiguration_r10, + RNReconfiguration_r10__criticalExtensions__c1_PR_spare3, + RNReconfiguration_r10__criticalExtensions__c1_PR_spare2, + RNReconfiguration_r10__criticalExtensions__c1_PR_spare1 +} RNReconfiguration_r10__criticalExtensions__c1_PR; + +/* RNReconfiguration-r10 */ +typedef struct RNReconfiguration_r10 { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RNReconfiguration_r10__criticalExtensions { + RNReconfiguration_r10__criticalExtensions_PR present; + union RNReconfiguration_r10__criticalExtensions_u { + struct RNReconfiguration_r10__criticalExtensions__c1 { + RNReconfiguration_r10__criticalExtensions__c1_PR present; + union RNReconfiguration_r10__criticalExtensions__c1_u { + RNReconfiguration_r10_IEs_t rnReconfiguration_r10; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RNReconfiguration_r10__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RNReconfiguration_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RNReconfiguration_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _RNReconfiguration_r10_H_ */ +#include diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.c b/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.c new file mode 100644 index 000000000..194a46165 --- /dev/null +++ b/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RNReconfigurationComplete-r10-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct RNReconfigurationComplete_r10_IEs__nonCriticalExtension), + offsetof(struct RNReconfigurationComplete_r10_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RNReconfigurationComplete_r10_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RNReconfigurationComplete_r10_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RNReconfigurationComplete_r10_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RNReconfigurationComplete_r10_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RNReconfigurationComplete_r10_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 623 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 624 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RNReconfigurationComplete_r10_IEs_specs_1 = { + sizeof(struct RNReconfigurationComplete_r10_IEs), + offsetof(struct RNReconfigurationComplete_r10_IEs, _asn_ctx), + asn_MAP_RNReconfigurationComplete_r10_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RNReconfigurationComplete_r10_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RNReconfigurationComplete_r10_IEs = { + "RNReconfigurationComplete-r10-IEs", + "RNReconfigurationComplete-r10-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1, + sizeof(asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1) + /sizeof(asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1[0]), /* 1 */ + asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1) + /sizeof(asn_DEF_RNReconfigurationComplete_r10_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RNReconfigurationComplete_r10_IEs_1, + 2, /* Elements count */ + &asn_SPC_RNReconfigurationComplete_r10_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.h b/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.h new file mode 100644 index 000000000..c52e2fb22 --- /dev/null +++ b/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RNReconfigurationComplete_r10_IEs_H_ +#define _RNReconfigurationComplete_r10_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RNReconfigurationComplete-r10-IEs */ +typedef struct RNReconfigurationComplete_r10_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RNReconfigurationComplete_r10_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RNReconfigurationComplete_r10_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RNReconfigurationComplete_r10_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RNReconfigurationComplete_r10_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10.c b/lte/rrc/asn/RNReconfigurationComplete-r10.c new file mode 100644 index 000000000..e8070a034 --- /dev/null +++ b/lte/rrc/asn/RNReconfigurationComplete-r10.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RNReconfigurationComplete-r10.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__c1, choice.rnReconfigurationComplete_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RNReconfigurationComplete_r10_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rnReconfigurationComplete-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rnReconfigurationComplete-r10 at 615 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 616 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 616 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 616 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RNReconfigurationComplete_r10__criticalExtensions__c1), + offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__c1, _asn_ctx), + offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__c1, present), + sizeof(((struct RNReconfigurationComplete_r10__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct RNReconfigurationComplete_r10__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RNReconfigurationComplete_r10__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 615 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 618 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RNReconfigurationComplete_r10__criticalExtensions), + offsetof(struct RNReconfigurationComplete_r10__criticalExtensions, _asn_ctx), + offsetof(struct RNReconfigurationComplete_r10__criticalExtensions, present), + sizeof(((struct RNReconfigurationComplete_r10__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RNReconfigurationComplete_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RNReconfigurationComplete_r10, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RNReconfigurationComplete_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RNReconfigurationComplete_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 612 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 617 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RNReconfigurationComplete_r10_specs_1 = { + sizeof(struct RNReconfigurationComplete_r10), + offsetof(struct RNReconfigurationComplete_r10, _asn_ctx), + asn_MAP_RNReconfigurationComplete_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RNReconfigurationComplete_r10 = { + "RNReconfigurationComplete-r10", + "RNReconfigurationComplete-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RNReconfigurationComplete_r10_tags_1, + sizeof(asn_DEF_RNReconfigurationComplete_r10_tags_1) + /sizeof(asn_DEF_RNReconfigurationComplete_r10_tags_1[0]), /* 1 */ + asn_DEF_RNReconfigurationComplete_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RNReconfigurationComplete_r10_tags_1) + /sizeof(asn_DEF_RNReconfigurationComplete_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RNReconfigurationComplete_r10_1, + 2, /* Elements count */ + &asn_SPC_RNReconfigurationComplete_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10.h b/lte/rrc/asn/RNReconfigurationComplete-r10.h new file mode 100644 index 000000000..644f83f3b --- /dev/null +++ b/lte/rrc/asn/RNReconfigurationComplete-r10.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RNReconfigurationComplete_r10_H_ +#define _RNReconfigurationComplete_r10_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RNReconfigurationComplete-r10-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RNReconfigurationComplete_r10__criticalExtensions_PR { + RNReconfigurationComplete_r10__criticalExtensions_PR_NOTHING, /* No components present */ + RNReconfigurationComplete_r10__criticalExtensions_PR_c1, + RNReconfigurationComplete_r10__criticalExtensions_PR_criticalExtensionsFuture +} RNReconfigurationComplete_r10__criticalExtensions_PR; +typedef enum RNReconfigurationComplete_r10__criticalExtensions__c1_PR { + RNReconfigurationComplete_r10__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RNReconfigurationComplete_r10__criticalExtensions__c1_PR_rnReconfigurationComplete_r10, + RNReconfigurationComplete_r10__criticalExtensions__c1_PR_spare3, + RNReconfigurationComplete_r10__criticalExtensions__c1_PR_spare2, + RNReconfigurationComplete_r10__criticalExtensions__c1_PR_spare1 +} RNReconfigurationComplete_r10__criticalExtensions__c1_PR; + +/* RNReconfigurationComplete-r10 */ +typedef struct RNReconfigurationComplete_r10 { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RNReconfigurationComplete_r10__criticalExtensions { + RNReconfigurationComplete_r10__criticalExtensions_PR present; + union RNReconfigurationComplete_r10__criticalExtensions_u { + struct RNReconfigurationComplete_r10__criticalExtensions__c1 { + RNReconfigurationComplete_r10__criticalExtensions__c1_PR present; + union RNReconfigurationComplete_r10__criticalExtensions__c1_u { + RNReconfigurationComplete_r10_IEs_t rnReconfigurationComplete_r10; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RNReconfigurationComplete_r10__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RNReconfigurationComplete_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RNReconfigurationComplete_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _RNReconfigurationComplete_r10_H_ */ +#include diff --git a/lte/rrc/asn/RRC-TransactionIdentifier.c b/lte/rrc/asn/RRC-TransactionIdentifier.c new file mode 100644 index 000000000..87086e355 --- /dev/null +++ b/lte/rrc/asn/RRC-TransactionIdentifier.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRC-TransactionIdentifier.h" + +int +RRC_TransactionIdentifier_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +RRC_TransactionIdentifier_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +RRC_TransactionIdentifier_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +RRC_TransactionIdentifier_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +RRC_TransactionIdentifier_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +RRC_TransactionIdentifier_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +RRC_TransactionIdentifier_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +RRC_TransactionIdentifier_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +RRC_TransactionIdentifier_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + RRC_TransactionIdentifier_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_RRC_TransactionIdentifier_constr_1 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_RRC_TransactionIdentifier_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RRC_TransactionIdentifier = { + "RRC-TransactionIdentifier", + "RRC-TransactionIdentifier", + RRC_TransactionIdentifier_free, + RRC_TransactionIdentifier_print, + RRC_TransactionIdentifier_constraint, + RRC_TransactionIdentifier_decode_ber, + RRC_TransactionIdentifier_encode_der, + RRC_TransactionIdentifier_decode_xer, + RRC_TransactionIdentifier_encode_xer, + RRC_TransactionIdentifier_decode_uper, + RRC_TransactionIdentifier_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRC_TransactionIdentifier_tags_1, + sizeof(asn_DEF_RRC_TransactionIdentifier_tags_1) + /sizeof(asn_DEF_RRC_TransactionIdentifier_tags_1[0]), /* 1 */ + asn_DEF_RRC_TransactionIdentifier_tags_1, /* Same as above */ + sizeof(asn_DEF_RRC_TransactionIdentifier_tags_1) + /sizeof(asn_DEF_RRC_TransactionIdentifier_tags_1[0]), /* 1 */ + &asn_PER_type_RRC_TransactionIdentifier_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/RRC-TransactionIdentifier.h b/lte/rrc/asn/RRC-TransactionIdentifier.h new file mode 100644 index 000000000..32cc7c742 --- /dev/null +++ b/lte/rrc/asn/RRC-TransactionIdentifier.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRC_TransactionIdentifier_H_ +#define _RRC_TransactionIdentifier_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRC-TransactionIdentifier */ +typedef long RRC_TransactionIdentifier_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRC_TransactionIdentifier; +asn_struct_free_f RRC_TransactionIdentifier_free; +asn_struct_print_f RRC_TransactionIdentifier_print; +asn_constr_check_f RRC_TransactionIdentifier_constraint; +ber_type_decoder_f RRC_TransactionIdentifier_decode_ber; +der_type_encoder_f RRC_TransactionIdentifier_encode_der; +xer_type_decoder_f RRC_TransactionIdentifier_decode_xer; +xer_type_encoder_f RRC_TransactionIdentifier_encode_xer; +per_type_decoder_f RRC_TransactionIdentifier_decode_uper; +per_type_encoder_f RRC_TransactionIdentifier_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRC_TransactionIdentifier_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.c b/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.c new file mode 100644 index 000000000..9137cafa8 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.c @@ -0,0 +1,194 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfiguration-r8-IEs.h" + +static int +memb_dedicatedInfoNASList_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 11)) { + /* Perform validation of the inner elements */ + return td->check_constraints(td, sptr, ctfailcb, app_key); + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_dedicatedInfoNASList_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 11 } /* (SIZE(1..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dedicatedInfoNASList_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 11 } /* (SIZE(1..11)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_dedicatedInfoNASList_4[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_DedicatedInfoNAS, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_dedicatedInfoNASList_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_dedicatedInfoNASList_specs_4 = { + sizeof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList), + offsetof(struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dedicatedInfoNASList_4 = { + "dedicatedInfoNASList", + "dedicatedInfoNASList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dedicatedInfoNASList_tags_4, + sizeof(asn_DEF_dedicatedInfoNASList_tags_4) + /sizeof(asn_DEF_dedicatedInfoNASList_tags_4[0]) - 1, /* 1 */ + asn_DEF_dedicatedInfoNASList_tags_4, /* Same as above */ + sizeof(asn_DEF_dedicatedInfoNASList_tags_4) + /sizeof(asn_DEF_dedicatedInfoNASList_tags_4[0]), /* 2 */ + &asn_PER_type_dedicatedInfoNASList_constr_4, + asn_MBR_dedicatedInfoNASList_4, + 1, /* Single element */ + &asn_SPC_dedicatedInfoNASList_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfiguration_r8_IEs_1[] = { + { ATF_POINTER, 6, offsetof(struct RRCConnectionReconfiguration_r8_IEs, measConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measConfig" + }, + { ATF_POINTER, 5, offsetof(struct RRCConnectionReconfiguration_r8_IEs, mobilityControlInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityControlInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityControlInfo" + }, + { ATF_POINTER, 4, offsetof(struct RRCConnectionReconfiguration_r8_IEs, dedicatedInfoNASList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_dedicatedInfoNASList_4, + memb_dedicatedInfoNASList_constraint_1, + &asn_PER_memb_dedicatedInfoNASList_constr_4, + 0, + "dedicatedInfoNASList" + }, + { ATF_POINTER, 3, offsetof(struct RRCConnectionReconfiguration_r8_IEs, radioResourceConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigDedicated" + }, + { ATF_POINTER, 2, offsetof(struct RRCConnectionReconfiguration_r8_IEs, securityConfigHO), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityConfigHO, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityConfigHO" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfiguration_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfiguration_v890_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfiguration_r8_IEs_oms_1[] = { 0, 1, 2, 3, 4, 5 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfiguration_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measConfig at 642 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mobilityControlInfo at 643 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dedicatedInfoNASList at 645 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* radioResourceConfigDedicated at 646 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* securityConfigHO at 647 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* nonCriticalExtension at 648 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfiguration_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfiguration_r8_IEs), + offsetof(struct RRCConnectionReconfiguration_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfiguration_r8_IEs_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfiguration_r8_IEs_oms_1, /* Optional members */ + 6, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_r8_IEs = { + "RRCConnectionReconfiguration-r8-IEs", + "RRCConnectionReconfiguration-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfiguration_r8_IEs_1, + 6, /* Elements count */ + &asn_SPC_RRCConnectionReconfiguration_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h b/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h new file mode 100644 index 000000000..ec5f281f2 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfiguration_r8_IEs_H_ +#define _RRCConnectionReconfiguration_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "DedicatedInfoNAS.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct MeasConfig; +struct MobilityControlInfo; +struct RadioResourceConfigDedicated; +struct SecurityConfigHO; +struct RRCConnectionReconfiguration_v890_IEs; + +/* RRCConnectionReconfiguration-r8-IEs */ +typedef struct RRCConnectionReconfiguration_r8_IEs { + struct MeasConfig *measConfig /* OPTIONAL */; + struct MobilityControlInfo *mobilityControlInfo /* OPTIONAL */; + struct RRCConnectionReconfiguration_r8_IEs__dedicatedInfoNASList { + A_SEQUENCE_OF(DedicatedInfoNAS_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *dedicatedInfoNASList; + struct RadioResourceConfigDedicated *radioResourceConfigDedicated /* OPTIONAL */; + struct SecurityConfigHO *securityConfigHO /* OPTIONAL */; + struct RRCConnectionReconfiguration_v890_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfiguration_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasConfig.h" +#include "MobilityControlInfo.h" +#include "RadioResourceConfigDedicated.h" +#include "SecurityConfigHO.h" +#include "RRCConnectionReconfiguration-v890-IEs.h" + +#endif /* _RRCConnectionReconfiguration_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.c b/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.c new file mode 100644 index 000000000..864c82c6b --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.c @@ -0,0 +1,120 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfiguration-v1020-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_4 = { + sizeof(struct RRCConnectionReconfiguration_v1020_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionReconfiguration_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_4 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_4, + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_4, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfiguration_v1020_IEs_1[] = { + { ATF_POINTER, 3, offsetof(struct RRCConnectionReconfiguration_v1020_IEs, sCellToReleaseList_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SCellToReleaseList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sCellToReleaseList-r10" + }, + { ATF_POINTER, 2, offsetof(struct RRCConnectionReconfiguration_v1020_IEs, sCellToAddModList_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SCellToAddModList_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sCellToAddModList-r10" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfiguration_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_nonCriticalExtension_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfiguration_v1020_IEs_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfiguration_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCellToReleaseList-r10 at 663 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sCellToAddModList-r10 at 664 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 665 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfiguration_v1020_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfiguration_v1020_IEs), + offsetof(struct RRCConnectionReconfiguration_v1020_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfiguration_v1020_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfiguration_v1020_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_v1020_IEs = { + "RRCConnectionReconfiguration-v1020-IEs", + "RRCConnectionReconfiguration-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfiguration_v1020_IEs_1, + 3, /* Elements count */ + &asn_SPC_RRCConnectionReconfiguration_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h b/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h new file mode 100644 index 000000000..a1a9cbe05 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfiguration_v1020_IEs_H_ +#define _RRCConnectionReconfiguration_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SCellToReleaseList_r10; +struct SCellToAddModList_r10; + +/* RRCConnectionReconfiguration-v1020-IEs */ +typedef struct RRCConnectionReconfiguration_v1020_IEs { + struct SCellToReleaseList_r10 *sCellToReleaseList_r10 /* OPTIONAL */; + struct SCellToAddModList_r10 *sCellToAddModList_r10 /* OPTIONAL */; + struct RRCConnectionReconfiguration_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfiguration_v1020_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SCellToReleaseList-r10.h" +#include "SCellToAddModList-r10.h" + +#endif /* _RRCConnectionReconfiguration_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.c b/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.c new file mode 100644 index 000000000..a3e2263e2 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfiguration-v890-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfiguration_v890_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReconfiguration_v890_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfiguration_v890_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfiguration_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfiguration_v890_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfiguration_v890_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 652 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 653 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfiguration_v890_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfiguration_v890_IEs), + offsetof(struct RRCConnectionReconfiguration_v890_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfiguration_v890_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfiguration_v890_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_v890_IEs = { + "RRCConnectionReconfiguration-v890-IEs", + "RRCConnectionReconfiguration-v890-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_v890_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfiguration_v890_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReconfiguration_v890_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h b/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h new file mode 100644 index 000000000..4b9c42ad2 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfiguration_v890_IEs_H_ +#define _RRCConnectionReconfiguration_v890_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReconfiguration_v920_IEs; + +/* RRCConnectionReconfiguration-v890-IEs */ +typedef struct RRCConnectionReconfiguration_v890_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionReconfiguration_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfiguration_v890_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_v890_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReconfiguration-v920-IEs.h" + +#endif /* _RRCConnectionReconfiguration_v890_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.c b/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.c new file mode 100644 index 000000000..c429a468b --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.c @@ -0,0 +1,219 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfiguration-v920-IEs.h" + +static int +fullConfig_r9_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +fullConfig_r9_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +fullConfig_r9_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +fullConfig_r9_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +fullConfig_r9_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +fullConfig_r9_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +fullConfig_r9_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +fullConfig_r9_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +fullConfig_r9_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +fullConfig_r9_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + fullConfig_r9_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_fullConfig_r9_constr_3 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_fullConfig_r9_value2enum_3[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_fullConfig_r9_enum2value_3[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_fullConfig_r9_specs_3 = { + asn_MAP_fullConfig_r9_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_fullConfig_r9_enum2value_3, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_fullConfig_r9_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_fullConfig_r9_3 = { + "fullConfig-r9", + "fullConfig-r9", + fullConfig_r9_3_free, + fullConfig_r9_3_print, + fullConfig_r9_3_constraint, + fullConfig_r9_3_decode_ber, + fullConfig_r9_3_encode_der, + fullConfig_r9_3_decode_xer, + fullConfig_r9_3_encode_xer, + fullConfig_r9_3_decode_uper, + fullConfig_r9_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_fullConfig_r9_tags_3, + sizeof(asn_DEF_fullConfig_r9_tags_3) + /sizeof(asn_DEF_fullConfig_r9_tags_3[0]) - 1, /* 1 */ + asn_DEF_fullConfig_r9_tags_3, /* Same as above */ + sizeof(asn_DEF_fullConfig_r9_tags_3) + /sizeof(asn_DEF_fullConfig_r9_tags_3[0]), /* 2 */ + &asn_PER_type_fullConfig_r9_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_fullConfig_r9_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfiguration_v920_IEs_1[] = { + { ATF_POINTER, 3, offsetof(struct RRCConnectionReconfiguration_v920_IEs, otherConfig_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OtherConfig_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "otherConfig-r9" + }, + { ATF_POINTER, 2, offsetof(struct RRCConnectionReconfiguration_v920_IEs, fullConfig_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_fullConfig_r9_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "fullConfig-r9" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfiguration_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfiguration_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfiguration_v920_IEs_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfiguration_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* otherConfig-r9 at 657 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* fullConfig-r9 at 658 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 659 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfiguration_v920_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfiguration_v920_IEs), + offsetof(struct RRCConnectionReconfiguration_v920_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfiguration_v920_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfiguration_v920_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_v920_IEs = { + "RRCConnectionReconfiguration-v920-IEs", + "RRCConnectionReconfiguration-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfiguration_v920_IEs_1, + 3, /* Elements count */ + &asn_SPC_RRCConnectionReconfiguration_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h b/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h new file mode 100644 index 000000000..a29c3b657 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfiguration_v920_IEs_H_ +#define _RRCConnectionReconfiguration_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReconfiguration_v920_IEs__fullConfig_r9 { + RRCConnectionReconfiguration_v920_IEs__fullConfig_r9_true = 0 +} e_RRCConnectionReconfiguration_v920_IEs__fullConfig_r9; + +/* Forward declarations */ +struct OtherConfig_r9; +struct RRCConnectionReconfiguration_v1020_IEs; + +/* RRCConnectionReconfiguration-v920-IEs */ +typedef struct RRCConnectionReconfiguration_v920_IEs { + struct OtherConfig_r9 *otherConfig_r9 /* OPTIONAL */; + long *fullConfig_r9 /* OPTIONAL */; + struct RRCConnectionReconfiguration_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfiguration_v920_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_fullConfig_r9_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration_v920_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "OtherConfig-r9.h" +#include "RRCConnectionReconfiguration-v1020-IEs.h" + +#endif /* _RRCConnectionReconfiguration_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfiguration.c b/lte/rrc/asn/RRCConnectionReconfiguration.c new file mode 100644 index 000000000..5759037d6 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration.c @@ -0,0 +1,294 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfiguration.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.rrcConnectionReconfiguration_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfiguration_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReconfiguration-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReconfiguration-r8 at 632 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 at 633 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 at 634 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 at 634 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 at 634 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 at 635 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 at 635 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 at 635 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RRCConnectionReconfiguration__criticalExtensions__c1), + offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, _asn_ctx), + offsetof(struct RRCConnectionReconfiguration__criticalExtensions__c1, present), + sizeof(((struct RRCConnectionReconfiguration__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 8, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_13 = { + sizeof(struct RRCConnectionReconfiguration__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReconfiguration__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_13 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_13, + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_13, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 632 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 637 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionReconfiguration__criticalExtensions), + offsetof(struct RRCConnectionReconfiguration__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReconfiguration__criticalExtensions, present), + sizeof(((struct RRCConnectionReconfiguration__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfiguration_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfiguration, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfiguration_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfiguration_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 629 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 636 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfiguration_specs_1 = { + sizeof(struct RRCConnectionReconfiguration), + offsetof(struct RRCConnectionReconfiguration, _asn_ctx), + asn_MAP_RRCConnectionReconfiguration_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration = { + "RRCConnectionReconfiguration", + "RRCConnectionReconfiguration", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfiguration_tags_1, + sizeof(asn_DEF_RRCConnectionReconfiguration_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfiguration_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfiguration_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfiguration_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfiguration_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReconfiguration_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfiguration.h b/lte/rrc/asn/RRCConnectionReconfiguration.h new file mode 100644 index 000000000..2c88fdd33 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfiguration.h @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfiguration_H_ +#define _RRCConnectionReconfiguration_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionReconfiguration-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReconfiguration__criticalExtensions_PR { + RRCConnectionReconfiguration__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReconfiguration__criticalExtensions_PR_c1, + RRCConnectionReconfiguration__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReconfiguration__criticalExtensions_PR; +typedef enum RRCConnectionReconfiguration__criticalExtensions__c1_PR { + RRCConnectionReconfiguration__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RRCConnectionReconfiguration__criticalExtensions__c1_PR_rrcConnectionReconfiguration_r8, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare7, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare6, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare5, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare4, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare3, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare2, + RRCConnectionReconfiguration__criticalExtensions__c1_PR_spare1 +} RRCConnectionReconfiguration__criticalExtensions__c1_PR; + +/* RRCConnectionReconfiguration */ +typedef struct RRCConnectionReconfiguration { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionReconfiguration__criticalExtensions { + RRCConnectionReconfiguration__criticalExtensions_PR present; + union RRCConnectionReconfiguration__criticalExtensions_u { + struct RRCConnectionReconfiguration__criticalExtensions__c1 { + RRCConnectionReconfiguration__criticalExtensions__c1_PR present; + union RRCConnectionReconfiguration__criticalExtensions__c1_u { + RRCConnectionReconfiguration_r8_IEs_t rrcConnectionReconfiguration_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RRCConnectionReconfiguration__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfiguration_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfiguration; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReconfiguration_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.c b/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.c new file mode 100644 index 000000000..b0ef6aa10 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfigurationComplete-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfigurationComplete_r8_IEs_1[] = { + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfigurationComplete_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfigurationComplete_r8_IEs_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfigurationComplete_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonCriticalExtension at 710 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfigurationComplete_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfigurationComplete_r8_IEs), + offsetof(struct RRCConnectionReconfigurationComplete_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfigurationComplete_r8_IEs_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfigurationComplete_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs = { + "RRCConnectionReconfigurationComplete-r8-IEs", + "RRCConnectionReconfigurationComplete-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfigurationComplete_r8_IEs_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionReconfigurationComplete_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h b/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h new file mode 100644 index 000000000..ab446c3dc --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfigurationComplete_r8_IEs_H_ +#define _RRCConnectionReconfigurationComplete_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReconfigurationComplete_v8a0_IEs; + +/* RRCConnectionReconfigurationComplete-r8-IEs */ +typedef struct RRCConnectionReconfigurationComplete_r8_IEs { + struct RRCConnectionReconfigurationComplete_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfigurationComplete_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReconfigurationComplete-v8a0-IEs.h" + +#endif /* _RRCConnectionReconfigurationComplete_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.c b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.c new file mode 100644 index 000000000..5253bacf7 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.c @@ -0,0 +1,394 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfigurationComplete-v1020-IEs.h" + +static int +rlf_InfoAvailable_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rlf_InfoAvailable_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rlf_InfoAvailable_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rlf_InfoAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +logMeasAvailable_r10_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +logMeasAvailable_r10_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +logMeasAvailable_r10_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +logMeasAvailable_r10_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +logMeasAvailable_r10_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +logMeasAvailable_r10_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +logMeasAvailable_r10_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + logMeasAvailable_r10_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_rlf_InfoAvailable_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_logMeasAvailable_r10_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_rlf_InfoAvailable_r10_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_rlf_InfoAvailable_r10_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rlf_InfoAvailable_r10_specs_2 = { + asn_MAP_rlf_InfoAvailable_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_rlf_InfoAvailable_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rlf_InfoAvailable_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rlf_InfoAvailable_r10_2 = { + "rlf-InfoAvailable-r10", + "rlf-InfoAvailable-r10", + rlf_InfoAvailable_r10_2_free, + rlf_InfoAvailable_r10_2_print, + rlf_InfoAvailable_r10_2_constraint, + rlf_InfoAvailable_r10_2_decode_ber, + rlf_InfoAvailable_r10_2_encode_der, + rlf_InfoAvailable_r10_2_decode_xer, + rlf_InfoAvailable_r10_2_encode_xer, + rlf_InfoAvailable_r10_2_decode_uper, + rlf_InfoAvailable_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rlf_InfoAvailable_r10_tags_2, + sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_2) + /sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_rlf_InfoAvailable_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_2) + /sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_2[0]), /* 2 */ + &asn_PER_type_rlf_InfoAvailable_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rlf_InfoAvailable_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_logMeasAvailable_r10_value2enum_4[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_logMeasAvailable_r10_enum2value_4[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_logMeasAvailable_r10_specs_4 = { + asn_MAP_logMeasAvailable_r10_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_logMeasAvailable_r10_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_logMeasAvailable_r10_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_4 = { + "logMeasAvailable-r10", + "logMeasAvailable-r10", + logMeasAvailable_r10_4_free, + logMeasAvailable_r10_4_print, + logMeasAvailable_r10_4_constraint, + logMeasAvailable_r10_4_decode_ber, + logMeasAvailable_r10_4_encode_der, + logMeasAvailable_r10_4_decode_xer, + logMeasAvailable_r10_4_encode_xer, + logMeasAvailable_r10_4_decode_uper, + logMeasAvailable_r10_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_logMeasAvailable_r10_tags_4, + sizeof(asn_DEF_logMeasAvailable_r10_tags_4) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_4[0]) - 1, /* 1 */ + asn_DEF_logMeasAvailable_r10_tags_4, /* Same as above */ + sizeof(asn_DEF_logMeasAvailable_r10_tags_4) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_4[0]), /* 2 */ + &asn_PER_type_logMeasAvailable_r10_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_logMeasAvailable_r10_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_6 = { + sizeof(struct RRCConnectionReconfigurationComplete_v1020_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionReconfigurationComplete_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_6 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_6, + sizeof(asn_DEF_nonCriticalExtension_tags_6) + /sizeof(asn_DEF_nonCriticalExtension_tags_6[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_6, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_6) + /sizeof(asn_DEF_nonCriticalExtension_tags_6[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfigurationComplete_v1020_IEs_1[] = { + { ATF_POINTER, 3, offsetof(struct RRCConnectionReconfigurationComplete_v1020_IEs, rlf_InfoAvailable_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rlf_InfoAvailable_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlf-InfoAvailable-r10" + }, + { ATF_POINTER, 2, offsetof(struct RRCConnectionReconfigurationComplete_v1020_IEs, logMeasAvailable_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_logMeasAvailable_r10_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasAvailable-r10" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfigurationComplete_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_nonCriticalExtension_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfigurationComplete_v1020_IEs_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfigurationComplete_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rlf-InfoAvailable-r10 at 719 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* logMeasAvailable-r10 at 720 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 721 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfigurationComplete_v1020_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfigurationComplete_v1020_IEs), + offsetof(struct RRCConnectionReconfigurationComplete_v1020_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfigurationComplete_v1020_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfigurationComplete_v1020_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs = { + "RRCConnectionReconfigurationComplete-v1020-IEs", + "RRCConnectionReconfigurationComplete-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfigurationComplete_v1020_IEs_1, + 3, /* Elements count */ + &asn_SPC_RRCConnectionReconfigurationComplete_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h new file mode 100644 index 000000000..fd9115e1a --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfigurationComplete_v1020_IEs_H_ +#define _RRCConnectionReconfigurationComplete_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReconfigurationComplete_v1020_IEs__rlf_InfoAvailable_r10 { + RRCConnectionReconfigurationComplete_v1020_IEs__rlf_InfoAvailable_r10_true = 0 +} e_RRCConnectionReconfigurationComplete_v1020_IEs__rlf_InfoAvailable_r10; +typedef enum RRCConnectionReconfigurationComplete_v1020_IEs__logMeasAvailable_r10 { + RRCConnectionReconfigurationComplete_v1020_IEs__logMeasAvailable_r10_true = 0 +} e_RRCConnectionReconfigurationComplete_v1020_IEs__logMeasAvailable_r10; + +/* RRCConnectionReconfigurationComplete-v1020-IEs */ +typedef struct RRCConnectionReconfigurationComplete_v1020_IEs { + long *rlf_InfoAvailable_r10 /* OPTIONAL */; + long *logMeasAvailable_r10 /* OPTIONAL */; + struct RRCConnectionReconfigurationComplete_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfigurationComplete_v1020_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_rlf_InfoAvailable_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReconfigurationComplete_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.c new file mode 100644 index 000000000..491f7f79d --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfigurationComplete-v8a0-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfigurationComplete_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReconfigurationComplete_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReconfigurationComplete_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfigurationComplete_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReconfigurationComplete_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfigurationComplete_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 714 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 715 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfigurationComplete_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionReconfigurationComplete_v8a0_IEs), + offsetof(struct RRCConnectionReconfigurationComplete_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionReconfigurationComplete_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReconfigurationComplete_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs = { + "RRCConnectionReconfigurationComplete-v8a0-IEs", + "RRCConnectionReconfigurationComplete-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfigurationComplete_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReconfigurationComplete_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h new file mode 100644 index 000000000..ea15a0de7 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfigurationComplete_v8a0_IEs_H_ +#define _RRCConnectionReconfigurationComplete_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReconfigurationComplete_v1020_IEs; + +/* RRCConnectionReconfigurationComplete-v8a0-IEs */ +typedef struct RRCConnectionReconfigurationComplete_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionReconfigurationComplete_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfigurationComplete_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReconfigurationComplete-v1020-IEs.h" + +#endif /* _RRCConnectionReconfigurationComplete_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete.c b/lte/rrc/asn/RRCConnectionReconfigurationComplete.c new file mode 100644 index 000000000..441a992e4 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReconfigurationComplete.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_5 = { + sizeof(struct RRCConnectionReconfigurationComplete__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReconfigurationComplete__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_5 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_5, + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_5, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfigurationComplete__criticalExtensions, choice.rrcConnectionReconfigurationComplete_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfigurationComplete_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReconfigurationComplete-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfigurationComplete__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReconfigurationComplete-r8 at 704 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 705 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionReconfigurationComplete__criticalExtensions), + offsetof(struct RRCConnectionReconfigurationComplete__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReconfigurationComplete__criticalExtensions, present), + sizeof(((struct RRCConnectionReconfigurationComplete__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReconfigurationComplete_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfigurationComplete, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReconfigurationComplete, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReconfigurationComplete_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReconfigurationComplete_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 701 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 704 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReconfigurationComplete_specs_1 = { + sizeof(struct RRCConnectionReconfigurationComplete), + offsetof(struct RRCConnectionReconfigurationComplete, _asn_ctx), + asn_MAP_RRCConnectionReconfigurationComplete_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete = { + "RRCConnectionReconfigurationComplete", + "RRCConnectionReconfigurationComplete", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReconfigurationComplete_tags_1, + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReconfigurationComplete_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReconfigurationComplete_tags_1) + /sizeof(asn_DEF_RRCConnectionReconfigurationComplete_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReconfigurationComplete_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReconfigurationComplete_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete.h b/lte/rrc/asn/RRCConnectionReconfigurationComplete.h new file mode 100644 index 000000000..3032e188e --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReconfigurationComplete.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReconfigurationComplete_H_ +#define _RRCConnectionReconfigurationComplete_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionReconfigurationComplete-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReconfigurationComplete__criticalExtensions_PR { + RRCConnectionReconfigurationComplete__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReconfigurationComplete__criticalExtensions_PR_rrcConnectionReconfigurationComplete_r8, + RRCConnectionReconfigurationComplete__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReconfigurationComplete__criticalExtensions_PR; + +/* RRCConnectionReconfigurationComplete */ +typedef struct RRCConnectionReconfigurationComplete { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionReconfigurationComplete__criticalExtensions { + RRCConnectionReconfigurationComplete__criticalExtensions_PR present; + union RRCConnectionReconfigurationComplete__criticalExtensions_u { + RRCConnectionReconfigurationComplete_r8_IEs_t rrcConnectionReconfigurationComplete_r8; + struct RRCConnectionReconfigurationComplete__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReconfigurationComplete_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReconfigurationComplete; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReconfigurationComplete_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.c b/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.c new file mode 100644 index 000000000..2e91592ef --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.c @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishment-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishment_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment_r8_IEs, radioResourceConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigDedicated" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment_r8_IEs, nextHopChainingCount), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NextHopChainingCount, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nextHopChainingCount" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishment_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishment_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishment_r8_IEs_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishment_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioResourceConfigDedicated at 739 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* nextHopChainingCount at 740 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 741 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishment_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishment_r8_IEs), + offsetof(struct RRCConnectionReestablishment_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishment_r8_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishment_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishment_r8_IEs = { + "RRCConnectionReestablishment-r8-IEs", + "RRCConnectionReestablishment-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishment_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishment_r8_IEs_1, + 3, /* Elements count */ + &asn_SPC_RRCConnectionReestablishment_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h b/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h new file mode 100644 index 000000000..fc45522de --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishment_r8_IEs_H_ +#define _RRCConnectionReestablishment_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "RadioResourceConfigDedicated.h" +#include "NextHopChainingCount.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReestablishment_v8a0_IEs; + +/* RRCConnectionReestablishment-r8-IEs */ +typedef struct RRCConnectionReestablishment_r8_IEs { + RadioResourceConfigDedicated_t radioResourceConfigDedicated; + NextHopChainingCount_t nextHopChainingCount; + struct RRCConnectionReestablishment_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishment_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishment_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReestablishment-v8a0-IEs.h" + +#endif /* _RRCConnectionReestablishment_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.c new file mode 100644 index 000000000..81e57eb37 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishment-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct RRCConnectionReestablishment_v8a0_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionReestablishment_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishment_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReestablishment_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishment_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishment_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishment_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 745 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 746 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishment_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishment_v8a0_IEs), + offsetof(struct RRCConnectionReestablishment_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishment_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishment_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishment_v8a0_IEs = { + "RRCConnectionReestablishment-v8a0-IEs", + "RRCConnectionReestablishment-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishment_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishment_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishment_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h new file mode 100644 index 000000000..5147ad80f --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishment_v8a0_IEs_H_ +#define _RRCConnectionReestablishment_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionReestablishment-v8a0-IEs */ +typedef struct RRCConnectionReestablishment_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionReestablishment_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishment_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishment_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishment_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishment.c b/lte/rrc/asn/RRCConnectionReestablishment.c new file mode 100644 index 000000000..808be442f --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishment.c @@ -0,0 +1,294 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishment.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.rrcConnectionReestablishment_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishment_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishment-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReestablishment-r8 at 729 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 at 730 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 at 731 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 at 731 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 at 731 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 at 732 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 at 732 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 at 732 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RRCConnectionReestablishment__criticalExtensions__c1), + offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, _asn_ctx), + offsetof(struct RRCConnectionReestablishment__criticalExtensions__c1, present), + sizeof(((struct RRCConnectionReestablishment__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 8, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_13 = { + sizeof(struct RRCConnectionReestablishment__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReestablishment__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_13 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_13, + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_13, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 729 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 734 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionReestablishment__criticalExtensions), + offsetof(struct RRCConnectionReestablishment__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReestablishment__criticalExtensions, present), + sizeof(((struct RRCConnectionReestablishment__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishment_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishment, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishment_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishment_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 726 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 733 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishment_specs_1 = { + sizeof(struct RRCConnectionReestablishment), + offsetof(struct RRCConnectionReestablishment, _asn_ctx), + asn_MAP_RRCConnectionReestablishment_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishment = { + "RRCConnectionReestablishment", + "RRCConnectionReestablishment", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishment_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishment_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishment_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishment_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishment_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishment_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishment_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishment_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishment.h b/lte/rrc/asn/RRCConnectionReestablishment.h new file mode 100644 index 000000000..c5f2ccd5e --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishment.h @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishment_H_ +#define _RRCConnectionReestablishment_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionReestablishment-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReestablishment__criticalExtensions_PR { + RRCConnectionReestablishment__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReestablishment__criticalExtensions_PR_c1, + RRCConnectionReestablishment__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReestablishment__criticalExtensions_PR; +typedef enum RRCConnectionReestablishment__criticalExtensions__c1_PR { + RRCConnectionReestablishment__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RRCConnectionReestablishment__criticalExtensions__c1_PR_rrcConnectionReestablishment_r8, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare7, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare6, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare5, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare4, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare3, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare2, + RRCConnectionReestablishment__criticalExtensions__c1_PR_spare1 +} RRCConnectionReestablishment__criticalExtensions__c1_PR; + +/* RRCConnectionReestablishment */ +typedef struct RRCConnectionReestablishment { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionReestablishment__criticalExtensions { + RRCConnectionReestablishment__criticalExtensions_PR present; + union RRCConnectionReestablishment__criticalExtensions_u { + struct RRCConnectionReestablishment__criticalExtensions__c1 { + RRCConnectionReestablishment__criticalExtensions__c1_PR present; + union RRCConnectionReestablishment__criticalExtensions__c1_u { + RRCConnectionReestablishment_r8_IEs_t rrcConnectionReestablishment_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RRCConnectionReestablishment__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishment_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishment; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishment_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.c new file mode 100644 index 000000000..44889c4a0 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentComplete-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentComplete_r8_IEs_1[] = { + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishmentComplete_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishmentComplete_r8_IEs_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentComplete_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonCriticalExtension at 760 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentComplete_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentComplete_r8_IEs), + offsetof(struct RRCConnectionReestablishmentComplete_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentComplete_r8_IEs_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishmentComplete_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs = { + "RRCConnectionReestablishmentComplete-r8-IEs", + "RRCConnectionReestablishmentComplete-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentComplete_r8_IEs_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentComplete_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h new file mode 100644 index 000000000..841e6e8b4 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentComplete_r8_IEs_H_ +#define _RRCConnectionReestablishmentComplete_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReestablishmentComplete_v920_IEs; + +/* RRCConnectionReestablishmentComplete-r8-IEs */ +typedef struct RRCConnectionReestablishmentComplete_r8_IEs { + struct RRCConnectionReestablishmentComplete_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentComplete_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReestablishmentComplete-v920-IEs.h" + +#endif /* _RRCConnectionReestablishmentComplete_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.c new file mode 100644 index 000000000..cbffcf90a --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.c @@ -0,0 +1,247 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentComplete-v1020-IEs.h" + +static int +logMeasAvailable_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +logMeasAvailable_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +logMeasAvailable_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +logMeasAvailable_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +logMeasAvailable_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +logMeasAvailable_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +logMeasAvailable_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + logMeasAvailable_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_logMeasAvailable_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_logMeasAvailable_r10_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_logMeasAvailable_r10_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_logMeasAvailable_r10_specs_2 = { + asn_MAP_logMeasAvailable_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_logMeasAvailable_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_logMeasAvailable_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_2 = { + "logMeasAvailable-r10", + "logMeasAvailable-r10", + logMeasAvailable_r10_2_free, + logMeasAvailable_r10_2_print, + logMeasAvailable_r10_2_constraint, + logMeasAvailable_r10_2_decode_ber, + logMeasAvailable_r10_2_encode_der, + logMeasAvailable_r10_2_decode_xer, + logMeasAvailable_r10_2_encode_xer, + logMeasAvailable_r10_2_decode_uper, + logMeasAvailable_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_logMeasAvailable_r10_tags_2, + sizeof(asn_DEF_logMeasAvailable_r10_tags_2) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_logMeasAvailable_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_logMeasAvailable_r10_tags_2) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_2[0]), /* 2 */ + &asn_PER_type_logMeasAvailable_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_logMeasAvailable_r10_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_4 = { + sizeof(struct RRCConnectionReestablishmentComplete_v1020_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionReestablishmentComplete_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_4 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_4, + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_4, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentComplete_v1020_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReestablishmentComplete_v1020_IEs, logMeasAvailable_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_logMeasAvailable_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasAvailable-r10" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishmentComplete_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishmentComplete_v1020_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentComplete_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* logMeasAvailable-r10 at 774 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 775 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentComplete_v1020_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentComplete_v1020_IEs), + offsetof(struct RRCConnectionReestablishmentComplete_v1020_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentComplete_v1020_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishmentComplete_v1020_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs = { + "RRCConnectionReestablishmentComplete-v1020-IEs", + "RRCConnectionReestablishmentComplete-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentComplete_v1020_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentComplete_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h new file mode 100644 index 000000000..bd50bba10 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentComplete_v1020_IEs_H_ +#define _RRCConnectionReestablishmentComplete_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReestablishmentComplete_v1020_IEs__logMeasAvailable_r10 { + RRCConnectionReestablishmentComplete_v1020_IEs__logMeasAvailable_r10_true = 0 +} e_RRCConnectionReestablishmentComplete_v1020_IEs__logMeasAvailable_r10; + +/* RRCConnectionReestablishmentComplete-v1020-IEs */ +typedef struct RRCConnectionReestablishmentComplete_v1020_IEs { + long *logMeasAvailable_r10 /* OPTIONAL */; + struct RRCConnectionReestablishmentComplete_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentComplete_v1020_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishmentComplete_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.c new file mode 100644 index 000000000..92fe6d1cf --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentComplete-v8a0-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentComplete_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReestablishmentComplete_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishmentComplete_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentComplete_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishmentComplete_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentComplete_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 769 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 770 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentComplete_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentComplete_v8a0_IEs), + offsetof(struct RRCConnectionReestablishmentComplete_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentComplete_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishmentComplete_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs = { + "RRCConnectionReestablishmentComplete-v8a0-IEs", + "RRCConnectionReestablishmentComplete-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentComplete_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentComplete_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h new file mode 100644 index 000000000..265856c0f --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentComplete_v8a0_IEs_H_ +#define _RRCConnectionReestablishmentComplete_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReestablishmentComplete_v1020_IEs; + +/* RRCConnectionReestablishmentComplete-v8a0-IEs */ +typedef struct RRCConnectionReestablishmentComplete_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionReestablishmentComplete_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentComplete_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReestablishmentComplete-v1020-IEs.h" + +#endif /* _RRCConnectionReestablishmentComplete_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.c new file mode 100644 index 000000000..391848511 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.c @@ -0,0 +1,209 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentComplete-v920-IEs.h" + +static int +rlf_InfoAvailable_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rlf_InfoAvailable_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rlf_InfoAvailable_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rlf_InfoAvailable_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_rlf_InfoAvailable_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_rlf_InfoAvailable_r9_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_rlf_InfoAvailable_r9_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rlf_InfoAvailable_r9_specs_2 = { + asn_MAP_rlf_InfoAvailable_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_rlf_InfoAvailable_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rlf_InfoAvailable_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rlf_InfoAvailable_r9_2 = { + "rlf-InfoAvailable-r9", + "rlf-InfoAvailable-r9", + rlf_InfoAvailable_r9_2_free, + rlf_InfoAvailable_r9_2_print, + rlf_InfoAvailable_r9_2_constraint, + rlf_InfoAvailable_r9_2_decode_ber, + rlf_InfoAvailable_r9_2_encode_der, + rlf_InfoAvailable_r9_2_decode_xer, + rlf_InfoAvailable_r9_2_encode_xer, + rlf_InfoAvailable_r9_2_decode_uper, + rlf_InfoAvailable_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rlf_InfoAvailable_r9_tags_2, + sizeof(asn_DEF_rlf_InfoAvailable_r9_tags_2) + /sizeof(asn_DEF_rlf_InfoAvailable_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_rlf_InfoAvailable_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_rlf_InfoAvailable_r9_tags_2) + /sizeof(asn_DEF_rlf_InfoAvailable_r9_tags_2[0]), /* 2 */ + &asn_PER_type_rlf_InfoAvailable_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rlf_InfoAvailable_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentComplete_v920_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReestablishmentComplete_v920_IEs, rlf_InfoAvailable_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rlf_InfoAvailable_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlf-InfoAvailable-r9" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishmentComplete_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentComplete_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishmentComplete_v920_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentComplete_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rlf-InfoAvailable-r9 at 764 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 765 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentComplete_v920_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentComplete_v920_IEs), + offsetof(struct RRCConnectionReestablishmentComplete_v920_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentComplete_v920_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishmentComplete_v920_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs = { + "RRCConnectionReestablishmentComplete-v920-IEs", + "RRCConnectionReestablishmentComplete-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentComplete_v920_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentComplete_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h new file mode 100644 index 000000000..c3d1c6970 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentComplete_v920_IEs_H_ +#define _RRCConnectionReestablishmentComplete_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReestablishmentComplete_v920_IEs__rlf_InfoAvailable_r9 { + RRCConnectionReestablishmentComplete_v920_IEs__rlf_InfoAvailable_r9_true = 0 +} e_RRCConnectionReestablishmentComplete_v920_IEs__rlf_InfoAvailable_r9; + +/* Forward declarations */ +struct RRCConnectionReestablishmentComplete_v8a0_IEs; + +/* RRCConnectionReestablishmentComplete-v920-IEs */ +typedef struct RRCConnectionReestablishmentComplete_v920_IEs { + long *rlf_InfoAvailable_r9 /* OPTIONAL */; + struct RRCConnectionReestablishmentComplete_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentComplete_v920_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_rlf_InfoAvailable_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete_v920_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReestablishmentComplete-v8a0-IEs.h" + +#endif /* _RRCConnectionReestablishmentComplete_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete.c b/lte/rrc/asn/RRCConnectionReestablishmentComplete.c new file mode 100644 index 000000000..c4e9b1980 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentComplete.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_5 = { + sizeof(struct RRCConnectionReestablishmentComplete__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReestablishmentComplete__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_5 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_5, + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_5, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentComplete__criticalExtensions, choice.rrcConnectionReestablishmentComplete_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentComplete_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishmentComplete-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentComplete__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReestablishmentComplete-r8 at 754 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 755 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionReestablishmentComplete__criticalExtensions), + offsetof(struct RRCConnectionReestablishmentComplete__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReestablishmentComplete__criticalExtensions, present), + sizeof(((struct RRCConnectionReestablishmentComplete__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentComplete_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentComplete, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentComplete, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentComplete_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentComplete_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 751 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 754 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentComplete_specs_1 = { + sizeof(struct RRCConnectionReestablishmentComplete), + offsetof(struct RRCConnectionReestablishmentComplete, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentComplete_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete = { + "RRCConnectionReestablishmentComplete", + "RRCConnectionReestablishmentComplete", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentComplete_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentComplete_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentComplete_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentComplete_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentComplete_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentComplete_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete.h b/lte/rrc/asn/RRCConnectionReestablishmentComplete.h new file mode 100644 index 000000000..114b5b87e --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentComplete.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentComplete_H_ +#define _RRCConnectionReestablishmentComplete_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionReestablishmentComplete-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReestablishmentComplete__criticalExtensions_PR { + RRCConnectionReestablishmentComplete__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReestablishmentComplete__criticalExtensions_PR_rrcConnectionReestablishmentComplete_r8, + RRCConnectionReestablishmentComplete__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReestablishmentComplete__criticalExtensions_PR; + +/* RRCConnectionReestablishmentComplete */ +typedef struct RRCConnectionReestablishmentComplete { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionReestablishmentComplete__criticalExtensions { + RRCConnectionReestablishmentComplete__criticalExtensions_PR present; + union RRCConnectionReestablishmentComplete__criticalExtensions_u { + RRCConnectionReestablishmentComplete_r8_IEs_t rrcConnectionReestablishmentComplete_r8; + struct RRCConnectionReestablishmentComplete__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentComplete_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentComplete; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishmentComplete_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.c new file mode 100644 index 000000000..fb363f846 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentReject-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentReject_r8_IEs_1[] = { + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishmentReject_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishmentReject_r8_IEs_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentReject_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonCriticalExtension at 788 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentReject_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentReject_r8_IEs), + offsetof(struct RRCConnectionReestablishmentReject_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentReject_r8_IEs_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishmentReject_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentReject_r8_IEs = { + "RRCConnectionReestablishmentReject-r8-IEs", + "RRCConnectionReestablishmentReject-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentReject_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentReject_r8_IEs_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentReject_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h new file mode 100644 index 000000000..87df7e042 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentReject_r8_IEs_H_ +#define _RRCConnectionReestablishmentReject_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReestablishmentReject_v8a0_IEs; + +/* RRCConnectionReestablishmentReject-r8-IEs */ +typedef struct RRCConnectionReestablishmentReject_r8_IEs { + struct RRCConnectionReestablishmentReject_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentReject_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentReject_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReestablishmentReject-v8a0-IEs.h" + +#endif /* _RRCConnectionReestablishmentReject_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.c new file mode 100644 index 000000000..f26a96f8e --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentReject-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct RRCConnectionReestablishmentReject_v8a0_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionReestablishmentReject_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentReject_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReestablishmentReject_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReestablishmentReject_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReestablishmentReject_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentReject_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 792 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 793 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentReject_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentReject_v8a0_IEs), + offsetof(struct RRCConnectionReestablishmentReject_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentReject_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReestablishmentReject_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs = { + "RRCConnectionReestablishmentReject-v8a0-IEs", + "RRCConnectionReestablishmentReject-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentReject_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentReject_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h new file mode 100644 index 000000000..f1910c7a0 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentReject_v8a0_IEs_H_ +#define _RRCConnectionReestablishmentReject_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionReestablishmentReject-v8a0-IEs */ +typedef struct RRCConnectionReestablishmentReject_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionReestablishmentReject_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentReject_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentReject_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishmentReject_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject.c b/lte/rrc/asn/RRCConnectionReestablishmentReject.c new file mode 100644 index 000000000..befc2e994 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentReject.c @@ -0,0 +1,161 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentReject.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_4 = { + sizeof(struct RRCConnectionReestablishmentReject__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReestablishmentReject__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_4 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_4, + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_4, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentReject__criticalExtensions, choice.rrcConnectionReestablishmentReject_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentReject_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishmentReject-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentReject__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReestablishmentReject-r8 at 782 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 783 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct RRCConnectionReestablishmentReject__criticalExtensions), + offsetof(struct RRCConnectionReestablishmentReject__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReestablishmentReject__criticalExtensions, present), + sizeof(((struct RRCConnectionReestablishmentReject__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentReject, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 782 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentReject_specs_1 = { + sizeof(struct RRCConnectionReestablishmentReject), + offsetof(struct RRCConnectionReestablishmentReject, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentReject = { + "RRCConnectionReestablishmentReject", + "RRCConnectionReestablishmentReject", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentReject_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentReject_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentReject_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentReject_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentReject_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentReject_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentReject_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentReject_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject.h b/lte/rrc/asn/RRCConnectionReestablishmentReject.h new file mode 100644 index 000000000..8ec9dad61 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentReject.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentReject_H_ +#define _RRCConnectionReestablishmentReject_H_ + + +#include + +/* Including external dependencies */ +#include "RRCConnectionReestablishmentReject-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReestablishmentReject__criticalExtensions_PR { + RRCConnectionReestablishmentReject__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReestablishmentReject__criticalExtensions_PR_rrcConnectionReestablishmentReject_r8, + RRCConnectionReestablishmentReject__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReestablishmentReject__criticalExtensions_PR; + +/* RRCConnectionReestablishmentReject */ +typedef struct RRCConnectionReestablishmentReject { + struct RRCConnectionReestablishmentReject__criticalExtensions { + RRCConnectionReestablishmentReject__criticalExtensions_PR present; + union RRCConnectionReestablishmentReject__criticalExtensions_u { + RRCConnectionReestablishmentReject_r8_IEs_t rrcConnectionReestablishmentReject_r8; + struct RRCConnectionReestablishmentReject__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishmentReject_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.c b/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.c new file mode 100644 index 000000000..01fdf2e4e --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.c @@ -0,0 +1,116 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentRequest-r8-IEs.h" + +static int +memb_spare_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_spare_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentRequest_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentRequest_r8_IEs, ue_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReestabUE_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentRequest_r8_IEs, reestablishmentCause), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReestablishmentCause, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reestablishmentCause" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentRequest_r8_IEs, spare), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_spare_constraint_1, + &asn_PER_memb_spare_constr_4, + 0, + "spare" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentRequest_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-Identity at 806 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* reestablishmentCause at 807 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* spare at 808 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentRequest_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReestablishmentRequest_r8_IEs), + offsetof(struct RRCConnectionReestablishmentRequest_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentRequest_r8_IEs_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs = { + "RRCConnectionReestablishmentRequest-r8-IEs", + "RRCConnectionReestablishmentRequest-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentRequest_r8_IEs_1, + 3, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentRequest_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h b/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h new file mode 100644 index 000000000..999794286 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentRequest_r8_IEs_H_ +#define _RRCConnectionReestablishmentRequest_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "ReestabUE-Identity.h" +#include "ReestablishmentCause.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionReestablishmentRequest-r8-IEs */ +typedef struct RRCConnectionReestablishmentRequest_r8_IEs { + ReestabUE_Identity_t ue_Identity; + ReestablishmentCause_t reestablishmentCause; + BIT_STRING_t spare; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentRequest_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishmentRequest_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest.c b/lte/rrc/asn/RRCConnectionReestablishmentRequest.c new file mode 100644 index 000000000..0e003a149 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentRequest.c @@ -0,0 +1,161 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReestablishmentRequest.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_4 = { + sizeof(struct RRCConnectionReestablishmentRequest__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReestablishmentRequest__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_4 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_4, + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_4, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentRequest__criticalExtensions, choice.rrcConnectionReestablishmentRequest_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentRequest_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishmentRequest-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentRequest__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReestablishmentRequest-r8 at 800 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 801 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct RRCConnectionReestablishmentRequest__criticalExtensions), + offsetof(struct RRCConnectionReestablishmentRequest__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReestablishmentRequest__criticalExtensions, present), + sizeof(((struct RRCConnectionReestablishmentRequest__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReestablishmentRequest_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReestablishmentRequest, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReestablishmentRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReestablishmentRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 800 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReestablishmentRequest_specs_1 = { + sizeof(struct RRCConnectionReestablishmentRequest), + offsetof(struct RRCConnectionReestablishmentRequest, _asn_ctx), + asn_MAP_RRCConnectionReestablishmentRequest_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentRequest = { + "RRCConnectionReestablishmentRequest", + "RRCConnectionReestablishmentRequest", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReestablishmentRequest_tags_1, + sizeof(asn_DEF_RRCConnectionReestablishmentRequest_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentRequest_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReestablishmentRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReestablishmentRequest_tags_1) + /sizeof(asn_DEF_RRCConnectionReestablishmentRequest_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReestablishmentRequest_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionReestablishmentRequest_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest.h b/lte/rrc/asn/RRCConnectionReestablishmentRequest.h new file mode 100644 index 000000000..90194bd29 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReestablishmentRequest.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReestablishmentRequest_H_ +#define _RRCConnectionReestablishmentRequest_H_ + + +#include + +/* Including external dependencies */ +#include "RRCConnectionReestablishmentRequest-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReestablishmentRequest__criticalExtensions_PR { + RRCConnectionReestablishmentRequest__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReestablishmentRequest__criticalExtensions_PR_rrcConnectionReestablishmentRequest_r8, + RRCConnectionReestablishmentRequest__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReestablishmentRequest__criticalExtensions_PR; + +/* RRCConnectionReestablishmentRequest */ +typedef struct RRCConnectionReestablishmentRequest { + struct RRCConnectionReestablishmentRequest__criticalExtensions { + RRCConnectionReestablishmentRequest__criticalExtensions_PR present; + union RRCConnectionReestablishmentRequest__criticalExtensions_u { + RRCConnectionReestablishmentRequest_r8_IEs_t rrcConnectionReestablishmentRequest_r8; + struct RRCConnectionReestablishmentRequest__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReestablishmentRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReestablishmentRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReestablishmentRequest_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReject-r8-IEs.c b/lte/rrc/asn/RRCConnectionReject-r8-IEs.c new file mode 100644 index 000000000..7c80bf0d8 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject-r8-IEs.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReject-r8-IEs.h" + +static int +memb_waitTime_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_waitTime_constr_2 = { + { APC_CONSTRAINED, 4, 4, 1, 16 } /* (1..16) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RRCConnectionReject_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject_r8_IEs, waitTime), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_waitTime_constraint_1, + &asn_PER_memb_waitTime_constr_2, + 0, + "waitTime" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReject_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReject_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReject_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReject_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReject_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* waitTime at 833 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 834 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReject_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionReject_r8_IEs), + offsetof(struct RRCConnectionReject_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionReject_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReject_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject_r8_IEs = { + "RRCConnectionReject-r8-IEs", + "RRCConnectionReject-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReject_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReject_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReject_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReject_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReject_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReject_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReject-r8-IEs.h b/lte/rrc/asn/RRCConnectionReject-r8-IEs.h new file mode 100644 index 000000000..16c38fc9c --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReject_r8_IEs_H_ +#define _RRCConnectionReject_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReject_v8a0_IEs; + +/* RRCConnectionReject-r8-IEs */ +typedef struct RRCConnectionReject_r8_IEs { + long waitTime; + struct RRCConnectionReject_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReject_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReject-v8a0-IEs.h" + +#endif /* _RRCConnectionReject_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReject-v1020-IEs.c b/lte/rrc/asn/RRCConnectionReject-v1020-IEs.c new file mode 100644 index 000000000..9b389c3b5 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject-v1020-IEs.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReject-v1020-IEs.h" + +static int +memb_extendedWaitTime_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 1800)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_extendedWaitTime_r10_constr_2 = { + { APC_CONSTRAINED, 11, 11, 1, 1800 } /* (1..1800) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct RRCConnectionReject_v1020_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionReject_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReject_v1020_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReject_v1020_IEs, extendedWaitTime_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_extendedWaitTime_r10_constraint_1, + &asn_PER_memb_extendedWaitTime_r10_constr_2, + 0, + "extendedWaitTime-r10" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReject_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReject_v1020_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReject_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReject_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* extendedWaitTime-r10 at 843 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 844 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReject_v1020_IEs_specs_1 = { + sizeof(struct RRCConnectionReject_v1020_IEs), + offsetof(struct RRCConnectionReject_v1020_IEs, _asn_ctx), + asn_MAP_RRCConnectionReject_v1020_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReject_v1020_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject_v1020_IEs = { + "RRCConnectionReject-v1020-IEs", + "RRCConnectionReject-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReject_v1020_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReject_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReject_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReject_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReject_v1020_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReject_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReject-v1020-IEs.h b/lte/rrc/asn/RRCConnectionReject-v1020-IEs.h new file mode 100644 index 000000000..e43926ed2 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject-v1020-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReject_v1020_IEs_H_ +#define _RRCConnectionReject_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionReject-v1020-IEs */ +typedef struct RRCConnectionReject_v1020_IEs { + long *extendedWaitTime_r10 /* OPTIONAL */; + struct RRCConnectionReject_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReject_v1020_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReject_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c new file mode 100644 index 000000000..fe5a6c712 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReject-v8a0-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionReject_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionReject_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionReject_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReject_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionReject_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReject_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 838 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 839 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReject_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionReject_v8a0_IEs), + offsetof(struct RRCConnectionReject_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionReject_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionReject_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject_v8a0_IEs = { + "RRCConnectionReject-v8a0-IEs", + "RRCConnectionReject-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReject_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionReject_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h new file mode 100644 index 000000000..fa83e1a16 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReject_v8a0_IEs_H_ +#define _RRCConnectionReject_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionReject_v1020_IEs; + +/* RRCConnectionReject-v8a0-IEs */ +typedef struct RRCConnectionReject_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionReject_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReject_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionReject-v1020-IEs.h" + +#endif /* _RRCConnectionReject_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionReject.c b/lte/rrc/asn/RRCConnectionReject.c new file mode 100644 index 000000000..958f59365 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionReject.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject__criticalExtensions__c1, choice.rrcConnectionReject_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReject_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReject-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReject-r8 at 825 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 826 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 826 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 826 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct RRCConnectionReject__criticalExtensions__c1), + offsetof(struct RRCConnectionReject__criticalExtensions__c1, _asn_ctx), + offsetof(struct RRCConnectionReject__criticalExtensions__c1, present), + sizeof(((struct RRCConnectionReject__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct RRCConnectionReject__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionReject__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 825 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 828 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct RRCConnectionReject__criticalExtensions), + offsetof(struct RRCConnectionReject__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionReject__criticalExtensions, present), + sizeof(((struct RRCConnectionReject__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionReject_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionReject, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionReject_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionReject_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 827 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionReject_specs_1 = { + sizeof(struct RRCConnectionReject), + offsetof(struct RRCConnectionReject, _asn_ctx), + asn_MAP_RRCConnectionReject_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject = { + "RRCConnectionReject", + "RRCConnectionReject", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionReject_tags_1, + sizeof(asn_DEF_RRCConnectionReject_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionReject_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionReject_tags_1) + /sizeof(asn_DEF_RRCConnectionReject_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionReject_1, + 1, /* Elements count */ + &asn_SPC_RRCConnectionReject_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionReject.h b/lte/rrc/asn/RRCConnectionReject.h new file mode 100644 index 000000000..27b703355 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionReject.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionReject_H_ +#define _RRCConnectionReject_H_ + + +#include + +/* Including external dependencies */ +#include "RRCConnectionReject-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionReject__criticalExtensions_PR { + RRCConnectionReject__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionReject__criticalExtensions_PR_c1, + RRCConnectionReject__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionReject__criticalExtensions_PR; +typedef enum RRCConnectionReject__criticalExtensions__c1_PR { + RRCConnectionReject__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RRCConnectionReject__criticalExtensions__c1_PR_rrcConnectionReject_r8, + RRCConnectionReject__criticalExtensions__c1_PR_spare3, + RRCConnectionReject__criticalExtensions__c1_PR_spare2, + RRCConnectionReject__criticalExtensions__c1_PR_spare1 +} RRCConnectionReject__criticalExtensions__c1_PR; + +/* RRCConnectionReject */ +typedef struct RRCConnectionReject { + struct RRCConnectionReject__criticalExtensions { + RRCConnectionReject__criticalExtensions_PR present; + union RRCConnectionReject__criticalExtensions_u { + struct RRCConnectionReject__criticalExtensions__c1 { + RRCConnectionReject__criticalExtensions__c1_PR present; + union RRCConnectionReject__criticalExtensions__c1_u { + RRCConnectionReject_r8_IEs_t rrcConnectionReject_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RRCConnectionReject__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionReject_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionReject; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionReject_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRelease-r8-IEs.c b/lte/rrc/asn/RRCConnectionRelease-r8-IEs.c new file mode 100644 index 000000000..1f7e62bf0 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-r8-IEs.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionRelease-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionRelease_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease_r8_IEs, releaseCause), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReleaseCause, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "releaseCause" + }, + { ATF_POINTER, 3, offsetof(struct RRCConnectionRelease_r8_IEs, redirectedCarrierInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_RedirectedCarrierInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "redirectedCarrierInfo" + }, + { ATF_POINTER, 2, offsetof(struct RRCConnectionRelease_r8_IEs, idleModeMobilityControlInfo), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IdleModeMobilityControlInfo, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "idleModeMobilityControlInfo" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionRelease_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRelease_v890_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionRelease_r8_IEs_oms_1[] = { 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionRelease_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRelease_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* releaseCause at 860 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* redirectedCarrierInfo at 861 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* idleModeMobilityControlInfo at 862 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 863 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRelease_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionRelease_r8_IEs), + offsetof(struct RRCConnectionRelease_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionRelease_r8_IEs_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RRCConnectionRelease_r8_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_r8_IEs = { + "RRCConnectionRelease-r8-IEs", + "RRCConnectionRelease-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRelease_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionRelease_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRelease_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRelease_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRelease_r8_IEs_1, + 4, /* Elements count */ + &asn_SPC_RRCConnectionRelease_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRelease-r8-IEs.h b/lte/rrc/asn/RRCConnectionRelease-r8-IEs.h new file mode 100644 index 000000000..2204029f3 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-r8-IEs.h @@ -0,0 +1,51 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionRelease_r8_IEs_H_ +#define _RRCConnectionRelease_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "ReleaseCause.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RedirectedCarrierInfo; +struct IdleModeMobilityControlInfo; +struct RRCConnectionRelease_v890_IEs; + +/* RRCConnectionRelease-r8-IEs */ +typedef struct RRCConnectionRelease_r8_IEs { + ReleaseCause_t releaseCause; + struct RedirectedCarrierInfo *redirectedCarrierInfo /* OPTIONAL */; + struct IdleModeMobilityControlInfo *idleModeMobilityControlInfo /* OPTIONAL */; + struct RRCConnectionRelease_v890_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRelease_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RedirectedCarrierInfo.h" +#include "IdleModeMobilityControlInfo.h" +#include "RRCConnectionRelease-v890-IEs.h" + +#endif /* _RRCConnectionRelease_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c b/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c new file mode 100644 index 000000000..56083c1d3 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c @@ -0,0 +1,140 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionRelease-v1020-IEs.h" + +static int +memb_extendedWaitTime_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 1800)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_extendedWaitTime_r10_constr_2 = { + { APC_CONSTRAINED, 11, 11, 1, 1800 } /* (1..1800) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct RRCConnectionRelease_v1020_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionRelease_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionRelease_v1020_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionRelease_v1020_IEs, extendedWaitTime_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_extendedWaitTime_r10_constraint_1, + &asn_PER_memb_extendedWaitTime_r10_constr_2, + 0, + "extendedWaitTime-r10" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionRelease_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionRelease_v1020_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRelease_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* extendedWaitTime-r10 at 883 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 884 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRelease_v1020_IEs_specs_1 = { + sizeof(struct RRCConnectionRelease_v1020_IEs), + offsetof(struct RRCConnectionRelease_v1020_IEs, _asn_ctx), + asn_MAP_RRCConnectionRelease_v1020_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionRelease_v1020_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_v1020_IEs = { + "RRCConnectionRelease-v1020-IEs", + "RRCConnectionRelease-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRelease_v1020_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionRelease_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h b/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h new file mode 100644 index 000000000..318b8a093 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionRelease_v1020_IEs_H_ +#define _RRCConnectionRelease_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionRelease-v1020-IEs */ +typedef struct RRCConnectionRelease_v1020_IEs { + long *extendedWaitTime_r10 /* OPTIONAL */; + struct RRCConnectionRelease_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRelease_v1020_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionRelease_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRelease-v890-IEs.c b/lte/rrc/asn/RRCConnectionRelease-v890-IEs.c new file mode 100644 index 000000000..69cce7e34 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-v890-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionRelease-v890-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionRelease_v890_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionRelease_v890_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionRelease_v890_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRelease_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionRelease_v890_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionRelease_v890_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRelease_v890_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 867 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 868 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRelease_v890_IEs_specs_1 = { + sizeof(struct RRCConnectionRelease_v890_IEs), + offsetof(struct RRCConnectionRelease_v890_IEs, _asn_ctx), + asn_MAP_RRCConnectionRelease_v890_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionRelease_v890_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_v890_IEs = { + "RRCConnectionRelease-v890-IEs", + "RRCConnectionRelease-v890-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRelease_v890_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionRelease_v890_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_v890_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRelease_v890_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRelease_v890_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_v890_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRelease_v890_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionRelease_v890_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRelease-v890-IEs.h b/lte/rrc/asn/RRCConnectionRelease-v890-IEs.h new file mode 100644 index 000000000..e349021c3 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-v890-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionRelease_v890_IEs_H_ +#define _RRCConnectionRelease_v890_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionRelease_v920_IEs; + +/* RRCConnectionRelease-v890-IEs */ +typedef struct RRCConnectionRelease_v890_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionRelease_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRelease_v890_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_v890_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionRelease-v920-IEs.h" + +#endif /* _RRCConnectionRelease_v890_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRelease-v920-IEs.c b/lte/rrc/asn/RRCConnectionRelease-v920-IEs.c new file mode 100644 index 000000000..cc6ff50e5 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-v920-IEs.c @@ -0,0 +1,155 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionRelease-v920-IEs.h" + +static asn_per_constraints_t asn_PER_type_cellInfoList_r9_constr_2 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 2, 2, 0, 2 } /* (0..2,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cellInfoList_r9_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9, choice.geran_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellInfoListGERAN_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "geran-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9, choice.utra_FDD_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellInfoListUTRA_FDD_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-FDD-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9, choice.utra_TDD_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellInfoListUTRA_TDD_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-TDD-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9, choice.utra_TDD_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellInfoListUTRA_TDD_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-TDD-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_cellInfoList_r9_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* geran-r9 at 873 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* utra-FDD-r9 at 874 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* utra-TDD-r9 at 875 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* utra-TDD-r10 at 878 */ +}; +static asn_CHOICE_specifics_t asn_SPC_cellInfoList_r9_specs_2 = { + sizeof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9), + offsetof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9, _asn_ctx), + offsetof(struct RRCConnectionRelease_v920_IEs__cellInfoList_r9, present), + sizeof(((struct RRCConnectionRelease_v920_IEs__cellInfoList_r9 *)0)->present), + asn_MAP_cellInfoList_r9_tag2el_2, + 4, /* Count of tags in the map */ + 0, + 3 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellInfoList_r9_2 = { + "cellInfoList-r9", + "cellInfoList-r9", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_cellInfoList_r9_constr_2, + asn_MBR_cellInfoList_r9_2, + 4, /* Elements count */ + &asn_SPC_cellInfoList_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionRelease_v920_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionRelease_v920_IEs, cellInfoList_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_cellInfoList_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellInfoList-r9" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionRelease_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRelease_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionRelease_v920_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionRelease_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRelease_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellInfoList-r9 at 873 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 879 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRelease_v920_IEs_specs_1 = { + sizeof(struct RRCConnectionRelease_v920_IEs), + offsetof(struct RRCConnectionRelease_v920_IEs, _asn_ctx), + asn_MAP_RRCConnectionRelease_v920_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionRelease_v920_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_v920_IEs = { + "RRCConnectionRelease-v920-IEs", + "RRCConnectionRelease-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRelease_v920_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionRelease_v920_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRelease_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRelease_v920_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRelease_v920_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionRelease_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRelease-v920-IEs.h b/lte/rrc/asn/RRCConnectionRelease-v920-IEs.h new file mode 100644 index 000000000..3c81d4709 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease-v920-IEs.h @@ -0,0 +1,74 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionRelease_v920_IEs_H_ +#define _RRCConnectionRelease_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "CellInfoListGERAN-r9.h" +#include "CellInfoListUTRA-FDD-r9.h" +#include "CellInfoListUTRA-TDD-r9.h" +#include "CellInfoListUTRA-TDD-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR { + RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR_NOTHING, /* No components present */ + RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR_geran_r9, + RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR_utra_FDD_r9, + RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR_utra_TDD_r9, + /* Extensions may appear below */ + RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR_utra_TDD_r10 +} RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR; + +/* Forward declarations */ +struct RRCConnectionRelease_v1020_IEs; + +/* RRCConnectionRelease-v920-IEs */ +typedef struct RRCConnectionRelease_v920_IEs { + struct RRCConnectionRelease_v920_IEs__cellInfoList_r9 { + RRCConnectionRelease_v920_IEs__cellInfoList_r9_PR present; + union RRCConnectionRelease_v920_IEs__cellInfoList_r9_u { + CellInfoListGERAN_r9_t geran_r9; + CellInfoListUTRA_FDD_r9_t utra_FDD_r9; + CellInfoListUTRA_TDD_r9_t utra_TDD_r9; + /* + * This type is extensible, + * possible extensions are below. + */ + CellInfoListUTRA_TDD_r10_t utra_TDD_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cellInfoList_r9; + struct RRCConnectionRelease_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRelease_v920_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease_v920_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionRelease-v1020-IEs.h" + +#endif /* _RRCConnectionRelease_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRelease.c b/lte/rrc/asn/RRCConnectionRelease.c new file mode 100644 index 000000000..01f83486e --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionRelease.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease__criticalExtensions__c1, choice.rrcConnectionRelease_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRelease_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionRelease-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionRelease-r8 at 852 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 853 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 853 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 853 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RRCConnectionRelease__criticalExtensions__c1), + offsetof(struct RRCConnectionRelease__criticalExtensions__c1, _asn_ctx), + offsetof(struct RRCConnectionRelease__criticalExtensions__c1, present), + sizeof(((struct RRCConnectionRelease__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct RRCConnectionRelease__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionRelease__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 852 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 855 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionRelease__criticalExtensions), + offsetof(struct RRCConnectionRelease__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionRelease__criticalExtensions, present), + sizeof(((struct RRCConnectionRelease__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionRelease_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRelease, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionRelease_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRelease_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 849 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 854 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRelease_specs_1 = { + sizeof(struct RRCConnectionRelease), + offsetof(struct RRCConnectionRelease, _asn_ctx), + asn_MAP_RRCConnectionRelease_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease = { + "RRCConnectionRelease", + "RRCConnectionRelease", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionRelease_tags_1, + sizeof(asn_DEF_RRCConnectionRelease_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionRelease_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionRelease_tags_1) + /sizeof(asn_DEF_RRCConnectionRelease_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionRelease_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionRelease_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionRelease.h b/lte/rrc/asn/RRCConnectionRelease.h new file mode 100644 index 000000000..cc11510eb --- /dev/null +++ b/lte/rrc/asn/RRCConnectionRelease.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionRelease_H_ +#define _RRCConnectionRelease_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionRelease-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionRelease__criticalExtensions_PR { + RRCConnectionRelease__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionRelease__criticalExtensions_PR_c1, + RRCConnectionRelease__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionRelease__criticalExtensions_PR; +typedef enum RRCConnectionRelease__criticalExtensions__c1_PR { + RRCConnectionRelease__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RRCConnectionRelease__criticalExtensions__c1_PR_rrcConnectionRelease_r8, + RRCConnectionRelease__criticalExtensions__c1_PR_spare3, + RRCConnectionRelease__criticalExtensions__c1_PR_spare2, + RRCConnectionRelease__criticalExtensions__c1_PR_spare1 +} RRCConnectionRelease__criticalExtensions__c1_PR; + +/* RRCConnectionRelease */ +typedef struct RRCConnectionRelease { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionRelease__criticalExtensions { + RRCConnectionRelease__criticalExtensions_PR present; + union RRCConnectionRelease__criticalExtensions_u { + struct RRCConnectionRelease__criticalExtensions__c1 { + RRCConnectionRelease__criticalExtensions__c1_PR present; + union RRCConnectionRelease__criticalExtensions__c1_u { + RRCConnectionRelease_r8_IEs_t rrcConnectionRelease_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RRCConnectionRelease__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionRelease_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionRelease; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionRelease_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c index cfebbfb58..96f8f89df 100644 --- a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c +++ b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "RRCConnectionRequest-r8-IEs.h" @@ -37,7 +38,7 @@ memb_spare_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, } } -static asn_per_constraints_t asn_PER_memb_spare_constr_4 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_spare_constr_4 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, 0, 0 /* No PER value map */ @@ -71,13 +72,13 @@ static asn_TYPE_member_t asn_MBR_RRCConnectionRequest_r8_IEs_1[] = { "spare" }, }; -static const ber_tlv_tag_t asn_DEF_RRCConnectionRequest_r8_IEs_tags_1[] = { +static ber_tlv_tag_t asn_DEF_RRCConnectionRequest_r8_IEs_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_RRCConnectionRequest_r8_IEs_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-Identity */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* establishmentCause */ - { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* spare */ +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRequest_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-Identity at 997 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* establishmentCause at 998 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* spare at 999 */ }; static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRequest_r8_IEs_specs_1 = { sizeof(struct RRCConnectionRequest_r8_IEs), diff --git a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h index ad35cc007..4c467f89b 100644 --- a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h +++ b/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _RRCConnectionRequest_r8_IEs_H_ diff --git a/lte/rrc/asn/RRCConnectionRequest.c b/lte/rrc/asn/RRCConnectionRequest.c index 7fce666cf..96bc27f26 100644 --- a/lte/rrc/asn/RRCConnectionRequest.c +++ b/lte/rrc/asn/RRCConnectionRequest.c @@ -1,23 +1,24 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "RRCConnectionRequest.h" -static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_4 = { - sizeof(struct criticalExtensionsFuture), - offsetof(struct criticalExtensionsFuture, _asn_ctx), + sizeof(struct RRCConnectionRequest__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionRequest__criticalExtensions__criticalExtensionsFuture, _asn_ctx), 0, /* No top level tags */ 0, /* No tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ @@ -50,7 +51,7 @@ asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_4 = { }; static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { - { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.rrcConnectionRequest_r8), + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRequest__criticalExtensions, choice.rrcConnectionRequest_r8), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_RRCConnectionRequest_r8_IEs, @@ -59,7 +60,7 @@ static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { 0, "rrcConnectionRequest-r8" }, - { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.criticalExtensionsFuture), + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionRequest__criticalExtensions, choice.criticalExtensionsFuture), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, &asn_DEF_criticalExtensionsFuture_4, @@ -69,15 +70,15 @@ static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { "criticalExtensionsFuture" }, }; -static const asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionRequest-r8 */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture */ +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionRequest-r8 at 991 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 992 */ }; static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { - sizeof(struct criticalExtensions), - offsetof(struct criticalExtensions, _asn_ctx), - offsetof(struct criticalExtensions, present), - sizeof(((struct criticalExtensions *)0)->present), + sizeof(struct RRCConnectionRequest__criticalExtensions), + offsetof(struct RRCConnectionRequest__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionRequest__criticalExtensions, present), + sizeof(((struct RRCConnectionRequest__criticalExtensions *)0)->present), asn_MAP_criticalExtensions_tag2el_2, 2, /* Count of tags in the map */ 0, @@ -118,11 +119,11 @@ static asn_TYPE_member_t asn_MBR_RRCConnectionRequest_1[] = { "criticalExtensions" }, }; -static const ber_tlv_tag_t asn_DEF_RRCConnectionRequest_tags_1[] = { +static ber_tlv_tag_t asn_DEF_RRCConnectionRequest_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_RRCConnectionRequest_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions */ +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionRequest_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 991 */ }; static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionRequest_specs_1 = { sizeof(struct RRCConnectionRequest), diff --git a/lte/rrc/asn/RRCConnectionRequest.h b/lte/rrc/asn/RRCConnectionRequest.h index f4cae0533..fbe693b87 100644 --- a/lte/rrc/asn/RRCConnectionRequest.h +++ b/lte/rrc/asn/RRCConnectionRequest.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _RRCConnectionRequest_H_ @@ -20,19 +21,19 @@ extern "C" { #endif /* Dependencies */ -typedef enum criticalExtensions_PR { - criticalExtensions_PR_NOTHING, /* No components present */ - criticalExtensions_PR_rrcConnectionRequest_r8, - criticalExtensions_PR_criticalExtensionsFuture -} criticalExtensions_PR; +typedef enum RRCConnectionRequest__criticalExtensions_PR { + RRCConnectionRequest__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionRequest__criticalExtensions_PR_rrcConnectionRequest_r8, + RRCConnectionRequest__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionRequest__criticalExtensions_PR; /* RRCConnectionRequest */ typedef struct RRCConnectionRequest { - struct criticalExtensions { - criticalExtensions_PR present; + struct RRCConnectionRequest__criticalExtensions { + RRCConnectionRequest__criticalExtensions_PR present; union RRCConnectionRequest__criticalExtensions_u { RRCConnectionRequest_r8_IEs_t rrcConnectionRequest_r8; - struct criticalExtensionsFuture { + struct RRCConnectionRequest__criticalExtensions__criticalExtensionsFuture { /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; diff --git a/lte/rrc/asn/RRCConnectionSetup-r8-IEs.c b/lte/rrc/asn/RRCConnectionSetup-r8-IEs.c new file mode 100644 index 000000000..37bbef879 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetup-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetup-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionSetup_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup_r8_IEs, radioResourceConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigDedicated" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionSetup_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetup_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionSetup_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetup_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetup_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* radioResourceConfigDedicated at 1026 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1027 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetup_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionSetup_r8_IEs), + offsetof(struct RRCConnectionSetup_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionSetup_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionSetup_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetup_r8_IEs = { + "RRCConnectionSetup-r8-IEs", + "RRCConnectionSetup-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetup_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionSetup_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetup_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetup_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetup_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetup_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetup_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionSetup_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetup-r8-IEs.h b/lte/rrc/asn/RRCConnectionSetup-r8-IEs.h new file mode 100644 index 000000000..b981307e6 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetup-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetup_r8_IEs_H_ +#define _RRCConnectionSetup_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "RadioResourceConfigDedicated.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionSetup_v8a0_IEs; + +/* RRCConnectionSetup-r8-IEs */ +typedef struct RRCConnectionSetup_r8_IEs { + RadioResourceConfigDedicated_t radioResourceConfigDedicated; + struct RRCConnectionSetup_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetup_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetup_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionSetup-v8a0-IEs.h" + +#endif /* _RRCConnectionSetup_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c new file mode 100644 index 000000000..d5d0bae78 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetup-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct RRCConnectionSetup_v8a0_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionSetup_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionSetup_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionSetup_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionSetup_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionSetup_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetup_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1031 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1032 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetup_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionSetup_v8a0_IEs), + offsetof(struct RRCConnectionSetup_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionSetup_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionSetup_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetup_v8a0_IEs = { + "RRCConnectionSetup-v8a0-IEs", + "RRCConnectionSetup-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetup_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetup_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionSetup_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h new file mode 100644 index 000000000..4b733e542 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetup_v8a0_IEs_H_ +#define _RRCConnectionSetup_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RRCConnectionSetup-v8a0-IEs */ +typedef struct RRCConnectionSetup_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionSetup_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetup_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetup_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionSetup_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionSetup.c b/lte/rrc/asn/RRCConnectionSetup.c new file mode 100644 index 000000000..5c41244da --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetup.c @@ -0,0 +1,294 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetup.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.rrcConnectionSetup_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetup_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionSetup-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionSetup-r8 at 1016 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 at 1017 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 at 1018 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 at 1018 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 at 1018 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 at 1019 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 at 1019 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 at 1019 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RRCConnectionSetup__criticalExtensions__c1), + offsetof(struct RRCConnectionSetup__criticalExtensions__c1, _asn_ctx), + offsetof(struct RRCConnectionSetup__criticalExtensions__c1, present), + sizeof(((struct RRCConnectionSetup__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 8, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_13 = { + sizeof(struct RRCConnectionSetup__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionSetup__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_13 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_13, + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_13, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1016 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1021 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionSetup__criticalExtensions), + offsetof(struct RRCConnectionSetup__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionSetup__criticalExtensions, present), + sizeof(((struct RRCConnectionSetup__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionSetup_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetup, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetup_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetup_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1013 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1020 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetup_specs_1 = { + sizeof(struct RRCConnectionSetup), + offsetof(struct RRCConnectionSetup, _asn_ctx), + asn_MAP_RRCConnectionSetup_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetup = { + "RRCConnectionSetup", + "RRCConnectionSetup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetup_tags_1, + sizeof(asn_DEF_RRCConnectionSetup_tags_1) + /sizeof(asn_DEF_RRCConnectionSetup_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetup_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetup_tags_1) + /sizeof(asn_DEF_RRCConnectionSetup_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetup_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionSetup_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetup.h b/lte/rrc/asn/RRCConnectionSetup.h new file mode 100644 index 000000000..81ed78667 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetup.h @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetup_H_ +#define _RRCConnectionSetup_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionSetup-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionSetup__criticalExtensions_PR { + RRCConnectionSetup__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionSetup__criticalExtensions_PR_c1, + RRCConnectionSetup__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionSetup__criticalExtensions_PR; +typedef enum RRCConnectionSetup__criticalExtensions__c1_PR { + RRCConnectionSetup__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RRCConnectionSetup__criticalExtensions__c1_PR_rrcConnectionSetup_r8, + RRCConnectionSetup__criticalExtensions__c1_PR_spare7, + RRCConnectionSetup__criticalExtensions__c1_PR_spare6, + RRCConnectionSetup__criticalExtensions__c1_PR_spare5, + RRCConnectionSetup__criticalExtensions__c1_PR_spare4, + RRCConnectionSetup__criticalExtensions__c1_PR_spare3, + RRCConnectionSetup__criticalExtensions__c1_PR_spare2, + RRCConnectionSetup__criticalExtensions__c1_PR_spare1 +} RRCConnectionSetup__criticalExtensions__c1_PR; + +/* RRCConnectionSetup */ +typedef struct RRCConnectionSetup { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionSetup__criticalExtensions { + RRCConnectionSetup__criticalExtensions_PR present; + union RRCConnectionSetup__criticalExtensions_u { + struct RRCConnectionSetup__criticalExtensions__c1 { + RRCConnectionSetup__criticalExtensions__c1_PR present; + union RRCConnectionSetup__criticalExtensions__c1_u { + RRCConnectionSetup_r8_IEs_t rrcConnectionSetup_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RRCConnectionSetup__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetup_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetup; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionSetup_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.c b/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.c new file mode 100644 index 000000000..68b29fab7 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.c @@ -0,0 +1,122 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetupComplete-r8-IEs.h" + +static int +memb_selectedPLMN_Identity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_selectedPLMN_Identity_constr_2 = { + { APC_CONSTRAINED, 3, 3, 1, 6 } /* (1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RRCConnectionSetupComplete_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete_r8_IEs, selectedPLMN_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_selectedPLMN_Identity_constraint_1, + &asn_PER_memb_selectedPLMN_Identity_constr_2, + 0, + "selectedPLMN-Identity" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionSetupComplete_r8_IEs, registeredMME), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RegisteredMME, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "registeredMME" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete_r8_IEs, dedicatedInfoNAS), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoNAS, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoNAS" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionSetupComplete_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetupComplete_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionSetupComplete_r8_IEs_oms_1[] = { 1, 3 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetupComplete_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* selectedPLMN-Identity at 1048 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* registeredMME at 1049 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dedicatedInfoNAS at 1050 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 1051 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetupComplete_r8_IEs_specs_1 = { + sizeof(struct RRCConnectionSetupComplete_r8_IEs), + offsetof(struct RRCConnectionSetupComplete_r8_IEs, _asn_ctx), + asn_MAP_RRCConnectionSetupComplete_r8_IEs_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_RRCConnectionSetupComplete_r8_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete_r8_IEs = { + "RRCConnectionSetupComplete-r8-IEs", + "RRCConnectionSetupComplete-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetupComplete_r8_IEs_1, + 4, /* Elements count */ + &asn_SPC_RRCConnectionSetupComplete_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h b/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h new file mode 100644 index 000000000..58937aae0 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetupComplete_r8_IEs_H_ +#define _RRCConnectionSetupComplete_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include "DedicatedInfoNAS.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RegisteredMME; +struct RRCConnectionSetupComplete_v8a0_IEs; + +/* RRCConnectionSetupComplete-r8-IEs */ +typedef struct RRCConnectionSetupComplete_r8_IEs { + long selectedPLMN_Identity; + struct RegisteredMME *registeredMME /* OPTIONAL */; + DedicatedInfoNAS_t dedicatedInfoNAS; + struct RRCConnectionSetupComplete_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetupComplete_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RegisteredMME.h" +#include "RRCConnectionSetupComplete-v8a0-IEs.h" + +#endif /* _RRCConnectionSetupComplete_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.c b/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.c new file mode 100644 index 000000000..cfa4dc6d8 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.c @@ -0,0 +1,692 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetupComplete-v1020-IEs.h" + +static int +gummei_Type_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +gummei_Type_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +gummei_Type_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +gummei_Type_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +gummei_Type_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +gummei_Type_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +gummei_Type_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +gummei_Type_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +gummei_Type_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +gummei_Type_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + gummei_Type_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +rlf_InfoAvailable_r10_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rlf_InfoAvailable_r10_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rlf_InfoAvailable_r10_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r10_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r10_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r10_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r10_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rlf_InfoAvailable_r10_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rlf_InfoAvailable_r10_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rlf_InfoAvailable_r10_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +logMeasAvailable_r10_7_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +logMeasAvailable_r10_7_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +logMeasAvailable_r10_7_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +logMeasAvailable_r10_7_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_7_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +logMeasAvailable_r10_7_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_7_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +logMeasAvailable_r10_7_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +logMeasAvailable_r10_7_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +logMeasAvailable_r10_7_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + logMeasAvailable_r10_7_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +rn_SubframeConfigReq_r10_9_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rn_SubframeConfigReq_r10_9_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rn_SubframeConfigReq_r10_9_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rn_SubframeConfigReq_r10_9_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rn_SubframeConfigReq_r10_9_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rn_SubframeConfigReq_r10_9_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rn_SubframeConfigReq_r10_9_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rn_SubframeConfigReq_r10_9_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rn_SubframeConfigReq_r10_9_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rn_SubframeConfigReq_r10_9_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_gummei_Type_r10_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_rlf_InfoAvailable_r10_constr_5 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_logMeasAvailable_r10_constr_7 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_rn_SubframeConfigReq_r10_constr_9 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_gummei_Type_r10_value2enum_2[] = { + { 0, 6, "native" }, + { 1, 6, "mapped" } +}; +static unsigned int asn_MAP_gummei_Type_r10_enum2value_2[] = { + 1, /* mapped(1) */ + 0 /* native(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_gummei_Type_r10_specs_2 = { + asn_MAP_gummei_Type_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_gummei_Type_r10_enum2value_2, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_gummei_Type_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_gummei_Type_r10_2 = { + "gummei-Type-r10", + "gummei-Type-r10", + gummei_Type_r10_2_free, + gummei_Type_r10_2_print, + gummei_Type_r10_2_constraint, + gummei_Type_r10_2_decode_ber, + gummei_Type_r10_2_encode_der, + gummei_Type_r10_2_decode_xer, + gummei_Type_r10_2_encode_xer, + gummei_Type_r10_2_decode_uper, + gummei_Type_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_gummei_Type_r10_tags_2, + sizeof(asn_DEF_gummei_Type_r10_tags_2) + /sizeof(asn_DEF_gummei_Type_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_gummei_Type_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_gummei_Type_r10_tags_2) + /sizeof(asn_DEF_gummei_Type_r10_tags_2[0]), /* 2 */ + &asn_PER_type_gummei_Type_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_gummei_Type_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_rlf_InfoAvailable_r10_value2enum_5[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_rlf_InfoAvailable_r10_enum2value_5[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rlf_InfoAvailable_r10_specs_5 = { + asn_MAP_rlf_InfoAvailable_r10_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_rlf_InfoAvailable_r10_enum2value_5, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rlf_InfoAvailable_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rlf_InfoAvailable_r10_5 = { + "rlf-InfoAvailable-r10", + "rlf-InfoAvailable-r10", + rlf_InfoAvailable_r10_5_free, + rlf_InfoAvailable_r10_5_print, + rlf_InfoAvailable_r10_5_constraint, + rlf_InfoAvailable_r10_5_decode_ber, + rlf_InfoAvailable_r10_5_encode_der, + rlf_InfoAvailable_r10_5_decode_xer, + rlf_InfoAvailable_r10_5_encode_xer, + rlf_InfoAvailable_r10_5_decode_uper, + rlf_InfoAvailable_r10_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rlf_InfoAvailable_r10_tags_5, + sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_5) + /sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_rlf_InfoAvailable_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_5) + /sizeof(asn_DEF_rlf_InfoAvailable_r10_tags_5[0]), /* 2 */ + &asn_PER_type_rlf_InfoAvailable_r10_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rlf_InfoAvailable_r10_specs_5 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_logMeasAvailable_r10_value2enum_7[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_logMeasAvailable_r10_enum2value_7[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_logMeasAvailable_r10_specs_7 = { + asn_MAP_logMeasAvailable_r10_value2enum_7, /* "tag" => N; sorted by tag */ + asn_MAP_logMeasAvailable_r10_enum2value_7, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_logMeasAvailable_r10_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_7 = { + "logMeasAvailable-r10", + "logMeasAvailable-r10", + logMeasAvailable_r10_7_free, + logMeasAvailable_r10_7_print, + logMeasAvailable_r10_7_constraint, + logMeasAvailable_r10_7_decode_ber, + logMeasAvailable_r10_7_encode_der, + logMeasAvailable_r10_7_decode_xer, + logMeasAvailable_r10_7_encode_xer, + logMeasAvailable_r10_7_decode_uper, + logMeasAvailable_r10_7_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_logMeasAvailable_r10_tags_7, + sizeof(asn_DEF_logMeasAvailable_r10_tags_7) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_7[0]) - 1, /* 1 */ + asn_DEF_logMeasAvailable_r10_tags_7, /* Same as above */ + sizeof(asn_DEF_logMeasAvailable_r10_tags_7) + /sizeof(asn_DEF_logMeasAvailable_r10_tags_7[0]), /* 2 */ + &asn_PER_type_logMeasAvailable_r10_constr_7, + 0, 0, /* Defined elsewhere */ + &asn_SPC_logMeasAvailable_r10_specs_7 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_rn_SubframeConfigReq_r10_value2enum_9[] = { + { 0, 8, "required" }, + { 1, 11, "notRequired" } +}; +static unsigned int asn_MAP_rn_SubframeConfigReq_r10_enum2value_9[] = { + 1, /* notRequired(1) */ + 0 /* required(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rn_SubframeConfigReq_r10_specs_9 = { + asn_MAP_rn_SubframeConfigReq_r10_value2enum_9, /* "tag" => N; sorted by tag */ + asn_MAP_rn_SubframeConfigReq_r10_enum2value_9, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rn_SubframeConfigReq_r10_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rn_SubframeConfigReq_r10_9 = { + "rn-SubframeConfigReq-r10", + "rn-SubframeConfigReq-r10", + rn_SubframeConfigReq_r10_9_free, + rn_SubframeConfigReq_r10_9_print, + rn_SubframeConfigReq_r10_9_constraint, + rn_SubframeConfigReq_r10_9_decode_ber, + rn_SubframeConfigReq_r10_9_encode_der, + rn_SubframeConfigReq_r10_9_decode_xer, + rn_SubframeConfigReq_r10_9_encode_xer, + rn_SubframeConfigReq_r10_9_decode_uper, + rn_SubframeConfigReq_r10_9_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rn_SubframeConfigReq_r10_tags_9, + sizeof(asn_DEF_rn_SubframeConfigReq_r10_tags_9) + /sizeof(asn_DEF_rn_SubframeConfigReq_r10_tags_9[0]) - 1, /* 1 */ + asn_DEF_rn_SubframeConfigReq_r10_tags_9, /* Same as above */ + sizeof(asn_DEF_rn_SubframeConfigReq_r10_tags_9) + /sizeof(asn_DEF_rn_SubframeConfigReq_r10_tags_9[0]), /* 2 */ + &asn_PER_type_rn_SubframeConfigReq_r10_constr_9, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rn_SubframeConfigReq_r10_specs_9 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_12 = { + sizeof(struct RRCConnectionSetupComplete_v1020_IEs__nonCriticalExtension), + offsetof(struct RRCConnectionSetupComplete_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_12 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_12, + sizeof(asn_DEF_nonCriticalExtension_tags_12) + /sizeof(asn_DEF_nonCriticalExtension_tags_12[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_12, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_12) + /sizeof(asn_DEF_nonCriticalExtension_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionSetupComplete_v1020_IEs_1[] = { + { ATF_POINTER, 5, offsetof(struct RRCConnectionSetupComplete_v1020_IEs, gummei_Type_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_gummei_Type_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "gummei-Type-r10" + }, + { ATF_POINTER, 4, offsetof(struct RRCConnectionSetupComplete_v1020_IEs, rlf_InfoAvailable_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rlf_InfoAvailable_r10_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlf-InfoAvailable-r10" + }, + { ATF_POINTER, 3, offsetof(struct RRCConnectionSetupComplete_v1020_IEs, logMeasAvailable_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_logMeasAvailable_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasAvailable-r10" + }, + { ATF_POINTER, 2, offsetof(struct RRCConnectionSetupComplete_v1020_IEs, rn_SubframeConfigReq_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rn_SubframeConfigReq_r10_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rn-SubframeConfigReq-r10" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionSetupComplete_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + 0, + &asn_DEF_nonCriticalExtension_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionSetupComplete_v1020_IEs_oms_1[] = { 0, 1, 2, 3, 4 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetupComplete_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* gummei-Type-r10 at 1060 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlf-InfoAvailable-r10 at 1061 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* logMeasAvailable-r10 at 1062 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rn-SubframeConfigReq-r10 at 1063 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* nonCriticalExtension at 1064 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetupComplete_v1020_IEs_specs_1 = { + sizeof(struct RRCConnectionSetupComplete_v1020_IEs), + offsetof(struct RRCConnectionSetupComplete_v1020_IEs, _asn_ctx), + asn_MAP_RRCConnectionSetupComplete_v1020_IEs_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_RRCConnectionSetupComplete_v1020_IEs_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete_v1020_IEs = { + "RRCConnectionSetupComplete-v1020-IEs", + "RRCConnectionSetupComplete-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetupComplete_v1020_IEs_1, + 5, /* Elements count */ + &asn_SPC_RRCConnectionSetupComplete_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h b/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h new file mode 100644 index 000000000..2cb68f073 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h @@ -0,0 +1,66 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetupComplete_v1020_IEs_H_ +#define _RRCConnectionSetupComplete_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionSetupComplete_v1020_IEs__gummei_Type_r10 { + RRCConnectionSetupComplete_v1020_IEs__gummei_Type_r10_native = 0, + RRCConnectionSetupComplete_v1020_IEs__gummei_Type_r10_mapped = 1 +} e_RRCConnectionSetupComplete_v1020_IEs__gummei_Type_r10; +typedef enum RRCConnectionSetupComplete_v1020_IEs__rlf_InfoAvailable_r10 { + RRCConnectionSetupComplete_v1020_IEs__rlf_InfoAvailable_r10_true = 0 +} e_RRCConnectionSetupComplete_v1020_IEs__rlf_InfoAvailable_r10; +typedef enum RRCConnectionSetupComplete_v1020_IEs__logMeasAvailable_r10 { + RRCConnectionSetupComplete_v1020_IEs__logMeasAvailable_r10_true = 0 +} e_RRCConnectionSetupComplete_v1020_IEs__logMeasAvailable_r10; +typedef enum RRCConnectionSetupComplete_v1020_IEs__rn_SubframeConfigReq_r10 { + RRCConnectionSetupComplete_v1020_IEs__rn_SubframeConfigReq_r10_required = 0, + RRCConnectionSetupComplete_v1020_IEs__rn_SubframeConfigReq_r10_notRequired = 1 +} e_RRCConnectionSetupComplete_v1020_IEs__rn_SubframeConfigReq_r10; + +/* RRCConnectionSetupComplete-v1020-IEs */ +typedef struct RRCConnectionSetupComplete_v1020_IEs { + long *gummei_Type_r10 /* OPTIONAL */; + long *rlf_InfoAvailable_r10 /* OPTIONAL */; + long *logMeasAvailable_r10 /* OPTIONAL */; + long *rn_SubframeConfigReq_r10 /* OPTIONAL */; + struct RRCConnectionSetupComplete_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetupComplete_v1020_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_gummei_Type_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rlf_InfoAvailable_r10_5; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_logMeasAvailable_r10_7; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_rn_SubframeConfigReq_r10_9; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionSetupComplete_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.c b/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.c new file mode 100644 index 000000000..34842b76a --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetupComplete-v8a0-IEs.h" + +static asn_TYPE_member_t asn_MBR_RRCConnectionSetupComplete_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct RRCConnectionSetupComplete_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct RRCConnectionSetupComplete_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetupComplete_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_RRCConnectionSetupComplete_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetupComplete_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1055 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1056 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetupComplete_v8a0_IEs_specs_1 = { + sizeof(struct RRCConnectionSetupComplete_v8a0_IEs), + offsetof(struct RRCConnectionSetupComplete_v8a0_IEs, _asn_ctx), + asn_MAP_RRCConnectionSetupComplete_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RRCConnectionSetupComplete_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete_v8a0_IEs = { + "RRCConnectionSetupComplete-v8a0-IEs", + "RRCConnectionSetupComplete-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1, + sizeof(asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetupComplete_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionSetupComplete_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h b/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h new file mode 100644 index 000000000..65cbaf461 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetupComplete_v8a0_IEs_H_ +#define _RRCConnectionSetupComplete_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RRCConnectionSetupComplete_v1020_IEs; + +/* RRCConnectionSetupComplete-v8a0-IEs */ +typedef struct RRCConnectionSetupComplete_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct RRCConnectionSetupComplete_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetupComplete_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RRCConnectionSetupComplete-v1020-IEs.h" + +#endif /* _RRCConnectionSetupComplete_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/RRCConnectionSetupComplete.c b/lte/rrc/asn/RRCConnectionSetupComplete.c new file mode 100644 index 000000000..8fedaeeec --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RRCConnectionSetupComplete.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete__criticalExtensions__c1, choice.rrcConnectionSetupComplete_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetupComplete_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionSetupComplete-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionSetupComplete-r8 at 1040 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1041 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1041 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1041 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct RRCConnectionSetupComplete__criticalExtensions__c1), + offsetof(struct RRCConnectionSetupComplete__criticalExtensions__c1, _asn_ctx), + offsetof(struct RRCConnectionSetupComplete__criticalExtensions__c1, present), + sizeof(((struct RRCConnectionSetupComplete__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct RRCConnectionSetupComplete__criticalExtensions__criticalExtensionsFuture), + offsetof(struct RRCConnectionSetupComplete__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1040 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1043 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct RRCConnectionSetupComplete__criticalExtensions), + offsetof(struct RRCConnectionSetupComplete__criticalExtensions, _asn_ctx), + offsetof(struct RRCConnectionSetupComplete__criticalExtensions, present), + sizeof(((struct RRCConnectionSetupComplete__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRCConnectionSetupComplete_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct RRCConnectionSetupComplete, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_RRCConnectionSetupComplete_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RRCConnectionSetupComplete_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1037 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1042 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRCConnectionSetupComplete_specs_1 = { + sizeof(struct RRCConnectionSetupComplete), + offsetof(struct RRCConnectionSetupComplete, _asn_ctx), + asn_MAP_RRCConnectionSetupComplete_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete = { + "RRCConnectionSetupComplete", + "RRCConnectionSetupComplete", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRCConnectionSetupComplete_tags_1, + sizeof(asn_DEF_RRCConnectionSetupComplete_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_tags_1[0]), /* 1 */ + asn_DEF_RRCConnectionSetupComplete_tags_1, /* Same as above */ + sizeof(asn_DEF_RRCConnectionSetupComplete_tags_1) + /sizeof(asn_DEF_RRCConnectionSetupComplete_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRCConnectionSetupComplete_1, + 2, /* Elements count */ + &asn_SPC_RRCConnectionSetupComplete_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRCConnectionSetupComplete.h b/lte/rrc/asn/RRCConnectionSetupComplete.h new file mode 100644 index 000000000..e82b41ee0 --- /dev/null +++ b/lte/rrc/asn/RRCConnectionSetupComplete.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RRCConnectionSetupComplete_H_ +#define _RRCConnectionSetupComplete_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "RRCConnectionSetupComplete-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RRCConnectionSetupComplete__criticalExtensions_PR { + RRCConnectionSetupComplete__criticalExtensions_PR_NOTHING, /* No components present */ + RRCConnectionSetupComplete__criticalExtensions_PR_c1, + RRCConnectionSetupComplete__criticalExtensions_PR_criticalExtensionsFuture +} RRCConnectionSetupComplete__criticalExtensions_PR; +typedef enum RRCConnectionSetupComplete__criticalExtensions__c1_PR { + RRCConnectionSetupComplete__criticalExtensions__c1_PR_NOTHING, /* No components present */ + RRCConnectionSetupComplete__criticalExtensions__c1_PR_rrcConnectionSetupComplete_r8, + RRCConnectionSetupComplete__criticalExtensions__c1_PR_spare3, + RRCConnectionSetupComplete__criticalExtensions__c1_PR_spare2, + RRCConnectionSetupComplete__criticalExtensions__c1_PR_spare1 +} RRCConnectionSetupComplete__criticalExtensions__c1_PR; + +/* RRCConnectionSetupComplete */ +typedef struct RRCConnectionSetupComplete { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct RRCConnectionSetupComplete__criticalExtensions { + RRCConnectionSetupComplete__criticalExtensions_PR present; + union RRCConnectionSetupComplete__criticalExtensions_u { + struct RRCConnectionSetupComplete__criticalExtensions__c1 { + RRCConnectionSetupComplete__criticalExtensions__c1_PR present; + union RRCConnectionSetupComplete__criticalExtensions__c1_u { + RRCConnectionSetupComplete_r8_IEs_t rrcConnectionSetupComplete_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct RRCConnectionSetupComplete__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRCConnectionSetupComplete_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RRCConnectionSetupComplete; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRCConnectionSetupComplete_H_ */ +#include diff --git a/lte/rrc/asn/RRM-Config.c b/lte/rrc/asn/RRM-Config.c new file mode 100644 index 000000000..4b967ec42 --- /dev/null +++ b/lte/rrc/asn/RRM-Config.c @@ -0,0 +1,325 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "RRM-Config.h" + +static int +ue_InactiveTime_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ue_InactiveTime_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ue_InactiveTime_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ue_InactiveTime_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ue_InactiveTime_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ue_InactiveTime_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ue_InactiveTime_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ue_InactiveTime_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ue_InactiveTime_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ue_InactiveTime_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ue_InactiveTime_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ue_InactiveTime_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static const asn_INTEGER_enum_map_t asn_MAP_ue_InactiveTime_value2enum_2[] = { + { 0, 2, "s1" }, + { 1, 2, "s2" }, + { 2, 2, "s3" }, + { 3, 2, "s5" }, + { 4, 2, "s7" }, + { 5, 3, "s10" }, + { 6, 3, "s15" }, + { 7, 3, "s20" }, + { 8, 3, "s25" }, + { 9, 3, "s30" }, + { 10, 3, "s40" }, + { 11, 3, "s50" }, + { 12, 4, "min1" }, + { 13, 8, "min1s20c" }, + { 14, 7, "min1s40" }, + { 15, 4, "min2" }, + { 16, 7, "min2s30" }, + { 17, 4, "min3" }, + { 18, 7, "min3s30" }, + { 19, 4, "min4" }, + { 20, 4, "min5" }, + { 21, 4, "min6" }, + { 22, 4, "min7" }, + { 23, 4, "min8" }, + { 24, 4, "min9" }, + { 25, 5, "min10" }, + { 26, 5, "min12" }, + { 27, 5, "min14" }, + { 28, 5, "min17" }, + { 29, 5, "min20" }, + { 30, 5, "min24" }, + { 31, 5, "min28" }, + { 32, 5, "min33" }, + { 33, 5, "min38" }, + { 34, 5, "min44" }, + { 35, 5, "min50" }, + { 36, 3, "hr1" }, + { 37, 8, "hr1min30" }, + { 38, 3, "hr2" }, + { 39, 8, "hr2min30" }, + { 40, 3, "hr3" }, + { 41, 8, "hr3min30" }, + { 42, 3, "hr4" }, + { 43, 3, "hr5" }, + { 44, 3, "hr6" }, + { 45, 3, "hr8" }, + { 46, 4, "hr10" }, + { 47, 4, "hr13" }, + { 48, 4, "hr16" }, + { 49, 4, "hr20" }, + { 50, 4, "day1" }, + { 51, 8, "day1hr12" }, + { 52, 4, "day2" }, + { 53, 8, "day2hr12" }, + { 54, 4, "day3" }, + { 55, 4, "day4" }, + { 56, 4, "day5" }, + { 57, 4, "day7" }, + { 58, 5, "day10" }, + { 59, 5, "day14" }, + { 60, 5, "day19" }, + { 61, 5, "day24" }, + { 62, 5, "day30" }, + { 63, 13, "dayMoreThan30" } +}; +static const unsigned int asn_MAP_ue_InactiveTime_enum2value_2[] = { + 50, /* day1(50) */ + 58, /* day10(58) */ + 59, /* day14(59) */ + 60, /* day19(60) */ + 51, /* day1hr12(51) */ + 52, /* day2(52) */ + 61, /* day24(61) */ + 53, /* day2hr12(53) */ + 54, /* day3(54) */ + 62, /* day30(62) */ + 55, /* day4(55) */ + 56, /* day5(56) */ + 57, /* day7(57) */ + 63, /* dayMoreThan30(63) */ + 36, /* hr1(36) */ + 46, /* hr10(46) */ + 47, /* hr13(47) */ + 48, /* hr16(48) */ + 37, /* hr1min30(37) */ + 38, /* hr2(38) */ + 49, /* hr20(49) */ + 39, /* hr2min30(39) */ + 40, /* hr3(40) */ + 41, /* hr3min30(41) */ + 42, /* hr4(42) */ + 43, /* hr5(43) */ + 44, /* hr6(44) */ + 45, /* hr8(45) */ + 12, /* min1(12) */ + 25, /* min10(25) */ + 26, /* min12(26) */ + 27, /* min14(27) */ + 28, /* min17(28) */ + 13, /* min1s20c(13) */ + 14, /* min1s40(14) */ + 15, /* min2(15) */ + 29, /* min20(29) */ + 30, /* min24(30) */ + 31, /* min28(31) */ + 16, /* min2s30(16) */ + 17, /* min3(17) */ + 32, /* min33(32) */ + 33, /* min38(33) */ + 18, /* min3s30(18) */ + 19, /* min4(19) */ + 34, /* min44(34) */ + 20, /* min5(20) */ + 35, /* min50(35) */ + 21, /* min6(21) */ + 22, /* min7(22) */ + 23, /* min8(23) */ + 24, /* min9(24) */ + 0, /* s1(0) */ + 5, /* s10(5) */ + 6, /* s15(6) */ + 1, /* s2(1) */ + 7, /* s20(7) */ + 8, /* s25(8) */ + 2, /* s3(2) */ + 9, /* s30(9) */ + 10, /* s40(10) */ + 3, /* s5(3) */ + 11, /* s50(11) */ + 4 /* s7(4) */ +}; +static const asn_INTEGER_specifics_t asn_SPC_ue_InactiveTime_specs_2 = { + asn_MAP_ue_InactiveTime_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_ue_InactiveTime_enum2value_2, /* N => "tag"; sorted by N */ + 64, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static const ber_tlv_tag_t asn_DEF_ue_InactiveTime_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ue_InactiveTime_2 = { + "ue-InactiveTime", + "ue-InactiveTime", + ue_InactiveTime_2_free, + ue_InactiveTime_2_print, + ue_InactiveTime_2_constraint, + ue_InactiveTime_2_decode_ber, + ue_InactiveTime_2_encode_der, + ue_InactiveTime_2_decode_xer, + ue_InactiveTime_2_encode_xer, + ue_InactiveTime_2_decode_uper, + ue_InactiveTime_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ue_InactiveTime_tags_2, + sizeof(asn_DEF_ue_InactiveTime_tags_2) + /sizeof(asn_DEF_ue_InactiveTime_tags_2[0]) - 1, /* 1 */ + asn_DEF_ue_InactiveTime_tags_2, /* Same as above */ + sizeof(asn_DEF_ue_InactiveTime_tags_2) + /sizeof(asn_DEF_ue_InactiveTime_tags_2[0]), /* 2 */ + &asn_PER_type_ue_InactiveTime_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ue_InactiveTime_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RRM_Config_1[] = { + { ATF_POINTER, 1, offsetof(struct RRM_Config, ue_InactiveTime), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ue_InactiveTime_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-InactiveTime" + }, +}; +static const int asn_MAP_RRM_Config_oms_1[] = { 0 }; +static const ber_tlv_tag_t asn_DEF_RRM_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_RRM_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* ue-InactiveTime */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RRM_Config_specs_1 = { + sizeof(struct RRM_Config), + offsetof(struct RRM_Config, _asn_ctx), + asn_MAP_RRM_Config_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_RRM_Config_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RRM_Config = { + "RRM-Config", + "RRM-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RRM_Config_tags_1, + sizeof(asn_DEF_RRM_Config_tags_1) + /sizeof(asn_DEF_RRM_Config_tags_1[0]), /* 1 */ + asn_DEF_RRM_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_RRM_Config_tags_1) + /sizeof(asn_DEF_RRM_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RRM_Config_1, + 1, /* Elements count */ + &asn_SPC_RRM_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RRM-Config.h b/lte/rrc/asn/RRM-Config.h new file mode 100644 index 000000000..8e14d8576 --- /dev/null +++ b/lte/rrc/asn/RRM-Config.h @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _RRM_Config_H_ +#define _RRM_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ue_InactiveTime { + ue_InactiveTime_s1 = 0, + ue_InactiveTime_s2 = 1, + ue_InactiveTime_s3 = 2, + ue_InactiveTime_s5 = 3, + ue_InactiveTime_s7 = 4, + ue_InactiveTime_s10 = 5, + ue_InactiveTime_s15 = 6, + ue_InactiveTime_s20 = 7, + ue_InactiveTime_s25 = 8, + ue_InactiveTime_s30 = 9, + ue_InactiveTime_s40 = 10, + ue_InactiveTime_s50 = 11, + ue_InactiveTime_min1 = 12, + ue_InactiveTime_min1s20c = 13, + ue_InactiveTime_min1s40 = 14, + ue_InactiveTime_min2 = 15, + ue_InactiveTime_min2s30 = 16, + ue_InactiveTime_min3 = 17, + ue_InactiveTime_min3s30 = 18, + ue_InactiveTime_min4 = 19, + ue_InactiveTime_min5 = 20, + ue_InactiveTime_min6 = 21, + ue_InactiveTime_min7 = 22, + ue_InactiveTime_min8 = 23, + ue_InactiveTime_min9 = 24, + ue_InactiveTime_min10 = 25, + ue_InactiveTime_min12 = 26, + ue_InactiveTime_min14 = 27, + ue_InactiveTime_min17 = 28, + ue_InactiveTime_min20 = 29, + ue_InactiveTime_min24 = 30, + ue_InactiveTime_min28 = 31, + ue_InactiveTime_min33 = 32, + ue_InactiveTime_min38 = 33, + ue_InactiveTime_min44 = 34, + ue_InactiveTime_min50 = 35, + ue_InactiveTime_hr1 = 36, + ue_InactiveTime_hr1min30 = 37, + ue_InactiveTime_hr2 = 38, + ue_InactiveTime_hr2min30 = 39, + ue_InactiveTime_hr3 = 40, + ue_InactiveTime_hr3min30 = 41, + ue_InactiveTime_hr4 = 42, + ue_InactiveTime_hr5 = 43, + ue_InactiveTime_hr6 = 44, + ue_InactiveTime_hr8 = 45, + ue_InactiveTime_hr10 = 46, + ue_InactiveTime_hr13 = 47, + ue_InactiveTime_hr16 = 48, + ue_InactiveTime_hr20 = 49, + ue_InactiveTime_day1 = 50, + ue_InactiveTime_day1hr12 = 51, + ue_InactiveTime_day2 = 52, + ue_InactiveTime_day2hr12 = 53, + ue_InactiveTime_day3 = 54, + ue_InactiveTime_day4 = 55, + ue_InactiveTime_day5 = 56, + ue_InactiveTime_day7 = 57, + ue_InactiveTime_day10 = 58, + ue_InactiveTime_day14 = 59, + ue_InactiveTime_day19 = 60, + ue_InactiveTime_day24 = 61, + ue_InactiveTime_day30 = 62, + ue_InactiveTime_dayMoreThan30 = 63 +} e_ue_InactiveTime; + +/* RRM-Config */ +typedef struct RRM_Config { + long *ue_InactiveTime /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RRM_Config_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_ue_InactiveTime_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RRM_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _RRM_Config_H_ */ +#include diff --git a/lte/rrc/asn/RSRP-Range.c b/lte/rrc/asn/RSRP-Range.c new file mode 100644 index 000000000..a98e8b9de --- /dev/null +++ b/lte/rrc/asn/RSRP-Range.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RSRP-Range.h" + +int +RSRP_Range_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 97)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +RSRP_Range_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +RSRP_Range_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +RSRP_Range_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +RSRP_Range_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +RSRP_Range_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +RSRP_Range_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +RSRP_Range_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +RSRP_Range_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +RSRP_Range_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + RSRP_Range_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_RSRP_Range_constr_1 = { + { APC_CONSTRAINED, 7, 7, 0, 97 } /* (0..97) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_RSRP_Range_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RSRP_Range = { + "RSRP-Range", + "RSRP-Range", + RSRP_Range_free, + RSRP_Range_print, + RSRP_Range_constraint, + RSRP_Range_decode_ber, + RSRP_Range_encode_der, + RSRP_Range_decode_xer, + RSRP_Range_encode_xer, + RSRP_Range_decode_uper, + RSRP_Range_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RSRP_Range_tags_1, + sizeof(asn_DEF_RSRP_Range_tags_1) + /sizeof(asn_DEF_RSRP_Range_tags_1[0]), /* 1 */ + asn_DEF_RSRP_Range_tags_1, /* Same as above */ + sizeof(asn_DEF_RSRP_Range_tags_1) + /sizeof(asn_DEF_RSRP_Range_tags_1[0]), /* 1 */ + &asn_PER_type_RSRP_Range_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/RSRP-Range.h b/lte/rrc/asn/RSRP-Range.h new file mode 100644 index 000000000..a98e86dca --- /dev/null +++ b/lte/rrc/asn/RSRP-Range.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RSRP_Range_H_ +#define _RSRP_Range_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RSRP-Range */ +typedef long RSRP_Range_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RSRP_Range; +asn_struct_free_f RSRP_Range_free; +asn_struct_print_f RSRP_Range_print; +asn_constr_check_f RSRP_Range_constraint; +ber_type_decoder_f RSRP_Range_decode_ber; +der_type_encoder_f RSRP_Range_encode_der; +xer_type_decoder_f RSRP_Range_decode_xer; +xer_type_encoder_f RSRP_Range_encode_xer; +per_type_decoder_f RSRP_Range_decode_uper; +per_type_encoder_f RSRP_Range_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RSRP_Range_H_ */ +#include diff --git a/lte/rrc/asn/RSRQ-Range.c b/lte/rrc/asn/RSRQ-Range.c new file mode 100644 index 000000000..e8a3a3874 --- /dev/null +++ b/lte/rrc/asn/RSRQ-Range.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RSRQ-Range.h" + +int +RSRQ_Range_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 34)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +RSRQ_Range_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +RSRQ_Range_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +RSRQ_Range_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +RSRQ_Range_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +RSRQ_Range_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +RSRQ_Range_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +RSRQ_Range_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +RSRQ_Range_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +RSRQ_Range_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + RSRQ_Range_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_RSRQ_Range_constr_1 = { + { APC_CONSTRAINED, 6, 6, 0, 34 } /* (0..34) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_RSRQ_Range_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_RSRQ_Range = { + "RSRQ-Range", + "RSRQ-Range", + RSRQ_Range_free, + RSRQ_Range_print, + RSRQ_Range_constraint, + RSRQ_Range_decode_ber, + RSRQ_Range_encode_der, + RSRQ_Range_decode_xer, + RSRQ_Range_encode_xer, + RSRQ_Range_decode_uper, + RSRQ_Range_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RSRQ_Range_tags_1, + sizeof(asn_DEF_RSRQ_Range_tags_1) + /sizeof(asn_DEF_RSRQ_Range_tags_1[0]), /* 1 */ + asn_DEF_RSRQ_Range_tags_1, /* Same as above */ + sizeof(asn_DEF_RSRQ_Range_tags_1) + /sizeof(asn_DEF_RSRQ_Range_tags_1[0]), /* 1 */ + &asn_PER_type_RSRQ_Range_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/RSRQ-Range.h b/lte/rrc/asn/RSRQ-Range.h new file mode 100644 index 000000000..39f6a4846 --- /dev/null +++ b/lte/rrc/asn/RSRQ-Range.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RSRQ_Range_H_ +#define _RSRQ_Range_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RSRQ-Range */ +typedef long RSRQ_Range_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RSRQ_Range; +asn_struct_free_f RSRQ_Range_free; +asn_struct_print_f RSRQ_Range_print; +asn_constr_check_f RSRQ_Range_constraint; +ber_type_decoder_f RSRQ_Range_decode_ber; +der_type_encoder_f RSRQ_Range_encode_der; +xer_type_decoder_f RSRQ_Range_decode_xer; +xer_type_encoder_f RSRQ_Range_encode_xer; +per_type_decoder_f RSRQ_Range_decode_uper; +per_type_encoder_f RSRQ_Range_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _RSRQ_Range_H_ */ +#include diff --git a/lte/rrc/asn/RSTD-InterFreqInfo-r10.c b/lte/rrc/asn/RSTD-InterFreqInfo-r10.c new file mode 100644 index 000000000..22fb303e5 --- /dev/null +++ b/lte/rrc/asn/RSTD-InterFreqInfo-r10.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RSTD-InterFreqInfo-r10.h" + +static int +memb_measPRS_Offset_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 39)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_measPRS_Offset_r10_constr_3 = { + { APC_CONSTRAINED, 6, 6, 0, 39 } /* (0..39) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RSTD_InterFreqInfo_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RSTD_InterFreqInfo_r10, carrierFreq_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreq-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RSTD_InterFreqInfo_r10, measPRS_Offset_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_measPRS_Offset_r10_constraint_1, + &asn_PER_memb_measPRS_Offset_r10_constr_3, + 0, + "measPRS-Offset-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_RSTD_InterFreqInfo_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RSTD_InterFreqInfo_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreq-r10 at 315 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* measPRS-Offset-r10 at 316 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RSTD_InterFreqInfo_r10_specs_1 = { + sizeof(struct RSTD_InterFreqInfo_r10), + offsetof(struct RSTD_InterFreqInfo_r10, _asn_ctx), + asn_MAP_RSTD_InterFreqInfo_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RSTD_InterFreqInfo_r10 = { + "RSTD-InterFreqInfo-r10", + "RSTD-InterFreqInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RSTD_InterFreqInfo_r10_tags_1, + sizeof(asn_DEF_RSTD_InterFreqInfo_r10_tags_1) + /sizeof(asn_DEF_RSTD_InterFreqInfo_r10_tags_1[0]), /* 1 */ + asn_DEF_RSTD_InterFreqInfo_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RSTD_InterFreqInfo_r10_tags_1) + /sizeof(asn_DEF_RSTD_InterFreqInfo_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RSTD_InterFreqInfo_r10_1, + 2, /* Elements count */ + &asn_SPC_RSTD_InterFreqInfo_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RSTD-InterFreqInfo-r10.h b/lte/rrc/asn/RSTD-InterFreqInfo-r10.h new file mode 100644 index 000000000..016b1c40c --- /dev/null +++ b/lte/rrc/asn/RSTD-InterFreqInfo-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RSTD_InterFreqInfo_r10_H_ +#define _RSTD_InterFreqInfo_r10_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* RSTD-InterFreqInfo-r10 */ +typedef struct RSTD_InterFreqInfo_r10 { + ARFCN_ValueEUTRA_t carrierFreq_r10; + long measPRS_Offset_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSTD_InterFreqInfo_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RSTD_InterFreqInfo_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _RSTD_InterFreqInfo_r10_H_ */ +#include diff --git a/lte/rrc/asn/RSTD-InterFreqInfoList-r10.c b/lte/rrc/asn/RSTD-InterFreqInfoList-r10.c new file mode 100644 index 000000000..ad951a086 --- /dev/null +++ b/lte/rrc/asn/RSTD-InterFreqInfoList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RSTD-InterFreqInfoList-r10.h" + +static asn_per_constraints_t asn_PER_type_RSTD_InterFreqInfoList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RSTD_InterFreqInfoList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_RSTD_InterFreqInfo_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_RSTD_InterFreqInfoList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_RSTD_InterFreqInfoList_r10_specs_1 = { + sizeof(struct RSTD_InterFreqInfoList_r10), + offsetof(struct RSTD_InterFreqInfoList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_RSTD_InterFreqInfoList_r10 = { + "RSTD-InterFreqInfoList-r10", + "RSTD-InterFreqInfoList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RSTD_InterFreqInfoList_r10_tags_1, + sizeof(asn_DEF_RSTD_InterFreqInfoList_r10_tags_1) + /sizeof(asn_DEF_RSTD_InterFreqInfoList_r10_tags_1[0]), /* 1 */ + asn_DEF_RSTD_InterFreqInfoList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RSTD_InterFreqInfoList_r10_tags_1) + /sizeof(asn_DEF_RSTD_InterFreqInfoList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_RSTD_InterFreqInfoList_r10_constr_1, + asn_MBR_RSTD_InterFreqInfoList_r10_1, + 1, /* Single element */ + &asn_SPC_RSTD_InterFreqInfoList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RSTD-InterFreqInfoList-r10.h b/lte/rrc/asn/RSTD-InterFreqInfoList-r10.h new file mode 100644 index 000000000..eb4c5c776 --- /dev/null +++ b/lte/rrc/asn/RSTD-InterFreqInfoList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RSTD_InterFreqInfoList_r10_H_ +#define _RSTD_InterFreqInfoList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RSTD_InterFreqInfo_r10; + +/* RSTD-InterFreqInfoList-r10 */ +typedef struct RSTD_InterFreqInfoList_r10 { + A_SEQUENCE_OF(struct RSTD_InterFreqInfo_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RSTD_InterFreqInfoList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RSTD_InterFreqInfoList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RSTD-InterFreqInfo-r10.h" + +#endif /* _RSTD_InterFreqInfoList_r10_H_ */ +#include diff --git a/lte/rrc/asn/RadioResourceConfigCommon.c b/lte/rrc/asn/RadioResourceConfigCommon.c new file mode 100644 index 000000000..3d019ed59 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigCommon.c @@ -0,0 +1,182 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RadioResourceConfigCommon.h" + +static asn_TYPE_member_t asn_MBR_RadioResourceConfigCommon_1[] = { + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommon, rach_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RACH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rach-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommon, prach_Config), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PRACH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prach-Config" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommon, pdsch_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDSCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdsch-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommon, pusch_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigCommon" + }, + { ATF_POINTER, 7, offsetof(struct RadioResourceConfigCommon, phich_Config), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PHICH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phich-Config" + }, + { ATF_POINTER, 6, offsetof(struct RadioResourceConfigCommon, pucch_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUCCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pucch-ConfigCommon" + }, + { ATF_POINTER, 5, offsetof(struct RadioResourceConfigCommon, soundingRS_UL_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigCommon" + }, + { ATF_POINTER, 4, offsetof(struct RadioResourceConfigCommon, uplinkPowerControlCommon), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlCommon" + }, + { ATF_POINTER, 3, offsetof(struct RadioResourceConfigCommon, antennaInfoCommon), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfoCommon" + }, + { ATF_POINTER, 2, offsetof(struct RadioResourceConfigCommon, p_Max), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_P_Max, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p-Max" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommon, tdd_Config), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TDD_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tdd-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommon, ul_CyclicPrefixLength), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_CyclicPrefixLength, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-CyclicPrefixLength" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommon, uplinkPowerControlCommon_v1020), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlCommon_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlCommon-v1020" + }, +}; +static int asn_MAP_RadioResourceConfigCommon_oms_1[] = { 0, 2, 4, 5, 6, 7, 8, 9, 10, 12 }; +static ber_tlv_tag_t asn_DEF_RadioResourceConfigCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RadioResourceConfigCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rach-ConfigCommon at 2377 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* prach-Config at 2378 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pdsch-ConfigCommon at 2379 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pusch-ConfigCommon at 2380 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* phich-Config at 2381 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* pucch-ConfigCommon at 2382 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* soundingRS-UL-ConfigCommon at 2383 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* uplinkPowerControlCommon at 2384 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* antennaInfoCommon at 2385 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* p-Max at 2386 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* tdd-Config at 2387 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* ul-CyclicPrefixLength at 2388 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 } /* uplinkPowerControlCommon-v1020 at 2389 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RadioResourceConfigCommon_specs_1 = { + sizeof(struct RadioResourceConfigCommon), + offsetof(struct RadioResourceConfigCommon, _asn_ctx), + asn_MAP_RadioResourceConfigCommon_tag2el_1, + 13, /* Count of tags in the map */ + asn_MAP_RadioResourceConfigCommon_oms_1, /* Optional members */ + 10, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigCommon = { + "RadioResourceConfigCommon", + "RadioResourceConfigCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RadioResourceConfigCommon_tags_1, + sizeof(asn_DEF_RadioResourceConfigCommon_tags_1) + /sizeof(asn_DEF_RadioResourceConfigCommon_tags_1[0]), /* 1 */ + asn_DEF_RadioResourceConfigCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioResourceConfigCommon_tags_1) + /sizeof(asn_DEF_RadioResourceConfigCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RadioResourceConfigCommon_1, + 13, /* Elements count */ + &asn_SPC_RadioResourceConfigCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RadioResourceConfigCommon.h b/lte/rrc/asn/RadioResourceConfigCommon.h new file mode 100644 index 000000000..af235a52c --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigCommon.h @@ -0,0 +1,75 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RadioResourceConfigCommon_H_ +#define _RadioResourceConfigCommon_H_ + + +#include + +/* Including external dependencies */ +#include "PRACH-Config.h" +#include "PUSCH-ConfigCommon.h" +#include "P-Max.h" +#include "UL-CyclicPrefixLength.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RACH_ConfigCommon; +struct PDSCH_ConfigCommon; +struct PHICH_Config; +struct PUCCH_ConfigCommon; +struct SoundingRS_UL_ConfigCommon; +struct UplinkPowerControlCommon; +struct AntennaInfoCommon; +struct TDD_Config; +struct UplinkPowerControlCommon_v1020; + +/* RadioResourceConfigCommon */ +typedef struct RadioResourceConfigCommon { + struct RACH_ConfigCommon *rach_ConfigCommon /* OPTIONAL */; + PRACH_Config_t prach_Config; + struct PDSCH_ConfigCommon *pdsch_ConfigCommon /* OPTIONAL */; + PUSCH_ConfigCommon_t pusch_ConfigCommon; + struct PHICH_Config *phich_Config /* OPTIONAL */; + struct PUCCH_ConfigCommon *pucch_ConfigCommon /* OPTIONAL */; + struct SoundingRS_UL_ConfigCommon *soundingRS_UL_ConfigCommon /* OPTIONAL */; + struct UplinkPowerControlCommon *uplinkPowerControlCommon /* OPTIONAL */; + struct AntennaInfoCommon *antennaInfoCommon /* OPTIONAL */; + P_Max_t *p_Max /* OPTIONAL */; + struct TDD_Config *tdd_Config /* OPTIONAL */; + UL_CyclicPrefixLength_t ul_CyclicPrefixLength; + struct UplinkPowerControlCommon_v1020 *uplinkPowerControlCommon_v1020 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceConfigCommon_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigCommon; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RACH-ConfigCommon.h" +#include "PDSCH-ConfigCommon.h" +#include "PHICH-Config.h" +#include "PUCCH-ConfigCommon.h" +#include "SoundingRS-UL-ConfigCommon.h" +#include "UplinkPowerControlCommon.h" +#include "AntennaInfoCommon.h" +#include "TDD-Config.h" +#include "UplinkPowerControlCommon-v1020.h" + +#endif /* _RadioResourceConfigCommon_H_ */ +#include diff --git a/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.c b/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.c new file mode 100644 index 000000000..44c377ad9 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.c @@ -0,0 +1,661 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RadioResourceConfigCommonSCell-r10.h" + +static int +dl_Bandwidth_r10_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dl_Bandwidth_r10_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dl_Bandwidth_r10_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dl_Bandwidth_r10_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_r10_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dl_Bandwidth_r10_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_r10_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dl_Bandwidth_r10_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dl_Bandwidth_r10_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dl_Bandwidth_r10_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dl_Bandwidth_r10_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +ul_Bandwidth_r10_18_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ul_Bandwidth_r10_18_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ul_Bandwidth_r10_18_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ul_Bandwidth_r10_18_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_r10_18_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ul_Bandwidth_r10_18_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_r10_18_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ul_Bandwidth_r10_18_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_r10_18_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ul_Bandwidth_r10_18_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ul_Bandwidth_r10_18_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_dl_Bandwidth_r10_constr_3 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ul_Bandwidth_r10_constr_18 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_dl_Bandwidth_r10_value2enum_3[] = { + { 0, 2, "n6" }, + { 1, 3, "n15" }, + { 2, 3, "n25" }, + { 3, 3, "n50" }, + { 4, 3, "n75" }, + { 5, 4, "n100" } +}; +static unsigned int asn_MAP_dl_Bandwidth_r10_enum2value_3[] = { + 5, /* n100(5) */ + 1, /* n15(1) */ + 2, /* n25(2) */ + 3, /* n50(3) */ + 0, /* n6(0) */ + 4 /* n75(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dl_Bandwidth_r10_specs_3 = { + asn_MAP_dl_Bandwidth_r10_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_dl_Bandwidth_r10_enum2value_3, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dl_Bandwidth_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dl_Bandwidth_r10_3 = { + "dl-Bandwidth-r10", + "dl-Bandwidth-r10", + dl_Bandwidth_r10_3_free, + dl_Bandwidth_r10_3_print, + dl_Bandwidth_r10_3_constraint, + dl_Bandwidth_r10_3_decode_ber, + dl_Bandwidth_r10_3_encode_der, + dl_Bandwidth_r10_3_decode_xer, + dl_Bandwidth_r10_3_encode_xer, + dl_Bandwidth_r10_3_decode_uper, + dl_Bandwidth_r10_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dl_Bandwidth_r10_tags_3, + sizeof(asn_DEF_dl_Bandwidth_r10_tags_3) + /sizeof(asn_DEF_dl_Bandwidth_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_dl_Bandwidth_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_dl_Bandwidth_r10_tags_3) + /sizeof(asn_DEF_dl_Bandwidth_r10_tags_3[0]), /* 2 */ + &asn_PER_type_dl_Bandwidth_r10_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dl_Bandwidth_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_nonUL_Configuration_r10_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, dl_Bandwidth_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dl_Bandwidth_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-Bandwidth-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, antennaInfoCommon_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AntennaInfoCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "antennaInfoCommon-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, mbsfn_SubframeConfigList_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBSFN_SubframeConfigList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbsfn-SubframeConfigList-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, phich_Config_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PHICH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phich-Config-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, pdsch_ConfigCommon_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDSCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdsch-ConfigCommon-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, tdd_Config_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TDD_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tdd-Config-r10" + }, +}; +static int asn_MAP_nonUL_Configuration_r10_oms_2[] = { 2, 5 }; +static ber_tlv_tag_t asn_DEF_nonUL_Configuration_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_nonUL_Configuration_r10_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dl-Bandwidth-r10 at 2396 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* antennaInfoCommon-r10 at 2398 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* mbsfn-SubframeConfigList-r10 at 2399 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* phich-Config-r10 at 2401 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pdsch-ConfigCommon-r10 at 2403 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* tdd-Config-r10 at 2404 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonUL_Configuration_r10_specs_2 = { + sizeof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10), + offsetof(struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10, _asn_ctx), + asn_MAP_nonUL_Configuration_r10_tag2el_2, + 6, /* Count of tags in the map */ + asn_MAP_nonUL_Configuration_r10_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonUL_Configuration_r10_2 = { + "nonUL-Configuration-r10", + "nonUL-Configuration-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonUL_Configuration_r10_tags_2, + sizeof(asn_DEF_nonUL_Configuration_r10_tags_2) + /sizeof(asn_DEF_nonUL_Configuration_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_nonUL_Configuration_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_nonUL_Configuration_r10_tags_2) + /sizeof(asn_DEF_nonUL_Configuration_r10_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_nonUL_Configuration_r10_2, + 6, /* Elements count */ + &asn_SPC_nonUL_Configuration_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_ul_Bandwidth_r10_value2enum_18[] = { + { 0, 2, "n6" }, + { 1, 3, "n15" }, + { 2, 3, "n25" }, + { 3, 3, "n50" }, + { 4, 3, "n75" }, + { 5, 4, "n100" } +}; +static unsigned int asn_MAP_ul_Bandwidth_r10_enum2value_18[] = { + 5, /* n100(5) */ + 1, /* n15(1) */ + 2, /* n25(2) */ + 3, /* n50(3) */ + 0, /* n6(0) */ + 4 /* n75(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ul_Bandwidth_r10_specs_18 = { + asn_MAP_ul_Bandwidth_r10_value2enum_18, /* "tag" => N; sorted by tag */ + asn_MAP_ul_Bandwidth_r10_enum2value_18, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ul_Bandwidth_r10_tags_18[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_Bandwidth_r10_18 = { + "ul-Bandwidth-r10", + "ul-Bandwidth-r10", + ul_Bandwidth_r10_18_free, + ul_Bandwidth_r10_18_print, + ul_Bandwidth_r10_18_constraint, + ul_Bandwidth_r10_18_decode_ber, + ul_Bandwidth_r10_18_encode_der, + ul_Bandwidth_r10_18_decode_xer, + ul_Bandwidth_r10_18_encode_xer, + ul_Bandwidth_r10_18_decode_uper, + ul_Bandwidth_r10_18_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_Bandwidth_r10_tags_18, + sizeof(asn_DEF_ul_Bandwidth_r10_tags_18) + /sizeof(asn_DEF_ul_Bandwidth_r10_tags_18[0]) - 1, /* 1 */ + asn_DEF_ul_Bandwidth_r10_tags_18, /* Same as above */ + sizeof(asn_DEF_ul_Bandwidth_r10_tags_18) + /sizeof(asn_DEF_ul_Bandwidth_r10_tags_18[0]), /* 2 */ + &asn_PER_type_ul_Bandwidth_r10_constr_18, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ul_Bandwidth_r10_specs_18 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ul_FreqInfo_r10_16[] = { + { ATF_POINTER, 2, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10, ul_CarrierFreq_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-CarrierFreq-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10, ul_Bandwidth_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ul_Bandwidth_r10_18, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-Bandwidth-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10, additionalSpectrumEmission_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSpectrumEmission, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "additionalSpectrumEmission-r10" + }, +}; +static int asn_MAP_ul_FreqInfo_r10_oms_16[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_ul_FreqInfo_r10_tags_16[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ul_FreqInfo_r10_tag2el_16[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-CarrierFreq-r10 at 2409 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ul-Bandwidth-r10 at 2410 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* additionalSpectrumEmission-r10 at 2413 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ul_FreqInfo_r10_specs_16 = { + sizeof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10), + offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10, _asn_ctx), + asn_MAP_ul_FreqInfo_r10_tag2el_16, + 3, /* Count of tags in the map */ + asn_MAP_ul_FreqInfo_r10_oms_16, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_FreqInfo_r10_16 = { + "ul-FreqInfo-r10", + "ul-FreqInfo-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_FreqInfo_r10_tags_16, + sizeof(asn_DEF_ul_FreqInfo_r10_tags_16) + /sizeof(asn_DEF_ul_FreqInfo_r10_tags_16[0]) - 1, /* 1 */ + asn_DEF_ul_FreqInfo_r10_tags_16, /* Same as above */ + sizeof(asn_DEF_ul_FreqInfo_r10_tags_16) + /sizeof(asn_DEF_ul_FreqInfo_r10_tags_16[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ul_FreqInfo_r10_16, + 3, /* Elements count */ + &asn_SPC_ul_FreqInfo_r10_specs_16 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ul_Configuration_r10_15[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, ul_FreqInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ul_FreqInfo_r10_16, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-FreqInfo-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, p_Max_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_P_Max, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p-Max-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, uplinkPowerControlCommonSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlCommonSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlCommonSCell-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, soundingRS_UL_ConfigCommon_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigCommon-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, ul_CyclicPrefixLength_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_CyclicPrefixLength, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-CyclicPrefixLength-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, prach_ConfigSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PRACH_ConfigSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prach-ConfigSCell-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, pusch_ConfigCommon_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigCommon-r10" + }, +}; +static int asn_MAP_ul_Configuration_r10_oms_15[] = { 1, 5 }; +static ber_tlv_tag_t asn_DEF_ul_Configuration_r10_tags_15[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ul_Configuration_r10_tag2el_15[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-FreqInfo-r10 at 2409 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* p-Max-r10 at 2414 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* uplinkPowerControlCommonSCell-r10 at 2415 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* soundingRS-UL-ConfigCommon-r10 at 2418 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* ul-CyclicPrefixLength-r10 at 2419 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* prach-ConfigSCell-r10 at 2421 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* pusch-ConfigCommon-r10 at 2423 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ul_Configuration_r10_specs_15 = { + sizeof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10), + offsetof(struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10, _asn_ctx), + asn_MAP_ul_Configuration_r10_tag2el_15, + 7, /* Count of tags in the map */ + asn_MAP_ul_Configuration_r10_oms_15, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_Configuration_r10_15 = { + "ul-Configuration-r10", + "ul-Configuration-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_Configuration_r10_tags_15, + sizeof(asn_DEF_ul_Configuration_r10_tags_15) + /sizeof(asn_DEF_ul_Configuration_r10_tags_15[0]) - 1, /* 1 */ + asn_DEF_ul_Configuration_r10_tags_15, /* Same as above */ + sizeof(asn_DEF_ul_Configuration_r10_tags_15) + /sizeof(asn_DEF_ul_Configuration_r10_tags_15[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ul_Configuration_r10_15, + 7, /* Elements count */ + &asn_SPC_ul_Configuration_r10_specs_15 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RadioResourceConfigCommonSCell_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSCell_r10, nonUL_Configuration_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_nonUL_Configuration_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonUL-Configuration-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSCell_r10, ul_Configuration_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_ul_Configuration_r10_15, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-Configuration-r10" + }, +}; +static int asn_MAP_RadioResourceConfigCommonSCell_r10_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RadioResourceConfigCommonSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* nonUL-Configuration-r10 at 2396 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ul-Configuration-r10 at 2413 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RadioResourceConfigCommonSCell_r10_specs_1 = { + sizeof(struct RadioResourceConfigCommonSCell_r10), + offsetof(struct RadioResourceConfigCommonSCell_r10, _asn_ctx), + asn_MAP_RadioResourceConfigCommonSCell_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_RadioResourceConfigCommonSCell_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigCommonSCell_r10 = { + "RadioResourceConfigCommonSCell-r10", + "RadioResourceConfigCommonSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1, + sizeof(asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1) + /sizeof(asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1) + /sizeof(asn_DEF_RadioResourceConfigCommonSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RadioResourceConfigCommonSCell_r10_1, + 2, /* Elements count */ + &asn_SPC_RadioResourceConfigCommonSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.h b/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.h new file mode 100644 index 000000000..f4bec9041 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.h @@ -0,0 +1,111 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RadioResourceConfigCommonSCell_r10_H_ +#define _RadioResourceConfigCommonSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include "AntennaInfoCommon.h" +#include "PHICH-Config.h" +#include "PDSCH-ConfigCommon.h" +#include +#include "P-Max.h" +#include "UplinkPowerControlCommonSCell-r10.h" +#include "SoundingRS-UL-ConfigCommon.h" +#include "UL-CyclicPrefixLength.h" +#include "PUSCH-ConfigCommon.h" +#include "ARFCN-ValueEUTRA.h" +#include "AdditionalSpectrumEmission.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10 { + RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10_n6 = 0, + RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10_n15 = 1, + RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10_n25 = 2, + RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10_n50 = 3, + RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10_n75 = 4, + RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10_n100 = 5 +} e_RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10__dl_Bandwidth_r10; +typedef enum RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10 { + RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10_n6 = 0, + RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10_n15 = 1, + RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10_n25 = 2, + RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10_n50 = 3, + RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10_n75 = 4, + RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10_n100 = 5 +} e_RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10__ul_Bandwidth_r10; + +/* Forward declarations */ +struct MBSFN_SubframeConfigList; +struct TDD_Config; +struct PRACH_ConfigSCell_r10; + +/* RadioResourceConfigCommonSCell-r10 */ +typedef struct RadioResourceConfigCommonSCell_r10 { + struct RadioResourceConfigCommonSCell_r10__nonUL_Configuration_r10 { + long dl_Bandwidth_r10; + AntennaInfoCommon_t antennaInfoCommon_r10; + struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList_r10 /* OPTIONAL */; + PHICH_Config_t phich_Config_r10; + PDSCH_ConfigCommon_t pdsch_ConfigCommon_r10; + struct TDD_Config *tdd_Config_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } nonUL_Configuration_r10; + struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10 { + struct RadioResourceConfigCommonSCell_r10__ul_Configuration_r10__ul_FreqInfo_r10 { + ARFCN_ValueEUTRA_t *ul_CarrierFreq_r10 /* OPTIONAL */; + long *ul_Bandwidth_r10 /* OPTIONAL */; + AdditionalSpectrumEmission_t additionalSpectrumEmission_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ul_FreqInfo_r10; + P_Max_t *p_Max_r10 /* OPTIONAL */; + UplinkPowerControlCommonSCell_r10_t uplinkPowerControlCommonSCell_r10; + SoundingRS_UL_ConfigCommon_t soundingRS_UL_ConfigCommon_r10; + UL_CyclicPrefixLength_t ul_CyclicPrefixLength_r10; + struct PRACH_ConfigSCell_r10 *prach_ConfigSCell_r10 /* OPTIONAL */; + PUSCH_ConfigCommon_t pusch_ConfigCommon_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ul_Configuration_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceConfigCommonSCell_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_dl_Bandwidth_r10_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_ul_Bandwidth_r10_18; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigCommonSCell_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBSFN-SubframeConfigList.h" +#include "TDD-Config.h" +#include "PRACH-ConfigSCell-r10.h" + +#endif /* _RadioResourceConfigCommonSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/RadioResourceConfigCommonSIB.c b/lte/rrc/asn/RadioResourceConfigCommonSIB.c new file mode 100644 index 000000000..a17558828 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigCommonSIB.c @@ -0,0 +1,162 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RadioResourceConfigCommonSIB.h" + +static asn_TYPE_member_t asn_MBR_RadioResourceConfigCommonSIB_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, rach_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RACH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rach-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, bcch_Config), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BCCH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "bcch-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, pcch_Config), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PCCH_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pcch-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, prach_Config), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PRACH_ConfigSIB, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "prach-Config" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, pdsch_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDSCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdsch-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, pusch_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUSCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pusch-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, pucch_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PUCCH_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pucch-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, soundingRS_UL_ConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SoundingRS_UL_ConfigCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "soundingRS-UL-ConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, uplinkPowerControlCommon), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlCommon, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigCommonSIB, ul_CyclicPrefixLength), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UL_CyclicPrefixLength, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-CyclicPrefixLength" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigCommonSIB, uplinkPowerControlCommon_v1020), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UplinkPowerControlCommon_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "uplinkPowerControlCommon-v1020" + }, +}; +static int asn_MAP_RadioResourceConfigCommonSIB_oms_1[] = { 10 }; +static ber_tlv_tag_t asn_DEF_RadioResourceConfigCommonSIB_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RadioResourceConfigCommonSIB_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rach-ConfigCommon at 2363 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* bcch-Config at 2364 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pcch-Config at 2365 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* prach-Config at 2366 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pdsch-ConfigCommon at 2367 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* pusch-ConfigCommon at 2368 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* pucch-ConfigCommon at 2369 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* soundingRS-UL-ConfigCommon at 2370 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* uplinkPowerControlCommon at 2371 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* ul-CyclicPrefixLength at 2372 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 } /* uplinkPowerControlCommon-v1020 at 2373 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RadioResourceConfigCommonSIB_specs_1 = { + sizeof(struct RadioResourceConfigCommonSIB), + offsetof(struct RadioResourceConfigCommonSIB, _asn_ctx), + asn_MAP_RadioResourceConfigCommonSIB_tag2el_1, + 11, /* Count of tags in the map */ + asn_MAP_RadioResourceConfigCommonSIB_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigCommonSIB = { + "RadioResourceConfigCommonSIB", + "RadioResourceConfigCommonSIB", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RadioResourceConfigCommonSIB_tags_1, + sizeof(asn_DEF_RadioResourceConfigCommonSIB_tags_1) + /sizeof(asn_DEF_RadioResourceConfigCommonSIB_tags_1[0]), /* 1 */ + asn_DEF_RadioResourceConfigCommonSIB_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioResourceConfigCommonSIB_tags_1) + /sizeof(asn_DEF_RadioResourceConfigCommonSIB_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RadioResourceConfigCommonSIB_1, + 11, /* Elements count */ + &asn_SPC_RadioResourceConfigCommonSIB_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RadioResourceConfigCommonSIB.h b/lte/rrc/asn/RadioResourceConfigCommonSIB.h new file mode 100644 index 000000000..515724c15 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigCommonSIB.h @@ -0,0 +1,63 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RadioResourceConfigCommonSIB_H_ +#define _RadioResourceConfigCommonSIB_H_ + + +#include + +/* Including external dependencies */ +#include "RACH-ConfigCommon.h" +#include "BCCH-Config.h" +#include "PCCH-Config.h" +#include "PRACH-ConfigSIB.h" +#include "PDSCH-ConfigCommon.h" +#include "PUSCH-ConfigCommon.h" +#include "PUCCH-ConfigCommon.h" +#include "SoundingRS-UL-ConfigCommon.h" +#include "UplinkPowerControlCommon.h" +#include "UL-CyclicPrefixLength.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UplinkPowerControlCommon_v1020; + +/* RadioResourceConfigCommonSIB */ +typedef struct RadioResourceConfigCommonSIB { + RACH_ConfigCommon_t rach_ConfigCommon; + BCCH_Config_t bcch_Config; + PCCH_Config_t pcch_Config; + PRACH_ConfigSIB_t prach_Config; + PDSCH_ConfigCommon_t pdsch_ConfigCommon; + PUSCH_ConfigCommon_t pusch_ConfigCommon; + PUCCH_ConfigCommon_t pucch_ConfigCommon; + SoundingRS_UL_ConfigCommon_t soundingRS_UL_ConfigCommon; + UplinkPowerControlCommon_t uplinkPowerControlCommon; + UL_CyclicPrefixLength_t ul_CyclicPrefixLength; + struct UplinkPowerControlCommon_v1020 *uplinkPowerControlCommon_v1020 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceConfigCommonSIB_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigCommonSIB; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UplinkPowerControlCommon-v1020.h" + +#endif /* _RadioResourceConfigCommonSIB_H_ */ +#include diff --git a/lte/rrc/asn/RadioResourceConfigDedicated.c b/lte/rrc/asn/RadioResourceConfigDedicated.c new file mode 100644 index 000000000..c68501632 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigDedicated.c @@ -0,0 +1,205 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RadioResourceConfigDedicated.h" + +static asn_per_constraints_t asn_PER_type_mac_MainConfig_constr_5 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_mac_MainConfig_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigDedicated__mac_MainConfig, choice.explicitValue), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MAC_MainConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitValue" + }, + { ATF_NOFLAGS, 0, offsetof(struct RadioResourceConfigDedicated__mac_MainConfig, choice.defaultValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "defaultValue" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_mac_MainConfig_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* explicitValue at 2447 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* defaultValue at 2448 */ +}; +static asn_CHOICE_specifics_t asn_SPC_mac_MainConfig_specs_5 = { + sizeof(struct RadioResourceConfigDedicated__mac_MainConfig), + offsetof(struct RadioResourceConfigDedicated__mac_MainConfig, _asn_ctx), + offsetof(struct RadioResourceConfigDedicated__mac_MainConfig, present), + sizeof(((struct RadioResourceConfigDedicated__mac_MainConfig *)0)->present), + asn_MAP_mac_MainConfig_tag2el_5, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_mac_MainConfig_5 = { + "mac-MainConfig", + "mac-MainConfig", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_mac_MainConfig_constr_5, + asn_MBR_mac_MainConfig_5, + 2, /* Elements count */ + &asn_SPC_mac_MainConfig_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_RadioResourceConfigDedicated_1[] = { + { ATF_POINTER, 9, offsetof(struct RadioResourceConfigDedicated, srb_ToAddModList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SRB_ToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srb-ToAddModList" + }, + { ATF_POINTER, 8, offsetof(struct RadioResourceConfigDedicated, drb_ToAddModList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_ToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-ToAddModList" + }, + { ATF_POINTER, 7, offsetof(struct RadioResourceConfigDedicated, drb_ToReleaseList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DRB_ToReleaseList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "drb-ToReleaseList" + }, + { ATF_POINTER, 6, offsetof(struct RadioResourceConfigDedicated, mac_MainConfig), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_mac_MainConfig_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mac-MainConfig" + }, + { ATF_POINTER, 5, offsetof(struct RadioResourceConfigDedicated, sps_Config), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SPS_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sps-Config" + }, + { ATF_POINTER, 4, offsetof(struct RadioResourceConfigDedicated, physicalConfigDedicated), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysicalConfigDedicated, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physicalConfigDedicated" + }, + { ATF_POINTER, 3, offsetof(struct RadioResourceConfigDedicated, rlf_TimersAndConstants_r9), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_RLF_TimersAndConstants_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlf-TimersAndConstants-r9" + }, + { ATF_POINTER, 2, offsetof(struct RadioResourceConfigDedicated, measSubframePatternPCell_r10), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_MeasSubframePatternPCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measSubframePatternPCell-r10" + }, + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigDedicated, sps_RA_ConfigList_rlola), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SPS_RA_ConfigList_rlola, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sps-RA-ConfigList-rlola" + }, +}; +static int asn_MAP_RadioResourceConfigDedicated_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; +static ber_tlv_tag_t asn_DEF_RadioResourceConfigDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RadioResourceConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srb-ToAddModList at 2443 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* drb-ToAddModList at 2444 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* drb-ToReleaseList at 2445 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* mac-MainConfig at 2447 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sps-Config at 2450 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* physicalConfigDedicated at 2451 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* rlf-TimersAndConstants-r9 at 2452 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* measSubframePatternPCell-r10 at 2453 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* sps-RA-ConfigList-rlola at 2454 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RadioResourceConfigDedicated_specs_1 = { + sizeof(struct RadioResourceConfigDedicated), + offsetof(struct RadioResourceConfigDedicated, _asn_ctx), + asn_MAP_RadioResourceConfigDedicated_tag2el_1, + 9, /* Count of tags in the map */ + asn_MAP_RadioResourceConfigDedicated_oms_1, /* Optional members */ + 9, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigDedicated = { + "RadioResourceConfigDedicated", + "RadioResourceConfigDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RadioResourceConfigDedicated_tags_1, + sizeof(asn_DEF_RadioResourceConfigDedicated_tags_1) + /sizeof(asn_DEF_RadioResourceConfigDedicated_tags_1[0]), /* 1 */ + asn_DEF_RadioResourceConfigDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioResourceConfigDedicated_tags_1) + /sizeof(asn_DEF_RadioResourceConfigDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RadioResourceConfigDedicated_1, + 9, /* Elements count */ + &asn_SPC_RadioResourceConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RadioResourceConfigDedicated.h b/lte/rrc/asn/RadioResourceConfigDedicated.h new file mode 100644 index 000000000..ed1fbfc83 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigDedicated.h @@ -0,0 +1,84 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RadioResourceConfigDedicated_H_ +#define _RadioResourceConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include "MAC-MainConfig.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RadioResourceConfigDedicated__mac_MainConfig_PR { + RadioResourceConfigDedicated__mac_MainConfig_PR_NOTHING, /* No components present */ + RadioResourceConfigDedicated__mac_MainConfig_PR_explicitValue, + RadioResourceConfigDedicated__mac_MainConfig_PR_defaultValue +} RadioResourceConfigDedicated__mac_MainConfig_PR; + +/* Forward declarations */ +struct SRB_ToAddModList; +struct DRB_ToAddModList; +struct DRB_ToReleaseList; +struct SPS_Config; +struct PhysicalConfigDedicated; +struct RLF_TimersAndConstants_r9; +struct MeasSubframePatternPCell_r10; +struct SPS_RA_ConfigList_rlola; + +/* RadioResourceConfigDedicated */ +typedef struct RadioResourceConfigDedicated { + struct SRB_ToAddModList *srb_ToAddModList /* OPTIONAL */; + struct DRB_ToAddModList *drb_ToAddModList /* OPTIONAL */; + struct DRB_ToReleaseList *drb_ToReleaseList /* OPTIONAL */; + struct RadioResourceConfigDedicated__mac_MainConfig { + RadioResourceConfigDedicated__mac_MainConfig_PR present; + union RadioResourceConfigDedicated__mac_MainConfig_u { + MAC_MainConfig_t explicitValue; + NULL_t defaultValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *mac_MainConfig; + struct SPS_Config *sps_Config /* OPTIONAL */; + struct PhysicalConfigDedicated *physicalConfigDedicated /* OPTIONAL */; + struct RLF_TimersAndConstants_r9 *rlf_TimersAndConstants_r9 /* OPTIONAL */; + struct MeasSubframePatternPCell_r10 *measSubframePatternPCell_r10 /* OPTIONAL */; + struct SPS_RA_ConfigList_rlola *sps_RA_ConfigList_rlola /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceConfigDedicated_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigDedicated; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SRB-ToAddModList.h" +#include "DRB-ToAddModList.h" +#include "DRB-ToReleaseList.h" +#include "SPS-Config.h" +#include "PhysicalConfigDedicated.h" +#include "RLF-TimersAndConstants-r9.h" +#include "MeasSubframePatternPCell-r10.h" +#include "SPS-RA-ConfigList-rlola.h" + +#endif /* _RadioResourceConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.c b/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.c new file mode 100644 index 000000000..01b02401f --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RadioResourceConfigDedicatedSCell-r10.h" + +static asn_TYPE_member_t asn_MBR_RadioResourceConfigDedicatedSCell_r10_1[] = { + { ATF_POINTER, 1, offsetof(struct RadioResourceConfigDedicatedSCell_r10, physicalConfigDedicatedSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysicalConfigDedicatedSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physicalConfigDedicatedSCell-r10" + }, +}; +static int asn_MAP_RadioResourceConfigDedicatedSCell_r10_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RadioResourceConfigDedicatedSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* physicalConfigDedicatedSCell-r10 at 2460 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RadioResourceConfigDedicatedSCell_r10_specs_1 = { + sizeof(struct RadioResourceConfigDedicatedSCell_r10), + offsetof(struct RadioResourceConfigDedicatedSCell_r10, _asn_ctx), + asn_MAP_RadioResourceConfigDedicatedSCell_r10_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_RadioResourceConfigDedicatedSCell_r10_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigDedicatedSCell_r10 = { + "RadioResourceConfigDedicatedSCell-r10", + "RadioResourceConfigDedicatedSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1, + sizeof(asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_RadioResourceConfigDedicatedSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RadioResourceConfigDedicatedSCell_r10_1, + 1, /* Elements count */ + &asn_SPC_RadioResourceConfigDedicatedSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h b/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h new file mode 100644 index 000000000..516dd4d73 --- /dev/null +++ b/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RadioResourceConfigDedicatedSCell_r10_H_ +#define _RadioResourceConfigDedicatedSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhysicalConfigDedicatedSCell_r10; + +/* RadioResourceConfigDedicatedSCell-r10 */ +typedef struct RadioResourceConfigDedicatedSCell_r10 { + struct PhysicalConfigDedicatedSCell_r10 *physicalConfigDedicatedSCell_r10 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RadioResourceConfigDedicatedSCell_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RadioResourceConfigDedicatedSCell_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhysicalConfigDedicatedSCell-r10.h" + +#endif /* _RadioResourceConfigDedicatedSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/RedirectedCarrierInfo.c b/lte/rrc/asn/RedirectedCarrierInfo.c new file mode 100644 index 000000000..1515d20b6 --- /dev/null +++ b/lte/rrc/asn/RedirectedCarrierInfo.c @@ -0,0 +1,121 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RedirectedCarrierInfo.h" + +static asn_per_constraints_t asn_PER_type_RedirectedCarrierInfo_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 5 } /* (0..5,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RedirectedCarrierInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.eutra), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eutra" + }, + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.geran), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqsGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "geran" + }, + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.utra_FDD), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-FDD" + }, + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.utra_TDD), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-TDD" + }, + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.cdma2000_HRPD), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-HRPD" + }, + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.cdma2000_1xRTT), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-1xRTT" + }, + { ATF_NOFLAGS, 0, offsetof(struct RedirectedCarrierInfo, choice.utra_TDD_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqListUTRA_TDD_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utra-TDD-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_RedirectedCarrierInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eutra at 891 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* geran at 892 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* utra-FDD at 893 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* utra-TDD at 894 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* cdma2000-HRPD at 895 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* cdma2000-1xRTT at 896 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* utra-TDD-r10 at 899 */ +}; +static asn_CHOICE_specifics_t asn_SPC_RedirectedCarrierInfo_specs_1 = { + sizeof(struct RedirectedCarrierInfo), + offsetof(struct RedirectedCarrierInfo, _asn_ctx), + offsetof(struct RedirectedCarrierInfo, present), + sizeof(((struct RedirectedCarrierInfo *)0)->present), + asn_MAP_RedirectedCarrierInfo_tag2el_1, + 7, /* Count of tags in the map */ + 0, + 6 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_RedirectedCarrierInfo = { + "RedirectedCarrierInfo", + "RedirectedCarrierInfo", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_RedirectedCarrierInfo_constr_1, + asn_MBR_RedirectedCarrierInfo_1, + 7, /* Elements count */ + &asn_SPC_RedirectedCarrierInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RedirectedCarrierInfo.h b/lte/rrc/asn/RedirectedCarrierInfo.h new file mode 100644 index 000000000..085aebeee --- /dev/null +++ b/lte/rrc/asn/RedirectedCarrierInfo.h @@ -0,0 +1,68 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RedirectedCarrierInfo_H_ +#define _RedirectedCarrierInfo_H_ + + +#include + +/* Including external dependencies */ +#include "ARFCN-ValueEUTRA.h" +#include "CarrierFreqsGERAN.h" +#include "ARFCN-ValueUTRA.h" +#include "CarrierFreqCDMA2000.h" +#include "CarrierFreqListUTRA-TDD-r10.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum RedirectedCarrierInfo_PR { + RedirectedCarrierInfo_PR_NOTHING, /* No components present */ + RedirectedCarrierInfo_PR_eutra, + RedirectedCarrierInfo_PR_geran, + RedirectedCarrierInfo_PR_utra_FDD, + RedirectedCarrierInfo_PR_utra_TDD, + RedirectedCarrierInfo_PR_cdma2000_HRPD, + RedirectedCarrierInfo_PR_cdma2000_1xRTT, + /* Extensions may appear below */ + RedirectedCarrierInfo_PR_utra_TDD_r10 +} RedirectedCarrierInfo_PR; + +/* RedirectedCarrierInfo */ +typedef struct RedirectedCarrierInfo { + RedirectedCarrierInfo_PR present; + union RedirectedCarrierInfo_u { + ARFCN_ValueEUTRA_t eutra; + CarrierFreqsGERAN_t geran; + ARFCN_ValueUTRA_t utra_FDD; + ARFCN_ValueUTRA_t utra_TDD; + CarrierFreqCDMA2000_t cdma2000_HRPD; + CarrierFreqCDMA2000_t cdma2000_1xRTT; + /* + * This type is extensible, + * possible extensions are below. + */ + CarrierFreqListUTRA_TDD_r10_t utra_TDD_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RedirectedCarrierInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RedirectedCarrierInfo; + +#ifdef __cplusplus +} +#endif + +#endif /* _RedirectedCarrierInfo_H_ */ +#include diff --git a/lte/rrc/asn/ReestabUE-Identity.c b/lte/rrc/asn/ReestabUE-Identity.c new file mode 100644 index 000000000..eb5edccff --- /dev/null +++ b/lte/rrc/asn/ReestabUE-Identity.c @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReestabUE-Identity.h" + +static asn_TYPE_member_t asn_MBR_ReestabUE_Identity_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReestabUE_Identity, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c-RNTI" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReestabUE_Identity, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReestabUE_Identity, shortMAC_I), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ShortMAC_I, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "shortMAC-I" + }, +}; +static ber_tlv_tag_t asn_DEF_ReestabUE_Identity_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ReestabUE_Identity_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c-RNTI at 812 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* physCellId at 813 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* shortMAC-I at 815 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ReestabUE_Identity_specs_1 = { + sizeof(struct ReestabUE_Identity), + offsetof(struct ReestabUE_Identity, _asn_ctx), + asn_MAP_ReestabUE_Identity_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ReestabUE_Identity = { + "ReestabUE-Identity", + "ReestabUE-Identity", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReestabUE_Identity_tags_1, + sizeof(asn_DEF_ReestabUE_Identity_tags_1) + /sizeof(asn_DEF_ReestabUE_Identity_tags_1[0]), /* 1 */ + asn_DEF_ReestabUE_Identity_tags_1, /* Same as above */ + sizeof(asn_DEF_ReestabUE_Identity_tags_1) + /sizeof(asn_DEF_ReestabUE_Identity_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ReestabUE_Identity_1, + 3, /* Elements count */ + &asn_SPC_ReestabUE_Identity_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReestabUE-Identity.h b/lte/rrc/asn/ReestabUE-Identity.h new file mode 100644 index 000000000..347ac16a1 --- /dev/null +++ b/lte/rrc/asn/ReestabUE-Identity.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReestabUE_Identity_H_ +#define _ReestabUE_Identity_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include "PhysCellId.h" +#include "ShortMAC-I.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReestabUE-Identity */ +typedef struct ReestabUE_Identity { + C_RNTI_t c_RNTI; + PhysCellId_t physCellId; + ShortMAC_I_t shortMAC_I; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReestabUE_Identity_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReestabUE_Identity; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReestabUE_Identity_H_ */ +#include diff --git a/lte/rrc/asn/ReestablishmentCause.c b/lte/rrc/asn/ReestablishmentCause.c new file mode 100644 index 000000000..dc7165eb8 --- /dev/null +++ b/lte/rrc/asn/ReestablishmentCause.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReestablishmentCause.h" + +int +ReestablishmentCause_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ReestablishmentCause_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +ReestablishmentCause_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ReestablishmentCause_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ReestablishmentCause_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ReestablishmentCause_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ReestablishmentCause_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ReestablishmentCause_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ReestablishmentCause_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ReestablishmentCause_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ReestablishmentCause_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ReestablishmentCause_constr_1 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_ReestablishmentCause_value2enum_1[] = { + { 0, 22, "reconfigurationFailure" }, + { 1, 15, "handoverFailure" }, + { 2, 12, "otherFailure" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_ReestablishmentCause_enum2value_1[] = { + 1, /* handoverFailure(1) */ + 2, /* otherFailure(2) */ + 0, /* reconfigurationFailure(0) */ + 3 /* spare1(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ReestablishmentCause_specs_1 = { + asn_MAP_ReestablishmentCause_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReestablishmentCause_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ReestablishmentCause_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReestablishmentCause = { + "ReestablishmentCause", + "ReestablishmentCause", + ReestablishmentCause_free, + ReestablishmentCause_print, + ReestablishmentCause_constraint, + ReestablishmentCause_decode_ber, + ReestablishmentCause_encode_der, + ReestablishmentCause_decode_xer, + ReestablishmentCause_encode_xer, + ReestablishmentCause_decode_uper, + ReestablishmentCause_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReestablishmentCause_tags_1, + sizeof(asn_DEF_ReestablishmentCause_tags_1) + /sizeof(asn_DEF_ReestablishmentCause_tags_1[0]), /* 1 */ + asn_DEF_ReestablishmentCause_tags_1, /* Same as above */ + sizeof(asn_DEF_ReestablishmentCause_tags_1) + /sizeof(asn_DEF_ReestablishmentCause_tags_1[0]), /* 1 */ + &asn_PER_type_ReestablishmentCause_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReestablishmentCause_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReestablishmentCause.h b/lte/rrc/asn/ReestablishmentCause.h new file mode 100644 index 000000000..bdd38813c --- /dev/null +++ b/lte/rrc/asn/ReestablishmentCause.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReestablishmentCause_H_ +#define _ReestablishmentCause_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReestablishmentCause { + ReestablishmentCause_reconfigurationFailure = 0, + ReestablishmentCause_handoverFailure = 1, + ReestablishmentCause_otherFailure = 2, + ReestablishmentCause_spare1 = 3 +} e_ReestablishmentCause; + +/* ReestablishmentCause */ +typedef long ReestablishmentCause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReestablishmentCause; +asn_struct_free_f ReestablishmentCause_free; +asn_struct_print_f ReestablishmentCause_print; +asn_constr_check_f ReestablishmentCause_constraint; +ber_type_decoder_f ReestablishmentCause_decode_ber; +der_type_encoder_f ReestablishmentCause_encode_der; +xer_type_decoder_f ReestablishmentCause_decode_xer; +xer_type_encoder_f ReestablishmentCause_encode_xer; +per_type_decoder_f ReestablishmentCause_decode_uper; +per_type_encoder_f ReestablishmentCause_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReestablishmentCause_H_ */ +#include diff --git a/lte/rrc/asn/ReestablishmentInfo.c b/lte/rrc/asn/ReestablishmentInfo.c new file mode 100644 index 000000000..0bdf19c88 --- /dev/null +++ b/lte/rrc/asn/ReestablishmentInfo.c @@ -0,0 +1,81 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "ReestablishmentInfo.h" + +static asn_TYPE_member_t asn_MBR_ReestablishmentInfo_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReestablishmentInfo, sourcePhysCellId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sourcePhysCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReestablishmentInfo, targetCellShortMAC_I), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ShortMAC_I, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "targetCellShortMAC-I" + }, + { ATF_POINTER, 1, offsetof(struct ReestablishmentInfo, additionalReestabInfoList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalReestabInfoList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "additionalReestabInfoList" + }, +}; +static const int asn_MAP_ReestablishmentInfo_oms_1[] = { 2 }; +static const ber_tlv_tag_t asn_DEF_ReestablishmentInfo_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_ReestablishmentInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sourcePhysCellId */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* targetCellShortMAC-I */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* additionalReestabInfoList */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ReestablishmentInfo_specs_1 = { + sizeof(struct ReestablishmentInfo), + offsetof(struct ReestablishmentInfo, _asn_ctx), + asn_MAP_ReestablishmentInfo_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_ReestablishmentInfo_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ReestablishmentInfo = { + "ReestablishmentInfo", + "ReestablishmentInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReestablishmentInfo_tags_1, + sizeof(asn_DEF_ReestablishmentInfo_tags_1) + /sizeof(asn_DEF_ReestablishmentInfo_tags_1[0]), /* 1 */ + asn_DEF_ReestablishmentInfo_tags_1, /* Same as above */ + sizeof(asn_DEF_ReestablishmentInfo_tags_1) + /sizeof(asn_DEF_ReestablishmentInfo_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ReestablishmentInfo_1, + 3, /* Elements count */ + &asn_SPC_ReestablishmentInfo_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReestablishmentInfo.h b/lte/rrc/asn/ReestablishmentInfo.h new file mode 100644 index 000000000..4a6cf2616 --- /dev/null +++ b/lte/rrc/asn/ReestablishmentInfo.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _ReestablishmentInfo_H_ +#define _ReestablishmentInfo_H_ + + +#include + +/* Including external dependencies */ +#include "PhysCellId.h" +#include "ShortMAC-I.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct AdditionalReestabInfoList; + +/* ReestablishmentInfo */ +typedef struct ReestablishmentInfo { + PhysCellId_t sourcePhysCellId; + ShortMAC_I_t targetCellShortMAC_I; + struct AdditionalReestabInfoList *additionalReestabInfoList /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReestablishmentInfo_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReestablishmentInfo; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "AdditionalReestabInfoList.h" + +#endif /* _ReestablishmentInfo_H_ */ +#include diff --git a/lte/rrc/asn/RegisteredMME.c b/lte/rrc/asn/RegisteredMME.c new file mode 100644 index 000000000..ec2e0fa66 --- /dev/null +++ b/lte/rrc/asn/RegisteredMME.c @@ -0,0 +1,118 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "RegisteredMME.h" + +static int +memb_mmegi_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_mmegi_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_RegisteredMME_1[] = { + { ATF_POINTER, 1, offsetof(struct RegisteredMME, plmn_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Identity" + }, + { ATF_NOFLAGS, 0, offsetof(struct RegisteredMME, mmegi), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_mmegi_constraint_1, + &asn_PER_memb_mmegi_constr_3, + 0, + "mmegi" + }, + { ATF_NOFLAGS, 0, offsetof(struct RegisteredMME, mmec), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MMEC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mmec" + }, +}; +static int asn_MAP_RegisteredMME_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_RegisteredMME_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_RegisteredMME_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity at 1068 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* mmegi at 1069 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* mmec at 1071 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_RegisteredMME_specs_1 = { + sizeof(struct RegisteredMME), + offsetof(struct RegisteredMME, _asn_ctx), + asn_MAP_RegisteredMME_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_RegisteredMME_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_RegisteredMME = { + "RegisteredMME", + "RegisteredMME", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_RegisteredMME_tags_1, + sizeof(asn_DEF_RegisteredMME_tags_1) + /sizeof(asn_DEF_RegisteredMME_tags_1[0]), /* 1 */ + asn_DEF_RegisteredMME_tags_1, /* Same as above */ + sizeof(asn_DEF_RegisteredMME_tags_1) + /sizeof(asn_DEF_RegisteredMME_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_RegisteredMME_1, + 3, /* Elements count */ + &asn_SPC_RegisteredMME_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/RegisteredMME.h b/lte/rrc/asn/RegisteredMME.h new file mode 100644 index 000000000..3a2c2aa44 --- /dev/null +++ b/lte/rrc/asn/RegisteredMME.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _RegisteredMME_H_ +#define _RegisteredMME_H_ + + +#include + +/* Including external dependencies */ +#include +#include "MMEC.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PLMN_Identity; + +/* RegisteredMME */ +typedef struct RegisteredMME { + struct PLMN_Identity *plmn_Identity /* OPTIONAL */; + BIT_STRING_t mmegi; + MMEC_t mmec; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} RegisteredMME_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_RegisteredMME; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PLMN-Identity.h" + +#endif /* _RegisteredMME_H_ */ +#include diff --git a/lte/rrc/asn/ReleaseCause.c b/lte/rrc/asn/ReleaseCause.c new file mode 100644 index 000000000..5e5b1da8d --- /dev/null +++ b/lte/rrc/asn/ReleaseCause.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReleaseCause.h" + +int +ReleaseCause_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ReleaseCause_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +ReleaseCause_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ReleaseCause_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ReleaseCause_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ReleaseCause_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ReleaseCause_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ReleaseCause_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ReleaseCause_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ReleaseCause_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ReleaseCause_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ReleaseCause_constr_1 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_ReleaseCause_value2enum_1[] = { + { 0, 24, "loadBalancingTAUrequired" }, + { 1, 5, "other" }, + { 2, 23, "cs-FallbackHighPriority" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_ReleaseCause_enum2value_1[] = { + 2, /* cs-FallbackHighPriority(2) */ + 0, /* loadBalancingTAUrequired(0) */ + 1, /* other(1) */ + 3 /* spare1(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ReleaseCause_specs_1 = { + asn_MAP_ReleaseCause_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReleaseCause_enum2value_1, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ReleaseCause_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReleaseCause = { + "ReleaseCause", + "ReleaseCause", + ReleaseCause_free, + ReleaseCause_print, + ReleaseCause_constraint, + ReleaseCause_decode_ber, + ReleaseCause_encode_der, + ReleaseCause_decode_xer, + ReleaseCause_encode_xer, + ReleaseCause_decode_uper, + ReleaseCause_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReleaseCause_tags_1, + sizeof(asn_DEF_ReleaseCause_tags_1) + /sizeof(asn_DEF_ReleaseCause_tags_1[0]), /* 1 */ + asn_DEF_ReleaseCause_tags_1, /* Same as above */ + sizeof(asn_DEF_ReleaseCause_tags_1) + /sizeof(asn_DEF_ReleaseCause_tags_1[0]), /* 1 */ + &asn_PER_type_ReleaseCause_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReleaseCause_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReleaseCause.h b/lte/rrc/asn/ReleaseCause.h new file mode 100644 index 000000000..5a7c9424b --- /dev/null +++ b/lte/rrc/asn/ReleaseCause.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReleaseCause_H_ +#define _ReleaseCause_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReleaseCause { + ReleaseCause_loadBalancingTAUrequired = 0, + ReleaseCause_other = 1, + ReleaseCause_cs_FallbackHighPriority = 2, + ReleaseCause_spare1 = 3 +} e_ReleaseCause; + +/* ReleaseCause */ +typedef long ReleaseCause_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReleaseCause; +asn_struct_free_f ReleaseCause_free; +asn_struct_print_f ReleaseCause_print; +asn_constr_check_f ReleaseCause_constraint; +ber_type_decoder_f ReleaseCause_decode_ber; +der_type_encoder_f ReleaseCause_encode_der; +xer_type_decoder_f ReleaseCause_decode_xer; +xer_type_encoder_f ReleaseCause_encode_xer; +per_type_decoder_f ReleaseCause_decode_uper; +per_type_encoder_f ReleaseCause_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReleaseCause_H_ */ +#include diff --git a/lte/rrc/asn/ReportConfigEUTRA.c b/lte/rrc/asn/ReportConfigEUTRA.c new file mode 100644 index 000000000..a20463d03 --- /dev/null +++ b/lte/rrc/asn/ReportConfigEUTRA.c @@ -0,0 +1,1998 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportConfigEUTRA.h" + +static int +memb_a3_Offset_constraint_9(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -30 && value <= 30)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_a6_Offset_r10_constraint_18(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -30 && value <= 30)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +purpose_24_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +purpose_24_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +purpose_24_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + purpose_24_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +purpose_24_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + purpose_24_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +purpose_24_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + purpose_24_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +purpose_24_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + purpose_24_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +purpose_24_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + purpose_24_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +purpose_24_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + purpose_24_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +purpose_24_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + purpose_24_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +purpose_24_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + purpose_24_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +triggerQuantity_27_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +triggerQuantity_27_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +triggerQuantity_27_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +triggerQuantity_27_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +triggerQuantity_27_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +triggerQuantity_27_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +triggerQuantity_27_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +triggerQuantity_27_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +triggerQuantity_27_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +triggerQuantity_27_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + triggerQuantity_27_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +reportQuantity_30_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +reportQuantity_30_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +reportQuantity_30_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + reportQuantity_30_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +reportQuantity_30_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +reportQuantity_30_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +reportQuantity_30_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +reportQuantity_30_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +reportQuantity_30_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +reportQuantity_30_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +reportQuantity_30_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + reportQuantity_30_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +reportAmount_35_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +reportAmount_35_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +reportAmount_35_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + reportAmount_35_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +reportAmount_35_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +reportAmount_35_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +reportAmount_35_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +reportAmount_35_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +reportAmount_35_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +reportAmount_35_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +reportAmount_35_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + reportAmount_35_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +si_RequestForHO_r9_44_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +si_RequestForHO_r9_44_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +si_RequestForHO_r9_44_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +si_RequestForHO_r9_44_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +si_RequestForHO_r9_44_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +si_RequestForHO_r9_44_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +si_RequestForHO_r9_44_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +si_RequestForHO_r9_44_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +si_RequestForHO_r9_44_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +si_RequestForHO_r9_44_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + si_RequestForHO_r9_44_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +ue_RxTxTimeDiffPeriodical_r9_46_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ue_RxTxTimeDiffPeriodical_r9_46_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ue_RxTxTimeDiffPeriodical_r9_46_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ue_RxTxTimeDiffPeriodical_r9_46_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ue_RxTxTimeDiffPeriodical_r9_46_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ue_RxTxTimeDiffPeriodical_r9_46_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ue_RxTxTimeDiffPeriodical_r9_46_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ue_RxTxTimeDiffPeriodical_r9_46_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ue_RxTxTimeDiffPeriodical_r9_46_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ue_RxTxTimeDiffPeriodical_r9_46_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +includeLocationInfo_r10_48_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +includeLocationInfo_r10_48_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +includeLocationInfo_r10_48_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +includeLocationInfo_r10_48_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +includeLocationInfo_r10_48_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +includeLocationInfo_r10_48_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +includeLocationInfo_r10_48_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +includeLocationInfo_r10_48_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +includeLocationInfo_r10_48_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +includeLocationInfo_r10_48_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + includeLocationInfo_r10_48_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +reportAddNeighMeas_r10_50_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +reportAddNeighMeas_r10_50_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +reportAddNeighMeas_r10_50_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +reportAddNeighMeas_r10_50_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +reportAddNeighMeas_r10_50_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +reportAddNeighMeas_r10_50_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +reportAddNeighMeas_r10_50_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +reportAddNeighMeas_r10_50_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +reportAddNeighMeas_r10_50_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + reportAddNeighMeas_r10_50_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_maxReportCells_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_a3_Offset_constr_10 = { + { APC_CONSTRAINED, 6, 6, -30, 30 } /* (-30..30) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_a6_Offset_r10_constr_19 = { + { APC_CONSTRAINED, 6, 6, -30, 30 } /* (-30..30) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_eventId_constr_4 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 4 } /* (0..4,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_purpose_constr_24 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_triggerType_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_triggerQuantity_constr_27 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_reportQuantity_constr_30 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_reportAmount_constr_35 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_si_RequestForHO_r9_constr_44 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ue_RxTxTimeDiffPeriodical_r9_constr_46 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_includeLocationInfo_r10_constr_48 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_reportAddNeighMeas_r10_constr_50 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_maxReportCells_constr_33 = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_eventA1_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA1, a1_Threshold), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "a1-Threshold" + }, +}; +static ber_tlv_tag_t asn_DEF_eventA1_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventA1_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* a1-Threshold at 3502 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventA1_specs_5 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA1), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA1, _asn_ctx), + asn_MAP_eventA1_tag2el_5, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventA1_5 = { + "eventA1", + "eventA1", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventA1_tags_5, + sizeof(asn_DEF_eventA1_tags_5) + /sizeof(asn_DEF_eventA1_tags_5[0]) - 1, /* 1 */ + asn_DEF_eventA1_tags_5, /* Same as above */ + sizeof(asn_DEF_eventA1_tags_5) + /sizeof(asn_DEF_eventA1_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventA1_5, + 1, /* Elements count */ + &asn_SPC_eventA1_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventA2_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA2, a2_Threshold), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "a2-Threshold" + }, +}; +static ber_tlv_tag_t asn_DEF_eventA2_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventA2_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* a2-Threshold at 3505 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventA2_specs_7 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA2), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA2, _asn_ctx), + asn_MAP_eventA2_tag2el_7, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventA2_7 = { + "eventA2", + "eventA2", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventA2_tags_7, + sizeof(asn_DEF_eventA2_tags_7) + /sizeof(asn_DEF_eventA2_tags_7[0]) - 1, /* 1 */ + asn_DEF_eventA2_tags_7, /* Same as above */ + sizeof(asn_DEF_eventA2_tags_7) + /sizeof(asn_DEF_eventA2_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventA2_7, + 1, /* Elements count */ + &asn_SPC_eventA2_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventA3_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA3, a3_Offset), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_a3_Offset_constraint_9, + &asn_PER_memb_a3_Offset_constr_10, + 0, + "a3-Offset" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA3, reportOnLeave), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportOnLeave" + }, +}; +static ber_tlv_tag_t asn_DEF_eventA3_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventA3_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a3-Offset at 3507 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportOnLeave at 3508 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventA3_specs_9 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA3), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA3, _asn_ctx), + asn_MAP_eventA3_tag2el_9, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventA3_9 = { + "eventA3", + "eventA3", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventA3_tags_9, + sizeof(asn_DEF_eventA3_tags_9) + /sizeof(asn_DEF_eventA3_tags_9[0]) - 1, /* 1 */ + asn_DEF_eventA3_tags_9, /* Same as above */ + sizeof(asn_DEF_eventA3_tags_9) + /sizeof(asn_DEF_eventA3_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventA3_9, + 2, /* Elements count */ + &asn_SPC_eventA3_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventA4_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA4, a4_Threshold), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "a4-Threshold" + }, +}; +static ber_tlv_tag_t asn_DEF_eventA4_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventA4_tag2el_12[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* a4-Threshold at 3512 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventA4_specs_12 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA4), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA4, _asn_ctx), + asn_MAP_eventA4_tag2el_12, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventA4_12 = { + "eventA4", + "eventA4", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventA4_tags_12, + sizeof(asn_DEF_eventA4_tags_12) + /sizeof(asn_DEF_eventA4_tags_12[0]) - 1, /* 1 */ + asn_DEF_eventA4_tags_12, /* Same as above */ + sizeof(asn_DEF_eventA4_tags_12) + /sizeof(asn_DEF_eventA4_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventA4_12, + 1, /* Elements count */ + &asn_SPC_eventA4_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventA5_14[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA5, a5_Threshold1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "a5-Threshold1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA5, a5_Threshold2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "a5-Threshold2" + }, +}; +static ber_tlv_tag_t asn_DEF_eventA5_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventA5_tag2el_14[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a5-Threshold1 at 3514 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* a5-Threshold2 at 3516 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventA5_specs_14 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA5), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA5, _asn_ctx), + asn_MAP_eventA5_tag2el_14, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventA5_14 = { + "eventA5", + "eventA5", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventA5_tags_14, + sizeof(asn_DEF_eventA5_tags_14) + /sizeof(asn_DEF_eventA5_tags_14[0]) - 1, /* 1 */ + asn_DEF_eventA5_tags_14, /* Same as above */ + sizeof(asn_DEF_eventA5_tags_14) + /sizeof(asn_DEF_eventA5_tags_14[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventA5_14, + 2, /* Elements count */ + &asn_SPC_eventA5_specs_14 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventA6_r10_18[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA6_r10, a6_Offset_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_a6_Offset_r10_constraint_18, + &asn_PER_memb_a6_Offset_r10_constr_19, + 0, + "a6-Offset-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA6_r10, a6_ReportOnLeave_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "a6-ReportOnLeave-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_eventA6_r10_tags_18[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventA6_r10_tag2el_18[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* a6-Offset-r10 at 3519 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* a6-ReportOnLeave-r10 at 3520 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventA6_r10_specs_18 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA6_r10), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId__eventA6_r10, _asn_ctx), + asn_MAP_eventA6_r10_tag2el_18, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventA6_r10_18 = { + "eventA6-r10", + "eventA6-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventA6_r10_tags_18, + sizeof(asn_DEF_eventA6_r10_tags_18) + /sizeof(asn_DEF_eventA6_r10_tags_18[0]) - 1, /* 1 */ + asn_DEF_eventA6_r10_tags_18, /* Same as above */ + sizeof(asn_DEF_eventA6_r10_tags_18) + /sizeof(asn_DEF_eventA6_r10_tags_18[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventA6_r10_18, + 2, /* Elements count */ + &asn_SPC_eventA6_r10_specs_18 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventId_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, choice.eventA1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_eventA1_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventA1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, choice.eventA2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_eventA2_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventA2" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, choice.eventA3), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_eventA3_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventA3" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, choice.eventA4), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_eventA4_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventA4" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, choice.eventA5), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + 0, + &asn_DEF_eventA5_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventA5" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, choice.eventA6_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + 0, + &asn_DEF_eventA6_r10_18, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventA6-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_eventId_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventA1 at 3502 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* eventA2 at 3505 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* eventA3 at 3507 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* eventA4 at 3512 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* eventA5 at 3514 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* eventA6-r10 at 3519 */ +}; +static asn_CHOICE_specifics_t asn_SPC_eventId_specs_4 = { + sizeof(struct ReportConfigEUTRA__triggerType__event__eventId), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, _asn_ctx), + offsetof(struct ReportConfigEUTRA__triggerType__event__eventId, present), + sizeof(((struct ReportConfigEUTRA__triggerType__event__eventId *)0)->present), + asn_MAP_eventId_tag2el_4, + 6, /* Count of tags in the map */ + 0, + 5 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventId_4 = { + "eventId", + "eventId", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_eventId_constr_4, + asn_MBR_eventId_4, + 6, /* Elements count */ + &asn_SPC_eventId_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_event_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event, eventId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_eventId_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventId" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event, hysteresis), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Hysteresis, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "hysteresis" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__event, timeToTrigger), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TimeToTrigger, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "timeToTrigger" + }, +}; +static ber_tlv_tag_t asn_DEF_event_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_event_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventId at 3502 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hysteresis at 3523 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* timeToTrigger at 3525 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_event_specs_3 = { + sizeof(struct ReportConfigEUTRA__triggerType__event), + offsetof(struct ReportConfigEUTRA__triggerType__event, _asn_ctx), + asn_MAP_event_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_event_3 = { + "event", + "event", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_event_tags_3, + sizeof(asn_DEF_event_tags_3) + /sizeof(asn_DEF_event_tags_3[0]) - 1, /* 1 */ + asn_DEF_event_tags_3, /* Same as above */ + sizeof(asn_DEF_event_tags_3) + /sizeof(asn_DEF_event_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_event_3, + 3, /* Elements count */ + &asn_SPC_event_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_purpose_value2enum_24[] = { + { 0, 20, "reportStrongestCells" }, + { 1, 9, "reportCGI" } +}; +static unsigned int asn_MAP_purpose_enum2value_24[] = { + 1, /* reportCGI(1) */ + 0 /* reportStrongestCells(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_purpose_specs_24 = { + asn_MAP_purpose_value2enum_24, /* "tag" => N; sorted by tag */ + asn_MAP_purpose_enum2value_24, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_purpose_tags_24[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_purpose_24 = { + "purpose", + "purpose", + purpose_24_free, + purpose_24_print, + purpose_24_constraint, + purpose_24_decode_ber, + purpose_24_encode_der, + purpose_24_decode_xer, + purpose_24_encode_xer, + purpose_24_decode_uper, + purpose_24_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_purpose_tags_24, + sizeof(asn_DEF_purpose_tags_24) + /sizeof(asn_DEF_purpose_tags_24[0]) - 1, /* 1 */ + asn_DEF_purpose_tags_24, /* Same as above */ + sizeof(asn_DEF_purpose_tags_24) + /sizeof(asn_DEF_purpose_tags_24[0]), /* 2 */ + &asn_PER_type_purpose_constr_24, + 0, 0, /* Defined elsewhere */ + &asn_SPC_purpose_specs_24 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_periodical_23[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType__periodical, purpose), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_purpose_24, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "purpose" + }, +}; +static ber_tlv_tag_t asn_DEF_periodical_tags_23[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_periodical_tag2el_23[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* purpose at 3528 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_periodical_specs_23 = { + sizeof(struct ReportConfigEUTRA__triggerType__periodical), + offsetof(struct ReportConfigEUTRA__triggerType__periodical, _asn_ctx), + asn_MAP_periodical_tag2el_23, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_periodical_23 = { + "periodical", + "periodical", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_periodical_tags_23, + sizeof(asn_DEF_periodical_tags_23) + /sizeof(asn_DEF_periodical_tags_23[0]) - 1, /* 1 */ + asn_DEF_periodical_tags_23, /* Same as above */ + sizeof(asn_DEF_periodical_tags_23) + /sizeof(asn_DEF_periodical_tags_23[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_periodical_23, + 1, /* Elements count */ + &asn_SPC_periodical_specs_23 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_triggerType_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType, choice.event), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_event_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "event" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA__triggerType, choice.periodical), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_periodical_23, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "periodical" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_triggerType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* event at 3522 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* periodical at 3529 */ +}; +static asn_CHOICE_specifics_t asn_SPC_triggerType_specs_2 = { + sizeof(struct ReportConfigEUTRA__triggerType), + offsetof(struct ReportConfigEUTRA__triggerType, _asn_ctx), + offsetof(struct ReportConfigEUTRA__triggerType, present), + sizeof(((struct ReportConfigEUTRA__triggerType *)0)->present), + asn_MAP_triggerType_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_triggerType_2 = { + "triggerType", + "triggerType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_triggerType_constr_2, + asn_MBR_triggerType_2, + 2, /* Elements count */ + &asn_SPC_triggerType_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_triggerQuantity_value2enum_27[] = { + { 0, 4, "rsrp" }, + { 1, 4, "rsrq" } +}; +static unsigned int asn_MAP_triggerQuantity_enum2value_27[] = { + 0, /* rsrp(0) */ + 1 /* rsrq(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_triggerQuantity_specs_27 = { + asn_MAP_triggerQuantity_value2enum_27, /* "tag" => N; sorted by tag */ + asn_MAP_triggerQuantity_enum2value_27, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_triggerQuantity_tags_27[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_triggerQuantity_27 = { + "triggerQuantity", + "triggerQuantity", + triggerQuantity_27_free, + triggerQuantity_27_print, + triggerQuantity_27_constraint, + triggerQuantity_27_decode_ber, + triggerQuantity_27_encode_der, + triggerQuantity_27_decode_xer, + triggerQuantity_27_encode_xer, + triggerQuantity_27_decode_uper, + triggerQuantity_27_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_triggerQuantity_tags_27, + sizeof(asn_DEF_triggerQuantity_tags_27) + /sizeof(asn_DEF_triggerQuantity_tags_27[0]) - 1, /* 1 */ + asn_DEF_triggerQuantity_tags_27, /* Same as above */ + sizeof(asn_DEF_triggerQuantity_tags_27) + /sizeof(asn_DEF_triggerQuantity_tags_27[0]), /* 2 */ + &asn_PER_type_triggerQuantity_constr_27, + 0, 0, /* Defined elsewhere */ + &asn_SPC_triggerQuantity_specs_27 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_reportQuantity_value2enum_30[] = { + { 0, 21, "sameAsTriggerQuantity" }, + { 1, 4, "both" } +}; +static unsigned int asn_MAP_reportQuantity_enum2value_30[] = { + 1, /* both(1) */ + 0 /* sameAsTriggerQuantity(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_reportQuantity_specs_30 = { + asn_MAP_reportQuantity_value2enum_30, /* "tag" => N; sorted by tag */ + asn_MAP_reportQuantity_enum2value_30, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_reportQuantity_tags_30[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportQuantity_30 = { + "reportQuantity", + "reportQuantity", + reportQuantity_30_free, + reportQuantity_30_print, + reportQuantity_30_constraint, + reportQuantity_30_decode_ber, + reportQuantity_30_encode_der, + reportQuantity_30_decode_xer, + reportQuantity_30_encode_xer, + reportQuantity_30_decode_uper, + reportQuantity_30_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_reportQuantity_tags_30, + sizeof(asn_DEF_reportQuantity_tags_30) + /sizeof(asn_DEF_reportQuantity_tags_30[0]) - 1, /* 1 */ + asn_DEF_reportQuantity_tags_30, /* Same as above */ + sizeof(asn_DEF_reportQuantity_tags_30) + /sizeof(asn_DEF_reportQuantity_tags_30[0]), /* 2 */ + &asn_PER_type_reportQuantity_constr_30, + 0, 0, /* Defined elsewhere */ + &asn_SPC_reportQuantity_specs_30 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_reportAmount_value2enum_35[] = { + { 0, 2, "r1" }, + { 1, 2, "r2" }, + { 2, 2, "r4" }, + { 3, 2, "r8" }, + { 4, 3, "r16" }, + { 5, 3, "r32" }, + { 6, 3, "r64" }, + { 7, 8, "infinity" } +}; +static unsigned int asn_MAP_reportAmount_enum2value_35[] = { + 7, /* infinity(7) */ + 0, /* r1(0) */ + 4, /* r16(4) */ + 1, /* r2(1) */ + 5, /* r32(5) */ + 2, /* r4(2) */ + 6, /* r64(6) */ + 3 /* r8(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_reportAmount_specs_35 = { + asn_MAP_reportAmount_value2enum_35, /* "tag" => N; sorted by tag */ + asn_MAP_reportAmount_enum2value_35, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_reportAmount_tags_35[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportAmount_35 = { + "reportAmount", + "reportAmount", + reportAmount_35_free, + reportAmount_35_print, + reportAmount_35_constraint, + reportAmount_35_decode_ber, + reportAmount_35_encode_der, + reportAmount_35_decode_xer, + reportAmount_35_encode_xer, + reportAmount_35_decode_uper, + reportAmount_35_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_reportAmount_tags_35, + sizeof(asn_DEF_reportAmount_tags_35) + /sizeof(asn_DEF_reportAmount_tags_35[0]) - 1, /* 1 */ + asn_DEF_reportAmount_tags_35, /* Same as above */ + sizeof(asn_DEF_reportAmount_tags_35) + /sizeof(asn_DEF_reportAmount_tags_35[0]), /* 2 */ + &asn_PER_type_reportAmount_constr_35, + 0, 0, /* Defined elsewhere */ + &asn_SPC_reportAmount_specs_35 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_si_RequestForHO_r9_value2enum_44[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_si_RequestForHO_r9_enum2value_44[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_si_RequestForHO_r9_specs_44 = { + asn_MAP_si_RequestForHO_r9_value2enum_44, /* "tag" => N; sorted by tag */ + asn_MAP_si_RequestForHO_r9_enum2value_44, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_si_RequestForHO_r9_tags_44[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_si_RequestForHO_r9_44 = { + "si-RequestForHO-r9", + "si-RequestForHO-r9", + si_RequestForHO_r9_44_free, + si_RequestForHO_r9_44_print, + si_RequestForHO_r9_44_constraint, + si_RequestForHO_r9_44_decode_ber, + si_RequestForHO_r9_44_encode_der, + si_RequestForHO_r9_44_decode_xer, + si_RequestForHO_r9_44_encode_xer, + si_RequestForHO_r9_44_decode_uper, + si_RequestForHO_r9_44_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_si_RequestForHO_r9_tags_44, + sizeof(asn_DEF_si_RequestForHO_r9_tags_44) + /sizeof(asn_DEF_si_RequestForHO_r9_tags_44[0]) - 1, /* 1 */ + asn_DEF_si_RequestForHO_r9_tags_44, /* Same as above */ + sizeof(asn_DEF_si_RequestForHO_r9_tags_44) + /sizeof(asn_DEF_si_RequestForHO_r9_tags_44[0]), /* 2 */ + &asn_PER_type_si_RequestForHO_r9_constr_44, + 0, 0, /* Defined elsewhere */ + &asn_SPC_si_RequestForHO_r9_specs_44 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_ue_RxTxTimeDiffPeriodical_r9_value2enum_46[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_ue_RxTxTimeDiffPeriodical_r9_enum2value_46[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ue_RxTxTimeDiffPeriodical_r9_specs_46 = { + asn_MAP_ue_RxTxTimeDiffPeriodical_r9_value2enum_46, /* "tag" => N; sorted by tag */ + asn_MAP_ue_RxTxTimeDiffPeriodical_r9_enum2value_46, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46[] = { + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ue_RxTxTimeDiffPeriodical_r9_46 = { + "ue-RxTxTimeDiffPeriodical-r9", + "ue-RxTxTimeDiffPeriodical-r9", + ue_RxTxTimeDiffPeriodical_r9_46_free, + ue_RxTxTimeDiffPeriodical_r9_46_print, + ue_RxTxTimeDiffPeriodical_r9_46_constraint, + ue_RxTxTimeDiffPeriodical_r9_46_decode_ber, + ue_RxTxTimeDiffPeriodical_r9_46_encode_der, + ue_RxTxTimeDiffPeriodical_r9_46_decode_xer, + ue_RxTxTimeDiffPeriodical_r9_46_encode_xer, + ue_RxTxTimeDiffPeriodical_r9_46_decode_uper, + ue_RxTxTimeDiffPeriodical_r9_46_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46, + sizeof(asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46) + /sizeof(asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46[0]) - 1, /* 1 */ + asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46, /* Same as above */ + sizeof(asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46) + /sizeof(asn_DEF_ue_RxTxTimeDiffPeriodical_r9_tags_46[0]), /* 2 */ + &asn_PER_type_ue_RxTxTimeDiffPeriodical_r9_constr_46, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ue_RxTxTimeDiffPeriodical_r9_specs_46 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_includeLocationInfo_r10_value2enum_48[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_includeLocationInfo_r10_enum2value_48[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_includeLocationInfo_r10_specs_48 = { + asn_MAP_includeLocationInfo_r10_value2enum_48, /* "tag" => N; sorted by tag */ + asn_MAP_includeLocationInfo_r10_enum2value_48, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_includeLocationInfo_r10_tags_48[] = { + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_includeLocationInfo_r10_48 = { + "includeLocationInfo-r10", + "includeLocationInfo-r10", + includeLocationInfo_r10_48_free, + includeLocationInfo_r10_48_print, + includeLocationInfo_r10_48_constraint, + includeLocationInfo_r10_48_decode_ber, + includeLocationInfo_r10_48_encode_der, + includeLocationInfo_r10_48_decode_xer, + includeLocationInfo_r10_48_encode_xer, + includeLocationInfo_r10_48_decode_uper, + includeLocationInfo_r10_48_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_includeLocationInfo_r10_tags_48, + sizeof(asn_DEF_includeLocationInfo_r10_tags_48) + /sizeof(asn_DEF_includeLocationInfo_r10_tags_48[0]) - 1, /* 1 */ + asn_DEF_includeLocationInfo_r10_tags_48, /* Same as above */ + sizeof(asn_DEF_includeLocationInfo_r10_tags_48) + /sizeof(asn_DEF_includeLocationInfo_r10_tags_48[0]), /* 2 */ + &asn_PER_type_includeLocationInfo_r10_constr_48, + 0, 0, /* Defined elsewhere */ + &asn_SPC_includeLocationInfo_r10_specs_48 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_reportAddNeighMeas_r10_value2enum_50[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_reportAddNeighMeas_r10_enum2value_50[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_reportAddNeighMeas_r10_specs_50 = { + asn_MAP_reportAddNeighMeas_r10_value2enum_50, /* "tag" => N; sorted by tag */ + asn_MAP_reportAddNeighMeas_r10_enum2value_50, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_reportAddNeighMeas_r10_tags_50[] = { + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportAddNeighMeas_r10_50 = { + "reportAddNeighMeas-r10", + "reportAddNeighMeas-r10", + reportAddNeighMeas_r10_50_free, + reportAddNeighMeas_r10_50_print, + reportAddNeighMeas_r10_50_constraint, + reportAddNeighMeas_r10_50_decode_ber, + reportAddNeighMeas_r10_50_encode_der, + reportAddNeighMeas_r10_50_decode_xer, + reportAddNeighMeas_r10_50_encode_xer, + reportAddNeighMeas_r10_50_decode_uper, + reportAddNeighMeas_r10_50_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_reportAddNeighMeas_r10_tags_50, + sizeof(asn_DEF_reportAddNeighMeas_r10_tags_50) + /sizeof(asn_DEF_reportAddNeighMeas_r10_tags_50[0]) - 1, /* 1 */ + asn_DEF_reportAddNeighMeas_r10_tags_50, /* Same as above */ + sizeof(asn_DEF_reportAddNeighMeas_r10_tags_50) + /sizeof(asn_DEF_reportAddNeighMeas_r10_tags_50[0]), /* 2 */ + &asn_PER_type_reportAddNeighMeas_r10_constr_50, + 0, 0, /* Defined elsewhere */ + &asn_SPC_reportAddNeighMeas_r10_specs_50 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ReportConfigEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA, triggerType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_triggerType_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "triggerType" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA, triggerQuantity), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_triggerQuantity_27, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "triggerQuantity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA, reportQuantity), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_reportQuantity_30, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportQuantity" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA, maxReportCells), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_maxReportCells_constraint_1, + &asn_PER_memb_maxReportCells_constr_33, + 0, + "maxReportCells" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA, reportInterval), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportInterval, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportInterval" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigEUTRA, reportAmount), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_reportAmount_35, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportAmount" + }, + { ATF_POINTER, 4, offsetof(struct ReportConfigEUTRA, si_RequestForHO_r9), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_si_RequestForHO_r9_44, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "si-RequestForHO-r9" + }, + { ATF_POINTER, 3, offsetof(struct ReportConfigEUTRA, ue_RxTxTimeDiffPeriodical_r9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ue_RxTxTimeDiffPeriodical_r9_46, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-RxTxTimeDiffPeriodical-r9" + }, + { ATF_POINTER, 2, offsetof(struct ReportConfigEUTRA, includeLocationInfo_r10), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_includeLocationInfo_r10_48, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "includeLocationInfo-r10" + }, + { ATF_POINTER, 1, offsetof(struct ReportConfigEUTRA, reportAddNeighMeas_r10), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_reportAddNeighMeas_r10_50, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportAddNeighMeas-r10" + }, +}; +static int asn_MAP_ReportConfigEUTRA_oms_1[] = { 6, 7, 8, 9 }; +static ber_tlv_tag_t asn_DEF_ReportConfigEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ReportConfigEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* triggerType at 3525 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* triggerQuantity at 3531 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reportQuantity at 3532 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* maxReportCells at 3533 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* reportInterval at 3534 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* reportAmount at 3535 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* si-RequestForHO-r9 at 3536 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ue-RxTxTimeDiffPeriodical-r9 at 3537 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* includeLocationInfo-r10 at 3538 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* reportAddNeighMeas-r10 at 3539 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ReportConfigEUTRA_specs_1 = { + sizeof(struct ReportConfigEUTRA), + offsetof(struct ReportConfigEUTRA, _asn_ctx), + asn_MAP_ReportConfigEUTRA_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_ReportConfigEUTRA_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ReportConfigEUTRA = { + "ReportConfigEUTRA", + "ReportConfigEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportConfigEUTRA_tags_1, + sizeof(asn_DEF_ReportConfigEUTRA_tags_1) + /sizeof(asn_DEF_ReportConfigEUTRA_tags_1[0]), /* 1 */ + asn_DEF_ReportConfigEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportConfigEUTRA_tags_1) + /sizeof(asn_DEF_ReportConfigEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ReportConfigEUTRA_1, + 10, /* Elements count */ + &asn_SPC_ReportConfigEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportConfigEUTRA.h b/lte/rrc/asn/ReportConfigEUTRA.h new file mode 100644 index 000000000..ce4c58ec3 --- /dev/null +++ b/lte/rrc/asn/ReportConfigEUTRA.h @@ -0,0 +1,184 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportConfigEUTRA_H_ +#define _ReportConfigEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "ReportInterval.h" +#include "Hysteresis.h" +#include "TimeToTrigger.h" +#include "ThresholdEUTRA.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportConfigEUTRA__triggerType_PR { + ReportConfigEUTRA__triggerType_PR_NOTHING, /* No components present */ + ReportConfigEUTRA__triggerType_PR_event, + ReportConfigEUTRA__triggerType_PR_periodical +} ReportConfigEUTRA__triggerType_PR; +typedef enum ReportConfigEUTRA__triggerType__event__eventId_PR { + ReportConfigEUTRA__triggerType__event__eventId_PR_NOTHING, /* No components present */ + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA1, + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA2, + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA3, + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA4, + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA5, + /* Extensions may appear below */ + ReportConfigEUTRA__triggerType__event__eventId_PR_eventA6_r10 +} ReportConfigEUTRA__triggerType__event__eventId_PR; +typedef enum ReportConfigEUTRA__triggerType__periodical__purpose { + ReportConfigEUTRA__triggerType__periodical__purpose_reportStrongestCells = 0, + ReportConfigEUTRA__triggerType__periodical__purpose_reportCGI = 1 +} e_ReportConfigEUTRA__triggerType__periodical__purpose; +typedef enum ReportConfigEUTRA__triggerQuantity { + ReportConfigEUTRA__triggerQuantity_rsrp = 0, + ReportConfigEUTRA__triggerQuantity_rsrq = 1 +} e_ReportConfigEUTRA__triggerQuantity; +typedef enum ReportConfigEUTRA__reportQuantity { + ReportConfigEUTRA__reportQuantity_sameAsTriggerQuantity = 0, + ReportConfigEUTRA__reportQuantity_both = 1 +} e_ReportConfigEUTRA__reportQuantity; +typedef enum ReportConfigEUTRA__reportAmount { + ReportConfigEUTRA__reportAmount_r1 = 0, + ReportConfigEUTRA__reportAmount_r2 = 1, + ReportConfigEUTRA__reportAmount_r4 = 2, + ReportConfigEUTRA__reportAmount_r8 = 3, + ReportConfigEUTRA__reportAmount_r16 = 4, + ReportConfigEUTRA__reportAmount_r32 = 5, + ReportConfigEUTRA__reportAmount_r64 = 6, + ReportConfigEUTRA__reportAmount_infinity = 7 +} e_ReportConfigEUTRA__reportAmount; +typedef enum ReportConfigEUTRA__si_RequestForHO_r9 { + ReportConfigEUTRA__si_RequestForHO_r9_setup = 0 +} e_ReportConfigEUTRA__si_RequestForHO_r9; +typedef enum ReportConfigEUTRA__ue_RxTxTimeDiffPeriodical_r9 { + ReportConfigEUTRA__ue_RxTxTimeDiffPeriodical_r9_setup = 0 +} e_ReportConfigEUTRA__ue_RxTxTimeDiffPeriodical_r9; +typedef enum ReportConfigEUTRA__includeLocationInfo_r10 { + ReportConfigEUTRA__includeLocationInfo_r10_true = 0 +} e_ReportConfigEUTRA__includeLocationInfo_r10; +typedef enum ReportConfigEUTRA__reportAddNeighMeas_r10 { + ReportConfigEUTRA__reportAddNeighMeas_r10_setup = 0 +} e_ReportConfigEUTRA__reportAddNeighMeas_r10; + +/* ReportConfigEUTRA */ +typedef struct ReportConfigEUTRA { + struct ReportConfigEUTRA__triggerType { + ReportConfigEUTRA__triggerType_PR present; + union ReportConfigEUTRA__triggerType_u { + struct ReportConfigEUTRA__triggerType__event { + struct ReportConfigEUTRA__triggerType__event__eventId { + ReportConfigEUTRA__triggerType__event__eventId_PR present; + union ReportConfigEUTRA__triggerType__event__eventId_u { + struct ReportConfigEUTRA__triggerType__event__eventId__eventA1 { + ThresholdEUTRA_t a1_Threshold; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventA1; + struct ReportConfigEUTRA__triggerType__event__eventId__eventA2 { + ThresholdEUTRA_t a2_Threshold; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventA2; + struct ReportConfigEUTRA__triggerType__event__eventId__eventA3 { + long a3_Offset; + BOOLEAN_t reportOnLeave; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventA3; + struct ReportConfigEUTRA__triggerType__event__eventId__eventA4 { + ThresholdEUTRA_t a4_Threshold; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventA4; + struct ReportConfigEUTRA__triggerType__event__eventId__eventA5 { + ThresholdEUTRA_t a5_Threshold1; + ThresholdEUTRA_t a5_Threshold2; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventA5; + /* + * This type is extensible, + * possible extensions are below. + */ + struct ReportConfigEUTRA__triggerType__event__eventId__eventA6_r10 { + long a6_Offset_r10; + BOOLEAN_t a6_ReportOnLeave_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventA6_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventId; + Hysteresis_t hysteresis; + TimeToTrigger_t timeToTrigger; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } event; + struct ReportConfigEUTRA__triggerType__periodical { + long purpose; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } periodical; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } triggerType; + long triggerQuantity; + long reportQuantity; + long maxReportCells; + ReportInterval_t reportInterval; + long reportAmount; + long *si_RequestForHO_r9 /* OPTIONAL */; + long *ue_RxTxTimeDiffPeriodical_r9 /* OPTIONAL */; + long *includeLocationInfo_r10 /* OPTIONAL */; + long *reportAddNeighMeas_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReportConfigEUTRA_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_purpose_24; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_triggerQuantity_27; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_reportQuantity_30; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_reportAmount_35; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_si_RequestForHO_r9_44; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_ue_RxTxTimeDiffPeriodical_r9_46; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_includeLocationInfo_r10_48; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_reportAddNeighMeas_r10_50; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_ReportConfigEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportConfigEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/ReportConfigId.c b/lte/rrc/asn/ReportConfigId.c new file mode 100644 index 000000000..16e72bd88 --- /dev/null +++ b/lte/rrc/asn/ReportConfigId.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportConfigId.h" + +int +ReportConfigId_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ReportConfigId_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ReportConfigId_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ReportConfigId_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ReportConfigId_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ReportConfigId_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ReportConfigId_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ReportConfigId_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ReportConfigId_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ReportConfigId_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ReportConfigId_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ReportConfigId_constr_1 = { + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (1..32) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ReportConfigId_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportConfigId = { + "ReportConfigId", + "ReportConfigId", + ReportConfigId_free, + ReportConfigId_print, + ReportConfigId_constraint, + ReportConfigId_decode_ber, + ReportConfigId_encode_der, + ReportConfigId_decode_xer, + ReportConfigId_encode_xer, + ReportConfigId_decode_uper, + ReportConfigId_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportConfigId_tags_1, + sizeof(asn_DEF_ReportConfigId_tags_1) + /sizeof(asn_DEF_ReportConfigId_tags_1[0]), /* 1 */ + asn_DEF_ReportConfigId_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportConfigId_tags_1) + /sizeof(asn_DEF_ReportConfigId_tags_1[0]), /* 1 */ + &asn_PER_type_ReportConfigId_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ReportConfigId.h b/lte/rrc/asn/ReportConfigId.h new file mode 100644 index 000000000..4f1c7b9d1 --- /dev/null +++ b/lte/rrc/asn/ReportConfigId.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportConfigId_H_ +#define _ReportConfigId_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReportConfigId */ +typedef long ReportConfigId_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReportConfigId; +asn_struct_free_f ReportConfigId_free; +asn_struct_print_f ReportConfigId_print; +asn_constr_check_f ReportConfigId_constraint; +ber_type_decoder_f ReportConfigId_decode_ber; +der_type_encoder_f ReportConfigId_encode_der; +xer_type_decoder_f ReportConfigId_decode_xer; +xer_type_encoder_f ReportConfigId_encode_xer; +per_type_decoder_f ReportConfigId_decode_uper; +per_type_encoder_f ReportConfigId_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportConfigId_H_ */ +#include diff --git a/lte/rrc/asn/ReportConfigInterRAT.c b/lte/rrc/asn/ReportConfigInterRAT.c new file mode 100644 index 000000000..9ee27563e --- /dev/null +++ b/lte/rrc/asn/ReportConfigInterRAT.c @@ -0,0 +1,1222 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportConfigInterRAT.h" + +static int +purpose_20_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +purpose_20_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +purpose_20_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + purpose_20_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +purpose_20_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + purpose_20_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +purpose_20_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + purpose_20_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +purpose_20_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + purpose_20_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +purpose_20_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + purpose_20_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +purpose_20_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + purpose_20_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +purpose_20_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + purpose_20_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +purpose_20_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + purpose_20_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +reportAmount_26_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +reportAmount_26_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +reportAmount_26_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + reportAmount_26_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +reportAmount_26_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +reportAmount_26_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +reportAmount_26_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +reportAmount_26_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +reportAmount_26_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +reportAmount_26_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +reportAmount_26_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + reportAmount_26_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +si_RequestForHO_r9_35_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +si_RequestForHO_r9_35_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +si_RequestForHO_r9_35_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +si_RequestForHO_r9_35_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +si_RequestForHO_r9_35_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +si_RequestForHO_r9_35_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +si_RequestForHO_r9_35_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +si_RequestForHO_r9_35_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +si_RequestForHO_r9_35_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +si_RequestForHO_r9_35_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + si_RequestForHO_r9_35_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +reportQuantityUTRA_FDD_r10_37_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +reportQuantityUTRA_FDD_r10_37_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +reportQuantityUTRA_FDD_r10_37_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +reportQuantityUTRA_FDD_r10_37_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +reportQuantityUTRA_FDD_r10_37_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +reportQuantityUTRA_FDD_r10_37_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +reportQuantityUTRA_FDD_r10_37_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +reportQuantityUTRA_FDD_r10_37_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +reportQuantityUTRA_FDD_r10_37_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + reportQuantityUTRA_FDD_r10_37_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_maxReportCells_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_b1_Threshold_constr_6 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_b2_Threshold2_constr_12 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_eventId_constr_4 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 1, 1, 0, 1 } /* (0..1,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_purpose_constr_20 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_triggerType_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_reportAmount_constr_26 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_si_RequestForHO_r9_constr_35 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_reportQuantityUTRA_FDD_r10_constr_37 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_maxReportCells_constr_24 = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_b1_Threshold_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold, choice.b1_ThresholdUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b1-ThresholdUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold, choice.b1_ThresholdGERAN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ThresholdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b1-ThresholdGERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold, choice.b1_ThresholdCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ThresholdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b1-ThresholdCDMA2000" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_b1_Threshold_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* b1-ThresholdUTRA at 3557 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b1-ThresholdGERAN at 3558 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* b1-ThresholdCDMA2000 at 3560 */ +}; +static asn_CHOICE_specifics_t asn_SPC_b1_Threshold_specs_6 = { + sizeof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold, _asn_ctx), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold, present), + sizeof(((struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold *)0)->present), + asn_MAP_b1_Threshold_tag2el_6, + 3, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_b1_Threshold_6 = { + "b1-Threshold", + "b1-Threshold", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_b1_Threshold_constr_6, + asn_MBR_b1_Threshold_6, + 3, /* Elements count */ + &asn_SPC_b1_Threshold_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventB1_5[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1, b1_Threshold), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_b1_Threshold_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b1-Threshold" + }, +}; +static ber_tlv_tag_t asn_DEF_eventB1_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventB1_tag2el_5[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* b1-Threshold at 3557 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventB1_specs_5 = { + sizeof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB1, _asn_ctx), + asn_MAP_eventB1_tag2el_5, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventB1_5 = { + "eventB1", + "eventB1", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventB1_tags_5, + sizeof(asn_DEF_eventB1_tags_5) + /sizeof(asn_DEF_eventB1_tags_5[0]) - 1, /* 1 */ + asn_DEF_eventB1_tags_5, /* Same as above */ + sizeof(asn_DEF_eventB1_tags_5) + /sizeof(asn_DEF_eventB1_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventB1_5, + 1, /* Elements count */ + &asn_SPC_eventB1_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_b2_Threshold2_12[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2, choice.b2_Threshold2UTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b2-Threshold2UTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2, choice.b2_Threshold2GERAN), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ThresholdGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b2-Threshold2GERAN" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2, choice.b2_Threshold2CDMA2000), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ThresholdCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b2-Threshold2CDMA2000" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_b2_Threshold2_tag2el_12[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* b2-Threshold2UTRA at 3565 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* b2-Threshold2GERAN at 3566 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* b2-Threshold2CDMA2000 at 3568 */ +}; +static asn_CHOICE_specifics_t asn_SPC_b2_Threshold2_specs_12 = { + sizeof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2, _asn_ctx), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2, present), + sizeof(((struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2 *)0)->present), + asn_MAP_b2_Threshold2_tag2el_12, + 3, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_b2_Threshold2_12 = { + "b2-Threshold2", + "b2-Threshold2", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_b2_Threshold2_constr_12, + asn_MBR_b2_Threshold2_12, + 3, /* Elements count */ + &asn_SPC_b2_Threshold2_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventB2_10[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2, b2_Threshold1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_ThresholdEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b2-Threshold1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2, b2_Threshold2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_b2_Threshold2_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "b2-Threshold2" + }, +}; +static ber_tlv_tag_t asn_DEF_eventB2_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_eventB2_tag2el_10[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* b2-Threshold1 at 3563 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* b2-Threshold2 at 3565 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_eventB2_specs_10 = { + sizeof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId__eventB2, _asn_ctx), + asn_MAP_eventB2_tag2el_10, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventB2_10 = { + "eventB2", + "eventB2", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_eventB2_tags_10, + sizeof(asn_DEF_eventB2_tags_10) + /sizeof(asn_DEF_eventB2_tags_10[0]) - 1, /* 1 */ + asn_DEF_eventB2_tags_10, /* Same as above */ + sizeof(asn_DEF_eventB2_tags_10) + /sizeof(asn_DEF_eventB2_tags_10[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_eventB2_10, + 2, /* Elements count */ + &asn_SPC_eventB2_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_eventId_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId, choice.eventB1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_eventB1_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventB1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event__eventId, choice.eventB2), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_eventB2_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventB2" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_eventId_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventB1 at 3561 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* eventB2 at 3563 */ +}; +static asn_CHOICE_specifics_t asn_SPC_eventId_specs_4 = { + sizeof(struct ReportConfigInterRAT__triggerType__event__eventId), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId, _asn_ctx), + offsetof(struct ReportConfigInterRAT__triggerType__event__eventId, present), + sizeof(((struct ReportConfigInterRAT__triggerType__event__eventId *)0)->present), + asn_MAP_eventId_tag2el_4, + 2, /* Count of tags in the map */ + 0, + 2 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_eventId_4 = { + "eventId", + "eventId", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_eventId_constr_4, + asn_MBR_eventId_4, + 2, /* Elements count */ + &asn_SPC_eventId_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_event_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event, eventId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_eventId_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "eventId" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event, hysteresis), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Hysteresis, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "hysteresis" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__event, timeToTrigger), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TimeToTrigger, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "timeToTrigger" + }, +}; +static ber_tlv_tag_t asn_DEF_event_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_event_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* eventId at 3561 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* hysteresis at 3572 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* timeToTrigger at 3574 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_event_specs_3 = { + sizeof(struct ReportConfigInterRAT__triggerType__event), + offsetof(struct ReportConfigInterRAT__triggerType__event, _asn_ctx), + asn_MAP_event_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_event_3 = { + "event", + "event", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_event_tags_3, + sizeof(asn_DEF_event_tags_3) + /sizeof(asn_DEF_event_tags_3[0]) - 1, /* 1 */ + asn_DEF_event_tags_3, /* Same as above */ + sizeof(asn_DEF_event_tags_3) + /sizeof(asn_DEF_event_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_event_3, + 3, /* Elements count */ + &asn_SPC_event_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_purpose_value2enum_20[] = { + { 0, 20, "reportStrongestCells" }, + { 1, 26, "reportStrongestCellsForSON" }, + { 2, 9, "reportCGI" } +}; +static unsigned int asn_MAP_purpose_enum2value_20[] = { + 2, /* reportCGI(2) */ + 0, /* reportStrongestCells(0) */ + 1 /* reportStrongestCellsForSON(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_purpose_specs_20 = { + asn_MAP_purpose_value2enum_20, /* "tag" => N; sorted by tag */ + asn_MAP_purpose_enum2value_20, /* N => "tag"; sorted by N */ + 3, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_purpose_tags_20[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_purpose_20 = { + "purpose", + "purpose", + purpose_20_free, + purpose_20_print, + purpose_20_constraint, + purpose_20_decode_ber, + purpose_20_encode_der, + purpose_20_decode_xer, + purpose_20_encode_xer, + purpose_20_decode_uper, + purpose_20_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_purpose_tags_20, + sizeof(asn_DEF_purpose_tags_20) + /sizeof(asn_DEF_purpose_tags_20[0]) - 1, /* 1 */ + asn_DEF_purpose_tags_20, /* Same as above */ + sizeof(asn_DEF_purpose_tags_20) + /sizeof(asn_DEF_purpose_tags_20[0]), /* 2 */ + &asn_PER_type_purpose_constr_20, + 0, 0, /* Defined elsewhere */ + &asn_SPC_purpose_specs_20 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_periodical_19[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType__periodical, purpose), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_purpose_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "purpose" + }, +}; +static ber_tlv_tag_t asn_DEF_periodical_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_periodical_tag2el_19[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* purpose at 3577 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_periodical_specs_19 = { + sizeof(struct ReportConfigInterRAT__triggerType__periodical), + offsetof(struct ReportConfigInterRAT__triggerType__periodical, _asn_ctx), + asn_MAP_periodical_tag2el_19, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_periodical_19 = { + "periodical", + "periodical", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_periodical_tags_19, + sizeof(asn_DEF_periodical_tags_19) + /sizeof(asn_DEF_periodical_tags_19[0]) - 1, /* 1 */ + asn_DEF_periodical_tags_19, /* Same as above */ + sizeof(asn_DEF_periodical_tags_19) + /sizeof(asn_DEF_periodical_tags_19[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_periodical_19, + 1, /* Elements count */ + &asn_SPC_periodical_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_triggerType_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType, choice.event), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_event_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "event" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT__triggerType, choice.periodical), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_periodical_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "periodical" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_triggerType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* event at 3571 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* periodical at 3580 */ +}; +static asn_CHOICE_specifics_t asn_SPC_triggerType_specs_2 = { + sizeof(struct ReportConfigInterRAT__triggerType), + offsetof(struct ReportConfigInterRAT__triggerType, _asn_ctx), + offsetof(struct ReportConfigInterRAT__triggerType, present), + sizeof(((struct ReportConfigInterRAT__triggerType *)0)->present), + asn_MAP_triggerType_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_triggerType_2 = { + "triggerType", + "triggerType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_triggerType_constr_2, + asn_MBR_triggerType_2, + 2, /* Elements count */ + &asn_SPC_triggerType_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_reportAmount_value2enum_26[] = { + { 0, 2, "r1" }, + { 1, 2, "r2" }, + { 2, 2, "r4" }, + { 3, 2, "r8" }, + { 4, 3, "r16" }, + { 5, 3, "r32" }, + { 6, 3, "r64" }, + { 7, 8, "infinity" } +}; +static unsigned int asn_MAP_reportAmount_enum2value_26[] = { + 7, /* infinity(7) */ + 0, /* r1(0) */ + 4, /* r16(4) */ + 1, /* r2(1) */ + 5, /* r32(5) */ + 2, /* r4(2) */ + 6, /* r64(6) */ + 3 /* r8(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_reportAmount_specs_26 = { + asn_MAP_reportAmount_value2enum_26, /* "tag" => N; sorted by tag */ + asn_MAP_reportAmount_enum2value_26, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_reportAmount_tags_26[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportAmount_26 = { + "reportAmount", + "reportAmount", + reportAmount_26_free, + reportAmount_26_print, + reportAmount_26_constraint, + reportAmount_26_decode_ber, + reportAmount_26_encode_der, + reportAmount_26_decode_xer, + reportAmount_26_encode_xer, + reportAmount_26_decode_uper, + reportAmount_26_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_reportAmount_tags_26, + sizeof(asn_DEF_reportAmount_tags_26) + /sizeof(asn_DEF_reportAmount_tags_26[0]) - 1, /* 1 */ + asn_DEF_reportAmount_tags_26, /* Same as above */ + sizeof(asn_DEF_reportAmount_tags_26) + /sizeof(asn_DEF_reportAmount_tags_26[0]), /* 2 */ + &asn_PER_type_reportAmount_constr_26, + 0, 0, /* Defined elsewhere */ + &asn_SPC_reportAmount_specs_26 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_si_RequestForHO_r9_value2enum_35[] = { + { 0, 5, "setup" } +}; +static unsigned int asn_MAP_si_RequestForHO_r9_enum2value_35[] = { + 0 /* setup(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_si_RequestForHO_r9_specs_35 = { + asn_MAP_si_RequestForHO_r9_value2enum_35, /* "tag" => N; sorted by tag */ + asn_MAP_si_RequestForHO_r9_enum2value_35, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_si_RequestForHO_r9_tags_35[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_si_RequestForHO_r9_35 = { + "si-RequestForHO-r9", + "si-RequestForHO-r9", + si_RequestForHO_r9_35_free, + si_RequestForHO_r9_35_print, + si_RequestForHO_r9_35_constraint, + si_RequestForHO_r9_35_decode_ber, + si_RequestForHO_r9_35_encode_der, + si_RequestForHO_r9_35_decode_xer, + si_RequestForHO_r9_35_encode_xer, + si_RequestForHO_r9_35_decode_uper, + si_RequestForHO_r9_35_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_si_RequestForHO_r9_tags_35, + sizeof(asn_DEF_si_RequestForHO_r9_tags_35) + /sizeof(asn_DEF_si_RequestForHO_r9_tags_35[0]) - 1, /* 1 */ + asn_DEF_si_RequestForHO_r9_tags_35, /* Same as above */ + sizeof(asn_DEF_si_RequestForHO_r9_tags_35) + /sizeof(asn_DEF_si_RequestForHO_r9_tags_35[0]), /* 2 */ + &asn_PER_type_si_RequestForHO_r9_constr_35, + 0, 0, /* Defined elsewhere */ + &asn_SPC_si_RequestForHO_r9_specs_35 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_reportQuantityUTRA_FDD_r10_value2enum_37[] = { + { 0, 4, "both" } +}; +static unsigned int asn_MAP_reportQuantityUTRA_FDD_r10_enum2value_37[] = { + 0 /* both(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_reportQuantityUTRA_FDD_r10_specs_37 = { + asn_MAP_reportQuantityUTRA_FDD_r10_value2enum_37, /* "tag" => N; sorted by tag */ + asn_MAP_reportQuantityUTRA_FDD_r10_enum2value_37, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_reportQuantityUTRA_FDD_r10_tags_37[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportQuantityUTRA_FDD_r10_37 = { + "reportQuantityUTRA-FDD-r10", + "reportQuantityUTRA-FDD-r10", + reportQuantityUTRA_FDD_r10_37_free, + reportQuantityUTRA_FDD_r10_37_print, + reportQuantityUTRA_FDD_r10_37_constraint, + reportQuantityUTRA_FDD_r10_37_decode_ber, + reportQuantityUTRA_FDD_r10_37_encode_der, + reportQuantityUTRA_FDD_r10_37_decode_xer, + reportQuantityUTRA_FDD_r10_37_encode_xer, + reportQuantityUTRA_FDD_r10_37_decode_uper, + reportQuantityUTRA_FDD_r10_37_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_reportQuantityUTRA_FDD_r10_tags_37, + sizeof(asn_DEF_reportQuantityUTRA_FDD_r10_tags_37) + /sizeof(asn_DEF_reportQuantityUTRA_FDD_r10_tags_37[0]) - 1, /* 1 */ + asn_DEF_reportQuantityUTRA_FDD_r10_tags_37, /* Same as above */ + sizeof(asn_DEF_reportQuantityUTRA_FDD_r10_tags_37) + /sizeof(asn_DEF_reportQuantityUTRA_FDD_r10_tags_37[0]), /* 2 */ + &asn_PER_type_reportQuantityUTRA_FDD_r10_constr_37, + 0, 0, /* Defined elsewhere */ + &asn_SPC_reportQuantityUTRA_FDD_r10_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ReportConfigInterRAT_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT, triggerType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_triggerType_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "triggerType" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT, maxReportCells), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_maxReportCells_constraint_1, + &asn_PER_memb_maxReportCells_constr_24, + 0, + "maxReportCells" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT, reportInterval), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportInterval, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportInterval" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigInterRAT, reportAmount), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_reportAmount_26, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportAmount" + }, + { ATF_POINTER, 2, offsetof(struct ReportConfigInterRAT, si_RequestForHO_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_si_RequestForHO_r9_35, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "si-RequestForHO-r9" + }, + { ATF_POINTER, 1, offsetof(struct ReportConfigInterRAT, reportQuantityUTRA_FDD_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_reportQuantityUTRA_FDD_r10_37, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportQuantityUTRA-FDD-r10" + }, +}; +static int asn_MAP_ReportConfigInterRAT_oms_1[] = { 4, 5 }; +static ber_tlv_tag_t asn_DEF_ReportConfigInterRAT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ReportConfigInterRAT_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* triggerType at 3574 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* maxReportCells at 3582 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reportInterval at 3583 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* reportAmount at 3584 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* si-RequestForHO-r9 at 3585 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* reportQuantityUTRA-FDD-r10 at 3586 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ReportConfigInterRAT_specs_1 = { + sizeof(struct ReportConfigInterRAT), + offsetof(struct ReportConfigInterRAT, _asn_ctx), + asn_MAP_ReportConfigInterRAT_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_ReportConfigInterRAT_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ReportConfigInterRAT = { + "ReportConfigInterRAT", + "ReportConfigInterRAT", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportConfigInterRAT_tags_1, + sizeof(asn_DEF_ReportConfigInterRAT_tags_1) + /sizeof(asn_DEF_ReportConfigInterRAT_tags_1[0]), /* 1 */ + asn_DEF_ReportConfigInterRAT_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportConfigInterRAT_tags_1) + /sizeof(asn_DEF_ReportConfigInterRAT_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ReportConfigInterRAT_1, + 6, /* Elements count */ + &asn_SPC_ReportConfigInterRAT_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportConfigInterRAT.h b/lte/rrc/asn/ReportConfigInterRAT.h new file mode 100644 index 000000000..77d37a477 --- /dev/null +++ b/lte/rrc/asn/ReportConfigInterRAT.h @@ -0,0 +1,168 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportConfigInterRAT_H_ +#define _ReportConfigInterRAT_H_ + + +#include + +/* Including external dependencies */ +#include +#include "ReportInterval.h" +#include +#include "Hysteresis.h" +#include "TimeToTrigger.h" +#include "ThresholdUTRA.h" +#include "ThresholdGERAN.h" +#include "ThresholdCDMA2000.h" +#include +#include +#include "ThresholdEUTRA.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportConfigInterRAT__triggerType_PR { + ReportConfigInterRAT__triggerType_PR_NOTHING, /* No components present */ + ReportConfigInterRAT__triggerType_PR_event, + ReportConfigInterRAT__triggerType_PR_periodical +} ReportConfigInterRAT__triggerType_PR; +typedef enum ReportConfigInterRAT__triggerType__event__eventId_PR { + ReportConfigInterRAT__triggerType__event__eventId_PR_NOTHING, /* No components present */ + ReportConfigInterRAT__triggerType__event__eventId_PR_eventB1, + ReportConfigInterRAT__triggerType__event__eventId_PR_eventB2, + /* Extensions may appear below */ + +} ReportConfigInterRAT__triggerType__event__eventId_PR; +typedef enum ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR { + ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR_NOTHING, /* No components present */ + ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR_b1_ThresholdUTRA, + ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR_b1_ThresholdGERAN, + ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR_b1_ThresholdCDMA2000 +} ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR; +typedef enum ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR { + ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR_NOTHING, /* No components present */ + ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR_b2_Threshold2UTRA, + ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR_b2_Threshold2GERAN, + ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR_b2_Threshold2CDMA2000 +} ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR; +typedef enum ReportConfigInterRAT__triggerType__periodical__purpose { + ReportConfigInterRAT__triggerType__periodical__purpose_reportStrongestCells = 0, + ReportConfigInterRAT__triggerType__periodical__purpose_reportStrongestCellsForSON = 1, + ReportConfigInterRAT__triggerType__periodical__purpose_reportCGI = 2 +} e_ReportConfigInterRAT__triggerType__periodical__purpose; +typedef enum ReportConfigInterRAT__reportAmount { + ReportConfigInterRAT__reportAmount_r1 = 0, + ReportConfigInterRAT__reportAmount_r2 = 1, + ReportConfigInterRAT__reportAmount_r4 = 2, + ReportConfigInterRAT__reportAmount_r8 = 3, + ReportConfigInterRAT__reportAmount_r16 = 4, + ReportConfigInterRAT__reportAmount_r32 = 5, + ReportConfigInterRAT__reportAmount_r64 = 6, + ReportConfigInterRAT__reportAmount_infinity = 7 +} e_ReportConfigInterRAT__reportAmount; +typedef enum ReportConfigInterRAT__si_RequestForHO_r9 { + ReportConfigInterRAT__si_RequestForHO_r9_setup = 0 +} e_ReportConfigInterRAT__si_RequestForHO_r9; +typedef enum ReportConfigInterRAT__reportQuantityUTRA_FDD_r10 { + ReportConfigInterRAT__reportQuantityUTRA_FDD_r10_both = 0 +} e_ReportConfigInterRAT__reportQuantityUTRA_FDD_r10; + +/* ReportConfigInterRAT */ +typedef struct ReportConfigInterRAT { + struct ReportConfigInterRAT__triggerType { + ReportConfigInterRAT__triggerType_PR present; + union ReportConfigInterRAT__triggerType_u { + struct ReportConfigInterRAT__triggerType__event { + struct ReportConfigInterRAT__triggerType__event__eventId { + ReportConfigInterRAT__triggerType__event__eventId_PR present; + union ReportConfigInterRAT__triggerType__event__eventId_u { + struct ReportConfigInterRAT__triggerType__event__eventId__eventB1 { + struct ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold { + ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_PR present; + union ReportConfigInterRAT__triggerType__event__eventId__eventB1__b1_Threshold_u { + ThresholdUTRA_t b1_ThresholdUTRA; + ThresholdGERAN_t b1_ThresholdGERAN; + ThresholdCDMA2000_t b1_ThresholdCDMA2000; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } b1_Threshold; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventB1; + struct ReportConfigInterRAT__triggerType__event__eventId__eventB2 { + ThresholdEUTRA_t b2_Threshold1; + struct ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2 { + ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_PR present; + union ReportConfigInterRAT__triggerType__event__eventId__eventB2__b2_Threshold2_u { + ThresholdUTRA_t b2_Threshold2UTRA; + ThresholdGERAN_t b2_Threshold2GERAN; + ThresholdCDMA2000_t b2_Threshold2CDMA2000; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } b2_Threshold2; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventB2; + /* + * This type is extensible, + * possible extensions are below. + */ + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } eventId; + Hysteresis_t hysteresis; + TimeToTrigger_t timeToTrigger; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } event; + struct ReportConfigInterRAT__triggerType__periodical { + long purpose; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } periodical; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } triggerType; + long maxReportCells; + ReportInterval_t reportInterval; + long reportAmount; + long *si_RequestForHO_r9 /* OPTIONAL */; + long *reportQuantityUTRA_FDD_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReportConfigInterRAT_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_purpose_20; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_reportAmount_26; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_si_RequestForHO_r9_35; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_reportQuantityUTRA_FDD_r10_37; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_ReportConfigInterRAT; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportConfigInterRAT_H_ */ +#include diff --git a/lte/rrc/asn/ReportConfigToAddMod.c b/lte/rrc/asn/ReportConfigToAddMod.c new file mode 100644 index 000000000..4c1894307 --- /dev/null +++ b/lte/rrc/asn/ReportConfigToAddMod.c @@ -0,0 +1,133 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportConfigToAddMod.h" + +static asn_per_constraints_t asn_PER_type_reportConfig_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_reportConfig_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigToAddMod__reportConfig, choice.reportConfigEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigEUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigToAddMod__reportConfig, choice.reportConfigInterRAT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigInterRAT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigInterRAT" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_reportConfig_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reportConfigEUTRA at 3604 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportConfigInterRAT at 3606 */ +}; +static asn_CHOICE_specifics_t asn_SPC_reportConfig_specs_3 = { + sizeof(struct ReportConfigToAddMod__reportConfig), + offsetof(struct ReportConfigToAddMod__reportConfig, _asn_ctx), + offsetof(struct ReportConfigToAddMod__reportConfig, present), + sizeof(((struct ReportConfigToAddMod__reportConfig *)0)->present), + asn_MAP_reportConfig_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_reportConfig_3 = { + "reportConfig", + "reportConfig", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_reportConfig_constr_3, + asn_MBR_reportConfig_3, + 2, /* Elements count */ + &asn_SPC_reportConfig_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ReportConfigToAddMod_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigToAddMod, reportConfigId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigId" + }, + { ATF_NOFLAGS, 0, offsetof(struct ReportConfigToAddMod, reportConfig), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_reportConfig_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfig" + }, +}; +static ber_tlv_tag_t asn_DEF_ReportConfigToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ReportConfigToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* reportConfigId at 3602 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* reportConfig at 3604 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ReportConfigToAddMod_specs_1 = { + sizeof(struct ReportConfigToAddMod), + offsetof(struct ReportConfigToAddMod, _asn_ctx), + asn_MAP_ReportConfigToAddMod_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ReportConfigToAddMod = { + "ReportConfigToAddMod", + "ReportConfigToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportConfigToAddMod_tags_1, + sizeof(asn_DEF_ReportConfigToAddMod_tags_1) + /sizeof(asn_DEF_ReportConfigToAddMod_tags_1[0]), /* 1 */ + asn_DEF_ReportConfigToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportConfigToAddMod_tags_1) + /sizeof(asn_DEF_ReportConfigToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ReportConfigToAddMod_1, + 2, /* Elements count */ + &asn_SPC_ReportConfigToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportConfigToAddMod.h b/lte/rrc/asn/ReportConfigToAddMod.h new file mode 100644 index 000000000..3c78d3188 --- /dev/null +++ b/lte/rrc/asn/ReportConfigToAddMod.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportConfigToAddMod_H_ +#define _ReportConfigToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include "ReportConfigId.h" +#include "ReportConfigEUTRA.h" +#include "ReportConfigInterRAT.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportConfigToAddMod__reportConfig_PR { + ReportConfigToAddMod__reportConfig_PR_NOTHING, /* No components present */ + ReportConfigToAddMod__reportConfig_PR_reportConfigEUTRA, + ReportConfigToAddMod__reportConfig_PR_reportConfigInterRAT +} ReportConfigToAddMod__reportConfig_PR; + +/* ReportConfigToAddMod */ +typedef struct ReportConfigToAddMod { + ReportConfigId_t reportConfigId; + struct ReportConfigToAddMod__reportConfig { + ReportConfigToAddMod__reportConfig_PR present; + union ReportConfigToAddMod__reportConfig_u { + ReportConfigEUTRA_t reportConfigEUTRA; + ReportConfigInterRAT_t reportConfigInterRAT; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } reportConfig; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReportConfigToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReportConfigToAddMod; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportConfigToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/ReportConfigToAddModList.c b/lte/rrc/asn/ReportConfigToAddModList.c new file mode 100644 index 000000000..c8c271bee --- /dev/null +++ b/lte/rrc/asn/ReportConfigToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportConfigToAddModList.h" + +static asn_per_constraints_t asn_PER_type_ReportConfigToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ReportConfigToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_ReportConfigToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_ReportConfigToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ReportConfigToAddModList_specs_1 = { + sizeof(struct ReportConfigToAddModList), + offsetof(struct ReportConfigToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ReportConfigToAddModList = { + "ReportConfigToAddModList", + "ReportConfigToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportConfigToAddModList_tags_1, + sizeof(asn_DEF_ReportConfigToAddModList_tags_1) + /sizeof(asn_DEF_ReportConfigToAddModList_tags_1[0]), /* 1 */ + asn_DEF_ReportConfigToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportConfigToAddModList_tags_1) + /sizeof(asn_DEF_ReportConfigToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_ReportConfigToAddModList_constr_1, + asn_MBR_ReportConfigToAddModList_1, + 1, /* Single element */ + &asn_SPC_ReportConfigToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportConfigToAddModList.h b/lte/rrc/asn/ReportConfigToAddModList.h new file mode 100644 index 000000000..275748d2f --- /dev/null +++ b/lte/rrc/asn/ReportConfigToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportConfigToAddModList_H_ +#define _ReportConfigToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ReportConfigToAddMod; + +/* ReportConfigToAddModList */ +typedef struct ReportConfigToAddModList { + A_SEQUENCE_OF(struct ReportConfigToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReportConfigToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReportConfigToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ReportConfigToAddMod.h" + +#endif /* _ReportConfigToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/ReportConfigToRemoveList.c b/lte/rrc/asn/ReportConfigToRemoveList.c new file mode 100644 index 000000000..c2bf63caa --- /dev/null +++ b/lte/rrc/asn/ReportConfigToRemoveList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportConfigToRemoveList.h" + +static asn_per_constraints_t asn_PER_type_ReportConfigToRemoveList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ReportConfigToRemoveList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_ReportConfigId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_ReportConfigToRemoveList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_ReportConfigToRemoveList_specs_1 = { + sizeof(struct ReportConfigToRemoveList), + offsetof(struct ReportConfigToRemoveList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_ReportConfigToRemoveList = { + "ReportConfigToRemoveList", + "ReportConfigToRemoveList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportConfigToRemoveList_tags_1, + sizeof(asn_DEF_ReportConfigToRemoveList_tags_1) + /sizeof(asn_DEF_ReportConfigToRemoveList_tags_1[0]), /* 1 */ + asn_DEF_ReportConfigToRemoveList_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportConfigToRemoveList_tags_1) + /sizeof(asn_DEF_ReportConfigToRemoveList_tags_1[0]), /* 1 */ + &asn_PER_type_ReportConfigToRemoveList_constr_1, + asn_MBR_ReportConfigToRemoveList_1, + 1, /* Single element */ + &asn_SPC_ReportConfigToRemoveList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportConfigToRemoveList.h b/lte/rrc/asn/ReportConfigToRemoveList.h new file mode 100644 index 000000000..c15be2f67 --- /dev/null +++ b/lte/rrc/asn/ReportConfigToRemoveList.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportConfigToRemoveList_H_ +#define _ReportConfigToRemoveList_H_ + + +#include + +/* Including external dependencies */ +#include "ReportConfigId.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReportConfigToRemoveList */ +typedef struct ReportConfigToRemoveList { + A_SEQUENCE_OF(ReportConfigId_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReportConfigToRemoveList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReportConfigToRemoveList; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportConfigToRemoveList_H_ */ +#include diff --git a/lte/rrc/asn/ReportInterval.c b/lte/rrc/asn/ReportInterval.c new file mode 100644 index 000000000..01f951f66 --- /dev/null +++ b/lte/rrc/asn/ReportInterval.c @@ -0,0 +1,174 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportInterval.h" + +int +ReportInterval_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ReportInterval_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +ReportInterval_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ReportInterval_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ReportInterval_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ReportInterval_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ReportInterval_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ReportInterval_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ReportInterval_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ReportInterval_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ReportInterval_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ReportInterval_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ReportInterval_constr_1 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_ReportInterval_value2enum_1[] = { + { 0, 5, "ms120" }, + { 1, 5, "ms240" }, + { 2, 5, "ms480" }, + { 3, 5, "ms640" }, + { 4, 6, "ms1024" }, + { 5, 6, "ms2048" }, + { 6, 6, "ms5120" }, + { 7, 7, "ms10240" }, + { 8, 4, "min1" }, + { 9, 4, "min6" }, + { 10, 5, "min12" }, + { 11, 5, "min30" }, + { 12, 5, "min60" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_ReportInterval_enum2value_1[] = { + 8, /* min1(8) */ + 10, /* min12(10) */ + 11, /* min30(11) */ + 9, /* min6(9) */ + 12, /* min60(12) */ + 4, /* ms1024(4) */ + 7, /* ms10240(7) */ + 0, /* ms120(0) */ + 5, /* ms2048(5) */ + 1, /* ms240(1) */ + 2, /* ms480(2) */ + 6, /* ms5120(6) */ + 3, /* ms640(3) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13 /* spare3(13) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ReportInterval_specs_1 = { + asn_MAP_ReportInterval_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_ReportInterval_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ReportInterval_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReportInterval = { + "ReportInterval", + "ReportInterval", + ReportInterval_free, + ReportInterval_print, + ReportInterval_constraint, + ReportInterval_decode_ber, + ReportInterval_encode_der, + ReportInterval_decode_xer, + ReportInterval_encode_xer, + ReportInterval_decode_uper, + ReportInterval_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportInterval_tags_1, + sizeof(asn_DEF_ReportInterval_tags_1) + /sizeof(asn_DEF_ReportInterval_tags_1[0]), /* 1 */ + asn_DEF_ReportInterval_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportInterval_tags_1) + /sizeof(asn_DEF_ReportInterval_tags_1[0]), /* 1 */ + &asn_PER_type_ReportInterval_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ReportInterval_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportInterval.h b/lte/rrc/asn/ReportInterval.h new file mode 100644 index 000000000..a5388755d --- /dev/null +++ b/lte/rrc/asn/ReportInterval.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportInterval_H_ +#define _ReportInterval_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportInterval { + ReportInterval_ms120 = 0, + ReportInterval_ms240 = 1, + ReportInterval_ms480 = 2, + ReportInterval_ms640 = 3, + ReportInterval_ms1024 = 4, + ReportInterval_ms2048 = 5, + ReportInterval_ms5120 = 6, + ReportInterval_ms10240 = 7, + ReportInterval_min1 = 8, + ReportInterval_min6 = 9, + ReportInterval_min12 = 10, + ReportInterval_min30 = 11, + ReportInterval_min60 = 12, + ReportInterval_spare3 = 13, + ReportInterval_spare2 = 14, + ReportInterval_spare1 = 15 +} e_ReportInterval; + +/* ReportInterval */ +typedef long ReportInterval_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReportInterval; +asn_struct_free_f ReportInterval_free; +asn_struct_print_f ReportInterval_print; +asn_constr_check_f ReportInterval_constraint; +ber_type_decoder_f ReportInterval_decode_ber; +der_type_encoder_f ReportInterval_encode_der; +xer_type_decoder_f ReportInterval_decode_xer; +xer_type_encoder_f ReportInterval_encode_xer; +per_type_decoder_f ReportInterval_decode_uper; +per_type_encoder_f ReportInterval_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportInterval_H_ */ +#include diff --git a/lte/rrc/asn/ReportProximityConfig-r9.c b/lte/rrc/asn/ReportProximityConfig-r9.c new file mode 100644 index 000000000..66e5283da --- /dev/null +++ b/lte/rrc/asn/ReportProximityConfig-r9.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReportProximityConfig-r9.h" + +static int +proximityIndicationEUTRA_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +proximityIndicationEUTRA_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +proximityIndicationEUTRA_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +proximityIndicationEUTRA_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +proximityIndicationEUTRA_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +proximityIndicationEUTRA_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +proximityIndicationEUTRA_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +proximityIndicationEUTRA_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +proximityIndicationEUTRA_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + proximityIndicationEUTRA_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +proximityIndicationUTRA_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +proximityIndicationUTRA_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +proximityIndicationUTRA_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +proximityIndicationUTRA_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +proximityIndicationUTRA_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +proximityIndicationUTRA_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +proximityIndicationUTRA_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +proximityIndicationUTRA_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +proximityIndicationUTRA_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + proximityIndicationUTRA_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_proximityIndicationEUTRA_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_proximityIndicationUTRA_r9_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_proximityIndicationEUTRA_r9_value2enum_2[] = { + { 0, 7, "enabled" } +}; +static unsigned int asn_MAP_proximityIndicationEUTRA_r9_enum2value_2[] = { + 0 /* enabled(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_proximityIndicationEUTRA_r9_specs_2 = { + asn_MAP_proximityIndicationEUTRA_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_proximityIndicationEUTRA_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_proximityIndicationEUTRA_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_proximityIndicationEUTRA_r9_2 = { + "proximityIndicationEUTRA-r9", + "proximityIndicationEUTRA-r9", + proximityIndicationEUTRA_r9_2_free, + proximityIndicationEUTRA_r9_2_print, + proximityIndicationEUTRA_r9_2_constraint, + proximityIndicationEUTRA_r9_2_decode_ber, + proximityIndicationEUTRA_r9_2_encode_der, + proximityIndicationEUTRA_r9_2_decode_xer, + proximityIndicationEUTRA_r9_2_encode_xer, + proximityIndicationEUTRA_r9_2_decode_uper, + proximityIndicationEUTRA_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_proximityIndicationEUTRA_r9_tags_2, + sizeof(asn_DEF_proximityIndicationEUTRA_r9_tags_2) + /sizeof(asn_DEF_proximityIndicationEUTRA_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_proximityIndicationEUTRA_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_proximityIndicationEUTRA_r9_tags_2) + /sizeof(asn_DEF_proximityIndicationEUTRA_r9_tags_2[0]), /* 2 */ + &asn_PER_type_proximityIndicationEUTRA_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_proximityIndicationEUTRA_r9_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_proximityIndicationUTRA_r9_value2enum_4[] = { + { 0, 7, "enabled" } +}; +static unsigned int asn_MAP_proximityIndicationUTRA_r9_enum2value_4[] = { + 0 /* enabled(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_proximityIndicationUTRA_r9_specs_4 = { + asn_MAP_proximityIndicationUTRA_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_proximityIndicationUTRA_r9_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_proximityIndicationUTRA_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_proximityIndicationUTRA_r9_4 = { + "proximityIndicationUTRA-r9", + "proximityIndicationUTRA-r9", + proximityIndicationUTRA_r9_4_free, + proximityIndicationUTRA_r9_4_print, + proximityIndicationUTRA_r9_4_constraint, + proximityIndicationUTRA_r9_4_decode_ber, + proximityIndicationUTRA_r9_4_encode_der, + proximityIndicationUTRA_r9_4_decode_xer, + proximityIndicationUTRA_r9_4_encode_xer, + proximityIndicationUTRA_r9_4_decode_uper, + proximityIndicationUTRA_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_proximityIndicationUTRA_r9_tags_4, + sizeof(asn_DEF_proximityIndicationUTRA_r9_tags_4) + /sizeof(asn_DEF_proximityIndicationUTRA_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_proximityIndicationUTRA_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_proximityIndicationUTRA_r9_tags_4) + /sizeof(asn_DEF_proximityIndicationUTRA_r9_tags_4[0]), /* 2 */ + &asn_PER_type_proximityIndicationUTRA_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_proximityIndicationUTRA_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ReportProximityConfig_r9_1[] = { + { ATF_POINTER, 2, offsetof(struct ReportProximityConfig_r9, proximityIndicationEUTRA_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_proximityIndicationEUTRA_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "proximityIndicationEUTRA-r9" + }, + { ATF_POINTER, 1, offsetof(struct ReportProximityConfig_r9, proximityIndicationUTRA_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_proximityIndicationUTRA_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "proximityIndicationUTRA-r9" + }, +}; +static int asn_MAP_ReportProximityConfig_r9_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_ReportProximityConfig_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ReportProximityConfig_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* proximityIndicationEUTRA-r9 at 3689 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* proximityIndicationUTRA-r9 at 3690 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ReportProximityConfig_r9_specs_1 = { + sizeof(struct ReportProximityConfig_r9), + offsetof(struct ReportProximityConfig_r9, _asn_ctx), + asn_MAP_ReportProximityConfig_r9_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ReportProximityConfig_r9_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ReportProximityConfig_r9 = { + "ReportProximityConfig-r9", + "ReportProximityConfig-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReportProximityConfig_r9_tags_1, + sizeof(asn_DEF_ReportProximityConfig_r9_tags_1) + /sizeof(asn_DEF_ReportProximityConfig_r9_tags_1[0]), /* 1 */ + asn_DEF_ReportProximityConfig_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_ReportProximityConfig_r9_tags_1) + /sizeof(asn_DEF_ReportProximityConfig_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ReportProximityConfig_r9_1, + 2, /* Elements count */ + &asn_SPC_ReportProximityConfig_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ReportProximityConfig-r9.h b/lte/rrc/asn/ReportProximityConfig-r9.h new file mode 100644 index 000000000..127aafb72 --- /dev/null +++ b/lte/rrc/asn/ReportProximityConfig-r9.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReportProximityConfig_r9_H_ +#define _ReportProximityConfig_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ReportProximityConfig_r9__proximityIndicationEUTRA_r9 { + ReportProximityConfig_r9__proximityIndicationEUTRA_r9_enabled = 0 +} e_ReportProximityConfig_r9__proximityIndicationEUTRA_r9; +typedef enum ReportProximityConfig_r9__proximityIndicationUTRA_r9 { + ReportProximityConfig_r9__proximityIndicationUTRA_r9_enabled = 0 +} e_ReportProximityConfig_r9__proximityIndicationUTRA_r9; + +/* ReportProximityConfig-r9 */ +typedef struct ReportProximityConfig_r9 { + long *proximityIndicationEUTRA_r9 /* OPTIONAL */; + long *proximityIndicationUTRA_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ReportProximityConfig_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_proximityIndicationEUTRA_r9_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_proximityIndicationUTRA_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_ReportProximityConfig_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReportProximityConfig_r9_H_ */ +#include diff --git a/lte/rrc/asn/ReselectionThreshold.c b/lte/rrc/asn/ReselectionThreshold.c new file mode 100644 index 000000000..8916cf08f --- /dev/null +++ b/lte/rrc/asn/ReselectionThreshold.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReselectionThreshold.h" + +int +ReselectionThreshold_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ReselectionThreshold_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ReselectionThreshold_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ReselectionThreshold_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ReselectionThreshold_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ReselectionThreshold_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ReselectionThreshold_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ReselectionThreshold_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ReselectionThreshold_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ReselectionThreshold_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ReselectionThreshold_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ReselectionThreshold_constr_1 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ReselectionThreshold_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReselectionThreshold = { + "ReselectionThreshold", + "ReselectionThreshold", + ReselectionThreshold_free, + ReselectionThreshold_print, + ReselectionThreshold_constraint, + ReselectionThreshold_decode_ber, + ReselectionThreshold_encode_der, + ReselectionThreshold_decode_xer, + ReselectionThreshold_encode_xer, + ReselectionThreshold_decode_uper, + ReselectionThreshold_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReselectionThreshold_tags_1, + sizeof(asn_DEF_ReselectionThreshold_tags_1) + /sizeof(asn_DEF_ReselectionThreshold_tags_1[0]), /* 1 */ + asn_DEF_ReselectionThreshold_tags_1, /* Same as above */ + sizeof(asn_DEF_ReselectionThreshold_tags_1) + /sizeof(asn_DEF_ReselectionThreshold_tags_1[0]), /* 1 */ + &asn_PER_type_ReselectionThreshold_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ReselectionThreshold.h b/lte/rrc/asn/ReselectionThreshold.h new file mode 100644 index 000000000..638edac51 --- /dev/null +++ b/lte/rrc/asn/ReselectionThreshold.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReselectionThreshold_H_ +#define _ReselectionThreshold_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReselectionThreshold */ +typedef long ReselectionThreshold_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReselectionThreshold; +asn_struct_free_f ReselectionThreshold_free; +asn_struct_print_f ReselectionThreshold_print; +asn_constr_check_f ReselectionThreshold_constraint; +ber_type_decoder_f ReselectionThreshold_decode_ber; +der_type_encoder_f ReselectionThreshold_encode_der; +xer_type_decoder_f ReselectionThreshold_decode_xer; +xer_type_encoder_f ReselectionThreshold_encode_xer; +per_type_decoder_f ReselectionThreshold_decode_uper; +per_type_encoder_f ReselectionThreshold_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReselectionThreshold_H_ */ +#include diff --git a/lte/rrc/asn/ReselectionThresholdQ-r9.c b/lte/rrc/asn/ReselectionThresholdQ-r9.c new file mode 100644 index 000000000..4e1aa41f4 --- /dev/null +++ b/lte/rrc/asn/ReselectionThresholdQ-r9.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ReselectionThresholdQ-r9.h" + +int +ReselectionThresholdQ_r9_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ReselectionThresholdQ_r9_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ReselectionThresholdQ_r9_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ReselectionThresholdQ_r9_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ReselectionThresholdQ_r9_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ReselectionThresholdQ_r9_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ReselectionThresholdQ_r9_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ReselectionThresholdQ_r9_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ReselectionThresholdQ_r9_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ReselectionThresholdQ_r9_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ReselectionThresholdQ_r9_constr_1 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ReselectionThresholdQ_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ReselectionThresholdQ_r9 = { + "ReselectionThresholdQ-r9", + "ReselectionThresholdQ-r9", + ReselectionThresholdQ_r9_free, + ReselectionThresholdQ_r9_print, + ReselectionThresholdQ_r9_constraint, + ReselectionThresholdQ_r9_decode_ber, + ReselectionThresholdQ_r9_encode_der, + ReselectionThresholdQ_r9_decode_xer, + ReselectionThresholdQ_r9_encode_xer, + ReselectionThresholdQ_r9_decode_uper, + ReselectionThresholdQ_r9_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ReselectionThresholdQ_r9_tags_1, + sizeof(asn_DEF_ReselectionThresholdQ_r9_tags_1) + /sizeof(asn_DEF_ReselectionThresholdQ_r9_tags_1[0]), /* 1 */ + asn_DEF_ReselectionThresholdQ_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_ReselectionThresholdQ_r9_tags_1) + /sizeof(asn_DEF_ReselectionThresholdQ_r9_tags_1[0]), /* 1 */ + &asn_PER_type_ReselectionThresholdQ_r9_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ReselectionThresholdQ-r9.h b/lte/rrc/asn/ReselectionThresholdQ-r9.h new file mode 100644 index 000000000..eefdf172f --- /dev/null +++ b/lte/rrc/asn/ReselectionThresholdQ-r9.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ReselectionThresholdQ_r9_H_ +#define _ReselectionThresholdQ_r9_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ReselectionThresholdQ-r9 */ +typedef long ReselectionThresholdQ_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ReselectionThresholdQ_r9; +asn_struct_free_f ReselectionThresholdQ_r9_free; +asn_struct_print_f ReselectionThresholdQ_r9_print; +asn_constr_check_f ReselectionThresholdQ_r9_constraint; +ber_type_decoder_f ReselectionThresholdQ_r9_decode_ber; +der_type_encoder_f ReselectionThresholdQ_r9_encode_der; +xer_type_decoder_f ReselectionThresholdQ_r9_decode_xer; +xer_type_encoder_f ReselectionThresholdQ_r9_encode_xer; +per_type_decoder_f ReselectionThresholdQ_r9_decode_uper; +per_type_encoder_f ReselectionThresholdQ_r9_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ReselectionThresholdQ_r9_H_ */ +#include diff --git a/lte/rrc/asn/S-TMSI.c b/lte/rrc/asn/S-TMSI.c index 8e52827fa..337097721 100644 --- a/lte/rrc/asn/S-TMSI.c +++ b/lte/rrc/asn/S-TMSI.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "S-TMSI.h" @@ -37,7 +38,7 @@ memb_m_TMSI_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, } } -static asn_per_constraints_t asn_PER_memb_m_TMSI_constr_3 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_m_TMSI_constr_3 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, 0, 0 /* No PER value map */ @@ -62,12 +63,12 @@ static asn_TYPE_member_t asn_MBR_S_TMSI_1[] = { "m-TMSI" }, }; -static const ber_tlv_tag_t asn_DEF_S_TMSI_tags_1[] = { +static ber_tlv_tag_t asn_DEF_S_TMSI_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_S_TMSI_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mmec */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* m-TMSI */ +static asn_TYPE_tag2member_t asn_MAP_S_TMSI_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mmec at 3706 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* m-TMSI at 3707 */ }; static asn_SEQUENCE_specifics_t asn_SPC_S_TMSI_specs_1 = { sizeof(struct S_TMSI), diff --git a/lte/rrc/asn/S-TMSI.h b/lte/rrc/asn/S-TMSI.h index 6f97ad88d..f2d9146c2 100644 --- a/lte/rrc/asn/S-TMSI.h +++ b/lte/rrc/asn/S-TMSI.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _S_TMSI_H_ diff --git a/lte/rrc/asn/SCellIndex-r10.c b/lte/rrc/asn/SCellIndex-r10.c new file mode 100644 index 000000000..d84ef6e8d --- /dev/null +++ b/lte/rrc/asn/SCellIndex-r10.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SCellIndex-r10.h" + +int +SCellIndex_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +SCellIndex_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +SCellIndex_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SCellIndex_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SCellIndex_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SCellIndex_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SCellIndex_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SCellIndex_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SCellIndex_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SCellIndex_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SCellIndex_r10_constr_1 = { + { APC_CONSTRAINED, 3, 3, 1, 7 } /* (1..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_SCellIndex_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SCellIndex_r10 = { + "SCellIndex-r10", + "SCellIndex-r10", + SCellIndex_r10_free, + SCellIndex_r10_print, + SCellIndex_r10_constraint, + SCellIndex_r10_decode_ber, + SCellIndex_r10_encode_der, + SCellIndex_r10_decode_xer, + SCellIndex_r10_encode_xer, + SCellIndex_r10_decode_uper, + SCellIndex_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SCellIndex_r10_tags_1, + sizeof(asn_DEF_SCellIndex_r10_tags_1) + /sizeof(asn_DEF_SCellIndex_r10_tags_1[0]), /* 1 */ + asn_DEF_SCellIndex_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_SCellIndex_r10_tags_1) + /sizeof(asn_DEF_SCellIndex_r10_tags_1[0]), /* 1 */ + &asn_PER_type_SCellIndex_r10_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/SCellIndex-r10.h b/lte/rrc/asn/SCellIndex-r10.h new file mode 100644 index 000000000..1c52f0b0f --- /dev/null +++ b/lte/rrc/asn/SCellIndex-r10.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SCellIndex_r10_H_ +#define _SCellIndex_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SCellIndex-r10 */ +typedef long SCellIndex_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SCellIndex_r10; +asn_struct_free_f SCellIndex_r10_free; +asn_struct_print_f SCellIndex_r10_print; +asn_constr_check_f SCellIndex_r10_constraint; +ber_type_decoder_f SCellIndex_r10_decode_ber; +der_type_encoder_f SCellIndex_r10_encode_der; +xer_type_decoder_f SCellIndex_r10_decode_xer; +xer_type_encoder_f SCellIndex_r10_encode_xer; +per_type_decoder_f SCellIndex_r10_decode_uper; +per_type_encoder_f SCellIndex_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SCellIndex_r10_H_ */ +#include diff --git a/lte/rrc/asn/SCellToAddMod-r10.c b/lte/rrc/asn/SCellToAddMod-r10.c new file mode 100644 index 000000000..2fb91e2c2 --- /dev/null +++ b/lte/rrc/asn/SCellToAddMod-r10.c @@ -0,0 +1,155 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SCellToAddMod-r10.h" + +static asn_TYPE_member_t asn_MBR_cellIdentification_r10_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SCellToAddMod_r10__cellIdentification_r10, physCellId_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SCellToAddMod_r10__cellIdentification_r10, dl_CarrierFreq_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dl-CarrierFreq-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_cellIdentification_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_cellIdentification_r10_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* physCellId-r10 at 673 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* dl-CarrierFreq-r10 at 675 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cellIdentification_r10_specs_3 = { + sizeof(struct SCellToAddMod_r10__cellIdentification_r10), + offsetof(struct SCellToAddMod_r10__cellIdentification_r10, _asn_ctx), + asn_MAP_cellIdentification_r10_tag2el_3, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellIdentification_r10_3 = { + "cellIdentification-r10", + "cellIdentification-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellIdentification_r10_tags_3, + sizeof(asn_DEF_cellIdentification_r10_tags_3) + /sizeof(asn_DEF_cellIdentification_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_cellIdentification_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_cellIdentification_r10_tags_3) + /sizeof(asn_DEF_cellIdentification_r10_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cellIdentification_r10_3, + 2, /* Elements count */ + &asn_SPC_cellIdentification_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SCellToAddMod_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SCellToAddMod_r10, sCellIndex_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SCellIndex_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sCellIndex-r10" + }, + { ATF_POINTER, 3, offsetof(struct SCellToAddMod_r10, cellIdentification_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cellIdentification_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellIdentification-r10" + }, + { ATF_POINTER, 2, offsetof(struct SCellToAddMod_r10, radioResourceConfigCommonSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigCommonSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigCommonSCell-r10" + }, + { ATF_POINTER, 1, offsetof(struct SCellToAddMod_r10, radioResourceConfigDedicatedSCell_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigDedicatedSCell_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigDedicatedSCell-r10" + }, +}; +static int asn_MAP_SCellToAddMod_r10_oms_1[] = { 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_SCellToAddMod_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SCellToAddMod_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sCellIndex-r10 at 671 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellIdentification-r10 at 673 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* radioResourceConfigCommonSCell-r10 at 676 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* radioResourceConfigDedicatedSCell-r10 at 677 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SCellToAddMod_r10_specs_1 = { + sizeof(struct SCellToAddMod_r10), + offsetof(struct SCellToAddMod_r10, _asn_ctx), + asn_MAP_SCellToAddMod_r10_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SCellToAddMod_r10_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SCellToAddMod_r10 = { + "SCellToAddMod-r10", + "SCellToAddMod-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SCellToAddMod_r10_tags_1, + sizeof(asn_DEF_SCellToAddMod_r10_tags_1) + /sizeof(asn_DEF_SCellToAddMod_r10_tags_1[0]), /* 1 */ + asn_DEF_SCellToAddMod_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_SCellToAddMod_r10_tags_1) + /sizeof(asn_DEF_SCellToAddMod_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SCellToAddMod_r10_1, + 4, /* Elements count */ + &asn_SPC_SCellToAddMod_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SCellToAddMod-r10.h b/lte/rrc/asn/SCellToAddMod-r10.h new file mode 100644 index 000000000..952a4f7e8 --- /dev/null +++ b/lte/rrc/asn/SCellToAddMod-r10.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SCellToAddMod_r10_H_ +#define _SCellToAddMod_r10_H_ + + +#include + +/* Including external dependencies */ +#include "SCellIndex-r10.h" +#include "PhysCellId.h" +#include "ARFCN-ValueEUTRA.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RadioResourceConfigCommonSCell_r10; +struct RadioResourceConfigDedicatedSCell_r10; + +/* SCellToAddMod-r10 */ +typedef struct SCellToAddMod_r10 { + SCellIndex_r10_t sCellIndex_r10; + struct SCellToAddMod_r10__cellIdentification_r10 { + PhysCellId_t physCellId_r10; + ARFCN_ValueEUTRA_t dl_CarrierFreq_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *cellIdentification_r10; + struct RadioResourceConfigCommonSCell_r10 *radioResourceConfigCommonSCell_r10 /* OPTIONAL */; + struct RadioResourceConfigDedicatedSCell_r10 *radioResourceConfigDedicatedSCell_r10 /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SCellToAddMod_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SCellToAddMod_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RadioResourceConfigCommonSCell-r10.h" +#include "RadioResourceConfigDedicatedSCell-r10.h" + +#endif /* _SCellToAddMod_r10_H_ */ +#include diff --git a/lte/rrc/asn/SCellToAddModList-r10.c b/lte/rrc/asn/SCellToAddModList-r10.c new file mode 100644 index 000000000..d57cb60ca --- /dev/null +++ b/lte/rrc/asn/SCellToAddModList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SCellToAddModList-r10.h" + +static asn_per_constraints_t asn_PER_type_SCellToAddModList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SCellToAddModList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SCellToAddMod_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SCellToAddModList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SCellToAddModList_r10_specs_1 = { + sizeof(struct SCellToAddModList_r10), + offsetof(struct SCellToAddModList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SCellToAddModList_r10 = { + "SCellToAddModList-r10", + "SCellToAddModList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SCellToAddModList_r10_tags_1, + sizeof(asn_DEF_SCellToAddModList_r10_tags_1) + /sizeof(asn_DEF_SCellToAddModList_r10_tags_1[0]), /* 1 */ + asn_DEF_SCellToAddModList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_SCellToAddModList_r10_tags_1) + /sizeof(asn_DEF_SCellToAddModList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_SCellToAddModList_r10_constr_1, + asn_MBR_SCellToAddModList_r10_1, + 1, /* Single element */ + &asn_SPC_SCellToAddModList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SCellToAddModList-r10.h b/lte/rrc/asn/SCellToAddModList-r10.h new file mode 100644 index 000000000..3527606de --- /dev/null +++ b/lte/rrc/asn/SCellToAddModList-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SCellToAddModList_r10_H_ +#define _SCellToAddModList_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SCellToAddMod_r10; + +/* SCellToAddModList-r10 */ +typedef struct SCellToAddModList_r10 { + A_SEQUENCE_OF(struct SCellToAddMod_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SCellToAddModList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SCellToAddModList_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SCellToAddMod-r10.h" + +#endif /* _SCellToAddModList_r10_H_ */ +#include diff --git a/lte/rrc/asn/SCellToReleaseList-r10.c b/lte/rrc/asn/SCellToReleaseList-r10.c new file mode 100644 index 000000000..404fb3841 --- /dev/null +++ b/lte/rrc/asn/SCellToReleaseList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SCellToReleaseList-r10.h" + +static asn_per_constraints_t asn_PER_type_SCellToReleaseList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 4 } /* (SIZE(1..4)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SCellToReleaseList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_SCellIndex_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SCellToReleaseList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SCellToReleaseList_r10_specs_1 = { + sizeof(struct SCellToReleaseList_r10), + offsetof(struct SCellToReleaseList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SCellToReleaseList_r10 = { + "SCellToReleaseList-r10", + "SCellToReleaseList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SCellToReleaseList_r10_tags_1, + sizeof(asn_DEF_SCellToReleaseList_r10_tags_1) + /sizeof(asn_DEF_SCellToReleaseList_r10_tags_1[0]), /* 1 */ + asn_DEF_SCellToReleaseList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_SCellToReleaseList_r10_tags_1) + /sizeof(asn_DEF_SCellToReleaseList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_SCellToReleaseList_r10_constr_1, + asn_MBR_SCellToReleaseList_r10_1, + 1, /* Single element */ + &asn_SPC_SCellToReleaseList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SCellToReleaseList-r10.h b/lte/rrc/asn/SCellToReleaseList-r10.h new file mode 100644 index 000000000..ca9a599ed --- /dev/null +++ b/lte/rrc/asn/SCellToReleaseList-r10.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SCellToReleaseList_r10_H_ +#define _SCellToReleaseList_r10_H_ + + +#include + +/* Including external dependencies */ +#include "SCellIndex-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SCellToReleaseList-r10 */ +typedef struct SCellToReleaseList_r10 { + A_SEQUENCE_OF(SCellIndex_r10_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SCellToReleaseList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SCellToReleaseList_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _SCellToReleaseList_r10_H_ */ +#include diff --git a/lte/rrc/asn/SI-OrPSI-GERAN.c b/lte/rrc/asn/SI-OrPSI-GERAN.c new file mode 100644 index 000000000..6e82aa373 --- /dev/null +++ b/lte/rrc/asn/SI-OrPSI-GERAN.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SI-OrPSI-GERAN.h" + +static asn_per_constraints_t asn_PER_type_SI_OrPSI_GERAN_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SI_OrPSI_GERAN_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SI_OrPSI_GERAN, choice.si), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInfoListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "si" + }, + { ATF_NOFLAGS, 0, offsetof(struct SI_OrPSI_GERAN, choice.psi), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInfoListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "psi" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SI_OrPSI_GERAN_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* si at 510 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* psi at 512 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SI_OrPSI_GERAN_specs_1 = { + sizeof(struct SI_OrPSI_GERAN), + offsetof(struct SI_OrPSI_GERAN, _asn_ctx), + offsetof(struct SI_OrPSI_GERAN, present), + sizeof(((struct SI_OrPSI_GERAN *)0)->present), + asn_MAP_SI_OrPSI_GERAN_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SI_OrPSI_GERAN = { + "SI-OrPSI-GERAN", + "SI-OrPSI-GERAN", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SI_OrPSI_GERAN_constr_1, + asn_MBR_SI_OrPSI_GERAN_1, + 2, /* Elements count */ + &asn_SPC_SI_OrPSI_GERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SI-OrPSI-GERAN.h b/lte/rrc/asn/SI-OrPSI-GERAN.h new file mode 100644 index 000000000..80f495fb6 --- /dev/null +++ b/lte/rrc/asn/SI-OrPSI-GERAN.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SI_OrPSI_GERAN_H_ +#define _SI_OrPSI_GERAN_H_ + + +#include + +/* Including external dependencies */ +#include "SystemInfoListGERAN.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SI_OrPSI_GERAN_PR { + SI_OrPSI_GERAN_PR_NOTHING, /* No components present */ + SI_OrPSI_GERAN_PR_si, + SI_OrPSI_GERAN_PR_psi +} SI_OrPSI_GERAN_PR; + +/* SI-OrPSI-GERAN */ +typedef struct SI_OrPSI_GERAN { + SI_OrPSI_GERAN_PR present; + union SI_OrPSI_GERAN_u { + SystemInfoListGERAN_t si; + SystemInfoListGERAN_t psi; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SI_OrPSI_GERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SI_OrPSI_GERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _SI_OrPSI_GERAN_H_ */ +#include diff --git a/lte/rrc/asn/SIB-MappingInfo.c b/lte/rrc/asn/SIB-MappingInfo.c index f81fc8af9..5ad32fe6c 100644 --- a/lte/rrc/asn/SIB-MappingInfo.c +++ b/lte/rrc/asn/SIB-MappingInfo.c @@ -1,12 +1,13 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SIB-MappingInfo.h" -static asn_per_constraints_t asn_PER_type_SIB_MappingInfo_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_SIB_MappingInfo_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 0, 31 } /* (SIZE(0..31)) */, 0, 0 /* No PER value map */ @@ -22,7 +23,7 @@ static asn_TYPE_member_t asn_MBR_SIB_MappingInfo_1[] = { "" }, }; -static const ber_tlv_tag_t asn_DEF_SIB_MappingInfo_tags_1[] = { +static ber_tlv_tag_t asn_DEF_SIB_MappingInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SIB_MappingInfo_specs_1 = { diff --git a/lte/rrc/asn/SIB-MappingInfo.h b/lte/rrc/asn/SIB-MappingInfo.h index 15e228309..039a4dc80 100644 --- a/lte/rrc/asn/SIB-MappingInfo.h +++ b/lte/rrc/asn/SIB-MappingInfo.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SIB_MappingInfo_H_ diff --git a/lte/rrc/asn/SIB-Type.c b/lte/rrc/asn/SIB-Type.c index 48b37e159..1699280bc 100644 --- a/lte/rrc/asn/SIB-Type.c +++ b/lte/rrc/asn/SIB-Type.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SIB-Type.h" @@ -22,7 +23,6 @@ static void SIB_Type_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -95,12 +95,12 @@ SIB_Type_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_SIB_Type_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_SIB_Type_constr_1 = { { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_SIB_Type_value2enum_1[] = { +static asn_INTEGER_enum_map_t asn_MAP_SIB_Type_value2enum_1[] = { { 0, 8, "sibType3" }, { 1, 8, "sibType4" }, { 2, 8, "sibType5" }, @@ -119,7 +119,7 @@ static const asn_INTEGER_enum_map_t asn_MAP_SIB_Type_value2enum_1[] = { { 15, 6, "spare1" } /* This list is extensible */ }; -static const unsigned int asn_MAP_SIB_Type_enum2value_1[] = { +static unsigned int asn_MAP_SIB_Type_enum2value_1[] = { 7, /* sibType10(7) */ 8, /* sibType11(8) */ 9, /* sibType12-v920(9) */ @@ -138,7 +138,7 @@ static const unsigned int asn_MAP_SIB_Type_enum2value_1[] = { 11 /* spare5(11) */ /* This list is extensible */ }; -static const asn_INTEGER_specifics_t asn_SPC_SIB_Type_specs_1 = { +static asn_INTEGER_specifics_t asn_SPC_SIB_Type_specs_1 = { asn_MAP_SIB_Type_value2enum_1, /* "tag" => N; sorted by tag */ asn_MAP_SIB_Type_enum2value_1, /* N => "tag"; sorted by N */ 16, /* Number of elements in the maps */ @@ -147,7 +147,7 @@ static const asn_INTEGER_specifics_t asn_SPC_SIB_Type_specs_1 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_SIB_Type_tags_1[] = { +static ber_tlv_tag_t asn_DEF_SIB_Type_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; asn_TYPE_descriptor_t asn_DEF_SIB_Type = { diff --git a/lte/rrc/asn/SIB-Type.h b/lte/rrc/asn/SIB-Type.h index 408fb78ff..1d4309ca4 100644 --- a/lte/rrc/asn/SIB-Type.h +++ b/lte/rrc/asn/SIB-Type.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SIB_Type_H_ diff --git a/lte/rrc/asn/SN-FieldLength.c b/lte/rrc/asn/SN-FieldLength.c new file mode 100644 index 000000000..d40e32103 --- /dev/null +++ b/lte/rrc/asn/SN-FieldLength.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SN-FieldLength.h" + +int +SN_FieldLength_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SN_FieldLength_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SN_FieldLength_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SN_FieldLength_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SN_FieldLength_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SN_FieldLength_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SN_FieldLength_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SN_FieldLength_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SN_FieldLength_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SN_FieldLength_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SN_FieldLength_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SN_FieldLength_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_SN_FieldLength_value2enum_1[] = { + { 0, 5, "size5" }, + { 1, 6, "size10" } +}; +static unsigned int asn_MAP_SN_FieldLength_enum2value_1[] = { + 1, /* size10(1) */ + 0 /* size5(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_SN_FieldLength_specs_1 = { + asn_MAP_SN_FieldLength_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SN_FieldLength_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_SN_FieldLength_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SN_FieldLength = { + "SN-FieldLength", + "SN-FieldLength", + SN_FieldLength_free, + SN_FieldLength_print, + SN_FieldLength_constraint, + SN_FieldLength_decode_ber, + SN_FieldLength_encode_der, + SN_FieldLength_decode_xer, + SN_FieldLength_encode_xer, + SN_FieldLength_decode_uper, + SN_FieldLength_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SN_FieldLength_tags_1, + sizeof(asn_DEF_SN_FieldLength_tags_1) + /sizeof(asn_DEF_SN_FieldLength_tags_1[0]), /* 1 */ + asn_DEF_SN_FieldLength_tags_1, /* Same as above */ + sizeof(asn_DEF_SN_FieldLength_tags_1) + /sizeof(asn_DEF_SN_FieldLength_tags_1[0]), /* 1 */ + &asn_PER_type_SN_FieldLength_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SN_FieldLength_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SN-FieldLength.h b/lte/rrc/asn/SN-FieldLength.h new file mode 100644 index 000000000..02018975b --- /dev/null +++ b/lte/rrc/asn/SN-FieldLength.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SN_FieldLength_H_ +#define _SN_FieldLength_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SN_FieldLength { + SN_FieldLength_size5 = 0, + SN_FieldLength_size10 = 1 +} e_SN_FieldLength; + +/* SN-FieldLength */ +typedef long SN_FieldLength_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SN_FieldLength; +asn_struct_free_f SN_FieldLength_free; +asn_struct_print_f SN_FieldLength_print; +asn_constr_check_f SN_FieldLength_constraint; +ber_type_decoder_f SN_FieldLength_decode_ber; +der_type_encoder_f SN_FieldLength_encode_der; +xer_type_decoder_f SN_FieldLength_decode_xer; +xer_type_encoder_f SN_FieldLength_encode_xer; +per_type_decoder_f SN_FieldLength_decode_uper; +per_type_encoder_f SN_FieldLength_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SN_FieldLength_H_ */ +#include diff --git a/lte/rrc/asn/SON-Parameters-r9.c b/lte/rrc/asn/SON-Parameters-r9.c new file mode 100644 index 000000000..0e52d532b --- /dev/null +++ b/lte/rrc/asn/SON-Parameters-r9.c @@ -0,0 +1,199 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SON-Parameters-r9.h" + +static int +rach_Report_r9_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +rach_Report_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +rach_Report_r9_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +rach_Report_r9_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +rach_Report_r9_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +rach_Report_r9_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +rach_Report_r9_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +rach_Report_r9_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +rach_Report_r9_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +rach_Report_r9_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + rach_Report_r9_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_rach_Report_r9_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_rach_Report_r9_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_rach_Report_r9_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_rach_Report_r9_specs_2 = { + asn_MAP_rach_Report_r9_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_rach_Report_r9_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_rach_Report_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rach_Report_r9_2 = { + "rach-Report-r9", + "rach-Report-r9", + rach_Report_r9_2_free, + rach_Report_r9_2_print, + rach_Report_r9_2_constraint, + rach_Report_r9_2_decode_ber, + rach_Report_r9_2_encode_der, + rach_Report_r9_2_decode_xer, + rach_Report_r9_2_encode_xer, + rach_Report_r9_2_decode_uper, + rach_Report_r9_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rach_Report_r9_tags_2, + sizeof(asn_DEF_rach_Report_r9_tags_2) + /sizeof(asn_DEF_rach_Report_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_rach_Report_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_rach_Report_r9_tags_2) + /sizeof(asn_DEF_rach_Report_r9_tags_2[0]), /* 2 */ + &asn_PER_type_rach_Report_r9_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_rach_Report_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SON_Parameters_r9_1[] = { + { ATF_POINTER, 1, offsetof(struct SON_Parameters_r9, rach_Report_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_rach_Report_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rach-Report-r9" + }, +}; +static int asn_MAP_SON_Parameters_r9_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_SON_Parameters_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SON_Parameters_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* rach-Report-r9 at 4005 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SON_Parameters_r9_specs_1 = { + sizeof(struct SON_Parameters_r9), + offsetof(struct SON_Parameters_r9, _asn_ctx), + asn_MAP_SON_Parameters_r9_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_SON_Parameters_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SON_Parameters_r9 = { + "SON-Parameters-r9", + "SON-Parameters-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SON_Parameters_r9_tags_1, + sizeof(asn_DEF_SON_Parameters_r9_tags_1) + /sizeof(asn_DEF_SON_Parameters_r9_tags_1[0]), /* 1 */ + asn_DEF_SON_Parameters_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_SON_Parameters_r9_tags_1) + /sizeof(asn_DEF_SON_Parameters_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SON_Parameters_r9_1, + 1, /* Elements count */ + &asn_SPC_SON_Parameters_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SON-Parameters-r9.h b/lte/rrc/asn/SON-Parameters-r9.h new file mode 100644 index 000000000..e66d45c35 --- /dev/null +++ b/lte/rrc/asn/SON-Parameters-r9.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SON_Parameters_r9_H_ +#define _SON_Parameters_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SON_Parameters_r9__rach_Report_r9 { + SON_Parameters_r9__rach_Report_r9_supported = 0 +} e_SON_Parameters_r9__rach_Report_r9; + +/* SON-Parameters-r9 */ +typedef struct SON_Parameters_r9 { + long *rach_Report_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SON_Parameters_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_rach_Report_r9_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SON_Parameters_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _SON_Parameters_r9_H_ */ +#include diff --git a/lte/rrc/asn/SPS-Config.c b/lte/rrc/asn/SPS-Config.c new file mode 100644 index 000000000..814dd875c --- /dev/null +++ b/lte/rrc/asn/SPS-Config.c @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SPS-Config.h" + +static asn_TYPE_member_t asn_MBR_SPS_Config_1[] = { + { ATF_POINTER, 3, offsetof(struct SPS_Config, semiPersistSchedC_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "semiPersistSchedC-RNTI" + }, + { ATF_POINTER, 2, offsetof(struct SPS_Config, sps_ConfigDL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SPS_ConfigDL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sps-ConfigDL" + }, + { ATF_POINTER, 1, offsetof(struct SPS_Config, sps_ConfigUL), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_SPS_ConfigUL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sps-ConfigUL" + }, +}; +static int asn_MAP_SPS_Config_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_SPS_Config_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SPS_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* semiPersistSchedC-RNTI at 2727 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sps-ConfigDL at 2728 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* sps-ConfigUL at 2729 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SPS_Config_specs_1 = { + sizeof(struct SPS_Config), + offsetof(struct SPS_Config, _asn_ctx), + asn_MAP_SPS_Config_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SPS_Config_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SPS_Config = { + "SPS-Config", + "SPS-Config", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SPS_Config_tags_1, + sizeof(asn_DEF_SPS_Config_tags_1) + /sizeof(asn_DEF_SPS_Config_tags_1[0]), /* 1 */ + asn_DEF_SPS_Config_tags_1, /* Same as above */ + sizeof(asn_DEF_SPS_Config_tags_1) + /sizeof(asn_DEF_SPS_Config_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SPS_Config_1, + 3, /* Elements count */ + &asn_SPC_SPS_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SPS-Config.h b/lte/rrc/asn/SPS-Config.h new file mode 100644 index 000000000..df39e4a7a --- /dev/null +++ b/lte/rrc/asn/SPS-Config.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SPS_Config_H_ +#define _SPS_Config_H_ + + +#include + +/* Including external dependencies */ +#include "C-RNTI.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SPS_ConfigDL; +struct SPS_ConfigUL; + +/* SPS-Config */ +typedef struct SPS_Config { + C_RNTI_t *semiPersistSchedC_RNTI /* OPTIONAL */; + struct SPS_ConfigDL *sps_ConfigDL /* OPTIONAL */; + struct SPS_ConfigUL *sps_ConfigUL /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SPS_Config_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SPS_Config; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SPS-ConfigDL.h" +#include "SPS-ConfigUL.h" + +#endif /* _SPS_Config_H_ */ +#include diff --git a/lte/rrc/asn/SPS-ConfigDL.c b/lte/rrc/asn/SPS-ConfigDL.c new file mode 100644 index 000000000..de8d3434a --- /dev/null +++ b/lte/rrc/asn/SPS-ConfigDL.c @@ -0,0 +1,469 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SPS-ConfigDL.h" + +static int +semiPersistSchedIntervalDL_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +semiPersistSchedIntervalDL_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +semiPersistSchedIntervalDL_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +semiPersistSchedIntervalDL_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +semiPersistSchedIntervalDL_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +semiPersistSchedIntervalDL_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +semiPersistSchedIntervalDL_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +semiPersistSchedIntervalDL_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +semiPersistSchedIntervalDL_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + semiPersistSchedIntervalDL_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_numberOfConfSPS_Processes_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_semiPersistSchedIntervalDL_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_twoAntennaPortActivated_r10_constr_23 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_numberOfConfSPS_Processes_constr_21 = { + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SPS_ConfigDL_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_semiPersistSchedIntervalDL_value2enum_4[] = { + { 0, 4, "sf10" }, + { 1, 4, "sf20" }, + { 2, 4, "sf32" }, + { 3, 4, "sf40" }, + { 4, 4, "sf64" }, + { 5, 4, "sf80" }, + { 6, 5, "sf128" }, + { 7, 5, "sf160" }, + { 8, 5, "sf320" }, + { 9, 5, "sf640" }, + { 10, 6, "spare6" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_semiPersistSchedIntervalDL_enum2value_4[] = { + 0, /* sf10(0) */ + 6, /* sf128(6) */ + 7, /* sf160(7) */ + 1, /* sf20(1) */ + 2, /* sf32(2) */ + 8, /* sf320(8) */ + 3, /* sf40(3) */ + 4, /* sf64(4) */ + 9, /* sf640(9) */ + 5, /* sf80(5) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11, /* spare5(11) */ + 10 /* spare6(10) */ +}; +static asn_INTEGER_specifics_t asn_SPC_semiPersistSchedIntervalDL_specs_4 = { + asn_MAP_semiPersistSchedIntervalDL_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_semiPersistSchedIntervalDL_enum2value_4, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_semiPersistSchedIntervalDL_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_semiPersistSchedIntervalDL_4 = { + "semiPersistSchedIntervalDL", + "semiPersistSchedIntervalDL", + semiPersistSchedIntervalDL_4_free, + semiPersistSchedIntervalDL_4_print, + semiPersistSchedIntervalDL_4_constraint, + semiPersistSchedIntervalDL_4_decode_ber, + semiPersistSchedIntervalDL_4_encode_der, + semiPersistSchedIntervalDL_4_decode_xer, + semiPersistSchedIntervalDL_4_encode_xer, + semiPersistSchedIntervalDL_4_decode_uper, + semiPersistSchedIntervalDL_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_semiPersistSchedIntervalDL_tags_4, + sizeof(asn_DEF_semiPersistSchedIntervalDL_tags_4) + /sizeof(asn_DEF_semiPersistSchedIntervalDL_tags_4[0]) - 1, /* 1 */ + asn_DEF_semiPersistSchedIntervalDL_tags_4, /* Same as above */ + sizeof(asn_DEF_semiPersistSchedIntervalDL_tags_4) + /sizeof(asn_DEF_semiPersistSchedIntervalDL_tags_4[0]), /* 2 */ + &asn_PER_type_semiPersistSchedIntervalDL_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_semiPersistSchedIntervalDL_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_25[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10__setup, n1PUCCH_AN_PersistentListP1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_N1PUCCH_AN_PersistentList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n1PUCCH-AN-PersistentListP1-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_25[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_25[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* n1PUCCH-AN-PersistentListP1-r10 at 2746 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_25 = { + sizeof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10__setup), + offsetof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_25, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_25 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_25, + sizeof(asn_DEF_setup_tags_25) + /sizeof(asn_DEF_setup_tags_25[0]) - 1, /* 1 */ + asn_DEF_setup_tags_25, /* Same as above */ + sizeof(asn_DEF_setup_tags_25) + /sizeof(asn_DEF_setup_tags_25[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_25, + 1, /* Elements count */ + &asn_SPC_setup_specs_25 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_twoAntennaPortActivated_r10_23[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_25, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_twoAntennaPortActivated_r10_tag2el_23[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2743 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2746 */ +}; +static asn_CHOICE_specifics_t asn_SPC_twoAntennaPortActivated_r10_specs_23 = { + sizeof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10), + offsetof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10, _asn_ctx), + offsetof(struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10, present), + sizeof(((struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10 *)0)->present), + asn_MAP_twoAntennaPortActivated_r10_tag2el_23, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_twoAntennaPortActivated_r10_23 = { + "twoAntennaPortActivated-r10", + "twoAntennaPortActivated-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_twoAntennaPortActivated_r10_constr_23, + asn_MBR_twoAntennaPortActivated_r10_23, + 2, /* Elements count */ + &asn_SPC_twoAntennaPortActivated_r10_specs_23 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL__setup, semiPersistSchedIntervalDL), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_semiPersistSchedIntervalDL_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "semiPersistSchedIntervalDL" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL__setup, numberOfConfSPS_Processes), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_numberOfConfSPS_Processes_constraint_3, + &asn_PER_memb_numberOfConfSPS_Processes_constr_21, + 0, + "numberOfConfSPS-Processes" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL__setup, n1PUCCH_AN_PersistentList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_N1PUCCH_AN_PersistentList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n1PUCCH-AN-PersistentList" + }, + { ATF_POINTER, 1, offsetof(struct SPS_ConfigDL__setup, twoAntennaPortActivated_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_twoAntennaPortActivated_r10_23, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "twoAntennaPortActivated-r10" + }, +}; +static int asn_MAP_setup_oms_3[] = { 3 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* semiPersistSchedIntervalDL at 2736 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* numberOfConfSPS-Processes at 2740 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* n1PUCCH-AN-PersistentList at 2741 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* twoAntennaPortActivated-r10 at 2743 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct SPS_ConfigDL__setup), + offsetof(struct SPS_ConfigDL__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 4, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 4, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SPS_ConfigDL_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigDL, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SPS_ConfigDL_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2733 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2739 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SPS_ConfigDL_specs_1 = { + sizeof(struct SPS_ConfigDL), + offsetof(struct SPS_ConfigDL, _asn_ctx), + offsetof(struct SPS_ConfigDL, present), + sizeof(((struct SPS_ConfigDL *)0)->present), + asn_MAP_SPS_ConfigDL_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SPS_ConfigDL = { + "SPS-ConfigDL", + "SPS-ConfigDL", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SPS_ConfigDL_constr_1, + asn_MBR_SPS_ConfigDL_1, + 2, /* Elements count */ + &asn_SPC_SPS_ConfigDL_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SPS-ConfigDL.h b/lte/rrc/asn/SPS-ConfigDL.h new file mode 100644 index 000000000..e5ce40fd4 --- /dev/null +++ b/lte/rrc/asn/SPS-ConfigDL.h @@ -0,0 +1,99 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SPS_ConfigDL_H_ +#define _SPS_ConfigDL_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include "N1PUCCH-AN-PersistentList.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SPS_ConfigDL_PR { + SPS_ConfigDL_PR_NOTHING, /* No components present */ + SPS_ConfigDL_PR_release, + SPS_ConfigDL_PR_setup +} SPS_ConfigDL_PR; +typedef enum SPS_ConfigDL__setup__semiPersistSchedIntervalDL { + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf10 = 0, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf20 = 1, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf32 = 2, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf40 = 3, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf64 = 4, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf80 = 5, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf128 = 6, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf160 = 7, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf320 = 8, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_sf640 = 9, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_spare6 = 10, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_spare5 = 11, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_spare4 = 12, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_spare3 = 13, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_spare2 = 14, + SPS_ConfigDL__setup__semiPersistSchedIntervalDL_spare1 = 15 +} e_SPS_ConfigDL__setup__semiPersistSchedIntervalDL; +typedef enum SPS_ConfigDL__setup__twoAntennaPortActivated_r10_PR { + SPS_ConfigDL__setup__twoAntennaPortActivated_r10_PR_NOTHING, /* No components present */ + SPS_ConfigDL__setup__twoAntennaPortActivated_r10_PR_release, + SPS_ConfigDL__setup__twoAntennaPortActivated_r10_PR_setup +} SPS_ConfigDL__setup__twoAntennaPortActivated_r10_PR; + +/* SPS-ConfigDL */ +typedef struct SPS_ConfigDL { + SPS_ConfigDL_PR present; + union SPS_ConfigDL_u { + NULL_t release; + struct SPS_ConfigDL__setup { + long semiPersistSchedIntervalDL; + long numberOfConfSPS_Processes; + N1PUCCH_AN_PersistentList_t n1PUCCH_AN_PersistentList; + struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10 { + SPS_ConfigDL__setup__twoAntennaPortActivated_r10_PR present; + union SPS_ConfigDL__setup__twoAntennaPortActivated_r10_u { + NULL_t release; + struct SPS_ConfigDL__setup__twoAntennaPortActivated_r10__setup { + N1PUCCH_AN_PersistentList_t n1PUCCH_AN_PersistentListP1_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *twoAntennaPortActivated_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SPS_ConfigDL_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_semiPersistSchedIntervalDL_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SPS_ConfigDL; + +#ifdef __cplusplus +} +#endif + +#endif /* _SPS_ConfigDL_H_ */ +#include diff --git a/lte/rrc/asn/SPS-ConfigUL.c b/lte/rrc/asn/SPS-ConfigUL.c new file mode 100644 index 000000000..59d24903d --- /dev/null +++ b/lte/rrc/asn/SPS-ConfigUL.c @@ -0,0 +1,726 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SPS-ConfigUL.h" + +static int +semiPersistSchedIntervalUL_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +semiPersistSchedIntervalUL_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +semiPersistSchedIntervalUL_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +semiPersistSchedIntervalUL_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +semiPersistSchedIntervalUL_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +semiPersistSchedIntervalUL_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +semiPersistSchedIntervalUL_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +semiPersistSchedIntervalUL_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +semiPersistSchedIntervalUL_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + semiPersistSchedIntervalUL_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +implicitReleaseAfter_21_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +implicitReleaseAfter_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +implicitReleaseAfter_21_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +implicitReleaseAfter_21_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +implicitReleaseAfter_21_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +implicitReleaseAfter_21_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +implicitReleaseAfter_21_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +implicitReleaseAfter_21_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +implicitReleaseAfter_21_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +implicitReleaseAfter_21_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + implicitReleaseAfter_21_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_p0_NominalPUSCH_Persistent_constraint_26(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -126 && value <= 24)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p0_UE_PUSCH_Persistent_constraint_26(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -8 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +twoIntervalsConfig_29_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +twoIntervalsConfig_29_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +twoIntervalsConfig_29_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +twoIntervalsConfig_29_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +twoIntervalsConfig_29_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +twoIntervalsConfig_29_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +twoIntervalsConfig_29_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +twoIntervalsConfig_29_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +twoIntervalsConfig_29_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +twoIntervalsConfig_29_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + twoIntervalsConfig_29_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_semiPersistSchedIntervalUL_constr_4 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_implicitReleaseAfter_constr_21 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_NominalPUSCH_Persistent_constr_27 = { + { APC_CONSTRAINED, 8, 8, -126, 24 } /* (-126..24) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_UE_PUSCH_Persistent_constr_28 = { + { APC_CONSTRAINED, 4, 4, -8, 7 } /* (-8..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_twoIntervalsConfig_constr_29 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SPS_ConfigUL_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_semiPersistSchedIntervalUL_value2enum_4[] = { + { 0, 4, "sf10" }, + { 1, 4, "sf20" }, + { 2, 4, "sf32" }, + { 3, 4, "sf40" }, + { 4, 4, "sf64" }, + { 5, 4, "sf80" }, + { 6, 5, "sf128" }, + { 7, 5, "sf160" }, + { 8, 5, "sf320" }, + { 9, 5, "sf640" }, + { 10, 6, "spare6" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } +}; +static unsigned int asn_MAP_semiPersistSchedIntervalUL_enum2value_4[] = { + 0, /* sf10(0) */ + 6, /* sf128(6) */ + 7, /* sf160(7) */ + 1, /* sf20(1) */ + 2, /* sf32(2) */ + 8, /* sf320(8) */ + 3, /* sf40(3) */ + 4, /* sf64(4) */ + 9, /* sf640(9) */ + 5, /* sf80(5) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11, /* spare5(11) */ + 10 /* spare6(10) */ +}; +static asn_INTEGER_specifics_t asn_SPC_semiPersistSchedIntervalUL_specs_4 = { + asn_MAP_semiPersistSchedIntervalUL_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_semiPersistSchedIntervalUL_enum2value_4, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_semiPersistSchedIntervalUL_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_semiPersistSchedIntervalUL_4 = { + "semiPersistSchedIntervalUL", + "semiPersistSchedIntervalUL", + semiPersistSchedIntervalUL_4_free, + semiPersistSchedIntervalUL_4_print, + semiPersistSchedIntervalUL_4_constraint, + semiPersistSchedIntervalUL_4_decode_ber, + semiPersistSchedIntervalUL_4_encode_der, + semiPersistSchedIntervalUL_4_decode_xer, + semiPersistSchedIntervalUL_4_encode_xer, + semiPersistSchedIntervalUL_4_decode_uper, + semiPersistSchedIntervalUL_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_semiPersistSchedIntervalUL_tags_4, + sizeof(asn_DEF_semiPersistSchedIntervalUL_tags_4) + /sizeof(asn_DEF_semiPersistSchedIntervalUL_tags_4[0]) - 1, /* 1 */ + asn_DEF_semiPersistSchedIntervalUL_tags_4, /* Same as above */ + sizeof(asn_DEF_semiPersistSchedIntervalUL_tags_4) + /sizeof(asn_DEF_semiPersistSchedIntervalUL_tags_4[0]), /* 2 */ + &asn_PER_type_semiPersistSchedIntervalUL_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_semiPersistSchedIntervalUL_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_implicitReleaseAfter_value2enum_21[] = { + { 0, 2, "e2" }, + { 1, 2, "e3" }, + { 2, 2, "e4" }, + { 3, 2, "e8" } +}; +static unsigned int asn_MAP_implicitReleaseAfter_enum2value_21[] = { + 0, /* e2(0) */ + 1, /* e3(1) */ + 2, /* e4(2) */ + 3 /* e8(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_implicitReleaseAfter_specs_21 = { + asn_MAP_implicitReleaseAfter_value2enum_21, /* "tag" => N; sorted by tag */ + asn_MAP_implicitReleaseAfter_enum2value_21, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_implicitReleaseAfter_tags_21[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_implicitReleaseAfter_21 = { + "implicitReleaseAfter", + "implicitReleaseAfter", + implicitReleaseAfter_21_free, + implicitReleaseAfter_21_print, + implicitReleaseAfter_21_constraint, + implicitReleaseAfter_21_decode_ber, + implicitReleaseAfter_21_encode_der, + implicitReleaseAfter_21_decode_xer, + implicitReleaseAfter_21_encode_xer, + implicitReleaseAfter_21_decode_uper, + implicitReleaseAfter_21_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_implicitReleaseAfter_tags_21, + sizeof(asn_DEF_implicitReleaseAfter_tags_21) + /sizeof(asn_DEF_implicitReleaseAfter_tags_21[0]) - 1, /* 1 */ + asn_DEF_implicitReleaseAfter_tags_21, /* Same as above */ + sizeof(asn_DEF_implicitReleaseAfter_tags_21) + /sizeof(asn_DEF_implicitReleaseAfter_tags_21[0]), /* 2 */ + &asn_PER_type_implicitReleaseAfter_constr_21, + 0, 0, /* Defined elsewhere */ + &asn_SPC_implicitReleaseAfter_specs_21 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_p0_Persistent_26[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigUL__setup__p0_Persistent, p0_NominalPUSCH_Persistent), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_NominalPUSCH_Persistent_constraint_26, + &asn_PER_memb_p0_NominalPUSCH_Persistent_constr_27, + 0, + "p0-NominalPUSCH-Persistent" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigUL__setup__p0_Persistent, p0_UE_PUSCH_Persistent), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_UE_PUSCH_Persistent_constraint_26, + &asn_PER_memb_p0_UE_PUSCH_Persistent_constr_28, + 0, + "p0-UE-PUSCH-Persistent" + }, +}; +static ber_tlv_tag_t asn_DEF_p0_Persistent_tags_26[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_p0_Persistent_tag2el_26[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* p0-NominalPUSCH-Persistent at 2761 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* p0-UE-PUSCH-Persistent at 2762 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_p0_Persistent_specs_26 = { + sizeof(struct SPS_ConfigUL__setup__p0_Persistent), + offsetof(struct SPS_ConfigUL__setup__p0_Persistent, _asn_ctx), + asn_MAP_p0_Persistent_tag2el_26, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_p0_Persistent_26 = { + "p0-Persistent", + "p0-Persistent", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_p0_Persistent_tags_26, + sizeof(asn_DEF_p0_Persistent_tags_26) + /sizeof(asn_DEF_p0_Persistent_tags_26[0]) - 1, /* 1 */ + asn_DEF_p0_Persistent_tags_26, /* Same as above */ + sizeof(asn_DEF_p0_Persistent_tags_26) + /sizeof(asn_DEF_p0_Persistent_tags_26[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_p0_Persistent_26, + 2, /* Elements count */ + &asn_SPC_p0_Persistent_specs_26 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_twoIntervalsConfig_value2enum_29[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_twoIntervalsConfig_enum2value_29[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_twoIntervalsConfig_specs_29 = { + asn_MAP_twoIntervalsConfig_value2enum_29, /* "tag" => N; sorted by tag */ + asn_MAP_twoIntervalsConfig_enum2value_29, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_twoIntervalsConfig_tags_29[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_twoIntervalsConfig_29 = { + "twoIntervalsConfig", + "twoIntervalsConfig", + twoIntervalsConfig_29_free, + twoIntervalsConfig_29_print, + twoIntervalsConfig_29_constraint, + twoIntervalsConfig_29_decode_ber, + twoIntervalsConfig_29_encode_der, + twoIntervalsConfig_29_decode_xer, + twoIntervalsConfig_29_encode_xer, + twoIntervalsConfig_29_decode_uper, + twoIntervalsConfig_29_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_twoIntervalsConfig_tags_29, + sizeof(asn_DEF_twoIntervalsConfig_tags_29) + /sizeof(asn_DEF_twoIntervalsConfig_tags_29[0]) - 1, /* 1 */ + asn_DEF_twoIntervalsConfig_tags_29, /* Same as above */ + sizeof(asn_DEF_twoIntervalsConfig_tags_29) + /sizeof(asn_DEF_twoIntervalsConfig_tags_29[0]), /* 2 */ + &asn_PER_type_twoIntervalsConfig_constr_29, + 0, 0, /* Defined elsewhere */ + &asn_SPC_twoIntervalsConfig_specs_29 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigUL__setup, semiPersistSchedIntervalUL), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_semiPersistSchedIntervalUL_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "semiPersistSchedIntervalUL" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigUL__setup, implicitReleaseAfter), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_implicitReleaseAfter_21, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "implicitReleaseAfter" + }, + { ATF_POINTER, 2, offsetof(struct SPS_ConfigUL__setup, p0_Persistent), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_p0_Persistent_26, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p0-Persistent" + }, + { ATF_POINTER, 1, offsetof(struct SPS_ConfigUL__setup, twoIntervalsConfig), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_twoIntervalsConfig_29, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "twoIntervalsConfig" + }, +}; +static int asn_MAP_setup_oms_3[] = { 2, 3 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* semiPersistSchedIntervalUL at 2755 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* implicitReleaseAfter at 2759 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* p0-Persistent at 2761 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* twoIntervalsConfig at 2764 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct SPS_ConfigUL__setup), + offsetof(struct SPS_ConfigUL__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 4, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + 3, /* Start extensions */ + 5 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 4, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SPS_ConfigUL_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigUL, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SPS_ConfigUL, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SPS_ConfigUL_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2752 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2758 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SPS_ConfigUL_specs_1 = { + sizeof(struct SPS_ConfigUL), + offsetof(struct SPS_ConfigUL, _asn_ctx), + offsetof(struct SPS_ConfigUL, present), + sizeof(((struct SPS_ConfigUL *)0)->present), + asn_MAP_SPS_ConfigUL_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SPS_ConfigUL = { + "SPS-ConfigUL", + "SPS-ConfigUL", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SPS_ConfigUL_constr_1, + asn_MBR_SPS_ConfigUL_1, + 2, /* Elements count */ + &asn_SPC_SPS_ConfigUL_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SPS-ConfigUL.h b/lte/rrc/asn/SPS-ConfigUL.h new file mode 100644 index 000000000..cd054f2b7 --- /dev/null +++ b/lte/rrc/asn/SPS-ConfigUL.h @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SPS_ConfigUL_H_ +#define _SPS_ConfigUL_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SPS_ConfigUL_PR { + SPS_ConfigUL_PR_NOTHING, /* No components present */ + SPS_ConfigUL_PR_release, + SPS_ConfigUL_PR_setup +} SPS_ConfigUL_PR; +typedef enum SPS_ConfigUL__setup__semiPersistSchedIntervalUL { + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf10 = 0, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf20 = 1, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf32 = 2, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf40 = 3, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf64 = 4, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf80 = 5, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf128 = 6, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf160 = 7, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf320 = 8, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_sf640 = 9, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_spare6 = 10, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_spare5 = 11, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_spare4 = 12, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_spare3 = 13, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_spare2 = 14, + SPS_ConfigUL__setup__semiPersistSchedIntervalUL_spare1 = 15 +} e_SPS_ConfigUL__setup__semiPersistSchedIntervalUL; +typedef enum SPS_ConfigUL__setup__implicitReleaseAfter { + SPS_ConfigUL__setup__implicitReleaseAfter_e2 = 0, + SPS_ConfigUL__setup__implicitReleaseAfter_e3 = 1, + SPS_ConfigUL__setup__implicitReleaseAfter_e4 = 2, + SPS_ConfigUL__setup__implicitReleaseAfter_e8 = 3 +} e_SPS_ConfigUL__setup__implicitReleaseAfter; +typedef enum SPS_ConfigUL__setup__twoIntervalsConfig { + SPS_ConfigUL__setup__twoIntervalsConfig_true = 0 +} e_SPS_ConfigUL__setup__twoIntervalsConfig; + +/* SPS-ConfigUL */ +typedef struct SPS_ConfigUL { + SPS_ConfigUL_PR present; + union SPS_ConfigUL_u { + NULL_t release; + struct SPS_ConfigUL__setup { + long semiPersistSchedIntervalUL; + long implicitReleaseAfter; + struct SPS_ConfigUL__setup__p0_Persistent { + long p0_NominalPUSCH_Persistent; + long p0_UE_PUSCH_Persistent; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *p0_Persistent; + long *twoIntervalsConfig /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SPS_ConfigUL_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_semiPersistSchedIntervalUL_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_implicitReleaseAfter_21; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_twoIntervalsConfig_29; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SPS_ConfigUL; + +#ifdef __cplusplus +} +#endif + +#endif /* _SPS_ConfigUL_H_ */ +#include diff --git a/lte/rrc/asn/SPS-RA-ConfigList-rlola.c b/lte/rrc/asn/SPS-RA-ConfigList-rlola.c new file mode 100644 index 000000000..d751e19ba --- /dev/null +++ b/lte/rrc/asn/SPS-RA-ConfigList-rlola.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SPS-RA-ConfigList-rlola.h" + +static asn_TYPE_member_t asn_MBR_SPS_RA_ConfigList_rlola_1[] = { + { ATF_POINTER, 2, offsetof(struct SPS_RA_ConfigList_rlola, semiPersistSchedCA_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CA_RNTI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "semiPersistSchedCA-RNTI" + }, + { ATF_POINTER, 1, offsetof(struct SPS_RA_ConfigList_rlola, ca_semiPersistSchedIntervalUL), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CA_semiPersistSchedIntervalUL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ca-semiPersistSchedIntervalUL" + }, +}; +static int asn_MAP_SPS_RA_ConfigList_rlola_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SPS_RA_ConfigList_rlola_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SPS_RA_ConfigList_rlola_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* semiPersistSchedCA-RNTI at 2493 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ca-semiPersistSchedIntervalUL at 2494 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SPS_RA_ConfigList_rlola_specs_1 = { + sizeof(struct SPS_RA_ConfigList_rlola), + offsetof(struct SPS_RA_ConfigList_rlola, _asn_ctx), + asn_MAP_SPS_RA_ConfigList_rlola_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SPS_RA_ConfigList_rlola_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SPS_RA_ConfigList_rlola = { + "SPS-RA-ConfigList-rlola", + "SPS-RA-ConfigList-rlola", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SPS_RA_ConfigList_rlola_tags_1, + sizeof(asn_DEF_SPS_RA_ConfigList_rlola_tags_1) + /sizeof(asn_DEF_SPS_RA_ConfigList_rlola_tags_1[0]), /* 1 */ + asn_DEF_SPS_RA_ConfigList_rlola_tags_1, /* Same as above */ + sizeof(asn_DEF_SPS_RA_ConfigList_rlola_tags_1) + /sizeof(asn_DEF_SPS_RA_ConfigList_rlola_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SPS_RA_ConfigList_rlola_1, + 2, /* Elements count */ + &asn_SPC_SPS_RA_ConfigList_rlola_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SPS-RA-ConfigList-rlola.h b/lte/rrc/asn/SPS-RA-ConfigList-rlola.h new file mode 100644 index 000000000..2625c8ec0 --- /dev/null +++ b/lte/rrc/asn/SPS-RA-ConfigList-rlola.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SPS_RA_ConfigList_rlola_H_ +#define _SPS_RA_ConfigList_rlola_H_ + + +#include + +/* Including external dependencies */ +#include "CA-RNTI.h" +#include "CA-semiPersistSchedIntervalUL.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SPS-RA-ConfigList-rlola */ +typedef struct SPS_RA_ConfigList_rlola { + CA_RNTI_t *semiPersistSchedCA_RNTI /* OPTIONAL */; + CA_semiPersistSchedIntervalUL_t *ca_semiPersistSchedIntervalUL /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SPS_RA_ConfigList_rlola_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SPS_RA_ConfigList_rlola; + +#ifdef __cplusplus +} +#endif + +#endif /* _SPS_RA_ConfigList_rlola_H_ */ +#include diff --git a/lte/rrc/asn/SRB-ToAddMod.c b/lte/rrc/asn/SRB-ToAddMod.c new file mode 100644 index 000000000..008626c24 --- /dev/null +++ b/lte/rrc/asn/SRB-ToAddMod.c @@ -0,0 +1,238 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SRB-ToAddMod.h" + +static int +memb_srb_Identity_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_rlc_Config_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_logicalChannelConfig_constr_6 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_srb_Identity_constr_2 = { + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (1..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_rlc_Config_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SRB_ToAddMod__rlc_Config, choice.explicitValue), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_RLC_Config, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitValue" + }, + { ATF_NOFLAGS, 0, offsetof(struct SRB_ToAddMod__rlc_Config, choice.defaultValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "defaultValue" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_rlc_Config_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* explicitValue at 2469 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* defaultValue at 2470 */ +}; +static asn_CHOICE_specifics_t asn_SPC_rlc_Config_specs_3 = { + sizeof(struct SRB_ToAddMod__rlc_Config), + offsetof(struct SRB_ToAddMod__rlc_Config, _asn_ctx), + offsetof(struct SRB_ToAddMod__rlc_Config, present), + sizeof(((struct SRB_ToAddMod__rlc_Config *)0)->present), + asn_MAP_rlc_Config_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rlc_Config_3 = { + "rlc-Config", + "rlc-Config", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_rlc_Config_constr_3, + asn_MBR_rlc_Config_3, + 2, /* Elements count */ + &asn_SPC_rlc_Config_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_logicalChannelConfig_6[] = { + { ATF_NOFLAGS, 0, offsetof(struct SRB_ToAddMod__logicalChannelConfig, choice.explicitValue), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LogicalChannelConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitValue" + }, + { ATF_NOFLAGS, 0, offsetof(struct SRB_ToAddMod__logicalChannelConfig, choice.defaultValue), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "defaultValue" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_logicalChannelConfig_tag2el_6[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* explicitValue at 2473 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* defaultValue at 2474 */ +}; +static asn_CHOICE_specifics_t asn_SPC_logicalChannelConfig_specs_6 = { + sizeof(struct SRB_ToAddMod__logicalChannelConfig), + offsetof(struct SRB_ToAddMod__logicalChannelConfig, _asn_ctx), + offsetof(struct SRB_ToAddMod__logicalChannelConfig, present), + sizeof(((struct SRB_ToAddMod__logicalChannelConfig *)0)->present), + asn_MAP_logicalChannelConfig_tag2el_6, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logicalChannelConfig_6 = { + "logicalChannelConfig", + "logicalChannelConfig", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_logicalChannelConfig_constr_6, + asn_MBR_logicalChannelConfig_6, + 2, /* Elements count */ + &asn_SPC_logicalChannelConfig_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SRB_ToAddMod_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SRB_ToAddMod, srb_Identity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_srb_Identity_constraint_1, + &asn_PER_memb_srb_Identity_constr_2, + 0, + "srb-Identity" + }, + { ATF_POINTER, 2, offsetof(struct SRB_ToAddMod, rlc_Config), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_rlc_Config_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlc-Config" + }, + { ATF_POINTER, 1, offsetof(struct SRB_ToAddMod, logicalChannelConfig), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_logicalChannelConfig_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logicalChannelConfig" + }, +}; +static int asn_MAP_SRB_ToAddMod_oms_1[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_SRB_ToAddMod_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SRB_ToAddMod_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srb-Identity at 2467 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlc-Config at 2469 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* logicalChannelConfig at 2473 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SRB_ToAddMod_specs_1 = { + sizeof(struct SRB_ToAddMod), + offsetof(struct SRB_ToAddMod, _asn_ctx), + asn_MAP_SRB_ToAddMod_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SRB_ToAddMod_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SRB_ToAddMod = { + "SRB-ToAddMod", + "SRB-ToAddMod", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SRB_ToAddMod_tags_1, + sizeof(asn_DEF_SRB_ToAddMod_tags_1) + /sizeof(asn_DEF_SRB_ToAddMod_tags_1[0]), /* 1 */ + asn_DEF_SRB_ToAddMod_tags_1, /* Same as above */ + sizeof(asn_DEF_SRB_ToAddMod_tags_1) + /sizeof(asn_DEF_SRB_ToAddMod_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SRB_ToAddMod_1, + 3, /* Elements count */ + &asn_SPC_SRB_ToAddMod_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SRB-ToAddMod.h b/lte/rrc/asn/SRB-ToAddMod.h new file mode 100644 index 000000000..2f48dffc2 --- /dev/null +++ b/lte/rrc/asn/SRB-ToAddMod.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SRB_ToAddMod_H_ +#define _SRB_ToAddMod_H_ + + +#include + +/* Including external dependencies */ +#include +#include "RLC-Config.h" +#include +#include +#include "LogicalChannelConfig.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SRB_ToAddMod__rlc_Config_PR { + SRB_ToAddMod__rlc_Config_PR_NOTHING, /* No components present */ + SRB_ToAddMod__rlc_Config_PR_explicitValue, + SRB_ToAddMod__rlc_Config_PR_defaultValue +} SRB_ToAddMod__rlc_Config_PR; +typedef enum SRB_ToAddMod__logicalChannelConfig_PR { + SRB_ToAddMod__logicalChannelConfig_PR_NOTHING, /* No components present */ + SRB_ToAddMod__logicalChannelConfig_PR_explicitValue, + SRB_ToAddMod__logicalChannelConfig_PR_defaultValue +} SRB_ToAddMod__logicalChannelConfig_PR; + +/* SRB-ToAddMod */ +typedef struct SRB_ToAddMod { + long srb_Identity; + struct SRB_ToAddMod__rlc_Config { + SRB_ToAddMod__rlc_Config_PR present; + union SRB_ToAddMod__rlc_Config_u { + RLC_Config_t explicitValue; + NULL_t defaultValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *rlc_Config; + struct SRB_ToAddMod__logicalChannelConfig { + SRB_ToAddMod__logicalChannelConfig_PR present; + union SRB_ToAddMod__logicalChannelConfig_u { + LogicalChannelConfig_t explicitValue; + NULL_t defaultValue; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *logicalChannelConfig; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SRB_ToAddMod_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SRB_ToAddMod; + +#ifdef __cplusplus +} +#endif + +#endif /* _SRB_ToAddMod_H_ */ +#include diff --git a/lte/rrc/asn/SRB-ToAddModList.c b/lte/rrc/asn/SRB-ToAddModList.c new file mode 100644 index 000000000..eb314bed9 --- /dev/null +++ b/lte/rrc/asn/SRB-ToAddModList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SRB-ToAddModList.h" + +static asn_per_constraints_t asn_PER_type_SRB_ToAddModList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SRB_ToAddModList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SRB_ToAddMod, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SRB_ToAddModList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SRB_ToAddModList_specs_1 = { + sizeof(struct SRB_ToAddModList), + offsetof(struct SRB_ToAddModList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SRB_ToAddModList = { + "SRB-ToAddModList", + "SRB-ToAddModList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SRB_ToAddModList_tags_1, + sizeof(asn_DEF_SRB_ToAddModList_tags_1) + /sizeof(asn_DEF_SRB_ToAddModList_tags_1[0]), /* 1 */ + asn_DEF_SRB_ToAddModList_tags_1, /* Same as above */ + sizeof(asn_DEF_SRB_ToAddModList_tags_1) + /sizeof(asn_DEF_SRB_ToAddModList_tags_1[0]), /* 1 */ + &asn_PER_type_SRB_ToAddModList_constr_1, + asn_MBR_SRB_ToAddModList_1, + 1, /* Single element */ + &asn_SPC_SRB_ToAddModList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SRB-ToAddModList.h b/lte/rrc/asn/SRB-ToAddModList.h new file mode 100644 index 000000000..3508810cf --- /dev/null +++ b/lte/rrc/asn/SRB-ToAddModList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SRB_ToAddModList_H_ +#define _SRB_ToAddModList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SRB_ToAddMod; + +/* SRB-ToAddModList */ +typedef struct SRB_ToAddModList { + A_SEQUENCE_OF(struct SRB_ToAddMod) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SRB_ToAddModList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SRB_ToAddModList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SRB-ToAddMod.h" + +#endif /* _SRB_ToAddModList_H_ */ +#include diff --git a/lte/rrc/asn/SRS-ConfigAp-r10.c b/lte/rrc/asn/SRS-ConfigAp-r10.c new file mode 100644 index 000000000..e1ed7a311 --- /dev/null +++ b/lte/rrc/asn/SRS-ConfigAp-r10.c @@ -0,0 +1,597 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SRS-ConfigAp-r10.h" + +static int +srs_AntennaPortAp_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_AntennaPortAp_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_AntennaPortAp_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_AntennaPortAp_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_AntennaPortAp_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_AntennaPortAp_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_AntennaPortAp_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_AntennaPortAp_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_AntennaPortAp_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_AntennaPortAp_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +srs_BandwidthAp_r10_7_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_BandwidthAp_r10_7_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_BandwidthAp_r10_7_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_BandwidthAp_r10_7_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_BandwidthAp_r10_7_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_BandwidthAp_r10_7_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_BandwidthAp_r10_7_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_BandwidthAp_r10_7_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_BandwidthAp_r10_7_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_BandwidthAp_r10_7_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +cyclicShiftAp_r10_14_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cyclicShiftAp_r10_14_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cyclicShiftAp_r10_14_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cyclicShiftAp_r10_14_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cyclicShiftAp_r10_14_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cyclicShiftAp_r10_14_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cyclicShiftAp_r10_14_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cyclicShiftAp_r10_14_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cyclicShiftAp_r10_14_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cyclicShiftAp_r10_14_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cyclicShiftAp_r10_14_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_freqDomainPositionAp_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 23)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_transmissionCombAp_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_srs_AntennaPortAp_r10_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_srs_BandwidthAp_r10_constr_7 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cyclicShiftAp_r10_constr_14 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_freqDomainPositionAp_r10_constr_12 = { + { APC_CONSTRAINED, 5, 5, 0, 23 } /* (0..23) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_transmissionCombAp_r10_constr_13 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_srs_AntennaPortAp_r10_value2enum_2[] = { + { 0, 3, "an1" }, + { 1, 3, "an2" }, + { 2, 3, "an4" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_srs_AntennaPortAp_r10_enum2value_2[] = { + 0, /* an1(0) */ + 1, /* an2(1) */ + 2, /* an4(2) */ + 3 /* spare1(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_AntennaPortAp_r10_specs_2 = { + asn_MAP_srs_AntennaPortAp_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_srs_AntennaPortAp_r10_enum2value_2, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_AntennaPortAp_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_AntennaPortAp_r10_2 = { + "srs-AntennaPortAp-r10", + "srs-AntennaPortAp-r10", + srs_AntennaPortAp_r10_2_free, + srs_AntennaPortAp_r10_2_print, + srs_AntennaPortAp_r10_2_constraint, + srs_AntennaPortAp_r10_2_decode_ber, + srs_AntennaPortAp_r10_2_encode_der, + srs_AntennaPortAp_r10_2_decode_xer, + srs_AntennaPortAp_r10_2_encode_xer, + srs_AntennaPortAp_r10_2_decode_uper, + srs_AntennaPortAp_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_AntennaPortAp_r10_tags_2, + sizeof(asn_DEF_srs_AntennaPortAp_r10_tags_2) + /sizeof(asn_DEF_srs_AntennaPortAp_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_srs_AntennaPortAp_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_srs_AntennaPortAp_r10_tags_2) + /sizeof(asn_DEF_srs_AntennaPortAp_r10_tags_2[0]), /* 2 */ + &asn_PER_type_srs_AntennaPortAp_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_AntennaPortAp_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_srs_BandwidthAp_r10_value2enum_7[] = { + { 0, 3, "bw0" }, + { 1, 3, "bw1" }, + { 2, 3, "bw2" }, + { 3, 3, "bw3" } +}; +static unsigned int asn_MAP_srs_BandwidthAp_r10_enum2value_7[] = { + 0, /* bw0(0) */ + 1, /* bw1(1) */ + 2, /* bw2(2) */ + 3 /* bw3(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_BandwidthAp_r10_specs_7 = { + asn_MAP_srs_BandwidthAp_r10_value2enum_7, /* "tag" => N; sorted by tag */ + asn_MAP_srs_BandwidthAp_r10_enum2value_7, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_BandwidthAp_r10_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_BandwidthAp_r10_7 = { + "srs-BandwidthAp-r10", + "srs-BandwidthAp-r10", + srs_BandwidthAp_r10_7_free, + srs_BandwidthAp_r10_7_print, + srs_BandwidthAp_r10_7_constraint, + srs_BandwidthAp_r10_7_decode_ber, + srs_BandwidthAp_r10_7_encode_der, + srs_BandwidthAp_r10_7_decode_xer, + srs_BandwidthAp_r10_7_encode_xer, + srs_BandwidthAp_r10_7_decode_uper, + srs_BandwidthAp_r10_7_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_BandwidthAp_r10_tags_7, + sizeof(asn_DEF_srs_BandwidthAp_r10_tags_7) + /sizeof(asn_DEF_srs_BandwidthAp_r10_tags_7[0]) - 1, /* 1 */ + asn_DEF_srs_BandwidthAp_r10_tags_7, /* Same as above */ + sizeof(asn_DEF_srs_BandwidthAp_r10_tags_7) + /sizeof(asn_DEF_srs_BandwidthAp_r10_tags_7[0]), /* 2 */ + &asn_PER_type_srs_BandwidthAp_r10_constr_7, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_BandwidthAp_r10_specs_7 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_cyclicShiftAp_r10_value2enum_14[] = { + { 0, 3, "cs0" }, + { 1, 3, "cs1" }, + { 2, 3, "cs2" }, + { 3, 3, "cs3" }, + { 4, 3, "cs4" }, + { 5, 3, "cs5" }, + { 6, 3, "cs6" }, + { 7, 3, "cs7" } +}; +static unsigned int asn_MAP_cyclicShiftAp_r10_enum2value_14[] = { + 0, /* cs0(0) */ + 1, /* cs1(1) */ + 2, /* cs2(2) */ + 3, /* cs3(3) */ + 4, /* cs4(4) */ + 5, /* cs5(5) */ + 6, /* cs6(6) */ + 7 /* cs7(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cyclicShiftAp_r10_specs_14 = { + asn_MAP_cyclicShiftAp_r10_value2enum_14, /* "tag" => N; sorted by tag */ + asn_MAP_cyclicShiftAp_r10_enum2value_14, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cyclicShiftAp_r10_tags_14[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cyclicShiftAp_r10_14 = { + "cyclicShiftAp-r10", + "cyclicShiftAp-r10", + cyclicShiftAp_r10_14_free, + cyclicShiftAp_r10_14_print, + cyclicShiftAp_r10_14_constraint, + cyclicShiftAp_r10_14_decode_ber, + cyclicShiftAp_r10_14_encode_der, + cyclicShiftAp_r10_14_decode_xer, + cyclicShiftAp_r10_14_encode_xer, + cyclicShiftAp_r10_14_decode_uper, + cyclicShiftAp_r10_14_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cyclicShiftAp_r10_tags_14, + sizeof(asn_DEF_cyclicShiftAp_r10_tags_14) + /sizeof(asn_DEF_cyclicShiftAp_r10_tags_14[0]) - 1, /* 1 */ + asn_DEF_cyclicShiftAp_r10_tags_14, /* Same as above */ + sizeof(asn_DEF_cyclicShiftAp_r10_tags_14) + /sizeof(asn_DEF_cyclicShiftAp_r10_tags_14[0]), /* 2 */ + &asn_PER_type_cyclicShiftAp_r10_constr_14, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cyclicShiftAp_r10_specs_14 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SRS_ConfigAp_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SRS_ConfigAp_r10, srs_AntennaPortAp_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_AntennaPortAp_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-AntennaPortAp-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SRS_ConfigAp_r10, srs_BandwidthAp_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_BandwidthAp_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-BandwidthAp-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SRS_ConfigAp_r10, freqDomainPositionAp_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_freqDomainPositionAp_r10_constraint_1, + &asn_PER_memb_freqDomainPositionAp_r10_constr_12, + 0, + "freqDomainPositionAp-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SRS_ConfigAp_r10, transmissionCombAp_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_transmissionCombAp_r10_constraint_1, + &asn_PER_memb_transmissionCombAp_r10_constr_13, + 0, + "transmissionCombAp-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SRS_ConfigAp_r10, cyclicShiftAp_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cyclicShiftAp_r10_14, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cyclicShiftAp-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_SRS_ConfigAp_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SRS_ConfigAp_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srs-AntennaPortAp-r10 at 2718 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* srs-BandwidthAp-r10 at 2719 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* freqDomainPositionAp-r10 at 2720 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* transmissionCombAp-r10 at 2721 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* cyclicShiftAp-r10 at 2722 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SRS_ConfigAp_r10_specs_1 = { + sizeof(struct SRS_ConfigAp_r10), + offsetof(struct SRS_ConfigAp_r10, _asn_ctx), + asn_MAP_SRS_ConfigAp_r10_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SRS_ConfigAp_r10 = { + "SRS-ConfigAp-r10", + "SRS-ConfigAp-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SRS_ConfigAp_r10_tags_1, + sizeof(asn_DEF_SRS_ConfigAp_r10_tags_1) + /sizeof(asn_DEF_SRS_ConfigAp_r10_tags_1[0]), /* 1 */ + asn_DEF_SRS_ConfigAp_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_SRS_ConfigAp_r10_tags_1) + /sizeof(asn_DEF_SRS_ConfigAp_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SRS_ConfigAp_r10_1, + 5, /* Elements count */ + &asn_SPC_SRS_ConfigAp_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SRS-ConfigAp-r10.h b/lte/rrc/asn/SRS-ConfigAp-r10.h new file mode 100644 index 000000000..9b99a2c7e --- /dev/null +++ b/lte/rrc/asn/SRS-ConfigAp-r10.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SRS_ConfigAp_r10_H_ +#define _SRS_ConfigAp_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SRS_ConfigAp_r10__srs_AntennaPortAp_r10 { + SRS_ConfigAp_r10__srs_AntennaPortAp_r10_an1 = 0, + SRS_ConfigAp_r10__srs_AntennaPortAp_r10_an2 = 1, + SRS_ConfigAp_r10__srs_AntennaPortAp_r10_an4 = 2, + SRS_ConfigAp_r10__srs_AntennaPortAp_r10_spare1 = 3 +} e_SRS_ConfigAp_r10__srs_AntennaPortAp_r10; +typedef enum SRS_ConfigAp_r10__srs_BandwidthAp_r10 { + SRS_ConfigAp_r10__srs_BandwidthAp_r10_bw0 = 0, + SRS_ConfigAp_r10__srs_BandwidthAp_r10_bw1 = 1, + SRS_ConfigAp_r10__srs_BandwidthAp_r10_bw2 = 2, + SRS_ConfigAp_r10__srs_BandwidthAp_r10_bw3 = 3 +} e_SRS_ConfigAp_r10__srs_BandwidthAp_r10; +typedef enum SRS_ConfigAp_r10__cyclicShiftAp_r10 { + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs0 = 0, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs1 = 1, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs2 = 2, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs3 = 3, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs4 = 4, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs5 = 5, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs6 = 6, + SRS_ConfigAp_r10__cyclicShiftAp_r10_cs7 = 7 +} e_SRS_ConfigAp_r10__cyclicShiftAp_r10; + +/* SRS-ConfigAp-r10 */ +typedef struct SRS_ConfigAp_r10 { + long srs_AntennaPortAp_r10; + long srs_BandwidthAp_r10; + long freqDomainPositionAp_r10; + long transmissionCombAp_r10; + long cyclicShiftAp_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SRS_ConfigAp_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_AntennaPortAp_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_BandwidthAp_r10_7; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_cyclicShiftAp_r10_14; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SRS_ConfigAp_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _SRS_ConfigAp_r10_H_ */ +#include diff --git a/lte/rrc/asn/SchedulingInfo.c b/lte/rrc/asn/SchedulingInfo.c index fcf8343f2..24dfafa42 100644 --- a/lte/rrc/asn/SchedulingInfo.c +++ b/lte/rrc/asn/SchedulingInfo.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SchedulingInfo.h" @@ -22,7 +23,6 @@ static void si_Periodicity_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -95,12 +95,12 @@ si_Periodicity_2_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_si_Periodicity_constr_2 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_si_Periodicity_constr_2 = { { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_si_Periodicity_value2enum_2[] = { +static asn_INTEGER_enum_map_t asn_MAP_si_Periodicity_value2enum_2[] = { { 0, 3, "rf8" }, { 1, 4, "rf16" }, { 2, 4, "rf32" }, @@ -109,7 +109,7 @@ static const asn_INTEGER_enum_map_t asn_MAP_si_Periodicity_value2enum_2[] = { { 5, 5, "rf256" }, { 6, 5, "rf512" } }; -static const unsigned int asn_MAP_si_Periodicity_enum2value_2[] = { +static unsigned int asn_MAP_si_Periodicity_enum2value_2[] = { 4, /* rf128(4) */ 1, /* rf16(1) */ 5, /* rf256(5) */ @@ -118,7 +118,7 @@ static const unsigned int asn_MAP_si_Periodicity_enum2value_2[] = { 3, /* rf64(3) */ 0 /* rf8(0) */ }; -static const asn_INTEGER_specifics_t asn_SPC_si_Periodicity_specs_2 = { +static asn_INTEGER_specifics_t asn_SPC_si_Periodicity_specs_2 = { asn_MAP_si_Periodicity_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_si_Periodicity_enum2value_2, /* N => "tag"; sorted by N */ 7, /* Number of elements in the maps */ @@ -127,7 +127,7 @@ static const asn_INTEGER_specifics_t asn_SPC_si_Periodicity_specs_2 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_si_Periodicity_tags_2[] = { +static ber_tlv_tag_t asn_DEF_si_Periodicity_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -176,12 +176,12 @@ static asn_TYPE_member_t asn_MBR_SchedulingInfo_1[] = { "sib-MappingInfo" }, }; -static const ber_tlv_tag_t asn_DEF_SchedulingInfo_tags_1[] = { +static ber_tlv_tag_t asn_DEF_SchedulingInfo_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_SchedulingInfo_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* si-Periodicity */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sib-MappingInfo */ +static asn_TYPE_tag2member_t asn_MAP_SchedulingInfo_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* si-Periodicity at 1215 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sib-MappingInfo at 1217 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SchedulingInfo_specs_1 = { sizeof(struct SchedulingInfo), diff --git a/lte/rrc/asn/SchedulingInfo.h b/lte/rrc/asn/SchedulingInfo.h index 16e015192..9541aaa3b 100644 --- a/lte/rrc/asn/SchedulingInfo.h +++ b/lte/rrc/asn/SchedulingInfo.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SchedulingInfo_H_ @@ -20,15 +21,15 @@ extern "C" { #endif /* Dependencies */ -typedef enum si_Periodicity { - si_Periodicity_rf8 = 0, - si_Periodicity_rf16 = 1, - si_Periodicity_rf32 = 2, - si_Periodicity_rf64 = 3, - si_Periodicity_rf128 = 4, - si_Periodicity_rf256 = 5, - si_Periodicity_rf512 = 6 -} e_si_Periodicity; +typedef enum SchedulingInfo__si_Periodicity { + SchedulingInfo__si_Periodicity_rf8 = 0, + SchedulingInfo__si_Periodicity_rf16 = 1, + SchedulingInfo__si_Periodicity_rf32 = 2, + SchedulingInfo__si_Periodicity_rf64 = 3, + SchedulingInfo__si_Periodicity_rf128 = 4, + SchedulingInfo__si_Periodicity_rf256 = 5, + SchedulingInfo__si_Periodicity_rf512 = 6 +} e_SchedulingInfo__si_Periodicity; /* SchedulingInfo */ typedef struct SchedulingInfo { diff --git a/lte/rrc/asn/SchedulingInfoList.c b/lte/rrc/asn/SchedulingInfoList.c index 86b17ebac..48cd5242c 100644 --- a/lte/rrc/asn/SchedulingInfoList.c +++ b/lte/rrc/asn/SchedulingInfoList.c @@ -1,12 +1,13 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SchedulingInfoList.h" -static asn_per_constraints_t asn_PER_type_SchedulingInfoList_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_SchedulingInfoList_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, 0, 0 /* No PER value map */ @@ -22,7 +23,7 @@ static asn_TYPE_member_t asn_MBR_SchedulingInfoList_1[] = { "" }, }; -static const ber_tlv_tag_t asn_DEF_SchedulingInfoList_tags_1[] = { +static ber_tlv_tag_t asn_DEF_SchedulingInfoList_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SET_OF_specifics_t asn_SPC_SchedulingInfoList_specs_1 = { diff --git a/lte/rrc/asn/SchedulingInfoList.h b/lte/rrc/asn/SchedulingInfoList.h index 6ca8e6c5c..f6a92ace0 100644 --- a/lte/rrc/asn/SchedulingInfoList.h +++ b/lte/rrc/asn/SchedulingInfoList.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SchedulingInfoList_H_ diff --git a/lte/rrc/asn/SchedulingRequestConfig-v1020.c b/lte/rrc/asn/SchedulingRequestConfig-v1020.c new file mode 100644 index 000000000..49c6ea917 --- /dev/null +++ b/lte/rrc/asn/SchedulingRequestConfig-v1020.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SchedulingRequestConfig-v1020.h" + +static int +memb_sr_PUCCH_ResourceIndexP1_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_sr_PUCCH_ResourceIndexP1_r10_constr_2 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SchedulingRequestConfig_v1020_1[] = { + { ATF_POINTER, 1, offsetof(struct SchedulingRequestConfig_v1020, sr_PUCCH_ResourceIndexP1_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sr_PUCCH_ResourceIndexP1_r10_constraint_1, + &asn_PER_memb_sr_PUCCH_ResourceIndexP1_r10_constr_2, + 0, + "sr-PUCCH-ResourceIndexP1-r10" + }, +}; +static int asn_MAP_SchedulingRequestConfig_v1020_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_SchedulingRequestConfig_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SchedulingRequestConfig_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sr-PUCCH-ResourceIndexP1-r10 at 2668 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SchedulingRequestConfig_v1020_specs_1 = { + sizeof(struct SchedulingRequestConfig_v1020), + offsetof(struct SchedulingRequestConfig_v1020, _asn_ctx), + asn_MAP_SchedulingRequestConfig_v1020_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_SchedulingRequestConfig_v1020_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SchedulingRequestConfig_v1020 = { + "SchedulingRequestConfig-v1020", + "SchedulingRequestConfig-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SchedulingRequestConfig_v1020_tags_1, + sizeof(asn_DEF_SchedulingRequestConfig_v1020_tags_1) + /sizeof(asn_DEF_SchedulingRequestConfig_v1020_tags_1[0]), /* 1 */ + asn_DEF_SchedulingRequestConfig_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_SchedulingRequestConfig_v1020_tags_1) + /sizeof(asn_DEF_SchedulingRequestConfig_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SchedulingRequestConfig_v1020_1, + 1, /* Elements count */ + &asn_SPC_SchedulingRequestConfig_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SchedulingRequestConfig-v1020.h b/lte/rrc/asn/SchedulingRequestConfig-v1020.h new file mode 100644 index 000000000..b99266a1d --- /dev/null +++ b/lte/rrc/asn/SchedulingRequestConfig-v1020.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SchedulingRequestConfig_v1020_H_ +#define _SchedulingRequestConfig_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SchedulingRequestConfig-v1020 */ +typedef struct SchedulingRequestConfig_v1020 { + long *sr_PUCCH_ResourceIndexP1_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SchedulingRequestConfig_v1020_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SchedulingRequestConfig_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _SchedulingRequestConfig_v1020_H_ */ +#include diff --git a/lte/rrc/asn/SchedulingRequestConfig.c b/lte/rrc/asn/SchedulingRequestConfig.c new file mode 100644 index 000000000..473ed205a --- /dev/null +++ b/lte/rrc/asn/SchedulingRequestConfig.c @@ -0,0 +1,355 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SchedulingRequestConfig.h" + +static int +dsr_TransMax_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +dsr_TransMax_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +dsr_TransMax_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +dsr_TransMax_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +dsr_TransMax_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +dsr_TransMax_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +dsr_TransMax_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +dsr_TransMax_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +dsr_TransMax_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +dsr_TransMax_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + dsr_TransMax_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_sr_PUCCH_ResourceIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 2047)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_sr_ConfigIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 157)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_dsr_TransMax_constr_6 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sr_PUCCH_ResourceIndex_constr_4 = { + { APC_CONSTRAINED, 11, 11, 0, 2047 } /* (0..2047) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sr_ConfigIndex_constr_5 = { + { APC_CONSTRAINED, 8, 8, 0, 157 } /* (0..157) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SchedulingRequestConfig_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_dsr_TransMax_value2enum_6[] = { + { 0, 2, "n4" }, + { 1, 2, "n8" }, + { 2, 3, "n16" }, + { 3, 3, "n32" }, + { 4, 3, "n64" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } +}; +static unsigned int asn_MAP_dsr_TransMax_enum2value_6[] = { + 2, /* n16(2) */ + 3, /* n32(3) */ + 0, /* n4(0) */ + 4, /* n64(4) */ + 1, /* n8(1) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5 /* spare3(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_dsr_TransMax_specs_6 = { + asn_MAP_dsr_TransMax_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_dsr_TransMax_enum2value_6, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_dsr_TransMax_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dsr_TransMax_6 = { + "dsr-TransMax", + "dsr-TransMax", + dsr_TransMax_6_free, + dsr_TransMax_6_print, + dsr_TransMax_6_constraint, + dsr_TransMax_6_decode_ber, + dsr_TransMax_6_encode_der, + dsr_TransMax_6_decode_xer, + dsr_TransMax_6_encode_xer, + dsr_TransMax_6_decode_uper, + dsr_TransMax_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_dsr_TransMax_tags_6, + sizeof(asn_DEF_dsr_TransMax_tags_6) + /sizeof(asn_DEF_dsr_TransMax_tags_6[0]) - 1, /* 1 */ + asn_DEF_dsr_TransMax_tags_6, /* Same as above */ + sizeof(asn_DEF_dsr_TransMax_tags_6) + /sizeof(asn_DEF_dsr_TransMax_tags_6[0]), /* 2 */ + &asn_PER_type_dsr_TransMax_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_dsr_TransMax_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SchedulingRequestConfig__setup, sr_PUCCH_ResourceIndex), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sr_PUCCH_ResourceIndex_constraint_3, + &asn_PER_memb_sr_PUCCH_ResourceIndex_constr_4, + 0, + "sr-PUCCH-ResourceIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct SchedulingRequestConfig__setup, sr_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_sr_ConfigIndex_constraint_3, + &asn_PER_memb_sr_ConfigIndex_constr_5, + 0, + "sr-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct SchedulingRequestConfig__setup, dsr_TransMax), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_dsr_TransMax_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dsr-TransMax" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sr-PUCCH-ResourceIndex at 2660 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sr-ConfigIndex at 2661 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* dsr-TransMax at 2663 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct SchedulingRequestConfig__setup), + offsetof(struct SchedulingRequestConfig__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 3, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SchedulingRequestConfig_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SchedulingRequestConfig, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SchedulingRequestConfig, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SchedulingRequestConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2658 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2660 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SchedulingRequestConfig_specs_1 = { + sizeof(struct SchedulingRequestConfig), + offsetof(struct SchedulingRequestConfig, _asn_ctx), + offsetof(struct SchedulingRequestConfig, present), + sizeof(((struct SchedulingRequestConfig *)0)->present), + asn_MAP_SchedulingRequestConfig_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SchedulingRequestConfig = { + "SchedulingRequestConfig", + "SchedulingRequestConfig", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SchedulingRequestConfig_constr_1, + asn_MBR_SchedulingRequestConfig_1, + 2, /* Elements count */ + &asn_SPC_SchedulingRequestConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SchedulingRequestConfig.h b/lte/rrc/asn/SchedulingRequestConfig.h new file mode 100644 index 000000000..a67bdbe42 --- /dev/null +++ b/lte/rrc/asn/SchedulingRequestConfig.h @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SchedulingRequestConfig_H_ +#define _SchedulingRequestConfig_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SchedulingRequestConfig_PR { + SchedulingRequestConfig_PR_NOTHING, /* No components present */ + SchedulingRequestConfig_PR_release, + SchedulingRequestConfig_PR_setup +} SchedulingRequestConfig_PR; +typedef enum SchedulingRequestConfig__setup__dsr_TransMax { + SchedulingRequestConfig__setup__dsr_TransMax_n4 = 0, + SchedulingRequestConfig__setup__dsr_TransMax_n8 = 1, + SchedulingRequestConfig__setup__dsr_TransMax_n16 = 2, + SchedulingRequestConfig__setup__dsr_TransMax_n32 = 3, + SchedulingRequestConfig__setup__dsr_TransMax_n64 = 4, + SchedulingRequestConfig__setup__dsr_TransMax_spare3 = 5, + SchedulingRequestConfig__setup__dsr_TransMax_spare2 = 6, + SchedulingRequestConfig__setup__dsr_TransMax_spare1 = 7 +} e_SchedulingRequestConfig__setup__dsr_TransMax; + +/* SchedulingRequestConfig */ +typedef struct SchedulingRequestConfig { + SchedulingRequestConfig_PR present; + union SchedulingRequestConfig_u { + NULL_t release; + struct SchedulingRequestConfig__setup { + long sr_PUCCH_ResourceIndex; + long sr_ConfigIndex; + long dsr_TransMax; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SchedulingRequestConfig_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_dsr_TransMax_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SchedulingRequestConfig; + +#ifdef __cplusplus +} +#endif + +#endif /* _SchedulingRequestConfig_H_ */ +#include diff --git a/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.c b/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.c new file mode 100644 index 000000000..c0de4aefb --- /dev/null +++ b/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecondaryPreRegistrationZoneIdListHRPD.h" + +static asn_per_constraints_t asn_PER_type_SecondaryPreRegistrationZoneIdListHRPD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 1, 1, 1, 2 } /* (SIZE(1..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SecondaryPreRegistrationZoneIdListHRPD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + 0, + &asn_DEF_PreRegistrationZoneIdHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SecondaryPreRegistrationZoneIdListHRPD_specs_1 = { + sizeof(struct SecondaryPreRegistrationZoneIdListHRPD), + offsetof(struct SecondaryPreRegistrationZoneIdListHRPD, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SecondaryPreRegistrationZoneIdListHRPD = { + "SecondaryPreRegistrationZoneIdListHRPD", + "SecondaryPreRegistrationZoneIdListHRPD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1, + sizeof(asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1) + /sizeof(asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1[0]), /* 1 */ + asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1) + /sizeof(asn_DEF_SecondaryPreRegistrationZoneIdListHRPD_tags_1[0]), /* 1 */ + &asn_PER_type_SecondaryPreRegistrationZoneIdListHRPD_constr_1, + asn_MBR_SecondaryPreRegistrationZoneIdListHRPD_1, + 1, /* Single element */ + &asn_SPC_SecondaryPreRegistrationZoneIdListHRPD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h b/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h new file mode 100644 index 000000000..9f6c5de7e --- /dev/null +++ b/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecondaryPreRegistrationZoneIdListHRPD_H_ +#define _SecondaryPreRegistrationZoneIdListHRPD_H_ + + +#include + +/* Including external dependencies */ +#include "PreRegistrationZoneIdHRPD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SecondaryPreRegistrationZoneIdListHRPD */ +typedef struct SecondaryPreRegistrationZoneIdListHRPD { + A_SEQUENCE_OF(PreRegistrationZoneIdHRPD_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecondaryPreRegistrationZoneIdListHRPD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecondaryPreRegistrationZoneIdListHRPD; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecondaryPreRegistrationZoneIdListHRPD_H_ */ +#include diff --git a/lte/rrc/asn/SecurityAlgorithmConfig.c b/lte/rrc/asn/SecurityAlgorithmConfig.c new file mode 100644 index 000000000..610d5200c --- /dev/null +++ b/lte/rrc/asn/SecurityAlgorithmConfig.c @@ -0,0 +1,376 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityAlgorithmConfig.h" + +static int +cipheringAlgorithm_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cipheringAlgorithm_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cipheringAlgorithm_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cipheringAlgorithm_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cipheringAlgorithm_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cipheringAlgorithm_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cipheringAlgorithm_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cipheringAlgorithm_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cipheringAlgorithm_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cipheringAlgorithm_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cipheringAlgorithm_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +integrityProtAlgorithm_12_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +integrityProtAlgorithm_12_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +integrityProtAlgorithm_12_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +integrityProtAlgorithm_12_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +integrityProtAlgorithm_12_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +integrityProtAlgorithm_12_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +integrityProtAlgorithm_12_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +integrityProtAlgorithm_12_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +integrityProtAlgorithm_12_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +integrityProtAlgorithm_12_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + integrityProtAlgorithm_12_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_cipheringAlgorithm_constr_2 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_integrityProtAlgorithm_constr_12 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 3, 3, 0, 7 } /* (0..7,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_cipheringAlgorithm_value2enum_2[] = { + { 0, 4, "eea0" }, + { 1, 4, "eea1" }, + { 2, 4, "eea2" }, + { 3, 6, "spare5" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_cipheringAlgorithm_enum2value_2[] = { + 0, /* eea0(0) */ + 1, /* eea1(1) */ + 2, /* eea2(2) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 3 /* spare5(3) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_cipheringAlgorithm_specs_2 = { + asn_MAP_cipheringAlgorithm_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_cipheringAlgorithm_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cipheringAlgorithm_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cipheringAlgorithm_2 = { + "cipheringAlgorithm", + "cipheringAlgorithm", + cipheringAlgorithm_2_free, + cipheringAlgorithm_2_print, + cipheringAlgorithm_2_constraint, + cipheringAlgorithm_2_decode_ber, + cipheringAlgorithm_2_encode_der, + cipheringAlgorithm_2_decode_xer, + cipheringAlgorithm_2_encode_xer, + cipheringAlgorithm_2_decode_uper, + cipheringAlgorithm_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cipheringAlgorithm_tags_2, + sizeof(asn_DEF_cipheringAlgorithm_tags_2) + /sizeof(asn_DEF_cipheringAlgorithm_tags_2[0]) - 1, /* 1 */ + asn_DEF_cipheringAlgorithm_tags_2, /* Same as above */ + sizeof(asn_DEF_cipheringAlgorithm_tags_2) + /sizeof(asn_DEF_cipheringAlgorithm_tags_2[0]), /* 2 */ + &asn_PER_type_cipheringAlgorithm_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cipheringAlgorithm_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_integrityProtAlgorithm_value2enum_12[] = { + { 0, 9, "eia0-v920" }, + { 1, 4, "eia1" }, + { 2, 4, "eia2" }, + { 3, 6, "spare5" }, + { 4, 6, "spare4" }, + { 5, 6, "spare3" }, + { 6, 6, "spare2" }, + { 7, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_integrityProtAlgorithm_enum2value_12[] = { + 0, /* eia0-v920(0) */ + 1, /* eia1(1) */ + 2, /* eia2(2) */ + 7, /* spare1(7) */ + 6, /* spare2(6) */ + 5, /* spare3(5) */ + 4, /* spare4(4) */ + 3 /* spare5(3) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_integrityProtAlgorithm_specs_12 = { + asn_MAP_integrityProtAlgorithm_value2enum_12, /* "tag" => N; sorted by tag */ + asn_MAP_integrityProtAlgorithm_enum2value_12, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 9, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_integrityProtAlgorithm_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_integrityProtAlgorithm_12 = { + "integrityProtAlgorithm", + "integrityProtAlgorithm", + integrityProtAlgorithm_12_free, + integrityProtAlgorithm_12_print, + integrityProtAlgorithm_12_constraint, + integrityProtAlgorithm_12_decode_ber, + integrityProtAlgorithm_12_encode_der, + integrityProtAlgorithm_12_decode_xer, + integrityProtAlgorithm_12_encode_xer, + integrityProtAlgorithm_12_decode_uper, + integrityProtAlgorithm_12_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_integrityProtAlgorithm_tags_12, + sizeof(asn_DEF_integrityProtAlgorithm_tags_12) + /sizeof(asn_DEF_integrityProtAlgorithm_tags_12[0]) - 1, /* 1 */ + asn_DEF_integrityProtAlgorithm_tags_12, /* Same as above */ + sizeof(asn_DEF_integrityProtAlgorithm_tags_12) + /sizeof(asn_DEF_integrityProtAlgorithm_tags_12[0]), /* 2 */ + &asn_PER_type_integrityProtAlgorithm_constr_12, + 0, 0, /* Defined elsewhere */ + &asn_SPC_integrityProtAlgorithm_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityAlgorithmConfig_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityAlgorithmConfig, cipheringAlgorithm), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cipheringAlgorithm_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cipheringAlgorithm" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityAlgorithmConfig, integrityProtAlgorithm), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_integrityProtAlgorithm_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "integrityProtAlgorithm" + }, +}; +static ber_tlv_tag_t asn_DEF_SecurityAlgorithmConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityAlgorithmConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cipheringAlgorithm at 2864 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* integrityProtAlgorithm at 2867 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityAlgorithmConfig_specs_1 = { + sizeof(struct SecurityAlgorithmConfig), + offsetof(struct SecurityAlgorithmConfig, _asn_ctx), + asn_MAP_SecurityAlgorithmConfig_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityAlgorithmConfig = { + "SecurityAlgorithmConfig", + "SecurityAlgorithmConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityAlgorithmConfig_tags_1, + sizeof(asn_DEF_SecurityAlgorithmConfig_tags_1) + /sizeof(asn_DEF_SecurityAlgorithmConfig_tags_1[0]), /* 1 */ + asn_DEF_SecurityAlgorithmConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityAlgorithmConfig_tags_1) + /sizeof(asn_DEF_SecurityAlgorithmConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityAlgorithmConfig_1, + 2, /* Elements count */ + &asn_SPC_SecurityAlgorithmConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityAlgorithmConfig.h b/lte/rrc/asn/SecurityAlgorithmConfig.h new file mode 100644 index 000000000..db1dac320 --- /dev/null +++ b/lte/rrc/asn/SecurityAlgorithmConfig.h @@ -0,0 +1,69 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityAlgorithmConfig_H_ +#define _SecurityAlgorithmConfig_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SecurityAlgorithmConfig__cipheringAlgorithm { + SecurityAlgorithmConfig__cipheringAlgorithm_eea0 = 0, + SecurityAlgorithmConfig__cipheringAlgorithm_eea1 = 1, + SecurityAlgorithmConfig__cipheringAlgorithm_eea2 = 2, + SecurityAlgorithmConfig__cipheringAlgorithm_spare5 = 3, + SecurityAlgorithmConfig__cipheringAlgorithm_spare4 = 4, + SecurityAlgorithmConfig__cipheringAlgorithm_spare3 = 5, + SecurityAlgorithmConfig__cipheringAlgorithm_spare2 = 6, + SecurityAlgorithmConfig__cipheringAlgorithm_spare1 = 7 + /* + * Enumeration is extensible + */ +} e_SecurityAlgorithmConfig__cipheringAlgorithm; +typedef enum SecurityAlgorithmConfig__integrityProtAlgorithm { + SecurityAlgorithmConfig__integrityProtAlgorithm_eia0_v920 = 0, + SecurityAlgorithmConfig__integrityProtAlgorithm_eia1 = 1, + SecurityAlgorithmConfig__integrityProtAlgorithm_eia2 = 2, + SecurityAlgorithmConfig__integrityProtAlgorithm_spare5 = 3, + SecurityAlgorithmConfig__integrityProtAlgorithm_spare4 = 4, + SecurityAlgorithmConfig__integrityProtAlgorithm_spare3 = 5, + SecurityAlgorithmConfig__integrityProtAlgorithm_spare2 = 6, + SecurityAlgorithmConfig__integrityProtAlgorithm_spare1 = 7 + /* + * Enumeration is extensible + */ +} e_SecurityAlgorithmConfig__integrityProtAlgorithm; + +/* SecurityAlgorithmConfig */ +typedef struct SecurityAlgorithmConfig { + long cipheringAlgorithm; + long integrityProtAlgorithm; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityAlgorithmConfig_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_cipheringAlgorithm_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_integrityProtAlgorithm_12; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityAlgorithmConfig; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityAlgorithmConfig_H_ */ +#include diff --git a/lte/rrc/asn/SecurityConfigHO.c b/lte/rrc/asn/SecurityConfigHO.c new file mode 100644 index 000000000..6eceda330 --- /dev/null +++ b/lte/rrc/asn/SecurityConfigHO.c @@ -0,0 +1,292 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityConfigHO.h" + +static int +memb_nas_SecurityParamToEUTRA_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_nas_SecurityParamToEUTRA_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 6, 6 } /* (SIZE(6..6)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_handoverType_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_intraLTE_3[] = { + { ATF_POINTER, 1, offsetof(struct SecurityConfigHO__handoverType__intraLTE, securityAlgorithmConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityAlgorithmConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityAlgorithmConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO__handoverType__intraLTE, keyChangeIndicator), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "keyChangeIndicator" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO__handoverType__intraLTE, nextHopChainingCount), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NextHopChainingCount, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nextHopChainingCount" + }, +}; +static int asn_MAP_intraLTE_oms_3[] = { 0 }; +static ber_tlv_tag_t asn_DEF_intraLTE_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_intraLTE_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* securityAlgorithmConfig at 686 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* keyChangeIndicator at 687 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nextHopChainingCount at 689 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_intraLTE_specs_3 = { + sizeof(struct SecurityConfigHO__handoverType__intraLTE), + offsetof(struct SecurityConfigHO__handoverType__intraLTE, _asn_ctx), + asn_MAP_intraLTE_tag2el_3, + 3, /* Count of tags in the map */ + asn_MAP_intraLTE_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_intraLTE_3 = { + "intraLTE", + "intraLTE", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_intraLTE_tags_3, + sizeof(asn_DEF_intraLTE_tags_3) + /sizeof(asn_DEF_intraLTE_tags_3[0]) - 1, /* 1 */ + asn_DEF_intraLTE_tags_3, /* Same as above */ + sizeof(asn_DEF_intraLTE_tags_3) + /sizeof(asn_DEF_intraLTE_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_intraLTE_3, + 3, /* Elements count */ + &asn_SPC_intraLTE_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_interRAT_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO__handoverType__interRAT, securityAlgorithmConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityAlgorithmConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityAlgorithmConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO__handoverType__interRAT, nas_SecurityParamToEUTRA), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_nas_SecurityParamToEUTRA_constraint_7, + &asn_PER_memb_nas_SecurityParamToEUTRA_constr_9, + 0, + "nas-SecurityParamToEUTRA" + }, +}; +static ber_tlv_tag_t asn_DEF_interRAT_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_interRAT_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* securityAlgorithmConfig at 691 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nas-SecurityParamToEUTRA at 692 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_interRAT_specs_7 = { + sizeof(struct SecurityConfigHO__handoverType__interRAT), + offsetof(struct SecurityConfigHO__handoverType__interRAT, _asn_ctx), + asn_MAP_interRAT_tag2el_7, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_interRAT_7 = { + "interRAT", + "interRAT", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_interRAT_tags_7, + sizeof(asn_DEF_interRAT_tags_7) + /sizeof(asn_DEF_interRAT_tags_7[0]) - 1, /* 1 */ + asn_DEF_interRAT_tags_7, /* Same as above */ + sizeof(asn_DEF_interRAT_tags_7) + /sizeof(asn_DEF_interRAT_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_interRAT_7, + 2, /* Elements count */ + &asn_SPC_interRAT_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_handoverType_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO__handoverType, choice.intraLTE), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_intraLTE_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraLTE" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO__handoverType, choice.interRAT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_interRAT_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_handoverType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* intraLTE at 686 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* interRAT at 691 */ +}; +static asn_CHOICE_specifics_t asn_SPC_handoverType_specs_2 = { + sizeof(struct SecurityConfigHO__handoverType), + offsetof(struct SecurityConfigHO__handoverType, _asn_ctx), + offsetof(struct SecurityConfigHO__handoverType, present), + sizeof(((struct SecurityConfigHO__handoverType *)0)->present), + asn_MAP_handoverType_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_handoverType_2 = { + "handoverType", + "handoverType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_handoverType_constr_2, + asn_MBR_handoverType_2, + 2, /* Elements count */ + &asn_SPC_handoverType_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityConfigHO_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigHO, handoverType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_handoverType_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "handoverType" + }, +}; +static ber_tlv_tag_t asn_DEF_SecurityConfigHO_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityConfigHO_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* handoverType at 689 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityConfigHO_specs_1 = { + sizeof(struct SecurityConfigHO), + offsetof(struct SecurityConfigHO, _asn_ctx), + asn_MAP_SecurityConfigHO_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityConfigHO = { + "SecurityConfigHO", + "SecurityConfigHO", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityConfigHO_tags_1, + sizeof(asn_DEF_SecurityConfigHO_tags_1) + /sizeof(asn_DEF_SecurityConfigHO_tags_1[0]), /* 1 */ + asn_DEF_SecurityConfigHO_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityConfigHO_tags_1) + /sizeof(asn_DEF_SecurityConfigHO_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityConfigHO_1, + 1, /* Elements count */ + &asn_SPC_SecurityConfigHO_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityConfigHO.h b/lte/rrc/asn/SecurityConfigHO.h new file mode 100644 index 000000000..fe7950f09 --- /dev/null +++ b/lte/rrc/asn/SecurityConfigHO.h @@ -0,0 +1,81 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityConfigHO_H_ +#define _SecurityConfigHO_H_ + + +#include + +/* Including external dependencies */ +#include +#include "NextHopChainingCount.h" +#include +#include "SecurityAlgorithmConfig.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SecurityConfigHO__handoverType_PR { + SecurityConfigHO__handoverType_PR_NOTHING, /* No components present */ + SecurityConfigHO__handoverType_PR_intraLTE, + SecurityConfigHO__handoverType_PR_interRAT +} SecurityConfigHO__handoverType_PR; + +/* Forward declarations */ +struct SecurityAlgorithmConfig; + +/* SecurityConfigHO */ +typedef struct SecurityConfigHO { + struct SecurityConfigHO__handoverType { + SecurityConfigHO__handoverType_PR present; + union SecurityConfigHO__handoverType_u { + struct SecurityConfigHO__handoverType__intraLTE { + struct SecurityAlgorithmConfig *securityAlgorithmConfig /* OPTIONAL */; + BOOLEAN_t keyChangeIndicator; + NextHopChainingCount_t nextHopChainingCount; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } intraLTE; + struct SecurityConfigHO__handoverType__interRAT { + SecurityAlgorithmConfig_t securityAlgorithmConfig; + OCTET_STRING_t nas_SecurityParamToEUTRA; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } interRAT; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } handoverType; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityConfigHO_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityConfigHO; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SecurityAlgorithmConfig.h" + +#endif /* _SecurityConfigHO_H_ */ +#include diff --git a/lte/rrc/asn/SecurityConfigSMC.c b/lte/rrc/asn/SecurityConfigSMC.c new file mode 100644 index 000000000..303fac645 --- /dev/null +++ b/lte/rrc/asn/SecurityConfigSMC.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityConfigSMC.h" + +static asn_TYPE_member_t asn_MBR_SecurityConfigSMC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityConfigSMC, securityAlgorithmConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityAlgorithmConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityAlgorithmConfig" + }, +}; +static ber_tlv_tag_t asn_DEF_SecurityConfigSMC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityConfigSMC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* securityAlgorithmConfig at 1096 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityConfigSMC_specs_1 = { + sizeof(struct SecurityConfigSMC), + offsetof(struct SecurityConfigSMC, _asn_ctx), + asn_MAP_SecurityConfigSMC_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 0, /* Start extensions */ + 2 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityConfigSMC = { + "SecurityConfigSMC", + "SecurityConfigSMC", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityConfigSMC_tags_1, + sizeof(asn_DEF_SecurityConfigSMC_tags_1) + /sizeof(asn_DEF_SecurityConfigSMC_tags_1[0]), /* 1 */ + asn_DEF_SecurityConfigSMC_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityConfigSMC_tags_1) + /sizeof(asn_DEF_SecurityConfigSMC_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityConfigSMC_1, + 1, /* Elements count */ + &asn_SPC_SecurityConfigSMC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityConfigSMC.h b/lte/rrc/asn/SecurityConfigSMC.h new file mode 100644 index 000000000..f47a8aa12 --- /dev/null +++ b/lte/rrc/asn/SecurityConfigSMC.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityConfigSMC_H_ +#define _SecurityConfigSMC_H_ + + +#include + +/* Including external dependencies */ +#include "SecurityAlgorithmConfig.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SecurityConfigSMC */ +typedef struct SecurityConfigSMC { + SecurityAlgorithmConfig_t securityAlgorithmConfig; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityConfigSMC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityConfigSMC; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityConfigSMC_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeCommand-r8-IEs.c b/lte/rrc/asn/SecurityModeCommand-r8-IEs.c new file mode 100644 index 000000000..b32007f7f --- /dev/null +++ b/lte/rrc/asn/SecurityModeCommand-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeCommand-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_SecurityModeCommand_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand_r8_IEs, securityConfigSMC), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityConfigSMC, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityConfigSMC" + }, + { ATF_POINTER, 1, offsetof(struct SecurityModeCommand_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeCommand_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SecurityModeCommand_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_SecurityModeCommand_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeCommand_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* securityConfigSMC at 1086 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1087 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeCommand_r8_IEs_specs_1 = { + sizeof(struct SecurityModeCommand_r8_IEs), + offsetof(struct SecurityModeCommand_r8_IEs, _asn_ctx), + asn_MAP_SecurityModeCommand_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SecurityModeCommand_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeCommand_r8_IEs = { + "SecurityModeCommand-r8-IEs", + "SecurityModeCommand-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeCommand_r8_IEs_tags_1, + sizeof(asn_DEF_SecurityModeCommand_r8_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeCommand_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeCommand_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeCommand_r8_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeCommand_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeCommand_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeCommand_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeCommand-r8-IEs.h b/lte/rrc/asn/SecurityModeCommand-r8-IEs.h new file mode 100644 index 000000000..9245004f8 --- /dev/null +++ b/lte/rrc/asn/SecurityModeCommand-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeCommand_r8_IEs_H_ +#define _SecurityModeCommand_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "SecurityConfigSMC.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SecurityModeCommand_v8a0_IEs; + +/* SecurityModeCommand-r8-IEs */ +typedef struct SecurityModeCommand_r8_IEs { + SecurityConfigSMC_t securityConfigSMC; + struct SecurityModeCommand_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeCommand_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeCommand_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SecurityModeCommand-v8a0-IEs.h" + +#endif /* _SecurityModeCommand_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c b/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c new file mode 100644 index 000000000..36a710422 --- /dev/null +++ b/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeCommand-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct SecurityModeCommand_v8a0_IEs__nonCriticalExtension), + offsetof(struct SecurityModeCommand_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityModeCommand_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct SecurityModeCommand_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct SecurityModeCommand_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SecurityModeCommand_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeCommand_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1091 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1092 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeCommand_v8a0_IEs_specs_1 = { + sizeof(struct SecurityModeCommand_v8a0_IEs), + offsetof(struct SecurityModeCommand_v8a0_IEs, _asn_ctx), + asn_MAP_SecurityModeCommand_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SecurityModeCommand_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeCommand_v8a0_IEs = { + "SecurityModeCommand-v8a0-IEs", + "SecurityModeCommand-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1, + sizeof(asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeCommand_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeCommand_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeCommand_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h b/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h new file mode 100644 index 000000000..5a7695cf3 --- /dev/null +++ b/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeCommand_v8a0_IEs_H_ +#define _SecurityModeCommand_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SecurityModeCommand-v8a0-IEs */ +typedef struct SecurityModeCommand_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct SecurityModeCommand_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeCommand_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeCommand_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityModeCommand_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeCommand.c b/lte/rrc/asn/SecurityModeCommand.c new file mode 100644 index 000000000..ca7058739 --- /dev/null +++ b/lte/rrc/asn/SecurityModeCommand.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeCommand.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand__criticalExtensions__c1, choice.securityModeCommand_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeCommand_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityModeCommand-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* securityModeCommand-r8 at 1078 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1079 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1079 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1079 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct SecurityModeCommand__criticalExtensions__c1), + offsetof(struct SecurityModeCommand__criticalExtensions__c1, _asn_ctx), + offsetof(struct SecurityModeCommand__criticalExtensions__c1, present), + sizeof(((struct SecurityModeCommand__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct SecurityModeCommand__criticalExtensions__criticalExtensionsFuture), + offsetof(struct SecurityModeCommand__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1078 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1081 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct SecurityModeCommand__criticalExtensions), + offsetof(struct SecurityModeCommand__criticalExtensions, _asn_ctx), + offsetof(struct SecurityModeCommand__criticalExtensions, present), + sizeof(((struct SecurityModeCommand__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityModeCommand_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeCommand, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_SecurityModeCommand_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeCommand_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1075 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1080 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeCommand_specs_1 = { + sizeof(struct SecurityModeCommand), + offsetof(struct SecurityModeCommand, _asn_ctx), + asn_MAP_SecurityModeCommand_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeCommand = { + "SecurityModeCommand", + "SecurityModeCommand", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeCommand_tags_1, + sizeof(asn_DEF_SecurityModeCommand_tags_1) + /sizeof(asn_DEF_SecurityModeCommand_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeCommand_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeCommand_tags_1) + /sizeof(asn_DEF_SecurityModeCommand_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeCommand_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeCommand_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeCommand.h b/lte/rrc/asn/SecurityModeCommand.h new file mode 100644 index 000000000..1ae772192 --- /dev/null +++ b/lte/rrc/asn/SecurityModeCommand.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeCommand_H_ +#define _SecurityModeCommand_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "SecurityModeCommand-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SecurityModeCommand__criticalExtensions_PR { + SecurityModeCommand__criticalExtensions_PR_NOTHING, /* No components present */ + SecurityModeCommand__criticalExtensions_PR_c1, + SecurityModeCommand__criticalExtensions_PR_criticalExtensionsFuture +} SecurityModeCommand__criticalExtensions_PR; +typedef enum SecurityModeCommand__criticalExtensions__c1_PR { + SecurityModeCommand__criticalExtensions__c1_PR_NOTHING, /* No components present */ + SecurityModeCommand__criticalExtensions__c1_PR_securityModeCommand_r8, + SecurityModeCommand__criticalExtensions__c1_PR_spare3, + SecurityModeCommand__criticalExtensions__c1_PR_spare2, + SecurityModeCommand__criticalExtensions__c1_PR_spare1 +} SecurityModeCommand__criticalExtensions__c1_PR; + +/* SecurityModeCommand */ +typedef struct SecurityModeCommand { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct SecurityModeCommand__criticalExtensions { + SecurityModeCommand__criticalExtensions_PR present; + union SecurityModeCommand__criticalExtensions_u { + struct SecurityModeCommand__criticalExtensions__c1 { + SecurityModeCommand__criticalExtensions__c1_PR present; + union SecurityModeCommand__criticalExtensions__c1_u { + SecurityModeCommand_r8_IEs_t securityModeCommand_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct SecurityModeCommand__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeCommand_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeCommand; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityModeCommand_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeComplete-r8-IEs.c b/lte/rrc/asn/SecurityModeComplete-r8-IEs.c new file mode 100644 index 000000000..53ec203ff --- /dev/null +++ b/lte/rrc/asn/SecurityModeComplete-r8-IEs.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeComplete-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_SecurityModeComplete_r8_IEs_1[] = { + { ATF_POINTER, 1, offsetof(struct SecurityModeComplete_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeComplete_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SecurityModeComplete_r8_IEs_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_SecurityModeComplete_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeComplete_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonCriticalExtension at 1110 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeComplete_r8_IEs_specs_1 = { + sizeof(struct SecurityModeComplete_r8_IEs), + offsetof(struct SecurityModeComplete_r8_IEs, _asn_ctx), + asn_MAP_SecurityModeComplete_r8_IEs_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_SecurityModeComplete_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeComplete_r8_IEs = { + "SecurityModeComplete-r8-IEs", + "SecurityModeComplete-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeComplete_r8_IEs_tags_1, + sizeof(asn_DEF_SecurityModeComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeComplete_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeComplete_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeComplete_r8_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeComplete_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeComplete_r8_IEs_1, + 1, /* Elements count */ + &asn_SPC_SecurityModeComplete_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeComplete-r8-IEs.h b/lte/rrc/asn/SecurityModeComplete-r8-IEs.h new file mode 100644 index 000000000..d67279b11 --- /dev/null +++ b/lte/rrc/asn/SecurityModeComplete-r8-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeComplete_r8_IEs_H_ +#define _SecurityModeComplete_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SecurityModeComplete_v8a0_IEs; + +/* SecurityModeComplete-r8-IEs */ +typedef struct SecurityModeComplete_r8_IEs { + struct SecurityModeComplete_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeComplete_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeComplete_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SecurityModeComplete-v8a0-IEs.h" + +#endif /* _SecurityModeComplete_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c b/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c new file mode 100644 index 000000000..58a67c869 --- /dev/null +++ b/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeComplete-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct SecurityModeComplete_v8a0_IEs__nonCriticalExtension), + offsetof(struct SecurityModeComplete_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityModeComplete_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct SecurityModeComplete_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct SecurityModeComplete_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SecurityModeComplete_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeComplete_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1114 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1115 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeComplete_v8a0_IEs_specs_1 = { + sizeof(struct SecurityModeComplete_v8a0_IEs), + offsetof(struct SecurityModeComplete_v8a0_IEs, _asn_ctx), + asn_MAP_SecurityModeComplete_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SecurityModeComplete_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeComplete_v8a0_IEs = { + "SecurityModeComplete-v8a0-IEs", + "SecurityModeComplete-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1, + sizeof(asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeComplete_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeComplete_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeComplete_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h b/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h new file mode 100644 index 000000000..cde9c4f42 --- /dev/null +++ b/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeComplete_v8a0_IEs_H_ +#define _SecurityModeComplete_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SecurityModeComplete-v8a0-IEs */ +typedef struct SecurityModeComplete_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct SecurityModeComplete_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeComplete_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeComplete_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityModeComplete_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeComplete.c b/lte/rrc/asn/SecurityModeComplete.c new file mode 100644 index 000000000..1fd58dbb2 --- /dev/null +++ b/lte/rrc/asn/SecurityModeComplete.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeComplete.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_5 = { + sizeof(struct SecurityModeComplete__criticalExtensions__criticalExtensionsFuture), + offsetof(struct SecurityModeComplete__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_5 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_5, + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_5, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeComplete__criticalExtensions, choice.securityModeComplete_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeComplete_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityModeComplete-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeComplete__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* securityModeComplete-r8 at 1104 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1105 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct SecurityModeComplete__criticalExtensions), + offsetof(struct SecurityModeComplete__criticalExtensions, _asn_ctx), + offsetof(struct SecurityModeComplete__criticalExtensions, present), + sizeof(((struct SecurityModeComplete__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityModeComplete_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeComplete, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeComplete, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_SecurityModeComplete_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeComplete_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1102 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1104 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeComplete_specs_1 = { + sizeof(struct SecurityModeComplete), + offsetof(struct SecurityModeComplete, _asn_ctx), + asn_MAP_SecurityModeComplete_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeComplete = { + "SecurityModeComplete", + "SecurityModeComplete", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeComplete_tags_1, + sizeof(asn_DEF_SecurityModeComplete_tags_1) + /sizeof(asn_DEF_SecurityModeComplete_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeComplete_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeComplete_tags_1) + /sizeof(asn_DEF_SecurityModeComplete_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeComplete_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeComplete_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeComplete.h b/lte/rrc/asn/SecurityModeComplete.h new file mode 100644 index 000000000..380fc50b5 --- /dev/null +++ b/lte/rrc/asn/SecurityModeComplete.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeComplete_H_ +#define _SecurityModeComplete_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "SecurityModeComplete-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SecurityModeComplete__criticalExtensions_PR { + SecurityModeComplete__criticalExtensions_PR_NOTHING, /* No components present */ + SecurityModeComplete__criticalExtensions_PR_securityModeComplete_r8, + SecurityModeComplete__criticalExtensions_PR_criticalExtensionsFuture +} SecurityModeComplete__criticalExtensions_PR; + +/* SecurityModeComplete */ +typedef struct SecurityModeComplete { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct SecurityModeComplete__criticalExtensions { + SecurityModeComplete__criticalExtensions_PR present; + union SecurityModeComplete__criticalExtensions_u { + SecurityModeComplete_r8_IEs_t securityModeComplete_r8; + struct SecurityModeComplete__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeComplete_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeComplete; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityModeComplete_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeFailure-r8-IEs.c b/lte/rrc/asn/SecurityModeFailure-r8-IEs.c new file mode 100644 index 000000000..6be3764ac --- /dev/null +++ b/lte/rrc/asn/SecurityModeFailure-r8-IEs.c @@ -0,0 +1,62 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeFailure-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_SecurityModeFailure_r8_IEs_1[] = { + { ATF_POINTER, 1, offsetof(struct SecurityModeFailure_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeFailure_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SecurityModeFailure_r8_IEs_oms_1[] = { 0 }; +static ber_tlv_tag_t asn_DEF_SecurityModeFailure_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeFailure_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* nonCriticalExtension at 1128 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeFailure_r8_IEs_specs_1 = { + sizeof(struct SecurityModeFailure_r8_IEs), + offsetof(struct SecurityModeFailure_r8_IEs, _asn_ctx), + asn_MAP_SecurityModeFailure_r8_IEs_tag2el_1, + 1, /* Count of tags in the map */ + asn_MAP_SecurityModeFailure_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeFailure_r8_IEs = { + "SecurityModeFailure-r8-IEs", + "SecurityModeFailure-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeFailure_r8_IEs_tags_1, + sizeof(asn_DEF_SecurityModeFailure_r8_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeFailure_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeFailure_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeFailure_r8_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeFailure_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeFailure_r8_IEs_1, + 1, /* Elements count */ + &asn_SPC_SecurityModeFailure_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeFailure-r8-IEs.h b/lte/rrc/asn/SecurityModeFailure-r8-IEs.h new file mode 100644 index 000000000..af3449d3a --- /dev/null +++ b/lte/rrc/asn/SecurityModeFailure-r8-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeFailure_r8_IEs_H_ +#define _SecurityModeFailure_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SecurityModeFailure_v8a0_IEs; + +/* SecurityModeFailure-r8-IEs */ +typedef struct SecurityModeFailure_r8_IEs { + struct SecurityModeFailure_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeFailure_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeFailure_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SecurityModeFailure-v8a0-IEs.h" + +#endif /* _SecurityModeFailure_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c b/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c new file mode 100644 index 000000000..3ef36cdf4 --- /dev/null +++ b/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeFailure-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct SecurityModeFailure_v8a0_IEs__nonCriticalExtension), + offsetof(struct SecurityModeFailure_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityModeFailure_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct SecurityModeFailure_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct SecurityModeFailure_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SecurityModeFailure_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeFailure_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1132 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1133 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeFailure_v8a0_IEs_specs_1 = { + sizeof(struct SecurityModeFailure_v8a0_IEs), + offsetof(struct SecurityModeFailure_v8a0_IEs, _asn_ctx), + asn_MAP_SecurityModeFailure_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SecurityModeFailure_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeFailure_v8a0_IEs = { + "SecurityModeFailure-v8a0-IEs", + "SecurityModeFailure-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1, + sizeof(asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SecurityModeFailure_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeFailure_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeFailure_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h b/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h new file mode 100644 index 000000000..f8738e62a --- /dev/null +++ b/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeFailure_v8a0_IEs_H_ +#define _SecurityModeFailure_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SecurityModeFailure-v8a0-IEs */ +typedef struct SecurityModeFailure_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct SecurityModeFailure_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeFailure_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeFailure_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityModeFailure_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SecurityModeFailure.c b/lte/rrc/asn/SecurityModeFailure.c new file mode 100644 index 000000000..f54be67f1 --- /dev/null +++ b/lte/rrc/asn/SecurityModeFailure.c @@ -0,0 +1,171 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SecurityModeFailure.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_5 = { + sizeof(struct SecurityModeFailure__criticalExtensions__criticalExtensionsFuture), + offsetof(struct SecurityModeFailure__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_5 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_5, + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_5, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_5) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeFailure__criticalExtensions, choice.securityModeFailure_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeFailure_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityModeFailure-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeFailure__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* securityModeFailure-r8 at 1122 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1123 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct SecurityModeFailure__criticalExtensions), + offsetof(struct SecurityModeFailure__criticalExtensions, _asn_ctx), + offsetof(struct SecurityModeFailure__criticalExtensions, present), + sizeof(((struct SecurityModeFailure__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SecurityModeFailure_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeFailure, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct SecurityModeFailure, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_SecurityModeFailure_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SecurityModeFailure_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1120 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1122 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SecurityModeFailure_specs_1 = { + sizeof(struct SecurityModeFailure), + offsetof(struct SecurityModeFailure, _asn_ctx), + asn_MAP_SecurityModeFailure_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SecurityModeFailure = { + "SecurityModeFailure", + "SecurityModeFailure", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SecurityModeFailure_tags_1, + sizeof(asn_DEF_SecurityModeFailure_tags_1) + /sizeof(asn_DEF_SecurityModeFailure_tags_1[0]), /* 1 */ + asn_DEF_SecurityModeFailure_tags_1, /* Same as above */ + sizeof(asn_DEF_SecurityModeFailure_tags_1) + /sizeof(asn_DEF_SecurityModeFailure_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SecurityModeFailure_1, + 2, /* Elements count */ + &asn_SPC_SecurityModeFailure_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SecurityModeFailure.h b/lte/rrc/asn/SecurityModeFailure.h new file mode 100644 index 000000000..0eb41d1cc --- /dev/null +++ b/lte/rrc/asn/SecurityModeFailure.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SecurityModeFailure_H_ +#define _SecurityModeFailure_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "SecurityModeFailure-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SecurityModeFailure__criticalExtensions_PR { + SecurityModeFailure__criticalExtensions_PR_NOTHING, /* No components present */ + SecurityModeFailure__criticalExtensions_PR_securityModeFailure_r8, + SecurityModeFailure__criticalExtensions_PR_criticalExtensionsFuture +} SecurityModeFailure__criticalExtensions_PR; + +/* SecurityModeFailure */ +typedef struct SecurityModeFailure { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct SecurityModeFailure__criticalExtensions { + SecurityModeFailure__criticalExtensions_PR present; + union SecurityModeFailure__criticalExtensions_u { + SecurityModeFailure_r8_IEs_t securityModeFailure_r8; + struct SecurityModeFailure__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SecurityModeFailure_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SecurityModeFailure; + +#ifdef __cplusplus +} +#endif + +#endif /* _SecurityModeFailure_H_ */ +#include diff --git a/lte/rrc/asn/ServCellIndex-r10.c b/lte/rrc/asn/ServCellIndex-r10.c new file mode 100644 index 000000000..5b98299ff --- /dev/null +++ b/lte/rrc/asn/ServCellIndex-r10.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ServCellIndex-r10.h" + +int +ServCellIndex_r10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ServCellIndex_r10_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ServCellIndex_r10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ServCellIndex_r10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ServCellIndex_r10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ServCellIndex_r10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ServCellIndex_r10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ServCellIndex_r10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ServCellIndex_r10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ServCellIndex_r10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ServCellIndex_r10_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ServCellIndex_r10_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ServCellIndex_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ServCellIndex_r10 = { + "ServCellIndex-r10", + "ServCellIndex-r10", + ServCellIndex_r10_free, + ServCellIndex_r10_print, + ServCellIndex_r10_constraint, + ServCellIndex_r10_decode_ber, + ServCellIndex_r10_encode_der, + ServCellIndex_r10_decode_xer, + ServCellIndex_r10_encode_xer, + ServCellIndex_r10_decode_uper, + ServCellIndex_r10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ServCellIndex_r10_tags_1, + sizeof(asn_DEF_ServCellIndex_r10_tags_1) + /sizeof(asn_DEF_ServCellIndex_r10_tags_1[0]), /* 1 */ + asn_DEF_ServCellIndex_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_ServCellIndex_r10_tags_1) + /sizeof(asn_DEF_ServCellIndex_r10_tags_1[0]), /* 1 */ + &asn_PER_type_ServCellIndex_r10_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ServCellIndex-r10.h b/lte/rrc/asn/ServCellIndex-r10.h new file mode 100644 index 000000000..b713daeb6 --- /dev/null +++ b/lte/rrc/asn/ServCellIndex-r10.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ServCellIndex_r10_H_ +#define _ServCellIndex_r10_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ServCellIndex-r10 */ +typedef long ServCellIndex_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ServCellIndex_r10; +asn_struct_free_f ServCellIndex_r10_free; +asn_struct_print_f ServCellIndex_r10_print; +asn_constr_check_f ServCellIndex_r10_constraint; +ber_type_decoder_f ServCellIndex_r10_decode_ber; +der_type_encoder_f ServCellIndex_r10_encode_der; +xer_type_decoder_f ServCellIndex_r10_decode_xer; +xer_type_encoder_f ServCellIndex_r10_encode_xer; +per_type_decoder_f ServCellIndex_r10_decode_uper; +per_type_encoder_f ServCellIndex_r10_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ServCellIndex_r10_H_ */ +#include diff --git a/lte/rrc/asn/ShortMAC-I.c b/lte/rrc/asn/ShortMAC-I.c new file mode 100644 index 000000000..613bfe9f9 --- /dev/null +++ b/lte/rrc/asn/ShortMAC-I.c @@ -0,0 +1,152 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ShortMAC-I.h" + +int +ShortMAC_I_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using BIT_STRING, + * so here we adjust the DEF accordingly. + */ +static void +ShortMAC_I_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_BIT_STRING.free_struct; + td->print_struct = asn_DEF_BIT_STRING.print_struct; + td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; + td->der_encoder = asn_DEF_BIT_STRING.der_encoder; + td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; + td->xer_encoder = asn_DEF_BIT_STRING.xer_encoder; + td->uper_decoder = asn_DEF_BIT_STRING.uper_decoder; + td->uper_encoder = asn_DEF_BIT_STRING.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_BIT_STRING.per_constraints; + td->elements = asn_DEF_BIT_STRING.elements; + td->elements_count = asn_DEF_BIT_STRING.elements_count; + td->specifics = asn_DEF_BIT_STRING.specifics; +} + +void +ShortMAC_I_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ShortMAC_I_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ShortMAC_I_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ShortMAC_I_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ShortMAC_I_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ShortMAC_I_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ShortMAC_I_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ShortMAC_I_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ShortMAC_I_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ShortMAC_I_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ShortMAC_I_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ShortMAC_I = { + "ShortMAC-I", + "ShortMAC-I", + ShortMAC_I_free, + ShortMAC_I_print, + ShortMAC_I_constraint, + ShortMAC_I_decode_ber, + ShortMAC_I_encode_der, + ShortMAC_I_decode_xer, + ShortMAC_I_encode_xer, + ShortMAC_I_decode_uper, + ShortMAC_I_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ShortMAC_I_tags_1, + sizeof(asn_DEF_ShortMAC_I_tags_1) + /sizeof(asn_DEF_ShortMAC_I_tags_1[0]), /* 1 */ + asn_DEF_ShortMAC_I_tags_1, /* Same as above */ + sizeof(asn_DEF_ShortMAC_I_tags_1) + /sizeof(asn_DEF_ShortMAC_I_tags_1[0]), /* 1 */ + &asn_PER_type_ShortMAC_I_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ShortMAC-I.h b/lte/rrc/asn/ShortMAC-I.h new file mode 100644 index 000000000..1f6b01f6c --- /dev/null +++ b/lte/rrc/asn/ShortMAC-I.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ShortMAC_I_H_ +#define _ShortMAC_I_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ShortMAC-I */ +typedef BIT_STRING_t ShortMAC_I_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ShortMAC_I; +asn_struct_free_f ShortMAC_I_free; +asn_struct_print_f ShortMAC_I_print; +asn_constr_check_f ShortMAC_I_constraint; +ber_type_decoder_f ShortMAC_I_decode_ber; +der_type_encoder_f ShortMAC_I_encode_der; +xer_type_decoder_f ShortMAC_I_decode_xer; +xer_type_encoder_f ShortMAC_I_encode_xer; +per_type_decoder_f ShortMAC_I_decode_uper; +per_type_encoder_f ShortMAC_I_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ShortMAC_I_H_ */ +#include diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigCommon.c b/lte/rrc/asn/SoundingRS-UL-ConfigCommon.c new file mode 100644 index 000000000..a4c2dcc57 --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigCommon.c @@ -0,0 +1,611 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SoundingRS-UL-ConfigCommon.h" + +static int +srs_BandwidthConfig_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_BandwidthConfig_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_BandwidthConfig_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_BandwidthConfig_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_BandwidthConfig_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_BandwidthConfig_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_BandwidthConfig_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_BandwidthConfig_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_BandwidthConfig_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_BandwidthConfig_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_BandwidthConfig_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +srs_SubframeConfig_13_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_SubframeConfig_13_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_SubframeConfig_13_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_SubframeConfig_13_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_SubframeConfig_13_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_SubframeConfig_13_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_SubframeConfig_13_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_SubframeConfig_13_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_SubframeConfig_13_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_SubframeConfig_13_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_SubframeConfig_13_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +srs_MaxUpPts_31_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_MaxUpPts_31_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_MaxUpPts_31_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_MaxUpPts_31_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_MaxUpPts_31_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_MaxUpPts_31_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_MaxUpPts_31_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_MaxUpPts_31_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_MaxUpPts_31_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_MaxUpPts_31_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_MaxUpPts_31_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_srs_BandwidthConfig_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_srs_SubframeConfig_constr_13 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_srs_MaxUpPts_constr_31 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SoundingRS_UL_ConfigCommon_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_srs_BandwidthConfig_value2enum_4[] = { + { 0, 3, "bw0" }, + { 1, 3, "bw1" }, + { 2, 3, "bw2" }, + { 3, 3, "bw3" }, + { 4, 3, "bw4" }, + { 5, 3, "bw5" }, + { 6, 3, "bw6" }, + { 7, 3, "bw7" } +}; +static unsigned int asn_MAP_srs_BandwidthConfig_enum2value_4[] = { + 0, /* bw0(0) */ + 1, /* bw1(1) */ + 2, /* bw2(2) */ + 3, /* bw3(3) */ + 4, /* bw4(4) */ + 5, /* bw5(5) */ + 6, /* bw6(6) */ + 7 /* bw7(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_BandwidthConfig_specs_4 = { + asn_MAP_srs_BandwidthConfig_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_srs_BandwidthConfig_enum2value_4, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_BandwidthConfig_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_BandwidthConfig_4 = { + "srs-BandwidthConfig", + "srs-BandwidthConfig", + srs_BandwidthConfig_4_free, + srs_BandwidthConfig_4_print, + srs_BandwidthConfig_4_constraint, + srs_BandwidthConfig_4_decode_ber, + srs_BandwidthConfig_4_encode_der, + srs_BandwidthConfig_4_decode_xer, + srs_BandwidthConfig_4_encode_xer, + srs_BandwidthConfig_4_decode_uper, + srs_BandwidthConfig_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_BandwidthConfig_tags_4, + sizeof(asn_DEF_srs_BandwidthConfig_tags_4) + /sizeof(asn_DEF_srs_BandwidthConfig_tags_4[0]) - 1, /* 1 */ + asn_DEF_srs_BandwidthConfig_tags_4, /* Same as above */ + sizeof(asn_DEF_srs_BandwidthConfig_tags_4) + /sizeof(asn_DEF_srs_BandwidthConfig_tags_4[0]), /* 2 */ + &asn_PER_type_srs_BandwidthConfig_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_BandwidthConfig_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_srs_SubframeConfig_value2enum_13[] = { + { 0, 3, "sc0" }, + { 1, 3, "sc1" }, + { 2, 3, "sc2" }, + { 3, 3, "sc3" }, + { 4, 3, "sc4" }, + { 5, 3, "sc5" }, + { 6, 3, "sc6" }, + { 7, 3, "sc7" }, + { 8, 3, "sc8" }, + { 9, 3, "sc9" }, + { 10, 4, "sc10" }, + { 11, 4, "sc11" }, + { 12, 4, "sc12" }, + { 13, 4, "sc13" }, + { 14, 4, "sc14" }, + { 15, 4, "sc15" } +}; +static unsigned int asn_MAP_srs_SubframeConfig_enum2value_13[] = { + 0, /* sc0(0) */ + 1, /* sc1(1) */ + 10, /* sc10(10) */ + 11, /* sc11(11) */ + 12, /* sc12(12) */ + 13, /* sc13(13) */ + 14, /* sc14(14) */ + 15, /* sc15(15) */ + 2, /* sc2(2) */ + 3, /* sc3(3) */ + 4, /* sc4(4) */ + 5, /* sc5(5) */ + 6, /* sc6(6) */ + 7, /* sc7(7) */ + 8, /* sc8(8) */ + 9 /* sc9(9) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_SubframeConfig_specs_13 = { + asn_MAP_srs_SubframeConfig_value2enum_13, /* "tag" => N; sorted by tag */ + asn_MAP_srs_SubframeConfig_enum2value_13, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_SubframeConfig_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_SubframeConfig_13 = { + "srs-SubframeConfig", + "srs-SubframeConfig", + srs_SubframeConfig_13_free, + srs_SubframeConfig_13_print, + srs_SubframeConfig_13_constraint, + srs_SubframeConfig_13_decode_ber, + srs_SubframeConfig_13_encode_der, + srs_SubframeConfig_13_decode_xer, + srs_SubframeConfig_13_encode_xer, + srs_SubframeConfig_13_decode_uper, + srs_SubframeConfig_13_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_SubframeConfig_tags_13, + sizeof(asn_DEF_srs_SubframeConfig_tags_13) + /sizeof(asn_DEF_srs_SubframeConfig_tags_13[0]) - 1, /* 1 */ + asn_DEF_srs_SubframeConfig_tags_13, /* Same as above */ + sizeof(asn_DEF_srs_SubframeConfig_tags_13) + /sizeof(asn_DEF_srs_SubframeConfig_tags_13[0]), /* 2 */ + &asn_PER_type_srs_SubframeConfig_constr_13, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_SubframeConfig_specs_13 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_srs_MaxUpPts_value2enum_31[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_srs_MaxUpPts_enum2value_31[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_MaxUpPts_specs_31 = { + asn_MAP_srs_MaxUpPts_value2enum_31, /* "tag" => N; sorted by tag */ + asn_MAP_srs_MaxUpPts_enum2value_31, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_MaxUpPts_tags_31[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_MaxUpPts_31 = { + "srs-MaxUpPts", + "srs-MaxUpPts", + srs_MaxUpPts_31_free, + srs_MaxUpPts_31_print, + srs_MaxUpPts_31_constraint, + srs_MaxUpPts_31_decode_ber, + srs_MaxUpPts_31_encode_der, + srs_MaxUpPts_31_decode_xer, + srs_MaxUpPts_31_encode_xer, + srs_MaxUpPts_31_decode_uper, + srs_MaxUpPts_31_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_MaxUpPts_tags_31, + sizeof(asn_DEF_srs_MaxUpPts_tags_31) + /sizeof(asn_DEF_srs_MaxUpPts_tags_31[0]) - 1, /* 1 */ + asn_DEF_srs_MaxUpPts_tags_31, /* Same as above */ + sizeof(asn_DEF_srs_MaxUpPts_tags_31) + /sizeof(asn_DEF_srs_MaxUpPts_tags_31[0]), /* 2 */ + &asn_PER_type_srs_MaxUpPts_constr_31, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_MaxUpPts_specs_31 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigCommon__setup, srs_BandwidthConfig), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_BandwidthConfig_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-BandwidthConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigCommon__setup, srs_SubframeConfig), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_SubframeConfig_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-SubframeConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigCommon__setup, ackNackSRS_SimultaneousTransmission), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ackNackSRS-SimultaneousTransmission" + }, + { ATF_POINTER, 1, offsetof(struct SoundingRS_UL_ConfigCommon__setup, srs_MaxUpPts), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_MaxUpPts_31, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-MaxUpPts" + }, +}; +static int asn_MAP_setup_oms_3[] = { 3 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srs-BandwidthConfig at 2675 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* srs-SubframeConfig at 2677 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ackNackSRS-SimultaneousTransmission at 2679 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* srs-MaxUpPts at 2680 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct SoundingRS_UL_ConfigCommon__setup), + offsetof(struct SoundingRS_UL_ConfigCommon__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 4, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 4, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SoundingRS_UL_ConfigCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigCommon, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigCommon, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SoundingRS_UL_ConfigCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2673 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2675 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SoundingRS_UL_ConfigCommon_specs_1 = { + sizeof(struct SoundingRS_UL_ConfigCommon), + offsetof(struct SoundingRS_UL_ConfigCommon, _asn_ctx), + offsetof(struct SoundingRS_UL_ConfigCommon, present), + sizeof(((struct SoundingRS_UL_ConfigCommon *)0)->present), + asn_MAP_SoundingRS_UL_ConfigCommon_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigCommon = { + "SoundingRS-UL-ConfigCommon", + "SoundingRS-UL-ConfigCommon", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SoundingRS_UL_ConfigCommon_constr_1, + asn_MBR_SoundingRS_UL_ConfigCommon_1, + 2, /* Elements count */ + &asn_SPC_SoundingRS_UL_ConfigCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigCommon.h b/lte/rrc/asn/SoundingRS-UL-ConfigCommon.h new file mode 100644 index 000000000..80eb4724a --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigCommon.h @@ -0,0 +1,94 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SoundingRS_UL_ConfigCommon_H_ +#define _SoundingRS_UL_ConfigCommon_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SoundingRS_UL_ConfigCommon_PR { + SoundingRS_UL_ConfigCommon_PR_NOTHING, /* No components present */ + SoundingRS_UL_ConfigCommon_PR_release, + SoundingRS_UL_ConfigCommon_PR_setup +} SoundingRS_UL_ConfigCommon_PR; +typedef enum SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig { + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw0 = 0, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw1 = 1, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw2 = 2, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw3 = 3, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw4 = 4, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw5 = 5, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw6 = 6, + SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig_bw7 = 7 +} e_SoundingRS_UL_ConfigCommon__setup__srs_BandwidthConfig; +typedef enum SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig { + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc0 = 0, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc1 = 1, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc2 = 2, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc3 = 3, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc4 = 4, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc5 = 5, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc6 = 6, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc7 = 7, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc8 = 8, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc9 = 9, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc10 = 10, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc11 = 11, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc12 = 12, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc13 = 13, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc14 = 14, + SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig_sc15 = 15 +} e_SoundingRS_UL_ConfigCommon__setup__srs_SubframeConfig; +typedef enum SoundingRS_UL_ConfigCommon__setup__srs_MaxUpPts { + SoundingRS_UL_ConfigCommon__setup__srs_MaxUpPts_true = 0 +} e_SoundingRS_UL_ConfigCommon__setup__srs_MaxUpPts; + +/* SoundingRS-UL-ConfigCommon */ +typedef struct SoundingRS_UL_ConfigCommon { + SoundingRS_UL_ConfigCommon_PR present; + union SoundingRS_UL_ConfigCommon_u { + NULL_t release; + struct SoundingRS_UL_ConfigCommon__setup { + long srs_BandwidthConfig; + long srs_SubframeConfig; + BOOLEAN_t ackNackSRS_SimultaneousTransmission; + long *srs_MaxUpPts /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SoundingRS_UL_ConfigCommon_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_BandwidthConfig_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_SubframeConfig_13; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_MaxUpPts_31; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _SoundingRS_UL_ConfigCommon_H_ */ +#include diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.c b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.c new file mode 100644 index 000000000..9f8519de8 --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.c @@ -0,0 +1,203 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SoundingRS-UL-ConfigDedicated-v1020.h" + +static int +srs_AntennaPort_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_AntennaPort_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_AntennaPort_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_AntennaPort_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_AntennaPort_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_AntennaPort_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_AntennaPort_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_AntennaPort_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_AntennaPort_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_AntennaPort_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_AntennaPort_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_srs_AntennaPort_r10_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_srs_AntennaPort_r10_value2enum_2[] = { + { 0, 3, "an1" }, + { 1, 3, "an2" }, + { 2, 3, "an4" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_srs_AntennaPort_r10_enum2value_2[] = { + 0, /* an1(0) */ + 1, /* an2(1) */ + 2, /* an4(2) */ + 3 /* spare1(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_AntennaPort_r10_specs_2 = { + asn_MAP_srs_AntennaPort_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_srs_AntennaPort_r10_enum2value_2, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_AntennaPort_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_AntennaPort_r10_2 = { + "srs-AntennaPort-r10", + "srs-AntennaPort-r10", + srs_AntennaPort_r10_2_free, + srs_AntennaPort_r10_2_print, + srs_AntennaPort_r10_2_constraint, + srs_AntennaPort_r10_2_decode_ber, + srs_AntennaPort_r10_2_encode_der, + srs_AntennaPort_r10_2_decode_xer, + srs_AntennaPort_r10_2_encode_xer, + srs_AntennaPort_r10_2_decode_uper, + srs_AntennaPort_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_AntennaPort_r10_tags_2, + sizeof(asn_DEF_srs_AntennaPort_r10_tags_2) + /sizeof(asn_DEF_srs_AntennaPort_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_srs_AntennaPort_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_srs_AntennaPort_r10_tags_2) + /sizeof(asn_DEF_srs_AntennaPort_r10_tags_2[0]), /* 2 */ + &asn_PER_type_srs_AntennaPort_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_AntennaPort_r10_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SoundingRS_UL_ConfigDedicated_v1020_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated_v1020, srs_AntennaPort_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_AntennaPort_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-AntennaPort-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SoundingRS_UL_ConfigDedicated_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* srs-AntennaPort-r10 at 2698 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SoundingRS_UL_ConfigDedicated_v1020_specs_1 = { + sizeof(struct SoundingRS_UL_ConfigDedicated_v1020), + offsetof(struct SoundingRS_UL_ConfigDedicated_v1020, _asn_ctx), + asn_MAP_SoundingRS_UL_ConfigDedicated_v1020_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigDedicated_v1020 = { + "SoundingRS-UL-ConfigDedicated-v1020", + "SoundingRS-UL-ConfigDedicated-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1, + sizeof(asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1) + /sizeof(asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1[0]), /* 1 */ + asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1) + /sizeof(asn_DEF_SoundingRS_UL_ConfigDedicated_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SoundingRS_UL_ConfigDedicated_v1020_1, + 1, /* Elements count */ + &asn_SPC_SoundingRS_UL_ConfigDedicated_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h new file mode 100644 index 000000000..b8f4cdf49 --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SoundingRS_UL_ConfigDedicated_v1020_H_ +#define _SoundingRS_UL_ConfigDedicated_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SoundingRS_UL_ConfigDedicated_v1020__srs_AntennaPort_r10 { + SoundingRS_UL_ConfigDedicated_v1020__srs_AntennaPort_r10_an1 = 0, + SoundingRS_UL_ConfigDedicated_v1020__srs_AntennaPort_r10_an2 = 1, + SoundingRS_UL_ConfigDedicated_v1020__srs_AntennaPort_r10_an4 = 2, + SoundingRS_UL_ConfigDedicated_v1020__srs_AntennaPort_r10_spare1 = 3 +} e_SoundingRS_UL_ConfigDedicated_v1020__srs_AntennaPort_r10; + +/* SoundingRS-UL-ConfigDedicated-v1020 */ +typedef struct SoundingRS_UL_ConfigDedicated_v1020 { + long srs_AntennaPort_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SoundingRS_UL_ConfigDedicated_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_AntennaPort_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigDedicated_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _SoundingRS_UL_ConfigDedicated_v1020_H_ */ +#include diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c new file mode 100644 index 000000000..c0e51aff9 --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c @@ -0,0 +1,711 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SoundingRS-UL-ConfigDedicated.h" + +static int +srs_Bandwidth_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_Bandwidth_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_Bandwidth_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_Bandwidth_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_Bandwidth_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_Bandwidth_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_Bandwidth_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_Bandwidth_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_Bandwidth_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_Bandwidth_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_Bandwidth_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +srs_HoppingBandwidth_9_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +srs_HoppingBandwidth_9_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +srs_HoppingBandwidth_9_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +srs_HoppingBandwidth_9_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +srs_HoppingBandwidth_9_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +srs_HoppingBandwidth_9_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +srs_HoppingBandwidth_9_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +srs_HoppingBandwidth_9_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +srs_HoppingBandwidth_9_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +srs_HoppingBandwidth_9_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + srs_HoppingBandwidth_9_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +cyclicShift_18_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +cyclicShift_18_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +cyclicShift_18_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + cyclicShift_18_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +cyclicShift_18_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +cyclicShift_18_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +cyclicShift_18_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +cyclicShift_18_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +cyclicShift_18_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +cyclicShift_18_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +cyclicShift_18_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + cyclicShift_18_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_freqDomainPosition_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 23)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_srs_ConfigIndex_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1023)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_transmissionComb_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_srs_Bandwidth_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_srs_HoppingBandwidth_constr_9 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cyclicShift_constr_18 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_freqDomainPosition_constr_14 = { + { APC_CONSTRAINED, 5, 5, 0, 23 } /* (0..23) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_srs_ConfigIndex_constr_16 = { + { APC_CONSTRAINED, 10, 10, 0, 1023 } /* (0..1023) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_transmissionComb_constr_17 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SoundingRS_UL_ConfigDedicated_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_srs_Bandwidth_value2enum_4[] = { + { 0, 3, "bw0" }, + { 1, 3, "bw1" }, + { 2, 3, "bw2" }, + { 3, 3, "bw3" } +}; +static unsigned int asn_MAP_srs_Bandwidth_enum2value_4[] = { + 0, /* bw0(0) */ + 1, /* bw1(1) */ + 2, /* bw2(2) */ + 3 /* bw3(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_Bandwidth_specs_4 = { + asn_MAP_srs_Bandwidth_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_srs_Bandwidth_enum2value_4, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_Bandwidth_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_Bandwidth_4 = { + "srs-Bandwidth", + "srs-Bandwidth", + srs_Bandwidth_4_free, + srs_Bandwidth_4_print, + srs_Bandwidth_4_constraint, + srs_Bandwidth_4_decode_ber, + srs_Bandwidth_4_encode_der, + srs_Bandwidth_4_decode_xer, + srs_Bandwidth_4_encode_xer, + srs_Bandwidth_4_decode_uper, + srs_Bandwidth_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_Bandwidth_tags_4, + sizeof(asn_DEF_srs_Bandwidth_tags_4) + /sizeof(asn_DEF_srs_Bandwidth_tags_4[0]) - 1, /* 1 */ + asn_DEF_srs_Bandwidth_tags_4, /* Same as above */ + sizeof(asn_DEF_srs_Bandwidth_tags_4) + /sizeof(asn_DEF_srs_Bandwidth_tags_4[0]), /* 2 */ + &asn_PER_type_srs_Bandwidth_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_Bandwidth_specs_4 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_srs_HoppingBandwidth_value2enum_9[] = { + { 0, 4, "hbw0" }, + { 1, 4, "hbw1" }, + { 2, 4, "hbw2" }, + { 3, 4, "hbw3" } +}; +static unsigned int asn_MAP_srs_HoppingBandwidth_enum2value_9[] = { + 0, /* hbw0(0) */ + 1, /* hbw1(1) */ + 2, /* hbw2(2) */ + 3 /* hbw3(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_srs_HoppingBandwidth_specs_9 = { + asn_MAP_srs_HoppingBandwidth_value2enum_9, /* "tag" => N; sorted by tag */ + asn_MAP_srs_HoppingBandwidth_enum2value_9, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_srs_HoppingBandwidth_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_HoppingBandwidth_9 = { + "srs-HoppingBandwidth", + "srs-HoppingBandwidth", + srs_HoppingBandwidth_9_free, + srs_HoppingBandwidth_9_print, + srs_HoppingBandwidth_9_constraint, + srs_HoppingBandwidth_9_decode_ber, + srs_HoppingBandwidth_9_encode_der, + srs_HoppingBandwidth_9_decode_xer, + srs_HoppingBandwidth_9_encode_xer, + srs_HoppingBandwidth_9_decode_uper, + srs_HoppingBandwidth_9_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_HoppingBandwidth_tags_9, + sizeof(asn_DEF_srs_HoppingBandwidth_tags_9) + /sizeof(asn_DEF_srs_HoppingBandwidth_tags_9[0]) - 1, /* 1 */ + asn_DEF_srs_HoppingBandwidth_tags_9, /* Same as above */ + sizeof(asn_DEF_srs_HoppingBandwidth_tags_9) + /sizeof(asn_DEF_srs_HoppingBandwidth_tags_9[0]), /* 2 */ + &asn_PER_type_srs_HoppingBandwidth_constr_9, + 0, 0, /* Defined elsewhere */ + &asn_SPC_srs_HoppingBandwidth_specs_9 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_cyclicShift_value2enum_18[] = { + { 0, 3, "cs0" }, + { 1, 3, "cs1" }, + { 2, 3, "cs2" }, + { 3, 3, "cs3" }, + { 4, 3, "cs4" }, + { 5, 3, "cs5" }, + { 6, 3, "cs6" }, + { 7, 3, "cs7" } +}; +static unsigned int asn_MAP_cyclicShift_enum2value_18[] = { + 0, /* cs0(0) */ + 1, /* cs1(1) */ + 2, /* cs2(2) */ + 3, /* cs3(3) */ + 4, /* cs4(4) */ + 5, /* cs5(5) */ + 6, /* cs6(6) */ + 7 /* cs7(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_cyclicShift_specs_18 = { + asn_MAP_cyclicShift_value2enum_18, /* "tag" => N; sorted by tag */ + asn_MAP_cyclicShift_enum2value_18, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_cyclicShift_tags_18[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cyclicShift_18 = { + "cyclicShift", + "cyclicShift", + cyclicShift_18_free, + cyclicShift_18_print, + cyclicShift_18_constraint, + cyclicShift_18_decode_ber, + cyclicShift_18_encode_der, + cyclicShift_18_decode_xer, + cyclicShift_18_encode_xer, + cyclicShift_18_decode_uper, + cyclicShift_18_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cyclicShift_tags_18, + sizeof(asn_DEF_cyclicShift_tags_18) + /sizeof(asn_DEF_cyclicShift_tags_18[0]) - 1, /* 1 */ + asn_DEF_cyclicShift_tags_18, /* Same as above */ + sizeof(asn_DEF_cyclicShift_tags_18) + /sizeof(asn_DEF_cyclicShift_tags_18[0]), /* 2 */ + &asn_PER_type_cyclicShift_constr_18, + 0, 0, /* Defined elsewhere */ + &asn_SPC_cyclicShift_specs_18 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, srs_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_Bandwidth_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-Bandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, srs_HoppingBandwidth), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_srs_HoppingBandwidth_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-HoppingBandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, freqDomainPosition), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_freqDomainPosition_constraint_3, + &asn_PER_memb_freqDomainPosition_constr_14, + 0, + "freqDomainPosition" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, duration), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "duration" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, srs_ConfigIndex), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_srs_ConfigIndex_constraint_3, + &asn_PER_memb_srs_ConfigIndex_constr_16, + 0, + "srs-ConfigIndex" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, transmissionComb), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_transmissionComb_constraint_3, + &asn_PER_memb_transmissionComb_constr_17, + 0, + "transmissionComb" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated__setup, cyclicShift), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_cyclicShift_18, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cyclicShift" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srs-Bandwidth at 2687 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* srs-HoppingBandwidth at 2688 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* freqDomainPosition at 2689 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* duration at 2690 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* srs-ConfigIndex at 2691 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* transmissionComb at 2692 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* cyclicShift at 2693 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct SoundingRS_UL_ConfigDedicated__setup), + offsetof(struct SoundingRS_UL_ConfigDedicated__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 7, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 7, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SoundingRS_UL_ConfigDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicated, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SoundingRS_UL_ConfigDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2685 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2687 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SoundingRS_UL_ConfigDedicated_specs_1 = { + sizeof(struct SoundingRS_UL_ConfigDedicated), + offsetof(struct SoundingRS_UL_ConfigDedicated, _asn_ctx), + offsetof(struct SoundingRS_UL_ConfigDedicated, present), + sizeof(((struct SoundingRS_UL_ConfigDedicated *)0)->present), + asn_MAP_SoundingRS_UL_ConfigDedicated_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigDedicated = { + "SoundingRS-UL-ConfigDedicated", + "SoundingRS-UL-ConfigDedicated", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SoundingRS_UL_ConfigDedicated_constr_1, + asn_MBR_SoundingRS_UL_ConfigDedicated_1, + 2, /* Elements count */ + &asn_SPC_SoundingRS_UL_ConfigDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h new file mode 100644 index 000000000..07374f8ec --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SoundingRS_UL_ConfigDedicated_H_ +#define _SoundingRS_UL_ConfigDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SoundingRS_UL_ConfigDedicated_PR { + SoundingRS_UL_ConfigDedicated_PR_NOTHING, /* No components present */ + SoundingRS_UL_ConfigDedicated_PR_release, + SoundingRS_UL_ConfigDedicated_PR_setup +} SoundingRS_UL_ConfigDedicated_PR; +typedef enum SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth { + SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw0 = 0, + SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw1 = 1, + SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw2 = 2, + SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth_bw3 = 3 +} e_SoundingRS_UL_ConfigDedicated__setup__srs_Bandwidth; +typedef enum SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth { + SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw0 = 0, + SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw1 = 1, + SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw2 = 2, + SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth_hbw3 = 3 +} e_SoundingRS_UL_ConfigDedicated__setup__srs_HoppingBandwidth; +typedef enum SoundingRS_UL_ConfigDedicated__setup__cyclicShift { + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs0 = 0, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs1 = 1, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs2 = 2, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs3 = 3, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs4 = 4, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs5 = 5, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs6 = 6, + SoundingRS_UL_ConfigDedicated__setup__cyclicShift_cs7 = 7 +} e_SoundingRS_UL_ConfigDedicated__setup__cyclicShift; + +/* SoundingRS-UL-ConfigDedicated */ +typedef struct SoundingRS_UL_ConfigDedicated { + SoundingRS_UL_ConfigDedicated_PR present; + union SoundingRS_UL_ConfigDedicated_u { + NULL_t release; + struct SoundingRS_UL_ConfigDedicated__setup { + long srs_Bandwidth; + long srs_HoppingBandwidth; + long freqDomainPosition; + BOOLEAN_t duration; + long srs_ConfigIndex; + long transmissionComb; + long cyclicShift; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SoundingRS_UL_ConfigDedicated_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_Bandwidth_4; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_srs_HoppingBandwidth_9; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_cyclicShift_18; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _SoundingRS_UL_ConfigDedicated_H_ */ +#include diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c b/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c new file mode 100644 index 000000000..4521884e5 --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c @@ -0,0 +1,384 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SoundingRS-UL-ConfigDedicatedAperiodic-r10.h" + +static int +memb_srs_ConfigIndexAp_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_srs_ConfigApDCI_Format4_r10_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 3)) { + /* Perform validation of the inner elements */ + return td->check_constraints(td, sptr, ctfailcb, app_key); + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_srs_ConfigApDCI_Format4_r10_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_srs_ActivateAp_r10_constr_7 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_srs_ConfigIndexAp_r10_constr_4 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_srs_ConfigApDCI_Format4_r10_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 2, 2, 1, 3 } /* (SIZE(1..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SoundingRS_UL_ConfigDedicatedAperiodic_r10_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_srs_ConfigApDCI_Format4_r10_5[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SRS_ConfigAp_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_srs_ConfigApDCI_Format4_r10_specs_5 = { + sizeof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ConfigApDCI_Format4_r10), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ConfigApDCI_Format4_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_ConfigApDCI_Format4_r10_5 = { + "srs-ConfigApDCI-Format4-r10", + "srs-ConfigApDCI-Format4-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5, + sizeof(asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5) + /sizeof(asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5[0]) - 1, /* 1 */ + asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5, /* Same as above */ + sizeof(asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5) + /sizeof(asn_DEF_srs_ConfigApDCI_Format4_r10_tags_5[0]), /* 2 */ + &asn_PER_type_srs_ConfigApDCI_Format4_r10_constr_5, + asn_MBR_srs_ConfigApDCI_Format4_r10_5, + 1, /* Single element */ + &asn_SPC_srs_ConfigApDCI_Format4_r10_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10__setup, srs_ConfigApDCI_Format0_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SRS_ConfigAp_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-ConfigApDCI-Format0-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10__setup, srs_ConfigApDCI_Format1a2b2c_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SRS_ConfigAp_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-ConfigApDCI-Format1a2b2c-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srs-ConfigApDCI-Format0-r10 at 2709 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* srs-ConfigApDCI-Format1a2b2c-r10 at 2710 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_9 = { + sizeof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10__setup), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_9, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 1, /* Start extensions */ + 3 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_9 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_9, + sizeof(asn_DEF_setup_tags_9) + /sizeof(asn_DEF_setup_tags_9[0]) - 1, /* 1 */ + asn_DEF_setup_tags_9, /* Same as above */ + sizeof(asn_DEF_setup_tags_9) + /sizeof(asn_DEF_setup_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_9, + 2, /* Elements count */ + &asn_SPC_setup_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_srs_ActivateAp_r10_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_srs_ActivateAp_r10_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2707 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2709 */ +}; +static asn_CHOICE_specifics_t asn_SPC_srs_ActivateAp_r10_specs_7 = { + sizeof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10, _asn_ctx), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10, present), + sizeof(((struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10 *)0)->present), + asn_MAP_srs_ActivateAp_r10_tag2el_7, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_srs_ActivateAp_r10_7 = { + "srs-ActivateAp-r10", + "srs-ActivateAp-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_srs_ActivateAp_r10_constr_7, + asn_MBR_srs_ActivateAp_r10_7, + 2, /* Elements count */ + &asn_SPC_srs_ActivateAp_r10_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup, srs_ConfigIndexAp_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_srs_ConfigIndexAp_r10_constraint_3, + &asn_PER_memb_srs_ConfigIndexAp_r10_constr_4, + 0, + "srs-ConfigIndexAp-r10" + }, + { ATF_POINTER, 2, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup, srs_ConfigApDCI_Format4_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_srs_ConfigApDCI_Format4_r10_5, + memb_srs_ConfigApDCI_Format4_r10_constraint_3, + &asn_PER_memb_srs_ConfigApDCI_Format4_r10_constr_5, + 0, + "srs-ConfigApDCI-Format4-r10" + }, + { ATF_POINTER, 1, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup, srs_ActivateAp_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_srs_ActivateAp_r10_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "srs-ActivateAp-r10" + }, +}; +static int asn_MAP_setup_oms_3[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* srs-ConfigIndexAp-r10 at 2704 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* srs-ConfigApDCI-Format4-r10 at 2705 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* srs-ActivateAp-r10 at 2707 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 3, /* Count of tags in the map */ + asn_MAP_setup_oms_3, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 3, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SoundingRS_UL_ConfigDedicatedAperiodic_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_SoundingRS_UL_ConfigDedicatedAperiodic_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2702 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2704 */ +}; +static asn_CHOICE_specifics_t asn_SPC_SoundingRS_UL_ConfigDedicatedAperiodic_r10_specs_1 = { + sizeof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10, _asn_ctx), + offsetof(struct SoundingRS_UL_ConfigDedicatedAperiodic_r10, present), + sizeof(((struct SoundingRS_UL_ConfigDedicatedAperiodic_r10 *)0)->present), + asn_MAP_SoundingRS_UL_ConfigDedicatedAperiodic_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigDedicatedAperiodic_r10 = { + "SoundingRS-UL-ConfigDedicatedAperiodic-r10", + "SoundingRS-UL-ConfigDedicatedAperiodic-r10", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_SoundingRS_UL_ConfigDedicatedAperiodic_r10_constr_1, + asn_MBR_SoundingRS_UL_ConfigDedicatedAperiodic_r10_1, + 2, /* Elements count */ + &asn_SPC_SoundingRS_UL_ConfigDedicatedAperiodic_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h b/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h new file mode 100644 index 000000000..1b5075fe9 --- /dev/null +++ b/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h @@ -0,0 +1,96 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SoundingRS_UL_ConfigDedicatedAperiodic_r10_H_ +#define _SoundingRS_UL_ConfigDedicatedAperiodic_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include "SRS-ConfigAp-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SoundingRS_UL_ConfigDedicatedAperiodic_r10_PR { + SoundingRS_UL_ConfigDedicatedAperiodic_r10_PR_NOTHING, /* No components present */ + SoundingRS_UL_ConfigDedicatedAperiodic_r10_PR_release, + SoundingRS_UL_ConfigDedicatedAperiodic_r10_PR_setup +} SoundingRS_UL_ConfigDedicatedAperiodic_r10_PR; +typedef enum SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_PR { + SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_PR_NOTHING, /* No components present */ + SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_PR_release, + SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_PR_setup +} SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_PR; + +/* Forward declarations */ +struct SRS_ConfigAp_r10; + +/* SoundingRS-UL-ConfigDedicatedAperiodic-r10 */ +typedef struct SoundingRS_UL_ConfigDedicatedAperiodic_r10 { + SoundingRS_UL_ConfigDedicatedAperiodic_r10_PR present; + union SoundingRS_UL_ConfigDedicatedAperiodic_r10_u { + NULL_t release; + struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup { + long srs_ConfigIndexAp_r10; + struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ConfigApDCI_Format4_r10 { + A_SEQUENCE_OF(struct SRS_ConfigAp_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *srs_ConfigApDCI_Format4_r10; + struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10 { + SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_PR present; + union SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10_u { + NULL_t release; + struct SoundingRS_UL_ConfigDedicatedAperiodic_r10__setup__srs_ActivateAp_r10__setup { + SRS_ConfigAp_r10_t srs_ConfigApDCI_Format0_r10; + SRS_ConfigAp_r10_t srs_ConfigApDCI_Format1a2b2c_r10; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *srs_ActivateAp_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SoundingRS_UL_ConfigDedicatedAperiodic_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SoundingRS_UL_ConfigDedicatedAperiodic_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SRS-ConfigAp-r10.h" + +#endif /* _SoundingRS_UL_ConfigDedicatedAperiodic_r10_H_ */ +#include diff --git a/lte/rrc/asn/SpeedStateScaleFactors.c b/lte/rrc/asn/SpeedStateScaleFactors.c new file mode 100644 index 000000000..521ef9e1c --- /dev/null +++ b/lte/rrc/asn/SpeedStateScaleFactors.c @@ -0,0 +1,356 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SpeedStateScaleFactors.h" + +static int +sf_Medium_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +sf_Medium_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +sf_Medium_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + sf_Medium_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +sf_Medium_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +sf_Medium_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +sf_Medium_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +sf_Medium_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +sf_Medium_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +sf_Medium_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +sf_Medium_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + sf_Medium_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +sf_High_7_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +sf_High_7_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +sf_High_7_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + sf_High_7_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +sf_High_7_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +sf_High_7_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +sf_High_7_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +sf_High_7_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +sf_High_7_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +sf_High_7_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +sf_High_7_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + sf_High_7_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_sf_Medium_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sf_High_constr_7 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_sf_Medium_value2enum_2[] = { + { 0, 6, "oDot25" }, + { 1, 5, "oDot5" }, + { 2, 6, "oDot75" }, + { 3, 5, "lDot0" } +}; +static unsigned int asn_MAP_sf_Medium_enum2value_2[] = { + 3, /* lDot0(3) */ + 0, /* oDot25(0) */ + 1, /* oDot5(1) */ + 2 /* oDot75(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_sf_Medium_specs_2 = { + asn_MAP_sf_Medium_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_sf_Medium_enum2value_2, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_sf_Medium_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sf_Medium_2 = { + "sf-Medium", + "sf-Medium", + sf_Medium_2_free, + sf_Medium_2_print, + sf_Medium_2_constraint, + sf_Medium_2_decode_ber, + sf_Medium_2_encode_der, + sf_Medium_2_decode_xer, + sf_Medium_2_encode_xer, + sf_Medium_2_decode_uper, + sf_Medium_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sf_Medium_tags_2, + sizeof(asn_DEF_sf_Medium_tags_2) + /sizeof(asn_DEF_sf_Medium_tags_2[0]) - 1, /* 1 */ + asn_DEF_sf_Medium_tags_2, /* Same as above */ + sizeof(asn_DEF_sf_Medium_tags_2) + /sizeof(asn_DEF_sf_Medium_tags_2[0]), /* 2 */ + &asn_PER_type_sf_Medium_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sf_Medium_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_sf_High_value2enum_7[] = { + { 0, 6, "oDot25" }, + { 1, 5, "oDot5" }, + { 2, 6, "oDot75" }, + { 3, 5, "lDot0" } +}; +static unsigned int asn_MAP_sf_High_enum2value_7[] = { + 3, /* lDot0(3) */ + 0, /* oDot25(0) */ + 1, /* oDot5(1) */ + 2 /* oDot75(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_sf_High_specs_7 = { + asn_MAP_sf_High_value2enum_7, /* "tag" => N; sorted by tag */ + asn_MAP_sf_High_enum2value_7, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_sf_High_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sf_High_7 = { + "sf-High", + "sf-High", + sf_High_7_free, + sf_High_7_print, + sf_High_7_constraint, + sf_High_7_decode_ber, + sf_High_7_encode_der, + sf_High_7_decode_xer, + sf_High_7_encode_xer, + sf_High_7_decode_uper, + sf_High_7_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sf_High_tags_7, + sizeof(asn_DEF_sf_High_tags_7) + /sizeof(asn_DEF_sf_High_tags_7[0]) - 1, /* 1 */ + asn_DEF_sf_High_tags_7, /* Same as above */ + sizeof(asn_DEF_sf_High_tags_7) + /sizeof(asn_DEF_sf_High_tags_7[0]), /* 2 */ + &asn_PER_type_sf_High_constr_7, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sf_High_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SpeedStateScaleFactors_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SpeedStateScaleFactors, sf_Medium), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sf_Medium_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sf-Medium" + }, + { ATF_NOFLAGS, 0, offsetof(struct SpeedStateScaleFactors, sf_High), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sf_High_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sf-High" + }, +}; +static ber_tlv_tag_t asn_DEF_SpeedStateScaleFactors_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SpeedStateScaleFactors_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sf-Medium at 3127 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sf-High at 3128 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SpeedStateScaleFactors_specs_1 = { + sizeof(struct SpeedStateScaleFactors), + offsetof(struct SpeedStateScaleFactors, _asn_ctx), + asn_MAP_SpeedStateScaleFactors_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SpeedStateScaleFactors = { + "SpeedStateScaleFactors", + "SpeedStateScaleFactors", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SpeedStateScaleFactors_tags_1, + sizeof(asn_DEF_SpeedStateScaleFactors_tags_1) + /sizeof(asn_DEF_SpeedStateScaleFactors_tags_1[0]), /* 1 */ + asn_DEF_SpeedStateScaleFactors_tags_1, /* Same as above */ + sizeof(asn_DEF_SpeedStateScaleFactors_tags_1) + /sizeof(asn_DEF_SpeedStateScaleFactors_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SpeedStateScaleFactors_1, + 2, /* Elements count */ + &asn_SPC_SpeedStateScaleFactors_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SpeedStateScaleFactors.h b/lte/rrc/asn/SpeedStateScaleFactors.h new file mode 100644 index 000000000..995ff2d19 --- /dev/null +++ b/lte/rrc/asn/SpeedStateScaleFactors.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SpeedStateScaleFactors_H_ +#define _SpeedStateScaleFactors_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SpeedStateScaleFactors__sf_Medium { + SpeedStateScaleFactors__sf_Medium_oDot25 = 0, + SpeedStateScaleFactors__sf_Medium_oDot5 = 1, + SpeedStateScaleFactors__sf_Medium_oDot75 = 2, + SpeedStateScaleFactors__sf_Medium_lDot0 = 3 +} e_SpeedStateScaleFactors__sf_Medium; +typedef enum SpeedStateScaleFactors__sf_High { + SpeedStateScaleFactors__sf_High_oDot25 = 0, + SpeedStateScaleFactors__sf_High_oDot5 = 1, + SpeedStateScaleFactors__sf_High_oDot75 = 2, + SpeedStateScaleFactors__sf_High_lDot0 = 3 +} e_SpeedStateScaleFactors__sf_High; + +/* SpeedStateScaleFactors */ +typedef struct SpeedStateScaleFactors { + long sf_Medium; + long sf_High; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SpeedStateScaleFactors_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_sf_Medium_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sf_High_7; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SpeedStateScaleFactors; + +#ifdef __cplusplus +} +#endif + +#endif /* _SpeedStateScaleFactors_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandCombination-r10.c b/lte/rrc/asn/SupportedBandCombination-r10.c new file mode 100644 index 000000000..ae0c808c4 --- /dev/null +++ b/lte/rrc/asn/SupportedBandCombination-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandCombination-r10.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandCombination_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 7, 7, 1, 128 } /* (SIZE(1..128)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandCombination_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_BandCombinationParameters_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandCombination_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandCombination_r10_specs_1 = { + sizeof(struct SupportedBandCombination_r10), + offsetof(struct SupportedBandCombination_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandCombination_r10 = { + "SupportedBandCombination-r10", + "SupportedBandCombination-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandCombination_r10_tags_1, + sizeof(asn_DEF_SupportedBandCombination_r10_tags_1) + /sizeof(asn_DEF_SupportedBandCombination_r10_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandCombination_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandCombination_r10_tags_1) + /sizeof(asn_DEF_SupportedBandCombination_r10_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandCombination_r10_constr_1, + asn_MBR_SupportedBandCombination_r10_1, + 1, /* Single element */ + &asn_SPC_SupportedBandCombination_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandCombination-r10.h b/lte/rrc/asn/SupportedBandCombination-r10.h new file mode 100644 index 000000000..c2849fdf1 --- /dev/null +++ b/lte/rrc/asn/SupportedBandCombination-r10.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandCombination_r10_H_ +#define _SupportedBandCombination_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct BandCombinationParameters_r10; + +/* SupportedBandCombination-r10 */ +typedef struct SupportedBandCombination_r10 { + A_SEQUENCE_OF(struct BandCombinationParameters_r10) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandCombination_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandCombination_r10; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "BandCombinationParameters-r10.h" + +#endif /* _SupportedBandCombination_r10_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandEUTRA.c b/lte/rrc/asn/SupportedBandEUTRA.c new file mode 100644 index 000000000..5e99ea2f6 --- /dev/null +++ b/lte/rrc/asn/SupportedBandEUTRA.c @@ -0,0 +1,100 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandEUTRA.h" + +static int +memb_bandEUTRA_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 64)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_bandEUTRA_constr_2 = { + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (1..64) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SupportedBandEUTRA, bandEUTRA), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_bandEUTRA_constraint_1, + &asn_PER_memb_bandEUTRA_constr_2, + 0, + "bandEUTRA" + }, + { ATF_NOFLAGS, 0, offsetof(struct SupportedBandEUTRA, halfDuplex), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "halfDuplex" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SupportedBandEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* bandEUTRA at 3864 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* halfDuplex at 3865 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SupportedBandEUTRA_specs_1 = { + sizeof(struct SupportedBandEUTRA), + offsetof(struct SupportedBandEUTRA, _asn_ctx), + asn_MAP_SupportedBandEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandEUTRA = { + "SupportedBandEUTRA", + "SupportedBandEUTRA", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandEUTRA_tags_1, + sizeof(asn_DEF_SupportedBandEUTRA_tags_1) + /sizeof(asn_DEF_SupportedBandEUTRA_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandEUTRA_tags_1) + /sizeof(asn_DEF_SupportedBandEUTRA_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SupportedBandEUTRA_1, + 2, /* Elements count */ + &asn_SPC_SupportedBandEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandEUTRA.h b/lte/rrc/asn/SupportedBandEUTRA.h new file mode 100644 index 000000000..cbfe2b6ff --- /dev/null +++ b/lte/rrc/asn/SupportedBandEUTRA.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandEUTRA_H_ +#define _SupportedBandEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandEUTRA */ +typedef struct SupportedBandEUTRA { + long bandEUTRA; + BOOLEAN_t halfDuplex; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandGERAN.c b/lte/rrc/asn/SupportedBandGERAN.c new file mode 100644 index 000000000..ff6be4c33 --- /dev/null +++ b/lte/rrc/asn/SupportedBandGERAN.c @@ -0,0 +1,176 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandGERAN.h" + +int +SupportedBandGERAN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SupportedBandGERAN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SupportedBandGERAN_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SupportedBandGERAN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SupportedBandGERAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SupportedBandGERAN_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SupportedBandGERAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SupportedBandGERAN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SupportedBandGERAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SupportedBandGERAN_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SupportedBandGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SupportedBandGERAN_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_SupportedBandGERAN_value2enum_1[] = { + { 0, 6, "gsm450" }, + { 1, 6, "gsm480" }, + { 2, 6, "gsm710" }, + { 3, 6, "gsm750" }, + { 4, 6, "gsm810" }, + { 5, 6, "gsm850" }, + { 6, 7, "gsm900P" }, + { 7, 7, "gsm900E" }, + { 8, 7, "gsm900R" }, + { 9, 7, "gsm1800" }, + { 10, 7, "gsm1900" }, + { 11, 6, "spare5" }, + { 12, 6, "spare4" }, + { 13, 6, "spare3" }, + { 14, 6, "spare2" }, + { 15, 6, "spare1" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_SupportedBandGERAN_enum2value_1[] = { + 9, /* gsm1800(9) */ + 10, /* gsm1900(10) */ + 0, /* gsm450(0) */ + 1, /* gsm480(1) */ + 2, /* gsm710(2) */ + 3, /* gsm750(3) */ + 4, /* gsm810(4) */ + 5, /* gsm850(5) */ + 7, /* gsm900E(7) */ + 6, /* gsm900P(6) */ + 8, /* gsm900R(8) */ + 15, /* spare1(15) */ + 14, /* spare2(14) */ + 13, /* spare3(13) */ + 12, /* spare4(12) */ + 11 /* spare5(11) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_SupportedBandGERAN_specs_1 = { + asn_MAP_SupportedBandGERAN_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SupportedBandGERAN_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_SupportedBandGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandGERAN = { + "SupportedBandGERAN", + "SupportedBandGERAN", + SupportedBandGERAN_free, + SupportedBandGERAN_print, + SupportedBandGERAN_constraint, + SupportedBandGERAN_decode_ber, + SupportedBandGERAN_encode_der, + SupportedBandGERAN_decode_xer, + SupportedBandGERAN_encode_xer, + SupportedBandGERAN_decode_uper, + SupportedBandGERAN_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandGERAN_tags_1, + sizeof(asn_DEF_SupportedBandGERAN_tags_1) + /sizeof(asn_DEF_SupportedBandGERAN_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandGERAN_tags_1) + /sizeof(asn_DEF_SupportedBandGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandGERAN_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SupportedBandGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandGERAN.h b/lte/rrc/asn/SupportedBandGERAN.h new file mode 100644 index 000000000..fc6cfca4b --- /dev/null +++ b/lte/rrc/asn/SupportedBandGERAN.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandGERAN_H_ +#define _SupportedBandGERAN_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SupportedBandGERAN { + SupportedBandGERAN_gsm450 = 0, + SupportedBandGERAN_gsm480 = 1, + SupportedBandGERAN_gsm710 = 2, + SupportedBandGERAN_gsm750 = 3, + SupportedBandGERAN_gsm810 = 4, + SupportedBandGERAN_gsm850 = 5, + SupportedBandGERAN_gsm900P = 6, + SupportedBandGERAN_gsm900E = 7, + SupportedBandGERAN_gsm900R = 8, + SupportedBandGERAN_gsm1800 = 9, + SupportedBandGERAN_gsm1900 = 10, + SupportedBandGERAN_spare5 = 11, + SupportedBandGERAN_spare4 = 12, + SupportedBandGERAN_spare3 = 13, + SupportedBandGERAN_spare2 = 14, + SupportedBandGERAN_spare1 = 15 + /* + * Enumeration is extensible + */ +} e_SupportedBandGERAN; + +/* SupportedBandGERAN */ +typedef long SupportedBandGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandGERAN; +asn_struct_free_f SupportedBandGERAN_free; +asn_struct_print_f SupportedBandGERAN_print; +asn_constr_check_f SupportedBandGERAN_constraint; +ber_type_decoder_f SupportedBandGERAN_decode_ber; +der_type_encoder_f SupportedBandGERAN_encode_der; +xer_type_decoder_f SupportedBandGERAN_decode_xer; +xer_type_encoder_f SupportedBandGERAN_encode_xer; +per_type_decoder_f SupportedBandGERAN_decode_uper; +per_type_encoder_f SupportedBandGERAN_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandGERAN_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandList1XRTT.c b/lte/rrc/asn/SupportedBandList1XRTT.c new file mode 100644 index 000000000..4086d2462 --- /dev/null +++ b/lte/rrc/asn/SupportedBandList1XRTT.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandList1XRTT.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandList1XRTT_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandList1XRTT_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandList1XRTT_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandList1XRTT_specs_1 = { + sizeof(struct SupportedBandList1XRTT), + offsetof(struct SupportedBandList1XRTT, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandList1XRTT = { + "SupportedBandList1XRTT", + "SupportedBandList1XRTT", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandList1XRTT_tags_1, + sizeof(asn_DEF_SupportedBandList1XRTT_tags_1) + /sizeof(asn_DEF_SupportedBandList1XRTT_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandList1XRTT_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandList1XRTT_tags_1) + /sizeof(asn_DEF_SupportedBandList1XRTT_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandList1XRTT_constr_1, + asn_MBR_SupportedBandList1XRTT_1, + 1, /* Single element */ + &asn_SPC_SupportedBandList1XRTT_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandList1XRTT.h b/lte/rrc/asn/SupportedBandList1XRTT.h new file mode 100644 index 000000000..80355877d --- /dev/null +++ b/lte/rrc/asn/SupportedBandList1XRTT.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandList1XRTT_H_ +#define _SupportedBandList1XRTT_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandList1XRTT */ +typedef struct SupportedBandList1XRTT { + A_SEQUENCE_OF(BandclassCDMA2000_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandList1XRTT_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandList1XRTT; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandList1XRTT_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListEUTRA.c b/lte/rrc/asn/SupportedBandListEUTRA.c new file mode 100644 index 000000000..3d1beb191 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListEUTRA.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListEUTRA.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListEUTRA_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListEUTRA_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_SupportedBandEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListEUTRA_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListEUTRA_specs_1 = { + sizeof(struct SupportedBandListEUTRA), + offsetof(struct SupportedBandListEUTRA, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListEUTRA = { + "SupportedBandListEUTRA", + "SupportedBandListEUTRA", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListEUTRA_tags_1, + sizeof(asn_DEF_SupportedBandListEUTRA_tags_1) + /sizeof(asn_DEF_SupportedBandListEUTRA_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListEUTRA_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListEUTRA_tags_1) + /sizeof(asn_DEF_SupportedBandListEUTRA_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListEUTRA_constr_1, + asn_MBR_SupportedBandListEUTRA_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListEUTRA.h b/lte/rrc/asn/SupportedBandListEUTRA.h new file mode 100644 index 000000000..bf760ecc9 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListEUTRA.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListEUTRA_H_ +#define _SupportedBandListEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SupportedBandEUTRA; + +/* SupportedBandListEUTRA */ +typedef struct SupportedBandListEUTRA { + A_SEQUENCE_OF(struct SupportedBandEUTRA) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListEUTRA; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SupportedBandEUTRA.h" + +#endif /* _SupportedBandListEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListGERAN.c b/lte/rrc/asn/SupportedBandListGERAN.c new file mode 100644 index 000000000..7ed88de7d --- /dev/null +++ b/lte/rrc/asn/SupportedBandListGERAN.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListGERAN.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListGERAN_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListGERAN_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SupportedBandGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListGERAN_specs_1 = { + sizeof(struct SupportedBandListGERAN), + offsetof(struct SupportedBandListGERAN, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListGERAN = { + "SupportedBandListGERAN", + "SupportedBandListGERAN", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListGERAN_tags_1, + sizeof(asn_DEF_SupportedBandListGERAN_tags_1) + /sizeof(asn_DEF_SupportedBandListGERAN_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListGERAN_tags_1) + /sizeof(asn_DEF_SupportedBandListGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListGERAN_constr_1, + asn_MBR_SupportedBandListGERAN_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListGERAN.h b/lte/rrc/asn/SupportedBandListGERAN.h new file mode 100644 index 000000000..971f85098 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListGERAN.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListGERAN_H_ +#define _SupportedBandListGERAN_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandGERAN.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandListGERAN */ +typedef struct SupportedBandListGERAN { + A_SEQUENCE_OF(SupportedBandGERAN_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandListGERAN_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListHRPD.c b/lte/rrc/asn/SupportedBandListHRPD.c new file mode 100644 index 000000000..22bfdc6fb --- /dev/null +++ b/lte/rrc/asn/SupportedBandListHRPD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListHRPD.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListHRPD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListHRPD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_BandclassCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListHRPD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListHRPD_specs_1 = { + sizeof(struct SupportedBandListHRPD), + offsetof(struct SupportedBandListHRPD, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListHRPD = { + "SupportedBandListHRPD", + "SupportedBandListHRPD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListHRPD_tags_1, + sizeof(asn_DEF_SupportedBandListHRPD_tags_1) + /sizeof(asn_DEF_SupportedBandListHRPD_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListHRPD_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListHRPD_tags_1) + /sizeof(asn_DEF_SupportedBandListHRPD_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListHRPD_constr_1, + asn_MBR_SupportedBandListHRPD_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListHRPD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListHRPD.h b/lte/rrc/asn/SupportedBandListHRPD.h new file mode 100644 index 000000000..a7384f973 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListHRPD.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListHRPD_H_ +#define _SupportedBandListHRPD_H_ + + +#include + +/* Including external dependencies */ +#include "BandclassCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandListHRPD */ +typedef struct SupportedBandListHRPD { + A_SEQUENCE_OF(BandclassCDMA2000_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListHRPD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListHRPD; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandListHRPD_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListUTRA-FDD.c b/lte/rrc/asn/SupportedBandListUTRA-FDD.c new file mode 100644 index 000000000..b259b63b1 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-FDD.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListUTRA-FDD.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListUTRA_FDD_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListUTRA_FDD_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SupportedBandUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListUTRA_FDD_specs_1 = { + sizeof(struct SupportedBandListUTRA_FDD), + offsetof(struct SupportedBandListUTRA_FDD, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_FDD = { + "SupportedBandListUTRA-FDD", + "SupportedBandListUTRA-FDD", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListUTRA_FDD_tags_1, + sizeof(asn_DEF_SupportedBandListUTRA_FDD_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListUTRA_FDD_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_FDD_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListUTRA_FDD_constr_1, + asn_MBR_SupportedBandListUTRA_FDD_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListUTRA-FDD.h b/lte/rrc/asn/SupportedBandListUTRA-FDD.h new file mode 100644 index 000000000..a1bd8cfe7 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-FDD.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListUTRA_FDD_H_ +#define _SupportedBandListUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandUTRA-FDD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandListUTRA-FDD */ +typedef struct SupportedBandListUTRA_FDD { + A_SEQUENCE_OF(SupportedBandUTRA_FDD_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_FDD; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandListUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD128.c b/lte/rrc/asn/SupportedBandListUTRA-TDD128.c new file mode 100644 index 000000000..0f7d8a6f7 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-TDD128.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListUTRA-TDD128.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListUTRA_TDD128_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListUTRA_TDD128_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SupportedBandUTRA_TDD128, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListUTRA_TDD128_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListUTRA_TDD128_specs_1 = { + sizeof(struct SupportedBandListUTRA_TDD128), + offsetof(struct SupportedBandListUTRA_TDD128, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_TDD128 = { + "SupportedBandListUTRA-TDD128", + "SupportedBandListUTRA-TDD128", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListUTRA_TDD128_tags_1, + sizeof(asn_DEF_SupportedBandListUTRA_TDD128_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_TDD128_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListUTRA_TDD128_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListUTRA_TDD128_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_TDD128_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListUTRA_TDD128_constr_1, + asn_MBR_SupportedBandListUTRA_TDD128_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListUTRA_TDD128_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD128.h b/lte/rrc/asn/SupportedBandListUTRA-TDD128.h new file mode 100644 index 000000000..49b9df366 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-TDD128.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListUTRA_TDD128_H_ +#define _SupportedBandListUTRA_TDD128_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandUTRA-TDD128.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandListUTRA-TDD128 */ +typedef struct SupportedBandListUTRA_TDD128 { + A_SEQUENCE_OF(SupportedBandUTRA_TDD128_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListUTRA_TDD128_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_TDD128; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandListUTRA_TDD128_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD384.c b/lte/rrc/asn/SupportedBandListUTRA-TDD384.c new file mode 100644 index 000000000..c84ad17c1 --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-TDD384.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListUTRA-TDD384.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListUTRA_TDD384_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListUTRA_TDD384_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SupportedBandUTRA_TDD384, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListUTRA_TDD384_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListUTRA_TDD384_specs_1 = { + sizeof(struct SupportedBandListUTRA_TDD384), + offsetof(struct SupportedBandListUTRA_TDD384, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_TDD384 = { + "SupportedBandListUTRA-TDD384", + "SupportedBandListUTRA-TDD384", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListUTRA_TDD384_tags_1, + sizeof(asn_DEF_SupportedBandListUTRA_TDD384_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_TDD384_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListUTRA_TDD384_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListUTRA_TDD384_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_TDD384_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListUTRA_TDD384_constr_1, + asn_MBR_SupportedBandListUTRA_TDD384_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListUTRA_TDD384_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD384.h b/lte/rrc/asn/SupportedBandListUTRA-TDD384.h new file mode 100644 index 000000000..0ee7e885f --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-TDD384.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListUTRA_TDD384_H_ +#define _SupportedBandListUTRA_TDD384_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandUTRA-TDD384.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandListUTRA-TDD384 */ +typedef struct SupportedBandListUTRA_TDD384 { + A_SEQUENCE_OF(SupportedBandUTRA_TDD384_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListUTRA_TDD384_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_TDD384; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandListUTRA_TDD384_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD768.c b/lte/rrc/asn/SupportedBandListUTRA-TDD768.c new file mode 100644 index 000000000..a1e77cc2a --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-TDD768.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandListUTRA-TDD768.h" + +static asn_per_constraints_t asn_PER_type_SupportedBandListUTRA_TDD768_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 64 } /* (SIZE(1..64)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SupportedBandListUTRA_TDD768_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_SupportedBandUTRA_TDD768, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SupportedBandListUTRA_TDD768_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SupportedBandListUTRA_TDD768_specs_1 = { + sizeof(struct SupportedBandListUTRA_TDD768), + offsetof(struct SupportedBandListUTRA_TDD768, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_TDD768 = { + "SupportedBandListUTRA-TDD768", + "SupportedBandListUTRA-TDD768", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandListUTRA_TDD768_tags_1, + sizeof(asn_DEF_SupportedBandListUTRA_TDD768_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_TDD768_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandListUTRA_TDD768_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandListUTRA_TDD768_tags_1) + /sizeof(asn_DEF_SupportedBandListUTRA_TDD768_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandListUTRA_TDD768_constr_1, + asn_MBR_SupportedBandListUTRA_TDD768_1, + 1, /* Single element */ + &asn_SPC_SupportedBandListUTRA_TDD768_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD768.h b/lte/rrc/asn/SupportedBandListUTRA-TDD768.h new file mode 100644 index 000000000..afa30eaef --- /dev/null +++ b/lte/rrc/asn/SupportedBandListUTRA-TDD768.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandListUTRA_TDD768_H_ +#define _SupportedBandListUTRA_TDD768_H_ + + +#include + +/* Including external dependencies */ +#include "SupportedBandUTRA-TDD768.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SupportedBandListUTRA-TDD768 */ +typedef struct SupportedBandListUTRA_TDD768 { + A_SEQUENCE_OF(SupportedBandUTRA_TDD768_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SupportedBandListUTRA_TDD768_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandListUTRA_TDD768; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandListUTRA_TDD768_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandUTRA-FDD.c b/lte/rrc/asn/SupportedBandUTRA-FDD.c new file mode 100644 index 000000000..a6d371a8e --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-FDD.c @@ -0,0 +1,208 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandUTRA-FDD.h" + +int +SupportedBandUTRA_FDD_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SupportedBandUTRA_FDD_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SupportedBandUTRA_FDD_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_FDD_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SupportedBandUTRA_FDD_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_FDD_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SupportedBandUTRA_FDD_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_FDD_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SupportedBandUTRA_FDD_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SupportedBandUTRA_FDD_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SupportedBandUTRA_FDD_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_SupportedBandUTRA_FDD_value2enum_1[] = { + { 0, 5, "bandI" }, + { 1, 6, "bandII" }, + { 2, 7, "bandIII" }, + { 3, 6, "bandIV" }, + { 4, 5, "bandV" }, + { 5, 6, "bandVI" }, + { 6, 7, "bandVII" }, + { 7, 8, "bandVIII" }, + { 8, 6, "bandIX" }, + { 9, 5, "bandX" }, + { 10, 6, "bandXI" }, + { 11, 7, "bandXII" }, + { 12, 8, "bandXIII" }, + { 13, 7, "bandXIV" }, + { 14, 6, "bandXV" }, + { 15, 7, "bandXVI" }, + { 16, 12, "bandXVII-8a0" }, + { 17, 13, "bandXVIII-8a0" }, + { 18, 11, "bandXIX-8a0" }, + { 19, 10, "bandXX-8a0" }, + { 20, 11, "bandXXI-8a0" }, + { 21, 12, "bandXXII-8a0" }, + { 22, 13, "bandXXIII-8a0" }, + { 23, 12, "bandXXIV-8a0" }, + { 24, 11, "bandXXV-8a0" }, + { 25, 12, "bandXXVI-8a0" }, + { 26, 13, "bandXXVII-8a0" }, + { 27, 14, "bandXXVIII-8a0" }, + { 28, 12, "bandXXIX-8a0" }, + { 29, 11, "bandXXX-8a0" }, + { 30, 12, "bandXXXI-8a0" }, + { 31, 13, "bandXXXII-8a0" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_SupportedBandUTRA_FDD_enum2value_1[] = { + 0, /* bandI(0) */ + 1, /* bandII(1) */ + 2, /* bandIII(2) */ + 3, /* bandIV(3) */ + 8, /* bandIX(8) */ + 4, /* bandV(4) */ + 5, /* bandVI(5) */ + 6, /* bandVII(6) */ + 7, /* bandVIII(7) */ + 9, /* bandX(9) */ + 10, /* bandXI(10) */ + 11, /* bandXII(11) */ + 12, /* bandXIII(12) */ + 13, /* bandXIV(13) */ + 18, /* bandXIX-8a0(18) */ + 14, /* bandXV(14) */ + 15, /* bandXVI(15) */ + 16, /* bandXVII-8a0(16) */ + 17, /* bandXVIII-8a0(17) */ + 19, /* bandXX-8a0(19) */ + 20, /* bandXXI-8a0(20) */ + 21, /* bandXXII-8a0(21) */ + 22, /* bandXXIII-8a0(22) */ + 23, /* bandXXIV-8a0(23) */ + 28, /* bandXXIX-8a0(28) */ + 24, /* bandXXV-8a0(24) */ + 25, /* bandXXVI-8a0(25) */ + 26, /* bandXXVII-8a0(26) */ + 27, /* bandXXVIII-8a0(27) */ + 29, /* bandXXX-8a0(29) */ + 30, /* bandXXXI-8a0(30) */ + 31 /* bandXXXII-8a0(31) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_SupportedBandUTRA_FDD_specs_1 = { + asn_MAP_SupportedBandUTRA_FDD_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SupportedBandUTRA_FDD_enum2value_1, /* N => "tag"; sorted by N */ + 32, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_SupportedBandUTRA_FDD_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_FDD = { + "SupportedBandUTRA-FDD", + "SupportedBandUTRA-FDD", + SupportedBandUTRA_FDD_free, + SupportedBandUTRA_FDD_print, + SupportedBandUTRA_FDD_constraint, + SupportedBandUTRA_FDD_decode_ber, + SupportedBandUTRA_FDD_encode_der, + SupportedBandUTRA_FDD_decode_xer, + SupportedBandUTRA_FDD_encode_xer, + SupportedBandUTRA_FDD_decode_uper, + SupportedBandUTRA_FDD_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandUTRA_FDD_tags_1, + sizeof(asn_DEF_SupportedBandUTRA_FDD_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_FDD_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandUTRA_FDD_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandUTRA_FDD_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_FDD_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandUTRA_FDD_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SupportedBandUTRA_FDD_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandUTRA-FDD.h b/lte/rrc/asn/SupportedBandUTRA-FDD.h new file mode 100644 index 000000000..b7a62344b --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-FDD.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandUTRA_FDD_H_ +#define _SupportedBandUTRA_FDD_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SupportedBandUTRA_FDD { + SupportedBandUTRA_FDD_bandI = 0, + SupportedBandUTRA_FDD_bandII = 1, + SupportedBandUTRA_FDD_bandIII = 2, + SupportedBandUTRA_FDD_bandIV = 3, + SupportedBandUTRA_FDD_bandV = 4, + SupportedBandUTRA_FDD_bandVI = 5, + SupportedBandUTRA_FDD_bandVII = 6, + SupportedBandUTRA_FDD_bandVIII = 7, + SupportedBandUTRA_FDD_bandIX = 8, + SupportedBandUTRA_FDD_bandX = 9, + SupportedBandUTRA_FDD_bandXI = 10, + SupportedBandUTRA_FDD_bandXII = 11, + SupportedBandUTRA_FDD_bandXIII = 12, + SupportedBandUTRA_FDD_bandXIV = 13, + SupportedBandUTRA_FDD_bandXV = 14, + SupportedBandUTRA_FDD_bandXVI = 15, + /* + * Enumeration is extensible + */ + SupportedBandUTRA_FDD_bandXVII_8a0 = 16, + SupportedBandUTRA_FDD_bandXVIII_8a0 = 17, + SupportedBandUTRA_FDD_bandXIX_8a0 = 18, + SupportedBandUTRA_FDD_bandXX_8a0 = 19, + SupportedBandUTRA_FDD_bandXXI_8a0 = 20, + SupportedBandUTRA_FDD_bandXXII_8a0 = 21, + SupportedBandUTRA_FDD_bandXXIII_8a0 = 22, + SupportedBandUTRA_FDD_bandXXIV_8a0 = 23, + SupportedBandUTRA_FDD_bandXXV_8a0 = 24, + SupportedBandUTRA_FDD_bandXXVI_8a0 = 25, + SupportedBandUTRA_FDD_bandXXVII_8a0 = 26, + SupportedBandUTRA_FDD_bandXXVIII_8a0 = 27, + SupportedBandUTRA_FDD_bandXXIX_8a0 = 28, + SupportedBandUTRA_FDD_bandXXX_8a0 = 29, + SupportedBandUTRA_FDD_bandXXXI_8a0 = 30, + SupportedBandUTRA_FDD_bandXXXII_8a0 = 31 +} e_SupportedBandUTRA_FDD; + +/* SupportedBandUTRA-FDD */ +typedef long SupportedBandUTRA_FDD_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_FDD; +asn_struct_free_f SupportedBandUTRA_FDD_free; +asn_struct_print_f SupportedBandUTRA_FDD_print; +asn_constr_check_f SupportedBandUTRA_FDD_constraint; +ber_type_decoder_f SupportedBandUTRA_FDD_decode_ber; +der_type_encoder_f SupportedBandUTRA_FDD_encode_der; +xer_type_decoder_f SupportedBandUTRA_FDD_decode_xer; +xer_type_encoder_f SupportedBandUTRA_FDD_encode_xer; +per_type_decoder_f SupportedBandUTRA_FDD_decode_uper; +per_type_encoder_f SupportedBandUTRA_FDD_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandUTRA_FDD_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD128.c b/lte/rrc/asn/SupportedBandUTRA-TDD128.c new file mode 100644 index 000000000..058dd8041 --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-TDD128.c @@ -0,0 +1,176 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandUTRA-TDD128.h" + +int +SupportedBandUTRA_TDD128_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SupportedBandUTRA_TDD128_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SupportedBandUTRA_TDD128_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD128_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD128_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD128_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD128_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD128_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD128_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SupportedBandUTRA_TDD128_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SupportedBandUTRA_TDD128_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_SupportedBandUTRA_TDD128_value2enum_1[] = { + { 0, 1, "a" }, + { 1, 1, "b" }, + { 2, 1, "c" }, + { 3, 1, "d" }, + { 4, 1, "e" }, + { 5, 1, "f" }, + { 6, 1, "g" }, + { 7, 1, "h" }, + { 8, 1, "i" }, + { 9, 1, "j" }, + { 10, 1, "k" }, + { 11, 1, "l" }, + { 12, 1, "m" }, + { 13, 1, "n" }, + { 14, 1, "o" }, + { 15, 1, "p" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_SupportedBandUTRA_TDD128_enum2value_1[] = { + 0, /* a(0) */ + 1, /* b(1) */ + 2, /* c(2) */ + 3, /* d(3) */ + 4, /* e(4) */ + 5, /* f(5) */ + 6, /* g(6) */ + 7, /* h(7) */ + 8, /* i(8) */ + 9, /* j(9) */ + 10, /* k(10) */ + 11, /* l(11) */ + 12, /* m(12) */ + 13, /* n(13) */ + 14, /* o(14) */ + 15 /* p(15) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_SupportedBandUTRA_TDD128_specs_1 = { + asn_MAP_SupportedBandUTRA_TDD128_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SupportedBandUTRA_TDD128_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_SupportedBandUTRA_TDD128_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_TDD128 = { + "SupportedBandUTRA-TDD128", + "SupportedBandUTRA-TDD128", + SupportedBandUTRA_TDD128_free, + SupportedBandUTRA_TDD128_print, + SupportedBandUTRA_TDD128_constraint, + SupportedBandUTRA_TDD128_decode_ber, + SupportedBandUTRA_TDD128_encode_der, + SupportedBandUTRA_TDD128_decode_xer, + SupportedBandUTRA_TDD128_encode_xer, + SupportedBandUTRA_TDD128_decode_uper, + SupportedBandUTRA_TDD128_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandUTRA_TDD128_tags_1, + sizeof(asn_DEF_SupportedBandUTRA_TDD128_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_TDD128_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandUTRA_TDD128_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandUTRA_TDD128_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_TDD128_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandUTRA_TDD128_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SupportedBandUTRA_TDD128_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD128.h b/lte/rrc/asn/SupportedBandUTRA-TDD128.h new file mode 100644 index 000000000..60c246962 --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-TDD128.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandUTRA_TDD128_H_ +#define _SupportedBandUTRA_TDD128_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SupportedBandUTRA_TDD128 { + SupportedBandUTRA_TDD128_a = 0, + SupportedBandUTRA_TDD128_b = 1, + SupportedBandUTRA_TDD128_c = 2, + SupportedBandUTRA_TDD128_d = 3, + SupportedBandUTRA_TDD128_e = 4, + SupportedBandUTRA_TDD128_f = 5, + SupportedBandUTRA_TDD128_g = 6, + SupportedBandUTRA_TDD128_h = 7, + SupportedBandUTRA_TDD128_i = 8, + SupportedBandUTRA_TDD128_j = 9, + SupportedBandUTRA_TDD128_k = 10, + SupportedBandUTRA_TDD128_l = 11, + SupportedBandUTRA_TDD128_m = 12, + SupportedBandUTRA_TDD128_n = 13, + SupportedBandUTRA_TDD128_o = 14, + SupportedBandUTRA_TDD128_p = 15 + /* + * Enumeration is extensible + */ +} e_SupportedBandUTRA_TDD128; + +/* SupportedBandUTRA-TDD128 */ +typedef long SupportedBandUTRA_TDD128_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_TDD128; +asn_struct_free_f SupportedBandUTRA_TDD128_free; +asn_struct_print_f SupportedBandUTRA_TDD128_print; +asn_constr_check_f SupportedBandUTRA_TDD128_constraint; +ber_type_decoder_f SupportedBandUTRA_TDD128_decode_ber; +der_type_encoder_f SupportedBandUTRA_TDD128_encode_der; +xer_type_decoder_f SupportedBandUTRA_TDD128_decode_xer; +xer_type_encoder_f SupportedBandUTRA_TDD128_encode_xer; +per_type_decoder_f SupportedBandUTRA_TDD128_decode_uper; +per_type_encoder_f SupportedBandUTRA_TDD128_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandUTRA_TDD128_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD384.c b/lte/rrc/asn/SupportedBandUTRA-TDD384.c new file mode 100644 index 000000000..ee1f2e947 --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-TDD384.c @@ -0,0 +1,176 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandUTRA-TDD384.h" + +int +SupportedBandUTRA_TDD384_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SupportedBandUTRA_TDD384_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SupportedBandUTRA_TDD384_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD384_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD384_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD384_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD384_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD384_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD384_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SupportedBandUTRA_TDD384_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SupportedBandUTRA_TDD384_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_SupportedBandUTRA_TDD384_value2enum_1[] = { + { 0, 1, "a" }, + { 1, 1, "b" }, + { 2, 1, "c" }, + { 3, 1, "d" }, + { 4, 1, "e" }, + { 5, 1, "f" }, + { 6, 1, "g" }, + { 7, 1, "h" }, + { 8, 1, "i" }, + { 9, 1, "j" }, + { 10, 1, "k" }, + { 11, 1, "l" }, + { 12, 1, "m" }, + { 13, 1, "n" }, + { 14, 1, "o" }, + { 15, 1, "p" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_SupportedBandUTRA_TDD384_enum2value_1[] = { + 0, /* a(0) */ + 1, /* b(1) */ + 2, /* c(2) */ + 3, /* d(3) */ + 4, /* e(4) */ + 5, /* f(5) */ + 6, /* g(6) */ + 7, /* h(7) */ + 8, /* i(8) */ + 9, /* j(9) */ + 10, /* k(10) */ + 11, /* l(11) */ + 12, /* m(12) */ + 13, /* n(13) */ + 14, /* o(14) */ + 15 /* p(15) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_SupportedBandUTRA_TDD384_specs_1 = { + asn_MAP_SupportedBandUTRA_TDD384_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SupportedBandUTRA_TDD384_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_SupportedBandUTRA_TDD384_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_TDD384 = { + "SupportedBandUTRA-TDD384", + "SupportedBandUTRA-TDD384", + SupportedBandUTRA_TDD384_free, + SupportedBandUTRA_TDD384_print, + SupportedBandUTRA_TDD384_constraint, + SupportedBandUTRA_TDD384_decode_ber, + SupportedBandUTRA_TDD384_encode_der, + SupportedBandUTRA_TDD384_decode_xer, + SupportedBandUTRA_TDD384_encode_xer, + SupportedBandUTRA_TDD384_decode_uper, + SupportedBandUTRA_TDD384_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandUTRA_TDD384_tags_1, + sizeof(asn_DEF_SupportedBandUTRA_TDD384_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_TDD384_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandUTRA_TDD384_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandUTRA_TDD384_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_TDD384_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandUTRA_TDD384_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SupportedBandUTRA_TDD384_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD384.h b/lte/rrc/asn/SupportedBandUTRA-TDD384.h new file mode 100644 index 000000000..e1cc3ad43 --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-TDD384.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandUTRA_TDD384_H_ +#define _SupportedBandUTRA_TDD384_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SupportedBandUTRA_TDD384 { + SupportedBandUTRA_TDD384_a = 0, + SupportedBandUTRA_TDD384_b = 1, + SupportedBandUTRA_TDD384_c = 2, + SupportedBandUTRA_TDD384_d = 3, + SupportedBandUTRA_TDD384_e = 4, + SupportedBandUTRA_TDD384_f = 5, + SupportedBandUTRA_TDD384_g = 6, + SupportedBandUTRA_TDD384_h = 7, + SupportedBandUTRA_TDD384_i = 8, + SupportedBandUTRA_TDD384_j = 9, + SupportedBandUTRA_TDD384_k = 10, + SupportedBandUTRA_TDD384_l = 11, + SupportedBandUTRA_TDD384_m = 12, + SupportedBandUTRA_TDD384_n = 13, + SupportedBandUTRA_TDD384_o = 14, + SupportedBandUTRA_TDD384_p = 15 + /* + * Enumeration is extensible + */ +} e_SupportedBandUTRA_TDD384; + +/* SupportedBandUTRA-TDD384 */ +typedef long SupportedBandUTRA_TDD384_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_TDD384; +asn_struct_free_f SupportedBandUTRA_TDD384_free; +asn_struct_print_f SupportedBandUTRA_TDD384_print; +asn_constr_check_f SupportedBandUTRA_TDD384_constraint; +ber_type_decoder_f SupportedBandUTRA_TDD384_decode_ber; +der_type_encoder_f SupportedBandUTRA_TDD384_encode_der; +xer_type_decoder_f SupportedBandUTRA_TDD384_decode_xer; +xer_type_encoder_f SupportedBandUTRA_TDD384_encode_xer; +per_type_decoder_f SupportedBandUTRA_TDD384_decode_uper; +per_type_encoder_f SupportedBandUTRA_TDD384_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandUTRA_TDD384_H_ */ +#include diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD768.c b/lte/rrc/asn/SupportedBandUTRA-TDD768.c new file mode 100644 index 000000000..0ded13cbf --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-TDD768.c @@ -0,0 +1,176 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SupportedBandUTRA-TDD768.h" + +int +SupportedBandUTRA_TDD768_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +SupportedBandUTRA_TDD768_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +SupportedBandUTRA_TDD768_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD768_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD768_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD768_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD768_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +SupportedBandUTRA_TDD768_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +SupportedBandUTRA_TDD768_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + SupportedBandUTRA_TDD768_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_SupportedBandUTRA_TDD768_constr_1 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 15 } /* (0..15,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_SupportedBandUTRA_TDD768_value2enum_1[] = { + { 0, 1, "a" }, + { 1, 1, "b" }, + { 2, 1, "c" }, + { 3, 1, "d" }, + { 4, 1, "e" }, + { 5, 1, "f" }, + { 6, 1, "g" }, + { 7, 1, "h" }, + { 8, 1, "i" }, + { 9, 1, "j" }, + { 10, 1, "k" }, + { 11, 1, "l" }, + { 12, 1, "m" }, + { 13, 1, "n" }, + { 14, 1, "o" }, + { 15, 1, "p" } + /* This list is extensible */ +}; +static unsigned int asn_MAP_SupportedBandUTRA_TDD768_enum2value_1[] = { + 0, /* a(0) */ + 1, /* b(1) */ + 2, /* c(2) */ + 3, /* d(3) */ + 4, /* e(4) */ + 5, /* f(5) */ + 6, /* g(6) */ + 7, /* h(7) */ + 8, /* i(8) */ + 9, /* j(9) */ + 10, /* k(10) */ + 11, /* l(11) */ + 12, /* m(12) */ + 13, /* n(13) */ + 14, /* o(14) */ + 15 /* p(15) */ + /* This list is extensible */ +}; +static asn_INTEGER_specifics_t asn_SPC_SupportedBandUTRA_TDD768_specs_1 = { + asn_MAP_SupportedBandUTRA_TDD768_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_SupportedBandUTRA_TDD768_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 17, /* Extensions before this member */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_SupportedBandUTRA_TDD768_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_TDD768 = { + "SupportedBandUTRA-TDD768", + "SupportedBandUTRA-TDD768", + SupportedBandUTRA_TDD768_free, + SupportedBandUTRA_TDD768_print, + SupportedBandUTRA_TDD768_constraint, + SupportedBandUTRA_TDD768_decode_ber, + SupportedBandUTRA_TDD768_encode_der, + SupportedBandUTRA_TDD768_decode_xer, + SupportedBandUTRA_TDD768_encode_xer, + SupportedBandUTRA_TDD768_decode_uper, + SupportedBandUTRA_TDD768_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SupportedBandUTRA_TDD768_tags_1, + sizeof(asn_DEF_SupportedBandUTRA_TDD768_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_TDD768_tags_1[0]), /* 1 */ + asn_DEF_SupportedBandUTRA_TDD768_tags_1, /* Same as above */ + sizeof(asn_DEF_SupportedBandUTRA_TDD768_tags_1) + /sizeof(asn_DEF_SupportedBandUTRA_TDD768_tags_1[0]), /* 1 */ + &asn_PER_type_SupportedBandUTRA_TDD768_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_SupportedBandUTRA_TDD768_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD768.h b/lte/rrc/asn/SupportedBandUTRA-TDD768.h new file mode 100644 index 000000000..086f8577c --- /dev/null +++ b/lte/rrc/asn/SupportedBandUTRA-TDD768.h @@ -0,0 +1,64 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SupportedBandUTRA_TDD768_H_ +#define _SupportedBandUTRA_TDD768_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SupportedBandUTRA_TDD768 { + SupportedBandUTRA_TDD768_a = 0, + SupportedBandUTRA_TDD768_b = 1, + SupportedBandUTRA_TDD768_c = 2, + SupportedBandUTRA_TDD768_d = 3, + SupportedBandUTRA_TDD768_e = 4, + SupportedBandUTRA_TDD768_f = 5, + SupportedBandUTRA_TDD768_g = 6, + SupportedBandUTRA_TDD768_h = 7, + SupportedBandUTRA_TDD768_i = 8, + SupportedBandUTRA_TDD768_j = 9, + SupportedBandUTRA_TDD768_k = 10, + SupportedBandUTRA_TDD768_l = 11, + SupportedBandUTRA_TDD768_m = 12, + SupportedBandUTRA_TDD768_n = 13, + SupportedBandUTRA_TDD768_o = 14, + SupportedBandUTRA_TDD768_p = 15 + /* + * Enumeration is extensible + */ +} e_SupportedBandUTRA_TDD768; + +/* SupportedBandUTRA-TDD768 */ +typedef long SupportedBandUTRA_TDD768_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SupportedBandUTRA_TDD768; +asn_struct_free_f SupportedBandUTRA_TDD768_free; +asn_struct_print_f SupportedBandUTRA_TDD768_print; +asn_constr_check_f SupportedBandUTRA_TDD768_constraint; +ber_type_decoder_f SupportedBandUTRA_TDD768_decode_ber; +der_type_encoder_f SupportedBandUTRA_TDD768_encode_der; +xer_type_decoder_f SupportedBandUTRA_TDD768_decode_xer; +xer_type_encoder_f SupportedBandUTRA_TDD768_encode_xer; +per_type_decoder_f SupportedBandUTRA_TDD768_decode_uper; +per_type_encoder_f SupportedBandUTRA_TDD768_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _SupportedBandUTRA_TDD768_H_ */ +#include diff --git a/lte/rrc/asn/SystemInfoListGERAN.c b/lte/rrc/asn/SystemInfoListGERAN.c new file mode 100644 index 000000000..b2148107d --- /dev/null +++ b/lte/rrc/asn/SystemInfoListGERAN.c @@ -0,0 +1,89 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInfoListGERAN.h" + +static int +memb_OCTET_STRING_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 23)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_Member_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 23 } /* (SIZE(1..23)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_SystemInfoListGERAN_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 1, 10 } /* (SIZE(1..10)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SystemInfoListGERAN_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (4 << 2)), + 0, + &asn_DEF_OCTET_STRING, + memb_OCTET_STRING_constraint_1, + &asn_PER_memb_Member_constr_2, + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_SystemInfoListGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_SystemInfoListGERAN_specs_1 = { + sizeof(struct SystemInfoListGERAN), + offsetof(struct SystemInfoListGERAN, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInfoListGERAN = { + "SystemInfoListGERAN", + "SystemInfoListGERAN", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInfoListGERAN_tags_1, + sizeof(asn_DEF_SystemInfoListGERAN_tags_1) + /sizeof(asn_DEF_SystemInfoListGERAN_tags_1[0]), /* 1 */ + asn_DEF_SystemInfoListGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInfoListGERAN_tags_1) + /sizeof(asn_DEF_SystemInfoListGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_SystemInfoListGERAN_constr_1, + asn_MBR_SystemInfoListGERAN_1, + 1, /* Single element */ + &asn_SPC_SystemInfoListGERAN_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInfoListGERAN.h b/lte/rrc/asn/SystemInfoListGERAN.h new file mode 100644 index 000000000..8e8700a33 --- /dev/null +++ b/lte/rrc/asn/SystemInfoListGERAN.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInfoListGERAN_H_ +#define _SystemInfoListGERAN_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SystemInfoListGERAN */ +typedef struct SystemInfoListGERAN { + A_SEQUENCE_OF(OCTET_STRING_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInfoListGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInfoListGERAN; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInfoListGERAN_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformation-r8-IEs.c b/lte/rrc/asn/SystemInformation-r8-IEs.c new file mode 100644 index 000000000..c973c8e72 --- /dev/null +++ b/lte/rrc/asn/SystemInformation-r8-IEs.c @@ -0,0 +1,317 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformation-r8-IEs.h" + +static int +memb_sib_TypeAndInfo_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + /* Determine the number of elements */ + size = _A_CSEQUENCE_FROM_VOID(sptr)->count; + + if((size >= 1 && size <= 32)) { + /* Perform validation of the inner elements */ + return td->check_constraints(td, sptr, ctfailcb, app_key); + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_Member_constr_3 = { + { APC_CONSTRAINED | APC_EXTENSIBLE, 4, 4, 0, 9 } /* (0..9,...) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sib_TypeAndInfo_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_sib_TypeAndInfo_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_Member_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib2), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib2" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib3" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib4), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib4" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib5" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib6), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib6" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib7), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib7" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib8), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib8" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib10), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib10" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib11), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib11" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib12_v920), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType12_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib12-v920" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, choice.sib13_v920), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformationBlockType13_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sib13-v920" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_Member_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sib2 at 1145 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* sib3 at 1146 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sib4 at 1147 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* sib5 at 1148 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* sib6 at 1149 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* sib7 at 1150 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* sib8 at 1151 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* sib9 at 1152 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* sib10 at 1153 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* sib11 at 1154 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* sib12-v920 at 1156 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 } /* sib13-v920 at 1158 */ +}; +static asn_CHOICE_specifics_t asn_SPC_Member_specs_3 = { + sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member), + offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, _asn_ctx), + offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member, present), + sizeof(((struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member *)0)->present), + asn_MAP_Member_tag2el_3, + 12, /* Count of tags in the map */ + 0, + 10 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_Member_3 = { + "CHOICE", + "CHOICE", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_Member_constr_3, + asn_MBR_Member_3, + 12, /* Elements count */ + &asn_SPC_Member_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_sib_TypeAndInfo_2[] = { + { ATF_POINTER, 0, 0, + -1 /* Ambiguous tag (CHOICE?) */, + 0, + &asn_DEF_Member_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_sib_TypeAndInfo_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_sib_TypeAndInfo_specs_2 = { + sizeof(struct SystemInformation_r8_IEs__sib_TypeAndInfo), + offsetof(struct SystemInformation_r8_IEs__sib_TypeAndInfo, _asn_ctx), + 2, /* XER encoding is XMLValueList */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sib_TypeAndInfo_2 = { + "sib-TypeAndInfo", + "sib-TypeAndInfo", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sib_TypeAndInfo_tags_2, + sizeof(asn_DEF_sib_TypeAndInfo_tags_2) + /sizeof(asn_DEF_sib_TypeAndInfo_tags_2[0]) - 1, /* 1 */ + asn_DEF_sib_TypeAndInfo_tags_2, /* Same as above */ + sizeof(asn_DEF_sib_TypeAndInfo_tags_2) + /sizeof(asn_DEF_sib_TypeAndInfo_tags_2[0]), /* 2 */ + &asn_PER_type_sib_TypeAndInfo_constr_2, + asn_MBR_sib_TypeAndInfo_2, + 1, /* Single element */ + &asn_SPC_sib_TypeAndInfo_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformation_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation_r8_IEs, sib_TypeAndInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_sib_TypeAndInfo_2, + memb_sib_TypeAndInfo_constraint_1, + &asn_PER_memb_sib_TypeAndInfo_constr_2, + 0, + "sib-TypeAndInfo" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformation_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformation_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformation_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_SystemInformation_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformation_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sib-TypeAndInfo at 1158 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1159 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformation_r8_IEs_specs_1 = { + sizeof(struct SystemInformation_r8_IEs), + offsetof(struct SystemInformation_r8_IEs, _asn_ctx), + asn_MAP_SystemInformation_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SystemInformation_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformation_r8_IEs = { + "SystemInformation-r8-IEs", + "SystemInformation-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformation_r8_IEs_tags_1, + sizeof(asn_DEF_SystemInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_SystemInformation_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_SystemInformation_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_SystemInformation_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformation_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_SystemInformation_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformation-r8-IEs.h b/lte/rrc/asn/SystemInformation-r8-IEs.h new file mode 100644 index 000000000..efe1e5a8d --- /dev/null +++ b/lte/rrc/asn/SystemInformation-r8-IEs.h @@ -0,0 +1,105 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformation_r8_IEs_H_ +#define _SystemInformation_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include "SystemInformationBlockType2.h" +#include "SystemInformationBlockType3.h" +#include "SystemInformationBlockType4.h" +#include "SystemInformationBlockType5.h" +#include "SystemInformationBlockType6.h" +#include "SystemInformationBlockType7.h" +#include "SystemInformationBlockType8.h" +#include "SystemInformationBlockType9.h" +#include "SystemInformationBlockType10.h" +#include "SystemInformationBlockType11.h" +#include "SystemInformationBlockType12-r9.h" +#include "SystemInformationBlockType13-r9.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR { + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_NOTHING, /* No components present */ + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib2, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib3, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib4, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib5, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib6, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib7, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib8, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib9, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib10, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib11, + /* Extensions may appear below */ + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib12_v920, + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR_sib13_v920 +} SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR; + +/* Forward declarations */ +struct SystemInformation_v8a0_IEs; + +/* SystemInformation-r8-IEs */ +typedef struct SystemInformation_r8_IEs { + struct SystemInformation_r8_IEs__sib_TypeAndInfo { + A_SEQUENCE_OF(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member { + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR present; + union SystemInformation_r8_IEs__sib_TypeAndInfo__Member_u { + SystemInformationBlockType2_t sib2; + SystemInformationBlockType3_t sib3; + SystemInformationBlockType4_t sib4; + SystemInformationBlockType5_t sib5; + SystemInformationBlockType6_t sib6; + SystemInformationBlockType7_t sib7; + SystemInformationBlockType8_t sib8; + SystemInformationBlockType9_t sib9; + SystemInformationBlockType10_t sib10; + SystemInformationBlockType11_t sib11; + /* + * This type is extensible, + * possible extensions are below. + */ + SystemInformationBlockType12_r9_t sib12_v920; + SystemInformationBlockType13_r9_t sib13_v920; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } ) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } sib_TypeAndInfo; + struct SystemInformation_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformation_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformation_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SystemInformation-v8a0-IEs.h" + +#endif /* _SystemInformation_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformation-v8a0-IEs.c b/lte/rrc/asn/SystemInformation-v8a0-IEs.c new file mode 100644 index 000000000..df8f92095 --- /dev/null +++ b/lte/rrc/asn/SystemInformation-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformation-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct SystemInformation_v8a0_IEs__nonCriticalExtension), + offsetof(struct SystemInformation_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformation_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct SystemInformation_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformation_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformation_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SystemInformation_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformation_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1163 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1164 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformation_v8a0_IEs_specs_1 = { + sizeof(struct SystemInformation_v8a0_IEs), + offsetof(struct SystemInformation_v8a0_IEs, _asn_ctx), + asn_MAP_SystemInformation_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SystemInformation_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformation_v8a0_IEs = { + "SystemInformation-v8a0-IEs", + "SystemInformation-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformation_v8a0_IEs_tags_1, + sizeof(asn_DEF_SystemInformation_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SystemInformation_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_SystemInformation_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformation_v8a0_IEs_tags_1) + /sizeof(asn_DEF_SystemInformation_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformation_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_SystemInformation_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformation-v8a0-IEs.h b/lte/rrc/asn/SystemInformation-v8a0-IEs.h new file mode 100644 index 000000000..3b084f905 --- /dev/null +++ b/lte/rrc/asn/SystemInformation-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformation_v8a0_IEs_H_ +#define _SystemInformation_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SystemInformation-v8a0-IEs */ +typedef struct SystemInformation_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct SystemInformation_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformation_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformation_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformation_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformation.c b/lte/rrc/asn/SystemInformation.c new file mode 100644 index 000000000..b214a075a --- /dev/null +++ b/lte/rrc/asn/SystemInformation.c @@ -0,0 +1,161 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformation.h" + +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_4 = { + sizeof(struct SystemInformation__criticalExtensions__criticalExtensionsFuture), + offsetof(struct SystemInformation__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_4 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_4, + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_4, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_4) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation__criticalExtensions, choice.systemInformation_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemInformation_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemInformation-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* systemInformation-r8 at 1139 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1140 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct SystemInformation__criticalExtensions), + offsetof(struct SystemInformation__criticalExtensions, _asn_ctx), + offsetof(struct SystemInformation__criticalExtensions, present), + sizeof(((struct SystemInformation__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformation, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_SystemInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 1139 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformation_specs_1 = { + sizeof(struct SystemInformation), + offsetof(struct SystemInformation, _asn_ctx), + asn_MAP_SystemInformation_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformation = { + "SystemInformation", + "SystemInformation", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformation_tags_1, + sizeof(asn_DEF_SystemInformation_tags_1) + /sizeof(asn_DEF_SystemInformation_tags_1[0]), /* 1 */ + asn_DEF_SystemInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformation_tags_1) + /sizeof(asn_DEF_SystemInformation_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformation_1, + 1, /* Elements count */ + &asn_SPC_SystemInformation_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformation.h b/lte/rrc/asn/SystemInformation.h new file mode 100644 index 000000000..ec30637ce --- /dev/null +++ b/lte/rrc/asn/SystemInformation.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformation_H_ +#define _SystemInformation_H_ + + +#include + +/* Including external dependencies */ +#include "SystemInformation-r8-IEs.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformation__criticalExtensions_PR { + SystemInformation__criticalExtensions_PR_NOTHING, /* No components present */ + SystemInformation__criticalExtensions_PR_systemInformation_r8, + SystemInformation__criticalExtensions_PR_criticalExtensionsFuture +} SystemInformation__criticalExtensions_PR; + +/* SystemInformation */ +typedef struct SystemInformation { + struct SystemInformation__criticalExtensions { + SystemInformation__criticalExtensions_PR present; + union SystemInformation__criticalExtensions_u { + SystemInformation_r8_IEs_t systemInformation_r8; + struct SystemInformation__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformation; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformation_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c index 5342576e6..5dc100f85 100644 --- a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c +++ b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SystemInformationBlockType1-v890-IEs.h" @@ -26,13 +27,13 @@ static asn_TYPE_member_t asn_MBR_SystemInformationBlockType1_v890_IEs_1[] = { "nonCriticalExtension" }, }; -static const int asn_MAP_SystemInformationBlockType1_v890_IEs_oms_1[] = { 0, 1 }; -static const ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1[] = { +static int asn_MAP_SystemInformationBlockType1_v890_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_v890_IEs_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_v890_IEs_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension */ +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_v890_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1194 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1195 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType1_v890_IEs_specs_1 = { sizeof(struct SystemInformationBlockType1_v890_IEs), diff --git a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h index 5a5823144..9f1592170 100644 --- a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h +++ b/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SystemInformationBlockType1_v890_IEs_H_ diff --git a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c index f5bc3fc57..bc2ec8793 100644 --- a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c +++ b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SystemInformationBlockType1-v920-IEs.h" @@ -22,7 +23,6 @@ static void ims_EmergencySupport_r9_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -95,18 +95,18 @@ ims_EmergencySupport_r9_2_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_ims_EmergencySupport_r9_constr_2 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_ims_EmergencySupport_r9_constr_2 = { { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_ims_EmergencySupport_r9_value2enum_2[] = { +static asn_INTEGER_enum_map_t asn_MAP_ims_EmergencySupport_r9_value2enum_2[] = { { 0, 4, "true" } }; -static const unsigned int asn_MAP_ims_EmergencySupport_r9_enum2value_2[] = { +static unsigned int asn_MAP_ims_EmergencySupport_r9_enum2value_2[] = { 0 /* true(0) */ }; -static const asn_INTEGER_specifics_t asn_SPC_ims_EmergencySupport_r9_specs_2 = { +static asn_INTEGER_specifics_t asn_SPC_ims_EmergencySupport_r9_specs_2 = { asn_MAP_ims_EmergencySupport_r9_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_ims_EmergencySupport_r9_enum2value_2, /* N => "tag"; sorted by N */ 1, /* Number of elements in the maps */ @@ -115,7 +115,7 @@ static const asn_INTEGER_specifics_t asn_SPC_ims_EmergencySupport_r9_specs_2 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_ims_EmergencySupport_r9_tags_2[] = { +static ber_tlv_tag_t asn_DEF_ims_EmergencySupport_r9_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -144,13 +144,13 @@ asn_TYPE_descriptor_t asn_DEF_ims_EmergencySupport_r9_2 = { &asn_SPC_ims_EmergencySupport_r9_specs_2 /* Additional specs */ }; -static const ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_5[] = { +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_5[] = { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_5 = { - sizeof(struct nonCriticalExtension), - offsetof(struct nonCriticalExtension, _asn_ctx), + sizeof(struct SystemInformationBlockType1_v920_IEs__nonCriticalExtension), + offsetof(struct SystemInformationBlockType1_v920_IEs__nonCriticalExtension, _asn_ctx), 0, /* No top level tags */ 0, /* No tags in the map */ 0, 0, 0, /* Optional elements (not needed) */ @@ -211,14 +211,14 @@ static asn_TYPE_member_t asn_MBR_SystemInformationBlockType1_v920_IEs_1[] = { "nonCriticalExtension" }, }; -static const int asn_MAP_SystemInformationBlockType1_v920_IEs_oms_1[] = { 0, 1, 2 }; -static const ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1[] = { +static int asn_MAP_SystemInformationBlockType1_v920_IEs_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_v920_IEs_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_v920_IEs_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ims-EmergencySupport-r9 */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellSelectionInfo-v920 */ - { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension */ +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ims-EmergencySupport-r9 at 1199 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellSelectionInfo-v920 at 1200 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 1201 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType1_v920_IEs_specs_1 = { sizeof(struct SystemInformationBlockType1_v920_IEs), diff --git a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h index 663f48585..4353442ae 100644 --- a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h +++ b/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SystemInformationBlockType1_v920_IEs_H_ @@ -19,9 +20,9 @@ extern "C" { #endif /* Dependencies */ -typedef enum ims_EmergencySupport_r9 { - ims_EmergencySupport_r9_true = 0 -} e_ims_EmergencySupport_r9; +typedef enum SystemInformationBlockType1_v920_IEs__ims_EmergencySupport_r9 { + SystemInformationBlockType1_v920_IEs__ims_EmergencySupport_r9_true = 0 +} e_SystemInformationBlockType1_v920_IEs__ims_EmergencySupport_r9; /* Forward declarations */ struct CellSelectionInfo_v920; @@ -30,7 +31,7 @@ struct CellSelectionInfo_v920; typedef struct SystemInformationBlockType1_v920_IEs { long *ims_EmergencySupport_r9 /* OPTIONAL */; struct CellSelectionInfo_v920 *cellSelectionInfo_v920 /* OPTIONAL */; - struct nonCriticalExtension { + struct SystemInformationBlockType1_v920_IEs__nonCriticalExtension { /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; diff --git a/lte/rrc/asn/SystemInformationBlockType1.c b/lte/rrc/asn/SystemInformationBlockType1.c index 3637e305a..27553f386 100644 --- a/lte/rrc/asn/SystemInformationBlockType1.c +++ b/lte/rrc/asn/SystemInformationBlockType1.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "SystemInformationBlockType1.h" @@ -22,7 +23,6 @@ static void cellBarred_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -111,7 +111,6 @@ static void intraFreqReselection_9_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -225,7 +224,6 @@ static void si_WindowLength_21_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -348,45 +346,45 @@ memb_systemInfoValueTag_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr } } -static asn_per_constraints_t asn_PER_type_cellBarred_constr_6 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_cellBarred_constr_6 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_type_intraFreqReselection_constr_9 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_intraFreqReselection_constr_9 = { { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_memb_q_RxLevMinOffset_constr_16 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_q_RxLevMinOffset_constr_16 = { { APC_CONSTRAINED, 3, 3, 1, 8 } /* (1..8) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_type_si_WindowLength_constr_21 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_si_WindowLength_constr_21 = { { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_memb_freqBandIndicator_constr_18 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_freqBandIndicator_constr_18 = { { APC_CONSTRAINED, 6, 6, 1, 64 } /* (1..64) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_memb_systemInfoValueTag_constr_29 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_memb_systemInfoValueTag_constr_29 = { { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_cellBarred_value2enum_6[] = { +static asn_INTEGER_enum_map_t asn_MAP_cellBarred_value2enum_6[] = { { 0, 6, "barred" }, { 1, 9, "notBarred" } }; -static const unsigned int asn_MAP_cellBarred_enum2value_6[] = { +static unsigned int asn_MAP_cellBarred_enum2value_6[] = { 0, /* barred(0) */ 1 /* notBarred(1) */ }; -static const asn_INTEGER_specifics_t asn_SPC_cellBarred_specs_6 = { +static asn_INTEGER_specifics_t asn_SPC_cellBarred_specs_6 = { asn_MAP_cellBarred_value2enum_6, /* "tag" => N; sorted by tag */ asn_MAP_cellBarred_enum2value_6, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ @@ -395,7 +393,7 @@ static const asn_INTEGER_specifics_t asn_SPC_cellBarred_specs_6 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_cellBarred_tags_6[] = { +static ber_tlv_tag_t asn_DEF_cellBarred_tags_6[] = { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -424,15 +422,15 @@ asn_TYPE_descriptor_t asn_DEF_cellBarred_6 = { &asn_SPC_cellBarred_specs_6 /* Additional specs */ }; -static const asn_INTEGER_enum_map_t asn_MAP_intraFreqReselection_value2enum_9[] = { +static asn_INTEGER_enum_map_t asn_MAP_intraFreqReselection_value2enum_9[] = { { 0, 7, "allowed" }, { 1, 10, "notAllowed" } }; -static const unsigned int asn_MAP_intraFreqReselection_enum2value_9[] = { +static unsigned int asn_MAP_intraFreqReselection_enum2value_9[] = { 0, /* allowed(0) */ 1 /* notAllowed(1) */ }; -static const asn_INTEGER_specifics_t asn_SPC_intraFreqReselection_specs_9 = { +static asn_INTEGER_specifics_t asn_SPC_intraFreqReselection_specs_9 = { asn_MAP_intraFreqReselection_value2enum_9, /* "tag" => N; sorted by tag */ asn_MAP_intraFreqReselection_enum2value_9, /* N => "tag"; sorted by N */ 2, /* Number of elements in the maps */ @@ -441,7 +439,7 @@ static const asn_INTEGER_specifics_t asn_SPC_intraFreqReselection_specs_9 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_intraFreqReselection_tags_9[] = { +static ber_tlv_tag_t asn_DEF_intraFreqReselection_tags_9[] = { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -471,7 +469,7 @@ asn_TYPE_descriptor_t asn_DEF_intraFreqReselection_9 = { }; static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { - { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, plmn_IdentityList), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, plmn_IdentityList), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_PLMN_IdentityList, @@ -480,7 +478,7 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { 0, "plmn-IdentityList" }, - { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, trackingAreaCode), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, trackingAreaCode), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_TrackingAreaCode, @@ -489,7 +487,7 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { 0, "trackingAreaCode" }, - { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, cellIdentity), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, cellIdentity), (ASN_TAG_CLASS_CONTEXT | (2 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CellIdentity, @@ -498,7 +496,7 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { 0, "cellIdentity" }, - { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, cellBarred), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, cellBarred), (ASN_TAG_CLASS_CONTEXT | (3 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_cellBarred_6, @@ -507,7 +505,7 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { 0, "cellBarred" }, - { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, intraFreqReselection), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, intraFreqReselection), (ASN_TAG_CLASS_CONTEXT | (4 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_intraFreqReselection_9, @@ -516,7 +514,7 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { 0, "intraFreqReselection" }, - { ATF_NOFLAGS, 0, offsetof(struct cellAccessRelatedInfo, csg_Indication), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, csg_Indication), (ASN_TAG_CLASS_CONTEXT | (5 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_BOOLEAN, @@ -525,7 +523,7 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { 0, "csg-Indication" }, - { ATF_POINTER, 1, offsetof(struct cellAccessRelatedInfo, csg_Identity), + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, csg_Identity), (ASN_TAG_CLASS_CONTEXT | (6 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_CSG_Identity, @@ -535,23 +533,23 @@ static asn_TYPE_member_t asn_MBR_cellAccessRelatedInfo_2[] = { "csg-Identity" }, }; -static const int asn_MAP_cellAccessRelatedInfo_oms_2[] = { 6 }; -static const ber_tlv_tag_t asn_DEF_cellAccessRelatedInfo_tags_2[] = { +static int asn_MAP_cellAccessRelatedInfo_oms_2[] = { 6 }; +static ber_tlv_tag_t asn_DEF_cellAccessRelatedInfo_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_cellAccessRelatedInfo_tag2el_2[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-IdentityList */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* trackingAreaCode */ - { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellIdentity */ - { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* cellBarred */ - { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* intraFreqReselection */ - { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* csg-Indication */ - { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* csg-Identity */ +static asn_TYPE_tag2member_t asn_MAP_cellAccessRelatedInfo_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-IdentityList at 1170 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* trackingAreaCode at 1171 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* cellIdentity at 1172 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* cellBarred at 1173 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* intraFreqReselection at 1174 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* csg-Indication at 1175 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* csg-Identity at 1176 */ }; static asn_SEQUENCE_specifics_t asn_SPC_cellAccessRelatedInfo_specs_2 = { - sizeof(struct cellAccessRelatedInfo), - offsetof(struct cellAccessRelatedInfo, _asn_ctx), + sizeof(struct SystemInformationBlockType1__cellAccessRelatedInfo), + offsetof(struct SystemInformationBlockType1__cellAccessRelatedInfo, _asn_ctx), asn_MAP_cellAccessRelatedInfo_tag2el_2, 7, /* Count of tags in the map */ asn_MAP_cellAccessRelatedInfo_oms_2, /* Optional members */ @@ -586,7 +584,7 @@ asn_TYPE_descriptor_t asn_DEF_cellAccessRelatedInfo_2 = { }; static asn_TYPE_member_t asn_MBR_cellSelectionInfo_14[] = { - { ATF_NOFLAGS, 0, offsetof(struct cellSelectionInfo, q_RxLevMin), + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType1__cellSelectionInfo, q_RxLevMin), (ASN_TAG_CLASS_CONTEXT | (0 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_Q_RxLevMin, @@ -595,7 +593,7 @@ static asn_TYPE_member_t asn_MBR_cellSelectionInfo_14[] = { 0, "q-RxLevMin" }, - { ATF_POINTER, 1, offsetof(struct cellSelectionInfo, q_RxLevMinOffset), + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType1__cellSelectionInfo, q_RxLevMinOffset), (ASN_TAG_CLASS_CONTEXT | (1 << 2)), -1, /* IMPLICIT tag at current level */ &asn_DEF_NativeInteger, @@ -605,18 +603,18 @@ static asn_TYPE_member_t asn_MBR_cellSelectionInfo_14[] = { "q-RxLevMinOffset" }, }; -static const int asn_MAP_cellSelectionInfo_oms_14[] = { 1 }; -static const ber_tlv_tag_t asn_DEF_cellSelectionInfo_tags_14[] = { +static int asn_MAP_cellSelectionInfo_oms_14[] = { 1 }; +static ber_tlv_tag_t asn_DEF_cellSelectionInfo_tags_14[] = { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_cellSelectionInfo_tag2el_14[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-RxLevMin */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-RxLevMinOffset */ +static asn_TYPE_tag2member_t asn_MAP_cellSelectionInfo_tag2el_14[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-RxLevMin at 1179 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-RxLevMinOffset at 1180 */ }; static asn_SEQUENCE_specifics_t asn_SPC_cellSelectionInfo_specs_14 = { - sizeof(struct cellSelectionInfo), - offsetof(struct cellSelectionInfo, _asn_ctx), + sizeof(struct SystemInformationBlockType1__cellSelectionInfo), + offsetof(struct SystemInformationBlockType1__cellSelectionInfo, _asn_ctx), asn_MAP_cellSelectionInfo_tag2el_14, 2, /* Count of tags in the map */ asn_MAP_cellSelectionInfo_oms_14, /* Optional members */ @@ -650,7 +648,7 @@ asn_TYPE_descriptor_t asn_DEF_cellSelectionInfo_14 = { &asn_SPC_cellSelectionInfo_specs_14 /* Additional specs */ }; -static const asn_INTEGER_enum_map_t asn_MAP_si_WindowLength_value2enum_21[] = { +static asn_INTEGER_enum_map_t asn_MAP_si_WindowLength_value2enum_21[] = { { 0, 3, "ms1" }, { 1, 3, "ms2" }, { 2, 3, "ms5" }, @@ -659,7 +657,7 @@ static const asn_INTEGER_enum_map_t asn_MAP_si_WindowLength_value2enum_21[] = { { 5, 4, "ms20" }, { 6, 4, "ms40" } }; -static const unsigned int asn_MAP_si_WindowLength_enum2value_21[] = { +static unsigned int asn_MAP_si_WindowLength_enum2value_21[] = { 0, /* ms1(0) */ 3, /* ms10(3) */ 4, /* ms15(4) */ @@ -668,7 +666,7 @@ static const unsigned int asn_MAP_si_WindowLength_enum2value_21[] = { 6, /* ms40(6) */ 2 /* ms5(2) */ }; -static const asn_INTEGER_specifics_t asn_SPC_si_WindowLength_specs_21 = { +static asn_INTEGER_specifics_t asn_SPC_si_WindowLength_specs_21 = { asn_MAP_si_WindowLength_value2enum_21, /* "tag" => N; sorted by tag */ asn_MAP_si_WindowLength_enum2value_21, /* N => "tag"; sorted by N */ 7, /* Number of elements in the maps */ @@ -677,7 +675,7 @@ static const asn_INTEGER_specifics_t asn_SPC_si_WindowLength_specs_21 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_si_WindowLength_tags_21[] = { +static ber_tlv_tag_t asn_DEF_si_WindowLength_tags_21[] = { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -789,20 +787,20 @@ static asn_TYPE_member_t asn_MBR_SystemInformationBlockType1_1[] = { "nonCriticalExtension" }, }; -static const int asn_MAP_SystemInformationBlockType1_oms_1[] = { 2, 5, 8 }; -static const ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_tags_1[] = { +static int asn_MAP_SystemInformationBlockType1_oms_1[] = { 2, 5, 8 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType1_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellAccessRelatedInfo */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellSelectionInfo */ - { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* p-Max */ - { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* freqBandIndicator */ - { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* schedulingInfoList */ - { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* tdd-Config */ - { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* si-WindowLength */ - { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* systemInfoValueTag */ - { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* nonCriticalExtension */ +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType1_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellAccessRelatedInfo at 1170 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellSelectionInfo at 1179 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* p-Max at 1182 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* freqBandIndicator at 1183 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* schedulingInfoList at 1184 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* tdd-Config at 1185 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* si-WindowLength at 1187 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* systemInfoValueTag at 1189 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* nonCriticalExtension at 1190 */ }; static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType1_specs_1 = { sizeof(struct SystemInformationBlockType1), diff --git a/lte/rrc/asn/SystemInformationBlockType1.h b/lte/rrc/asn/SystemInformationBlockType1.h index 2050012bf..4d019a500 100644 --- a/lte/rrc/asn/SystemInformationBlockType1.h +++ b/lte/rrc/asn/SystemInformationBlockType1.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _SystemInformationBlockType1_H_ @@ -28,23 +29,23 @@ extern "C" { #endif /* Dependencies */ -typedef enum cellBarred { - cellBarred_barred = 0, - cellBarred_notBarred = 1 -} e_cellBarred; -typedef enum intraFreqReselection { - intraFreqReselection_allowed = 0, - intraFreqReselection_notAllowed = 1 -} e_intraFreqReselection; -typedef enum si_WindowLength { - si_WindowLength_ms1 = 0, - si_WindowLength_ms2 = 1, - si_WindowLength_ms5 = 2, - si_WindowLength_ms10 = 3, - si_WindowLength_ms15 = 4, - si_WindowLength_ms20 = 5, - si_WindowLength_ms40 = 6 -} e_si_WindowLength; +typedef enum SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred { + SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_barred = 0, + SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_notBarred = 1 +} e_SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred; +typedef enum SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection { + SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed = 0, + SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_notAllowed = 1 +} e_SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection; +typedef enum SystemInformationBlockType1__si_WindowLength { + SystemInformationBlockType1__si_WindowLength_ms1 = 0, + SystemInformationBlockType1__si_WindowLength_ms2 = 1, + SystemInformationBlockType1__si_WindowLength_ms5 = 2, + SystemInformationBlockType1__si_WindowLength_ms10 = 3, + SystemInformationBlockType1__si_WindowLength_ms15 = 4, + SystemInformationBlockType1__si_WindowLength_ms20 = 5, + SystemInformationBlockType1__si_WindowLength_ms40 = 6 +} e_SystemInformationBlockType1__si_WindowLength; /* Forward declarations */ struct TDD_Config; @@ -52,7 +53,7 @@ struct SystemInformationBlockType1_v890_IEs; /* SystemInformationBlockType1 */ typedef struct SystemInformationBlockType1 { - struct cellAccessRelatedInfo { + struct SystemInformationBlockType1__cellAccessRelatedInfo { PLMN_IdentityList_t plmn_IdentityList; TrackingAreaCode_t trackingAreaCode; CellIdentity_t cellIdentity; @@ -64,7 +65,7 @@ typedef struct SystemInformationBlockType1 { /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; } cellAccessRelatedInfo; - struct cellSelectionInfo { + struct SystemInformationBlockType1__cellSelectionInfo { Q_RxLevMin_t q_RxLevMin; long *q_RxLevMinOffset /* OPTIONAL */; diff --git a/lte/rrc/asn/SystemInformationBlockType10.c b/lte/rrc/asn/SystemInformationBlockType10.c new file mode 100644 index 000000000..d88f310c6 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType10.c @@ -0,0 +1,236 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType10.h" + +static int +memb_messageIdentifier_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_serialNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_warningType_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 2)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_warningSecurityInfo_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 50)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_messageIdentifier_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_serialNumber_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_warningType_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 2, 2 } /* (SIZE(2..2)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_warningSecurityInfo_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 50, 50 } /* (SIZE(50..50)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType10, messageIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_messageIdentifier_constraint_1, + &asn_PER_memb_messageIdentifier_constr_2, + 0, + "messageIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType10, serialNumber), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_serialNumber_constraint_1, + &asn_PER_memb_serialNumber_constr_3, + 0, + "serialNumber" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType10, warningType), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_warningType_constraint_1, + &asn_PER_memb_warningType_constr_4, + 0, + "warningType" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType10, warningSecurityInfo), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_warningSecurityInfo_constraint_1, + &asn_PER_memb_warningSecurityInfo_constr_5, + 0, + "warningSecurityInfo" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType10, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType10_oms_1[] = { 3, 4 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* messageIdentifier at 1757 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serialNumber at 1758 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* warningType at 1759 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* warningSecurityInfo at 1760 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* lateNonCriticalExtension at 1762 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType10_specs_1 = { + sizeof(struct SystemInformationBlockType10), + offsetof(struct SystemInformationBlockType10, _asn_ctx), + asn_MAP_SystemInformationBlockType10_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType10_oms_1, /* Optional members */ + 1, 1, /* Root/Additions */ + 3, /* Start extensions */ + 6 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType10 = { + "SystemInformationBlockType10", + "SystemInformationBlockType10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType10_tags_1, + sizeof(asn_DEF_SystemInformationBlockType10_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType10_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType10_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType10_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType10_1, + 5, /* Elements count */ + &asn_SPC_SystemInformationBlockType10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType10.h b/lte/rrc/asn/SystemInformationBlockType10.h new file mode 100644 index 000000000..d2c7fb474 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType10.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType10_H_ +#define _SystemInformationBlockType10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SystemInformationBlockType10 */ +typedef struct SystemInformationBlockType10 { + BIT_STRING_t messageIdentifier; + BIT_STRING_t serialNumber; + OCTET_STRING_t warningType; + OCTET_STRING_t *warningSecurityInfo /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType10; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformationBlockType10_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType11.c b/lte/rrc/asn/SystemInformationBlockType11.c new file mode 100644 index 000000000..1de47f030 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType11.c @@ -0,0 +1,394 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType11.h" + +static int +warningMessageSegmentType_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +warningMessageSegmentType_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +warningMessageSegmentType_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +warningMessageSegmentType_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +warningMessageSegmentType_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +warningMessageSegmentType_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +warningMessageSegmentType_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +warningMessageSegmentType_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +warningMessageSegmentType_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +warningMessageSegmentType_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + warningMessageSegmentType_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_messageIdentifier_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_serialNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_warningMessageSegmentNumber_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dataCodingScheme_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_warningMessageSegmentType_constr_4 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_messageIdentifier_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_serialNumber_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_warningMessageSegmentNumber_constr_7 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dataCodingScheme_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_warningMessageSegmentType_value2enum_4[] = { + { 0, 14, "notLastSegment" }, + { 1, 11, "lastSegment" } +}; +static unsigned int asn_MAP_warningMessageSegmentType_enum2value_4[] = { + 1, /* lastSegment(1) */ + 0 /* notLastSegment(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_warningMessageSegmentType_specs_4 = { + asn_MAP_warningMessageSegmentType_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_warningMessageSegmentType_enum2value_4, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_warningMessageSegmentType_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_warningMessageSegmentType_4 = { + "warningMessageSegmentType", + "warningMessageSegmentType", + warningMessageSegmentType_4_free, + warningMessageSegmentType_4_print, + warningMessageSegmentType_4_constraint, + warningMessageSegmentType_4_decode_ber, + warningMessageSegmentType_4_encode_der, + warningMessageSegmentType_4_decode_xer, + warningMessageSegmentType_4_encode_xer, + warningMessageSegmentType_4_decode_uper, + warningMessageSegmentType_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_warningMessageSegmentType_tags_4, + sizeof(asn_DEF_warningMessageSegmentType_tags_4) + /sizeof(asn_DEF_warningMessageSegmentType_tags_4[0]) - 1, /* 1 */ + asn_DEF_warningMessageSegmentType_tags_4, /* Same as above */ + sizeof(asn_DEF_warningMessageSegmentType_tags_4) + /sizeof(asn_DEF_warningMessageSegmentType_tags_4[0]), /* 2 */ + &asn_PER_type_warningMessageSegmentType_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_warningMessageSegmentType_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType11_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType11, messageIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_messageIdentifier_constraint_1, + &asn_PER_memb_messageIdentifier_constr_2, + 0, + "messageIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType11, serialNumber), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_serialNumber_constraint_1, + &asn_PER_memb_serialNumber_constr_3, + 0, + "serialNumber" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType11, warningMessageSegmentType), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_warningMessageSegmentType_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "warningMessageSegmentType" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType11, warningMessageSegmentNumber), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_warningMessageSegmentNumber_constraint_1, + &asn_PER_memb_warningMessageSegmentNumber_constr_7, + 0, + "warningMessageSegmentNumber" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType11, warningMessageSegment), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "warningMessageSegment" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType11, dataCodingScheme), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_dataCodingScheme_constraint_1, + &asn_PER_memb_dataCodingScheme_constr_9, + 0, + "dataCodingScheme" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType11, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType11_oms_1[] = { 5, 6 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType11_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType11_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* messageIdentifier at 1767 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serialNumber at 1768 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* warningMessageSegmentType at 1769 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* warningMessageSegmentNumber at 1770 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* warningMessageSegment at 1771 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* dataCodingScheme at 1772 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* lateNonCriticalExtension at 1774 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType11_specs_1 = { + sizeof(struct SystemInformationBlockType11), + offsetof(struct SystemInformationBlockType11, _asn_ctx), + asn_MAP_SystemInformationBlockType11_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType11_oms_1, /* Optional members */ + 1, 1, /* Root/Additions */ + 5, /* Start extensions */ + 8 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType11 = { + "SystemInformationBlockType11", + "SystemInformationBlockType11", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType11_tags_1, + sizeof(asn_DEF_SystemInformationBlockType11_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType11_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType11_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType11_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType11_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType11_1, + 7, /* Elements count */ + &asn_SPC_SystemInformationBlockType11_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType11.h b/lte/rrc/asn/SystemInformationBlockType11.h new file mode 100644 index 000000000..dfa8129b5 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType11.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType11_H_ +#define _SystemInformationBlockType11_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformationBlockType11__warningMessageSegmentType { + SystemInformationBlockType11__warningMessageSegmentType_notLastSegment = 0, + SystemInformationBlockType11__warningMessageSegmentType_lastSegment = 1 +} e_SystemInformationBlockType11__warningMessageSegmentType; + +/* SystemInformationBlockType11 */ +typedef struct SystemInformationBlockType11 { + BIT_STRING_t messageIdentifier; + BIT_STRING_t serialNumber; + long warningMessageSegmentType; + long warningMessageSegmentNumber; + OCTET_STRING_t warningMessageSegment; + OCTET_STRING_t *dataCodingScheme /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType11_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_warningMessageSegmentType_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType11; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformationBlockType11_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType12-r9.c b/lte/rrc/asn/SystemInformationBlockType12-r9.c new file mode 100644 index 000000000..96e90fc03 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType12-r9.c @@ -0,0 +1,394 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType12-r9.h" + +static int +warningMessageSegmentType_r9_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +warningMessageSegmentType_r9_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +warningMessageSegmentType_r9_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +warningMessageSegmentType_r9_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +warningMessageSegmentType_r9_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +warningMessageSegmentType_r9_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +warningMessageSegmentType_r9_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +warningMessageSegmentType_r9_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +warningMessageSegmentType_r9_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + warningMessageSegmentType_r9_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_messageIdentifier_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_serialNumber_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_warningMessageSegmentNumber_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_dataCodingScheme_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 1)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_warningMessageSegmentType_r9_constr_4 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_messageIdentifier_r9_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_serialNumber_r9_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_warningMessageSegmentNumber_r9_constr_7 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_dataCodingScheme_r9_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 1, 1 } /* (SIZE(1..1)) */, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_warningMessageSegmentType_r9_value2enum_4[] = { + { 0, 14, "notLastSegment" }, + { 1, 11, "lastSegment" } +}; +static unsigned int asn_MAP_warningMessageSegmentType_r9_enum2value_4[] = { + 1, /* lastSegment(1) */ + 0 /* notLastSegment(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_warningMessageSegmentType_r9_specs_4 = { + asn_MAP_warningMessageSegmentType_r9_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_warningMessageSegmentType_r9_enum2value_4, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_warningMessageSegmentType_r9_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_warningMessageSegmentType_r9_4 = { + "warningMessageSegmentType-r9", + "warningMessageSegmentType-r9", + warningMessageSegmentType_r9_4_free, + warningMessageSegmentType_r9_4_print, + warningMessageSegmentType_r9_4_constraint, + warningMessageSegmentType_r9_4_decode_ber, + warningMessageSegmentType_r9_4_encode_der, + warningMessageSegmentType_r9_4_decode_xer, + warningMessageSegmentType_r9_4_encode_xer, + warningMessageSegmentType_r9_4_decode_uper, + warningMessageSegmentType_r9_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_warningMessageSegmentType_r9_tags_4, + sizeof(asn_DEF_warningMessageSegmentType_r9_tags_4) + /sizeof(asn_DEF_warningMessageSegmentType_r9_tags_4[0]) - 1, /* 1 */ + asn_DEF_warningMessageSegmentType_r9_tags_4, /* Same as above */ + sizeof(asn_DEF_warningMessageSegmentType_r9_tags_4) + /sizeof(asn_DEF_warningMessageSegmentType_r9_tags_4[0]), /* 2 */ + &asn_PER_type_warningMessageSegmentType_r9_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_warningMessageSegmentType_r9_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType12_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType12_r9, messageIdentifier_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_messageIdentifier_r9_constraint_1, + &asn_PER_memb_messageIdentifier_r9_constr_2, + 0, + "messageIdentifier-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType12_r9, serialNumber_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_serialNumber_r9_constraint_1, + &asn_PER_memb_serialNumber_r9_constr_3, + 0, + "serialNumber-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType12_r9, warningMessageSegmentType_r9), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_warningMessageSegmentType_r9_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "warningMessageSegmentType-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType12_r9, warningMessageSegmentNumber_r9), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_warningMessageSegmentNumber_r9_constraint_1, + &asn_PER_memb_warningMessageSegmentNumber_r9_constr_7, + 0, + "warningMessageSegmentNumber-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType12_r9, warningMessageSegment_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "warningMessageSegment-r9" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType12_r9, dataCodingScheme_r9), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_dataCodingScheme_r9_constraint_1, + &asn_PER_memb_dataCodingScheme_r9_constr_9, + 0, + "dataCodingScheme-r9" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType12_r9, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType12_r9_oms_1[] = { 5, 6 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType12_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType12_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* messageIdentifier-r9 at 1779 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* serialNumber-r9 at 1780 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* warningMessageSegmentType-r9 at 1781 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* warningMessageSegmentNumber-r9 at 1782 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* warningMessageSegment-r9 at 1783 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* dataCodingScheme-r9 at 1784 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* lateNonCriticalExtension at 1785 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType12_r9_specs_1 = { + sizeof(struct SystemInformationBlockType12_r9), + offsetof(struct SystemInformationBlockType12_r9, _asn_ctx), + asn_MAP_SystemInformationBlockType12_r9_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType12_r9_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + 6, /* Start extensions */ + 8 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType12_r9 = { + "SystemInformationBlockType12-r9", + "SystemInformationBlockType12-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType12_r9_tags_1, + sizeof(asn_DEF_SystemInformationBlockType12_r9_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType12_r9_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType12_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType12_r9_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType12_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType12_r9_1, + 7, /* Elements count */ + &asn_SPC_SystemInformationBlockType12_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType12-r9.h b/lte/rrc/asn/SystemInformationBlockType12-r9.h new file mode 100644 index 000000000..2e62527e6 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType12-r9.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType12_r9_H_ +#define _SystemInformationBlockType12_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformationBlockType12_r9__warningMessageSegmentType_r9 { + SystemInformationBlockType12_r9__warningMessageSegmentType_r9_notLastSegment = 0, + SystemInformationBlockType12_r9__warningMessageSegmentType_r9_lastSegment = 1 +} e_SystemInformationBlockType12_r9__warningMessageSegmentType_r9; + +/* SystemInformationBlockType12-r9 */ +typedef struct SystemInformationBlockType12_r9 { + BIT_STRING_t messageIdentifier_r9; + BIT_STRING_t serialNumber_r9; + long warningMessageSegmentType_r9; + long warningMessageSegmentNumber_r9; + OCTET_STRING_t warningMessageSegment_r9; + OCTET_STRING_t *dataCodingScheme_r9 /* OPTIONAL */; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType12_r9_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_warningMessageSegmentType_r9_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType12_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformationBlockType12_r9_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType13-r9.c b/lte/rrc/asn/SystemInformationBlockType13-r9.c new file mode 100644 index 000000000..7ccadddcb --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType13-r9.c @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType13-r9.h" + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType13_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType13_r9, mbsfn_AreaInfoList_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBSFN_AreaInfoList_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbsfn-AreaInfoList-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType13_r9, notificationConfig_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBMS_NotificationConfig_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "notificationConfig-r9" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType13_r9, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType13_r9_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType13_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType13_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mbsfn-AreaInfoList-r9 at 1791 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* notificationConfig-r9 at 1792 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* lateNonCriticalExtension at 1793 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType13_r9_specs_1 = { + sizeof(struct SystemInformationBlockType13_r9), + offsetof(struct SystemInformationBlockType13_r9, _asn_ctx), + asn_MAP_SystemInformationBlockType13_r9_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType13_r9_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + 2, /* Start extensions */ + 4 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType13_r9 = { + "SystemInformationBlockType13-r9", + "SystemInformationBlockType13-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType13_r9_tags_1, + sizeof(asn_DEF_SystemInformationBlockType13_r9_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType13_r9_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType13_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType13_r9_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType13_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType13_r9_1, + 3, /* Elements count */ + &asn_SPC_SystemInformationBlockType13_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType13-r9.h b/lte/rrc/asn/SystemInformationBlockType13-r9.h new file mode 100644 index 000000000..1233085eb --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType13-r9.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType13_r9_H_ +#define _SystemInformationBlockType13_r9_H_ + + +#include + +/* Including external dependencies */ +#include "MBSFN-AreaInfoList-r9.h" +#include "MBMS-NotificationConfig-r9.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SystemInformationBlockType13-r9 */ +typedef struct SystemInformationBlockType13_r9 { + MBSFN_AreaInfoList_r9_t mbsfn_AreaInfoList_r9; + MBMS_NotificationConfig_r9_t notificationConfig_r9; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType13_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType13_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformationBlockType13_r9_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType2.c b/lte/rrc/asn/SystemInformationBlockType2.c new file mode 100644 index 000000000..1b95b9fde --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType2.c @@ -0,0 +1,449 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType2.h" + +static int +ul_Bandwidth_10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +ul_Bandwidth_10_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +ul_Bandwidth_10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +ul_Bandwidth_10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +ul_Bandwidth_10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +ul_Bandwidth_10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +ul_Bandwidth_10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +ul_Bandwidth_10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ul_Bandwidth_10_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ul_Bandwidth_constr_10 = { + { APC_CONSTRAINED, 3, 3, 0, 5 } /* (0..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ac_BarringInfo_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType2__ac_BarringInfo, ac_BarringForEmergency), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringForEmergency" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType2__ac_BarringInfo, ac_BarringForMO_Signalling), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AC_BarringConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringForMO-Signalling" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType2__ac_BarringInfo, ac_BarringForMO_Data), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AC_BarringConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringForMO-Data" + }, +}; +static int asn_MAP_ac_BarringInfo_oms_2[] = { 1, 2 }; +static ber_tlv_tag_t asn_DEF_ac_BarringInfo_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ac_BarringInfo_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ac-BarringForEmergency at 1467 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ac-BarringForMO-Signalling at 1468 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* ac-BarringForMO-Data at 1469 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ac_BarringInfo_specs_2 = { + sizeof(struct SystemInformationBlockType2__ac_BarringInfo), + offsetof(struct SystemInformationBlockType2__ac_BarringInfo, _asn_ctx), + asn_MAP_ac_BarringInfo_tag2el_2, + 3, /* Count of tags in the map */ + asn_MAP_ac_BarringInfo_oms_2, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ac_BarringInfo_2 = { + "ac-BarringInfo", + "ac-BarringInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ac_BarringInfo_tags_2, + sizeof(asn_DEF_ac_BarringInfo_tags_2) + /sizeof(asn_DEF_ac_BarringInfo_tags_2[0]) - 1, /* 1 */ + asn_DEF_ac_BarringInfo_tags_2, /* Same as above */ + sizeof(asn_DEF_ac_BarringInfo_tags_2) + /sizeof(asn_DEF_ac_BarringInfo_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_ac_BarringInfo_2, + 3, /* Elements count */ + &asn_SPC_ac_BarringInfo_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_ul_Bandwidth_value2enum_10[] = { + { 0, 2, "n6" }, + { 1, 3, "n15" }, + { 2, 3, "n25" }, + { 3, 3, "n50" }, + { 4, 3, "n75" }, + { 5, 4, "n100" } +}; +static unsigned int asn_MAP_ul_Bandwidth_enum2value_10[] = { + 5, /* n100(5) */ + 1, /* n15(1) */ + 2, /* n25(2) */ + 3, /* n50(3) */ + 0, /* n6(0) */ + 4 /* n75(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_ul_Bandwidth_specs_10 = { + asn_MAP_ul_Bandwidth_value2enum_10, /* "tag" => N; sorted by tag */ + asn_MAP_ul_Bandwidth_enum2value_10, /* N => "tag"; sorted by N */ + 6, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_ul_Bandwidth_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_ul_Bandwidth_10 = { + "ul-Bandwidth", + "ul-Bandwidth", + ul_Bandwidth_10_free, + ul_Bandwidth_10_print, + ul_Bandwidth_10_constraint, + ul_Bandwidth_10_decode_ber, + ul_Bandwidth_10_encode_der, + ul_Bandwidth_10_decode_xer, + ul_Bandwidth_10_encode_xer, + ul_Bandwidth_10_decode_uper, + ul_Bandwidth_10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ul_Bandwidth_tags_10, + sizeof(asn_DEF_ul_Bandwidth_tags_10) + /sizeof(asn_DEF_ul_Bandwidth_tags_10[0]) - 1, /* 1 */ + asn_DEF_ul_Bandwidth_tags_10, /* Same as above */ + sizeof(asn_DEF_ul_Bandwidth_tags_10) + /sizeof(asn_DEF_ul_Bandwidth_tags_10[0]), /* 2 */ + &asn_PER_type_ul_Bandwidth_constr_10, + 0, 0, /* Defined elsewhere */ + &asn_SPC_ul_Bandwidth_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_freqInfo_8[] = { + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType2__freqInfo, ul_CarrierFreq), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ARFCN_ValueEUTRA, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-CarrierFreq" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType2__freqInfo, ul_Bandwidth), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ul_Bandwidth_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ul-Bandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType2__freqInfo, additionalSpectrumEmission), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AdditionalSpectrumEmission, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "additionalSpectrumEmission" + }, +}; +static int asn_MAP_freqInfo_oms_8[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_freqInfo_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_freqInfo_tag2el_8[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ul-CarrierFreq at 1474 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ul-Bandwidth at 1475 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* additionalSpectrumEmission at 1478 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_freqInfo_specs_8 = { + sizeof(struct SystemInformationBlockType2__freqInfo), + offsetof(struct SystemInformationBlockType2__freqInfo, _asn_ctx), + asn_MAP_freqInfo_tag2el_8, + 3, /* Count of tags in the map */ + asn_MAP_freqInfo_oms_8, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_freqInfo_8 = { + "freqInfo", + "freqInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_freqInfo_tags_8, + sizeof(asn_DEF_freqInfo_tags_8) + /sizeof(asn_DEF_freqInfo_tags_8[0]) - 1, /* 1 */ + asn_DEF_freqInfo_tags_8, /* Same as above */ + sizeof(asn_DEF_freqInfo_tags_8) + /sizeof(asn_DEF_freqInfo_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_freqInfo_8, + 3, /* Elements count */ + &asn_SPC_freqInfo_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType2_1[] = { + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType2, ac_BarringInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_ac_BarringInfo_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType2, radioResourceConfigCommon), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RadioResourceConfigCommonSIB, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "radioResourceConfigCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType2, ue_TimersAndConstants), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_TimersAndConstants, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-TimersAndConstants" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType2, freqInfo), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_freqInfo_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "freqInfo" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType2, mbsfn_SubframeConfigList), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBSFN_SubframeConfigList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbsfn-SubframeConfigList" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType2, timeAlignmentTimerCommon), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_TimeAlignmentTimer, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "timeAlignmentTimerCommon" + }, + { ATF_POINTER, 4, offsetof(struct SystemInformationBlockType2, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType2, ssac_BarringForMMTEL_Voice_r9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AC_BarringConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ssac-BarringForMMTEL-Voice-r9" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType2, ssac_BarringForMMTEL_Video_r9), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AC_BarringConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ssac-BarringForMMTEL-Video-r9" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType2, ac_BarringForCSFB_r10), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AC_BarringConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringForCSFB-r10" + }, +}; +static int asn_MAP_SystemInformationBlockType2_oms_1[] = { 0, 4, 6, 7, 8, 9 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType2_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType2_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ac-BarringInfo at 1467 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* radioResourceConfigCommon at 1471 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* ue-TimersAndConstants at 1472 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* freqInfo at 1474 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* mbsfn-SubframeConfigList at 1479 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* timeAlignmentTimerCommon at 1480 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* lateNonCriticalExtension at 1481 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ssac-BarringForMMTEL-Voice-r9 at 1482 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* ssac-BarringForMMTEL-Video-r9 at 1483 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 } /* ac-BarringForCSFB-r10 at 1484 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType2_specs_1 = { + sizeof(struct SystemInformationBlockType2), + offsetof(struct SystemInformationBlockType2, _asn_ctx), + asn_MAP_SystemInformationBlockType2_tag2el_1, + 10, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType2_oms_1, /* Optional members */ + 6, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType2 = { + "SystemInformationBlockType2", + "SystemInformationBlockType2", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType2_tags_1, + sizeof(asn_DEF_SystemInformationBlockType2_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType2_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType2_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType2_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType2_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType2_1, + 10, /* Elements count */ + &asn_SPC_SystemInformationBlockType2_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType2.h b/lte/rrc/asn/SystemInformationBlockType2.h new file mode 100644 index 000000000..4f5ff57db --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType2.h @@ -0,0 +1,87 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType2_H_ +#define _SystemInformationBlockType2_H_ + + +#include + +/* Including external dependencies */ +#include "RadioResourceConfigCommonSIB.h" +#include "UE-TimersAndConstants.h" +#include "TimeAlignmentTimer.h" +#include +#include +#include +#include "ARFCN-ValueEUTRA.h" +#include +#include "AdditionalSpectrumEmission.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformationBlockType2__freqInfo__ul_Bandwidth { + SystemInformationBlockType2__freqInfo__ul_Bandwidth_n6 = 0, + SystemInformationBlockType2__freqInfo__ul_Bandwidth_n15 = 1, + SystemInformationBlockType2__freqInfo__ul_Bandwidth_n25 = 2, + SystemInformationBlockType2__freqInfo__ul_Bandwidth_n50 = 3, + SystemInformationBlockType2__freqInfo__ul_Bandwidth_n75 = 4, + SystemInformationBlockType2__freqInfo__ul_Bandwidth_n100 = 5 +} e_SystemInformationBlockType2__freqInfo__ul_Bandwidth; + +/* Forward declarations */ +struct MBSFN_SubframeConfigList; +struct AC_BarringConfig; + +/* SystemInformationBlockType2 */ +typedef struct SystemInformationBlockType2 { + struct SystemInformationBlockType2__ac_BarringInfo { + BOOLEAN_t ac_BarringForEmergency; + struct AC_BarringConfig *ac_BarringForMO_Signalling /* OPTIONAL */; + struct AC_BarringConfig *ac_BarringForMO_Data /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *ac_BarringInfo; + RadioResourceConfigCommonSIB_t radioResourceConfigCommon; + UE_TimersAndConstants_t ue_TimersAndConstants; + struct SystemInformationBlockType2__freqInfo { + ARFCN_ValueEUTRA_t *ul_CarrierFreq /* OPTIONAL */; + long *ul_Bandwidth /* OPTIONAL */; + AdditionalSpectrumEmission_t additionalSpectrumEmission; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } freqInfo; + struct MBSFN_SubframeConfigList *mbsfn_SubframeConfigList /* OPTIONAL */; + TimeAlignmentTimer_t timeAlignmentTimerCommon; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct AC_BarringConfig *ssac_BarringForMMTEL_Voice_r9 /* OPTIONAL */; + struct AC_BarringConfig *ssac_BarringForMMTEL_Video_r9 /* OPTIONAL */; + struct AC_BarringConfig *ac_BarringForCSFB_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType2_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_ul_Bandwidth_10; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType2; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MBSFN-SubframeConfigList.h" +#include "AC-BarringConfig.h" + +#endif /* _SystemInformationBlockType2_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType3.c b/lte/rrc/asn/SystemInformationBlockType3.c new file mode 100644 index 000000000..4a302d4ef --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType3.c @@ -0,0 +1,1102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType3.h" + +static int +q_Hyst_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +q_Hyst_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +q_Hyst_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + q_Hyst_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +q_Hyst_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +q_Hyst_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +q_Hyst_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +q_Hyst_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +q_Hyst_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +q_Hyst_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +q_Hyst_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + q_Hyst_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +sf_Medium_23_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +sf_Medium_23_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +sf_Medium_23_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + sf_Medium_23_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +sf_Medium_23_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +sf_Medium_23_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +sf_Medium_23_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +sf_Medium_23_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +sf_Medium_23_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +sf_Medium_23_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +sf_Medium_23_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + sf_Medium_23_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +sf_High_28_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +sf_High_28_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +sf_High_28_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + sf_High_28_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +sf_High_28_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +sf_High_28_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +sf_High_28_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +sf_High_28_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +sf_High_28_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +sf_High_28_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +sf_High_28_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + sf_High_28_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_q_Hyst_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sf_Medium_constr_23 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_sf_High_constr_28 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_q_Hyst_value2enum_3[] = { + { 0, 3, "dB0" }, + { 1, 3, "dB1" }, + { 2, 3, "dB2" }, + { 3, 3, "dB3" }, + { 4, 3, "dB4" }, + { 5, 3, "dB5" }, + { 6, 3, "dB6" }, + { 7, 3, "dB8" }, + { 8, 4, "dB10" }, + { 9, 4, "dB12" }, + { 10, 4, "dB14" }, + { 11, 4, "dB16" }, + { 12, 4, "dB18" }, + { 13, 4, "dB20" }, + { 14, 4, "dB22" }, + { 15, 4, "dB24" } +}; +static unsigned int asn_MAP_q_Hyst_enum2value_3[] = { + 0, /* dB0(0) */ + 1, /* dB1(1) */ + 8, /* dB10(8) */ + 9, /* dB12(9) */ + 10, /* dB14(10) */ + 11, /* dB16(11) */ + 12, /* dB18(12) */ + 2, /* dB2(2) */ + 13, /* dB20(13) */ + 14, /* dB22(14) */ + 15, /* dB24(15) */ + 3, /* dB3(3) */ + 4, /* dB4(4) */ + 5, /* dB5(5) */ + 6, /* dB6(6) */ + 7 /* dB8(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_q_Hyst_specs_3 = { + asn_MAP_q_Hyst_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_q_Hyst_enum2value_3, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_q_Hyst_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_q_Hyst_3 = { + "q-Hyst", + "q-Hyst", + q_Hyst_3_free, + q_Hyst_3_print, + q_Hyst_3_constraint, + q_Hyst_3_decode_ber, + q_Hyst_3_encode_der, + q_Hyst_3_decode_xer, + q_Hyst_3_encode_xer, + q_Hyst_3_decode_uper, + q_Hyst_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_q_Hyst_tags_3, + sizeof(asn_DEF_q_Hyst_tags_3) + /sizeof(asn_DEF_q_Hyst_tags_3[0]) - 1, /* 1 */ + asn_DEF_q_Hyst_tags_3, /* Same as above */ + sizeof(asn_DEF_q_Hyst_tags_3) + /sizeof(asn_DEF_q_Hyst_tags_3[0]), /* 2 */ + &asn_PER_type_q_Hyst_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_q_Hyst_specs_3 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_sf_Medium_value2enum_23[] = { + { 0, 4, "dB-6" }, + { 1, 4, "dB-4" }, + { 2, 4, "dB-2" }, + { 3, 3, "dB0" } +}; +static unsigned int asn_MAP_sf_Medium_enum2value_23[] = { + 2, /* dB-2(2) */ + 1, /* dB-4(1) */ + 0, /* dB-6(0) */ + 3 /* dB0(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_sf_Medium_specs_23 = { + asn_MAP_sf_Medium_value2enum_23, /* "tag" => N; sorted by tag */ + asn_MAP_sf_Medium_enum2value_23, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_sf_Medium_tags_23[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sf_Medium_23 = { + "sf-Medium", + "sf-Medium", + sf_Medium_23_free, + sf_Medium_23_print, + sf_Medium_23_constraint, + sf_Medium_23_decode_ber, + sf_Medium_23_encode_der, + sf_Medium_23_decode_xer, + sf_Medium_23_encode_xer, + sf_Medium_23_decode_uper, + sf_Medium_23_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sf_Medium_tags_23, + sizeof(asn_DEF_sf_Medium_tags_23) + /sizeof(asn_DEF_sf_Medium_tags_23[0]) - 1, /* 1 */ + asn_DEF_sf_Medium_tags_23, /* Same as above */ + sizeof(asn_DEF_sf_Medium_tags_23) + /sizeof(asn_DEF_sf_Medium_tags_23[0]), /* 2 */ + &asn_PER_type_sf_Medium_constr_23, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sf_Medium_specs_23 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_sf_High_value2enum_28[] = { + { 0, 4, "dB-6" }, + { 1, 4, "dB-4" }, + { 2, 4, "dB-2" }, + { 3, 3, "dB0" } +}; +static unsigned int asn_MAP_sf_High_enum2value_28[] = { + 2, /* dB-2(2) */ + 1, /* dB-4(1) */ + 0, /* dB-6(0) */ + 3 /* dB0(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_sf_High_specs_28 = { + asn_MAP_sf_High_value2enum_28, /* "tag" => N; sorted by tag */ + asn_MAP_sf_High_enum2value_28, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_sf_High_tags_28[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_sf_High_28 = { + "sf-High", + "sf-High", + sf_High_28_free, + sf_High_28_print, + sf_High_28_constraint, + sf_High_28_decode_ber, + sf_High_28_encode_der, + sf_High_28_decode_xer, + sf_High_28_encode_xer, + sf_High_28_decode_uper, + sf_High_28_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_sf_High_tags_28, + sizeof(asn_DEF_sf_High_tags_28) + /sizeof(asn_DEF_sf_High_tags_28[0]) - 1, /* 1 */ + asn_DEF_sf_High_tags_28, /* Same as above */ + sizeof(asn_DEF_sf_High_tags_28) + /sizeof(asn_DEF_sf_High_tags_28[0]), /* 2 */ + &asn_PER_type_sf_High_constr_28, + 0, 0, /* Defined elsewhere */ + &asn_SPC_sf_High_specs_28 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_q_HystSF_22[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF, sf_Medium), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sf_Medium_23, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sf-Medium" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF, sf_High), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_sf_High_28, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sf-High" + }, +}; +static ber_tlv_tag_t asn_DEF_q_HystSF_tags_22[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_q_HystSF_tag2el_22[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* sf-Medium at 1507 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* sf-High at 1509 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_q_HystSF_specs_22 = { + sizeof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF), + offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF, _asn_ctx), + asn_MAP_q_HystSF_tag2el_22, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_q_HystSF_22 = { + "q-HystSF", + "q-HystSF", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_q_HystSF_tags_22, + sizeof(asn_DEF_q_HystSF_tags_22) + /sizeof(asn_DEF_q_HystSF_tags_22[0]) - 1, /* 1 */ + asn_DEF_q_HystSF_tags_22, /* Same as above */ + sizeof(asn_DEF_q_HystSF_tags_22) + /sizeof(asn_DEF_q_HystSF_tags_22[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_q_HystSF_22, + 2, /* Elements count */ + &asn_SPC_q_HystSF_specs_22 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_speedStateReselectionPars_20[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars, mobilityStateParameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityStateParameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityStateParameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars, q_HystSF), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_q_HystSF_22, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-HystSF" + }, +}; +static ber_tlv_tag_t asn_DEF_speedStateReselectionPars_tags_20[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_speedStateReselectionPars_tag2el_20[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mobilityStateParameters at 1504 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* q-HystSF at 1507 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_speedStateReselectionPars_specs_20 = { + sizeof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars), + offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars, _asn_ctx), + asn_MAP_speedStateReselectionPars_tag2el_20, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_speedStateReselectionPars_20 = { + "speedStateReselectionPars", + "speedStateReselectionPars", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_speedStateReselectionPars_tags_20, + sizeof(asn_DEF_speedStateReselectionPars_tags_20) + /sizeof(asn_DEF_speedStateReselectionPars_tags_20[0]) - 1, /* 1 */ + asn_DEF_speedStateReselectionPars_tags_20, /* Same as above */ + sizeof(asn_DEF_speedStateReselectionPars_tags_20) + /sizeof(asn_DEF_speedStateReselectionPars_tags_20[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_speedStateReselectionPars_20, + 2, /* Elements count */ + &asn_SPC_speedStateReselectionPars_specs_20 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cellReselectionInfoCommon_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon, q_Hyst), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_q_Hyst_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-Hyst" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon, speedStateReselectionPars), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_speedStateReselectionPars_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "speedStateReselectionPars" + }, +}; +static int asn_MAP_cellReselectionInfoCommon_oms_2[] = { 1 }; +static ber_tlv_tag_t asn_DEF_cellReselectionInfoCommon_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_cellReselectionInfoCommon_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-Hyst at 1501 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* speedStateReselectionPars at 1504 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cellReselectionInfoCommon_specs_2 = { + sizeof(struct SystemInformationBlockType3__cellReselectionInfoCommon), + offsetof(struct SystemInformationBlockType3__cellReselectionInfoCommon, _asn_ctx), + asn_MAP_cellReselectionInfoCommon_tag2el_2, + 2, /* Count of tags in the map */ + asn_MAP_cellReselectionInfoCommon_oms_2, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellReselectionInfoCommon_2 = { + "cellReselectionInfoCommon", + "cellReselectionInfoCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellReselectionInfoCommon_tags_2, + sizeof(asn_DEF_cellReselectionInfoCommon_tags_2) + /sizeof(asn_DEF_cellReselectionInfoCommon_tags_2[0]) - 1, /* 1 */ + asn_DEF_cellReselectionInfoCommon_tags_2, /* Same as above */ + sizeof(asn_DEF_cellReselectionInfoCommon_tags_2) + /sizeof(asn_DEF_cellReselectionInfoCommon_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cellReselectionInfoCommon_2, + 2, /* Elements count */ + &asn_SPC_cellReselectionInfoCommon_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_cellReselectionServingFreqInfo_33[] = { + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType3__cellReselectionServingFreqInfo, s_NonIntraSearch), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-NonIntraSearch" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionServingFreqInfo, threshServingLow), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshServingLow" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__cellReselectionServingFreqInfo, cellReselectionPriority), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionPriority, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionPriority" + }, +}; +static int asn_MAP_cellReselectionServingFreqInfo_oms_33[] = { 0 }; +static ber_tlv_tag_t asn_DEF_cellReselectionServingFreqInfo_tags_33[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_cellReselectionServingFreqInfo_tag2el_33[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-NonIntraSearch at 1514 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* threshServingLow at 1515 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellReselectionPriority at 1517 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_cellReselectionServingFreqInfo_specs_33 = { + sizeof(struct SystemInformationBlockType3__cellReselectionServingFreqInfo), + offsetof(struct SystemInformationBlockType3__cellReselectionServingFreqInfo, _asn_ctx), + asn_MAP_cellReselectionServingFreqInfo_tag2el_33, + 3, /* Count of tags in the map */ + asn_MAP_cellReselectionServingFreqInfo_oms_33, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cellReselectionServingFreqInfo_33 = { + "cellReselectionServingFreqInfo", + "cellReselectionServingFreqInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_cellReselectionServingFreqInfo_tags_33, + sizeof(asn_DEF_cellReselectionServingFreqInfo_tags_33) + /sizeof(asn_DEF_cellReselectionServingFreqInfo_tags_33[0]) - 1, /* 1 */ + asn_DEF_cellReselectionServingFreqInfo_tags_33, /* Same as above */ + sizeof(asn_DEF_cellReselectionServingFreqInfo_tags_33) + /sizeof(asn_DEF_cellReselectionServingFreqInfo_tags_33[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_cellReselectionServingFreqInfo_33, + 3, /* Elements count */ + &asn_SPC_cellReselectionServingFreqInfo_specs_33 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_intraFreqCellReselectionInfo_37[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, q_RxLevMin), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_RxLevMin, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-RxLevMin" + }, + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, p_Max), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_P_Max, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "p-Max" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, s_IntraSearch), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-IntraSearch" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, allowedMeasBandwidth), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AllowedMeasBandwidth, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "allowedMeasBandwidth" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, presenceAntennaPort1), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PresenceAntennaPort1, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "presenceAntennaPort1" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, neighCellConfig), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellConfig" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, t_ReselectionEUTRA), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reselection, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionEUTRA" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, t_ReselectionEUTRA_SF), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionEUTRA-SF" + }, +}; +static int asn_MAP_intraFreqCellReselectionInfo_oms_37[] = { 1, 2, 3, 7 }; +static ber_tlv_tag_t asn_DEF_intraFreqCellReselectionInfo_tags_37[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_intraFreqCellReselectionInfo_tag2el_37[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* q-RxLevMin at 1519 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* p-Max at 1520 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* s-IntraSearch at 1521 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* allowedMeasBandwidth at 1522 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* presenceAntennaPort1 at 1523 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* neighCellConfig at 1524 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* t-ReselectionEUTRA at 1525 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* t-ReselectionEUTRA-SF at 1526 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_intraFreqCellReselectionInfo_specs_37 = { + sizeof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo), + offsetof(struct SystemInformationBlockType3__intraFreqCellReselectionInfo, _asn_ctx), + asn_MAP_intraFreqCellReselectionInfo_tag2el_37, + 8, /* Count of tags in the map */ + asn_MAP_intraFreqCellReselectionInfo_oms_37, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_intraFreqCellReselectionInfo_37 = { + "intraFreqCellReselectionInfo", + "intraFreqCellReselectionInfo", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_intraFreqCellReselectionInfo_tags_37, + sizeof(asn_DEF_intraFreqCellReselectionInfo_tags_37) + /sizeof(asn_DEF_intraFreqCellReselectionInfo_tags_37[0]) - 1, /* 1 */ + asn_DEF_intraFreqCellReselectionInfo_tags_37, /* Same as above */ + sizeof(asn_DEF_intraFreqCellReselectionInfo_tags_37) + /sizeof(asn_DEF_intraFreqCellReselectionInfo_tags_37[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_intraFreqCellReselectionInfo_37, + 8, /* Elements count */ + &asn_SPC_intraFreqCellReselectionInfo_specs_37 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_s_IntraSearch_v920_47[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__s_IntraSearch_v920, s_IntraSearchP_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-IntraSearchP-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__s_IntraSearch_v920, s_IntraSearchQ_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-IntraSearchQ-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_s_IntraSearch_v920_tags_47[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_s_IntraSearch_v920_tag2el_47[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-IntraSearchP-r9 at 1530 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* s-IntraSearchQ-r9 at 1532 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_s_IntraSearch_v920_specs_47 = { + sizeof(struct SystemInformationBlockType3__s_IntraSearch_v920), + offsetof(struct SystemInformationBlockType3__s_IntraSearch_v920, _asn_ctx), + asn_MAP_s_IntraSearch_v920_tag2el_47, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_s_IntraSearch_v920_47 = { + "s-IntraSearch-v920", + "s-IntraSearch-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_s_IntraSearch_v920_tags_47, + sizeof(asn_DEF_s_IntraSearch_v920_tags_47) + /sizeof(asn_DEF_s_IntraSearch_v920_tags_47[0]) - 1, /* 1 */ + asn_DEF_s_IntraSearch_v920_tags_47, /* Same as above */ + sizeof(asn_DEF_s_IntraSearch_v920_tags_47) + /sizeof(asn_DEF_s_IntraSearch_v920_tags_47[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_s_IntraSearch_v920_47, + 2, /* Elements count */ + &asn_SPC_s_IntraSearch_v920_specs_47 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_s_NonIntraSearch_v920_50[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__s_NonIntraSearch_v920, s_NonIntraSearchP_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThreshold, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-NonIntraSearchP-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3__s_NonIntraSearch_v920, s_NonIntraSearchQ_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-NonIntraSearchQ-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_s_NonIntraSearch_v920_tags_50[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_s_NonIntraSearch_v920_tag2el_50[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* s-NonIntraSearchP-r9 at 1534 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* s-NonIntraSearchQ-r9 at 1536 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_s_NonIntraSearch_v920_specs_50 = { + sizeof(struct SystemInformationBlockType3__s_NonIntraSearch_v920), + offsetof(struct SystemInformationBlockType3__s_NonIntraSearch_v920, _asn_ctx), + asn_MAP_s_NonIntraSearch_v920_tag2el_50, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_s_NonIntraSearch_v920_50 = { + "s-NonIntraSearch-v920", + "s-NonIntraSearch-v920", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_s_NonIntraSearch_v920_tags_50, + sizeof(asn_DEF_s_NonIntraSearch_v920_tags_50) + /sizeof(asn_DEF_s_NonIntraSearch_v920_tags_50[0]) - 1, /* 1 */ + asn_DEF_s_NonIntraSearch_v920_tags_50, /* Same as above */ + sizeof(asn_DEF_s_NonIntraSearch_v920_tags_50) + /sizeof(asn_DEF_s_NonIntraSearch_v920_tags_50[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_s_NonIntraSearch_v920_50, + 2, /* Elements count */ + &asn_SPC_s_NonIntraSearch_v920_specs_50 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType3_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3, cellReselectionInfoCommon), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_cellReselectionInfoCommon_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionInfoCommon" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3, cellReselectionServingFreqInfo), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_cellReselectionServingFreqInfo_33, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionServingFreqInfo" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType3, intraFreqCellReselectionInfo), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_intraFreqCellReselectionInfo_37, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraFreqCellReselectionInfo" + }, + { ATF_POINTER, 5, offsetof(struct SystemInformationBlockType3, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 4, offsetof(struct SystemInformationBlockType3, s_IntraSearch_v920), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + 0, + &asn_DEF_s_IntraSearch_v920_47, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-IntraSearch-v920" + }, + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType3, s_NonIntraSearch_v920), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + 0, + &asn_DEF_s_NonIntraSearch_v920_50, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-NonIntraSearch-v920" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType3, q_QualMin_r9), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_Q_QualMin_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "q-QualMin-r9" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType3, threshServingLowQ_r9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReselectionThresholdQ_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshServingLowQ-r9" + }, +}; +static int asn_MAP_SystemInformationBlockType3_oms_1[] = { 3, 4, 5, 6, 7 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType3_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType3_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellReselectionInfoCommon at 1502 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellReselectionServingFreqInfo at 1514 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* intraFreqCellReselectionInfo at 1519 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* lateNonCriticalExtension at 1528 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s-IntraSearch-v920 at 1530 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* s-NonIntraSearch-v920 at 1534 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* q-QualMin-r9 at 1537 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* threshServingLowQ-r9 at 1538 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType3_specs_1 = { + sizeof(struct SystemInformationBlockType3), + offsetof(struct SystemInformationBlockType3, _asn_ctx), + asn_MAP_SystemInformationBlockType3_tag2el_1, + 8, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType3_oms_1, /* Optional members */ + 5, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType3 = { + "SystemInformationBlockType3", + "SystemInformationBlockType3", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType3_tags_1, + sizeof(asn_DEF_SystemInformationBlockType3_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType3_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType3_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType3_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType3_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType3_1, + 8, /* Elements count */ + &asn_SPC_SystemInformationBlockType3_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType3.h b/lte/rrc/asn/SystemInformationBlockType3.h new file mode 100644 index 000000000..7942d2956 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType3.h @@ -0,0 +1,147 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType3_H_ +#define _SystemInformationBlockType3_H_ + + +#include + +/* Including external dependencies */ +#include +#include "Q-QualMin-r9.h" +#include "ReselectionThresholdQ-r9.h" +#include +#include "MobilityStateParameters.h" +#include +#include "ReselectionThreshold.h" +#include "CellReselectionPriority.h" +#include "Q-RxLevMin.h" +#include "P-Max.h" +#include "AllowedMeasBandwidth.h" +#include "PresenceAntennaPort1.h" +#include "NeighCellConfig.h" +#include "T-Reselection.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst { + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB0 = 0, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB1 = 1, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB2 = 2, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB3 = 3, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB4 = 4, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB5 = 5, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB6 = 6, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB8 = 7, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB10 = 8, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB12 = 9, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB14 = 10, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB16 = 11, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB18 = 12, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB20 = 13, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB22 = 14, + SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst_dB24 = 15 +} e_SystemInformationBlockType3__cellReselectionInfoCommon__q_Hyst; +typedef enum SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_Medium { + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_Medium_dB_6 = 0, + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_Medium_dB_4 = 1, + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_Medium_dB_2 = 2, + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_Medium_dB0 = 3 +} e_SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_Medium; +typedef enum SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_High { + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_High_dB_6 = 0, + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_High_dB_4 = 1, + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_High_dB_2 = 2, + SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_High_dB0 = 3 +} e_SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF__sf_High; + +/* Forward declarations */ +struct SpeedStateScaleFactors; + +/* SystemInformationBlockType3 */ +typedef struct SystemInformationBlockType3 { + struct SystemInformationBlockType3__cellReselectionInfoCommon { + long q_Hyst; + struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars { + MobilityStateParameters_t mobilityStateParameters; + struct SystemInformationBlockType3__cellReselectionInfoCommon__speedStateReselectionPars__q_HystSF { + long sf_Medium; + long sf_High; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } q_HystSF; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *speedStateReselectionPars; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellReselectionInfoCommon; + struct SystemInformationBlockType3__cellReselectionServingFreqInfo { + ReselectionThreshold_t *s_NonIntraSearch /* OPTIONAL */; + ReselectionThreshold_t threshServingLow; + CellReselectionPriority_t cellReselectionPriority; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cellReselectionServingFreqInfo; + struct SystemInformationBlockType3__intraFreqCellReselectionInfo { + Q_RxLevMin_t q_RxLevMin; + P_Max_t *p_Max /* OPTIONAL */; + ReselectionThreshold_t *s_IntraSearch /* OPTIONAL */; + AllowedMeasBandwidth_t *allowedMeasBandwidth /* OPTIONAL */; + PresenceAntennaPort1_t presenceAntennaPort1; + NeighCellConfig_t neighCellConfig; + T_Reselection_t t_ReselectionEUTRA; + struct SpeedStateScaleFactors *t_ReselectionEUTRA_SF /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } intraFreqCellReselectionInfo; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct SystemInformationBlockType3__s_IntraSearch_v920 { + ReselectionThreshold_t s_IntraSearchP_r9; + ReselectionThresholdQ_r9_t s_IntraSearchQ_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *s_IntraSearch_v920; + struct SystemInformationBlockType3__s_NonIntraSearch_v920 { + ReselectionThreshold_t s_NonIntraSearchP_r9; + ReselectionThresholdQ_r9_t s_NonIntraSearchQ_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *s_NonIntraSearch_v920; + Q_QualMin_r9_t *q_QualMin_r9 /* OPTIONAL */; + ReselectionThresholdQ_r9_t *threshServingLowQ_r9 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType3_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_q_Hyst_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sf_Medium_23; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_sf_High_28; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType3; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SpeedStateScaleFactors.h" + +#endif /* _SystemInformationBlockType3_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType4.c b/lte/rrc/asn/SystemInformationBlockType4.c new file mode 100644 index 000000000..477181d1c --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType4.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType4.h" + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType4_1[] = { + { ATF_POINTER, 4, offsetof(struct SystemInformationBlockType4, intraFreqNeighCellList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IntraFreqNeighCellList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraFreqNeighCellList" + }, + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType4, intraFreqBlackCellList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IntraFreqBlackCellList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "intraFreqBlackCellList" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType4, csg_PhysCellIdRange), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellIdRange, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-PhysCellIdRange" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType4, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType4_oms_1[] = { 0, 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType4_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType4_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* intraFreqNeighCellList at 1543 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* intraFreqBlackCellList at 1544 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* csg-PhysCellIdRange at 1545 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* lateNonCriticalExtension at 1547 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType4_specs_1 = { + sizeof(struct SystemInformationBlockType4), + offsetof(struct SystemInformationBlockType4, _asn_ctx), + asn_MAP_SystemInformationBlockType4_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType4_oms_1, /* Optional members */ + 3, 1, /* Root/Additions */ + 2, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType4 = { + "SystemInformationBlockType4", + "SystemInformationBlockType4", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType4_tags_1, + sizeof(asn_DEF_SystemInformationBlockType4_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType4_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType4_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType4_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType4_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType4_1, + 4, /* Elements count */ + &asn_SPC_SystemInformationBlockType4_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType4.h b/lte/rrc/asn/SystemInformationBlockType4.h new file mode 100644 index 000000000..c75d34b02 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType4.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType4_H_ +#define _SystemInformationBlockType4_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct IntraFreqNeighCellList; +struct IntraFreqBlackCellList; +struct PhysCellIdRange; + +/* SystemInformationBlockType4 */ +typedef struct SystemInformationBlockType4 { + struct IntraFreqNeighCellList *intraFreqNeighCellList /* OPTIONAL */; + struct IntraFreqBlackCellList *intraFreqBlackCellList /* OPTIONAL */; + struct PhysCellIdRange *csg_PhysCellIdRange /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType4_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType4; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "IntraFreqNeighCellList.h" +#include "IntraFreqBlackCellList.h" +#include "PhysCellIdRange.h" + +#endif /* _SystemInformationBlockType4_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType5.c b/lte/rrc/asn/SystemInformationBlockType5.c new file mode 100644 index 000000000..3e8f392b2 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType5.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType5.h" + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType5_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType5, interFreqCarrierFreqList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterFreqCarrierFreqList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqCarrierFreqList" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType5, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType5_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType5_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType5_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* interFreqCarrierFreqList at 1562 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* lateNonCriticalExtension at 1564 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType5_specs_1 = { + sizeof(struct SystemInformationBlockType5), + offsetof(struct SystemInformationBlockType5, _asn_ctx), + asn_MAP_SystemInformationBlockType5_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType5_oms_1, /* Optional members */ + 0, 1, /* Root/Additions */ + 0, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType5 = { + "SystemInformationBlockType5", + "SystemInformationBlockType5", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType5_tags_1, + sizeof(asn_DEF_SystemInformationBlockType5_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType5_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType5_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType5_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType5_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType5_1, + 2, /* Elements count */ + &asn_SPC_SystemInformationBlockType5_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType5.h b/lte/rrc/asn/SystemInformationBlockType5.h new file mode 100644 index 000000000..aff885f78 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType5.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType5_H_ +#define _SystemInformationBlockType5_H_ + + +#include + +/* Including external dependencies */ +#include "InterFreqCarrierFreqList.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SystemInformationBlockType5 */ +typedef struct SystemInformationBlockType5 { + InterFreqCarrierFreqList_t interFreqCarrierFreqList; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType5_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType5; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformationBlockType5_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType6.c b/lte/rrc/asn/SystemInformationBlockType6.c new file mode 100644 index 000000000..31ba5cf80 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType6.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType6.h" + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType6_1[] = { + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType6, carrierFreqListUTRA_FDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqListUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreqListUTRA-FDD" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType6, carrierFreqListUTRA_TDD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqListUTRA_TDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreqListUTRA-TDD" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType6, t_ReselectionUTRA), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reselection, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionUTRA" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType6, t_ReselectionUTRA_SF), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionUTRA-SF" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType6, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType6_oms_1[] = { 0, 1, 3, 4 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType6_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType6_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* carrierFreqListUTRA-FDD at 1602 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* carrierFreqListUTRA-TDD at 1603 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* t-ReselectionUTRA at 1604 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* t-ReselectionUTRA-SF at 1605 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* lateNonCriticalExtension at 1607 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType6_specs_1 = { + sizeof(struct SystemInformationBlockType6), + offsetof(struct SystemInformationBlockType6, _asn_ctx), + asn_MAP_SystemInformationBlockType6_tag2el_1, + 5, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType6_oms_1, /* Optional members */ + 3, 1, /* Root/Additions */ + 3, /* Start extensions */ + 6 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType6 = { + "SystemInformationBlockType6", + "SystemInformationBlockType6", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType6_tags_1, + sizeof(asn_DEF_SystemInformationBlockType6_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType6_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType6_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType6_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType6_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType6_1, + 5, /* Elements count */ + &asn_SPC_SystemInformationBlockType6_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType6.h b/lte/rrc/asn/SystemInformationBlockType6.h new file mode 100644 index 000000000..3dec39ca7 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType6.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType6_H_ +#define _SystemInformationBlockType6_H_ + + +#include + +/* Including external dependencies */ +#include "T-Reselection.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CarrierFreqListUTRA_FDD; +struct CarrierFreqListUTRA_TDD; +struct SpeedStateScaleFactors; + +/* SystemInformationBlockType6 */ +typedef struct SystemInformationBlockType6 { + struct CarrierFreqListUTRA_FDD *carrierFreqListUTRA_FDD /* OPTIONAL */; + struct CarrierFreqListUTRA_TDD *carrierFreqListUTRA_TDD /* OPTIONAL */; + T_Reselection_t t_ReselectionUTRA; + struct SpeedStateScaleFactors *t_ReselectionUTRA_SF /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType6_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType6; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CarrierFreqListUTRA-FDD.h" +#include "CarrierFreqListUTRA-TDD.h" +#include "SpeedStateScaleFactors.h" + +#endif /* _SystemInformationBlockType6_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType7.c b/lte/rrc/asn/SystemInformationBlockType7.c new file mode 100644 index 000000000..2b5f0b32b --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType7.c @@ -0,0 +1,92 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType7.h" + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType7_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType7, t_ReselectionGERAN), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_Reselection, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionGERAN" + }, + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType7, t_ReselectionGERAN_SF), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-ReselectionGERAN-SF" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType7, carrierFreqsInfoList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CarrierFreqsInfoListGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "carrierFreqsInfoList" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType7, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType7_oms_1[] = { 1, 2, 3 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType7_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType7_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t-ReselectionGERAN at 1640 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* t-ReselectionGERAN-SF at 1641 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* carrierFreqsInfoList at 1642 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* lateNonCriticalExtension at 1644 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType7_specs_1 = { + sizeof(struct SystemInformationBlockType7), + offsetof(struct SystemInformationBlockType7, _asn_ctx), + asn_MAP_SystemInformationBlockType7_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType7_oms_1, /* Optional members */ + 2, 1, /* Root/Additions */ + 2, /* Start extensions */ + 5 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType7 = { + "SystemInformationBlockType7", + "SystemInformationBlockType7", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType7_tags_1, + sizeof(asn_DEF_SystemInformationBlockType7_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType7_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType7_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType7_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType7_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType7_1, + 4, /* Elements count */ + &asn_SPC_SystemInformationBlockType7_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType7.h b/lte/rrc/asn/SystemInformationBlockType7.h new file mode 100644 index 000000000..ab43ce7f0 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType7.h @@ -0,0 +1,54 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType7_H_ +#define _SystemInformationBlockType7_H_ + + +#include + +/* Including external dependencies */ +#include "T-Reselection.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct SpeedStateScaleFactors; +struct CarrierFreqsInfoListGERAN; + +/* SystemInformationBlockType7 */ +typedef struct SystemInformationBlockType7 { + T_Reselection_t t_ReselectionGERAN; + struct SpeedStateScaleFactors *t_ReselectionGERAN_SF /* OPTIONAL */; + struct CarrierFreqsInfoListGERAN *carrierFreqsInfoList /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType7_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType7; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SpeedStateScaleFactors.h" +#include "CarrierFreqsInfoListGERAN.h" + +#endif /* _SystemInformationBlockType7_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType8.c b/lte/rrc/asn/SystemInformationBlockType8.c new file mode 100644 index 000000000..6bfcc8780 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType8.c @@ -0,0 +1,505 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType8.h" + +static int +memb_longCodeState1XRTT_constraint_7(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 42)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +csfb_DualRxTxSupport_r10_17_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +csfb_DualRxTxSupport_r10_17_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +csfb_DualRxTxSupport_r10_17_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +csfb_DualRxTxSupport_r10_17_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +csfb_DualRxTxSupport_r10_17_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +csfb_DualRxTxSupport_r10_17_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +csfb_DualRxTxSupport_r10_17_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +csfb_DualRxTxSupport_r10_17_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +csfb_DualRxTxSupport_r10_17_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + csfb_DualRxTxSupport_r10_17_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_searchWindowSize_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_longCodeState1XRTT_constr_9 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 42, 42 } /* (SIZE(42..42)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_csfb_DualRxTxSupport_r10_constr_17 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_searchWindowSize_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_parametersHRPD_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemInformationBlockType8__parametersHRPD, preRegistrationInfoHRPD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PreRegistrationInfoHRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "preRegistrationInfoHRPD" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType8__parametersHRPD, cellReselectionParametersHRPD), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionParametersCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionParametersHRPD" + }, +}; +static int asn_MAP_parametersHRPD_oms_4[] = { 1 }; +static ber_tlv_tag_t asn_DEF_parametersHRPD_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_parametersHRPD_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* preRegistrationInfoHRPD at 1667 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cellReselectionParametersHRPD at 1668 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_parametersHRPD_specs_4 = { + sizeof(struct SystemInformationBlockType8__parametersHRPD), + offsetof(struct SystemInformationBlockType8__parametersHRPD, _asn_ctx), + asn_MAP_parametersHRPD_tag2el_4, + 2, /* Count of tags in the map */ + asn_MAP_parametersHRPD_oms_4, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_parametersHRPD_4 = { + "parametersHRPD", + "parametersHRPD", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_parametersHRPD_tags_4, + sizeof(asn_DEF_parametersHRPD_tags_4) + /sizeof(asn_DEF_parametersHRPD_tags_4[0]) - 1, /* 1 */ + asn_DEF_parametersHRPD_tags_4, /* Same as above */ + sizeof(asn_DEF_parametersHRPD_tags_4) + /sizeof(asn_DEF_parametersHRPD_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_parametersHRPD_4, + 2, /* Elements count */ + &asn_SPC_parametersHRPD_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_parameters1XRTT_7[] = { + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType8__parameters1XRTT, csfb_RegistrationParam1XRTT), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFB_RegistrationParam1XRTT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfb-RegistrationParam1XRTT" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType8__parameters1XRTT, longCodeState1XRTT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_longCodeState1XRTT_constraint_7, + &asn_PER_memb_longCodeState1XRTT_constr_9, + 0, + "longCodeState1XRTT" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType8__parameters1XRTT, cellReselectionParameters1XRTT), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionParametersCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionParameters1XRTT" + }, +}; +static int asn_MAP_parameters1XRTT_oms_7[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_parameters1XRTT_tags_7[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_parameters1XRTT_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csfb-RegistrationParam1XRTT at 1671 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* longCodeState1XRTT at 1672 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* cellReselectionParameters1XRTT at 1673 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_parameters1XRTT_specs_7 = { + sizeof(struct SystemInformationBlockType8__parameters1XRTT), + offsetof(struct SystemInformationBlockType8__parameters1XRTT, _asn_ctx), + asn_MAP_parameters1XRTT_tag2el_7, + 3, /* Count of tags in the map */ + asn_MAP_parameters1XRTT_oms_7, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_parameters1XRTT_7 = { + "parameters1XRTT", + "parameters1XRTT", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_parameters1XRTT_tags_7, + sizeof(asn_DEF_parameters1XRTT_tags_7) + /sizeof(asn_DEF_parameters1XRTT_tags_7[0]) - 1, /* 1 */ + asn_DEF_parameters1XRTT_tags_7, /* Same as above */ + sizeof(asn_DEF_parameters1XRTT_tags_7) + /sizeof(asn_DEF_parameters1XRTT_tags_7[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_parameters1XRTT_7, + 3, /* Elements count */ + &asn_SPC_parameters1XRTT_specs_7 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_csfb_DualRxTxSupport_r10_value2enum_17[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_csfb_DualRxTxSupport_r10_enum2value_17[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_csfb_DualRxTxSupport_r10_specs_17 = { + asn_MAP_csfb_DualRxTxSupport_r10_value2enum_17, /* "tag" => N; sorted by tag */ + asn_MAP_csfb_DualRxTxSupport_r10_enum2value_17, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_csfb_DualRxTxSupport_r10_tags_17[] = { + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_csfb_DualRxTxSupport_r10_17 = { + "csfb-DualRxTxSupport-r10", + "csfb-DualRxTxSupport-r10", + csfb_DualRxTxSupport_r10_17_free, + csfb_DualRxTxSupport_r10_17_print, + csfb_DualRxTxSupport_r10_17_constraint, + csfb_DualRxTxSupport_r10_17_decode_ber, + csfb_DualRxTxSupport_r10_17_encode_der, + csfb_DualRxTxSupport_r10_17_decode_xer, + csfb_DualRxTxSupport_r10_17_encode_xer, + csfb_DualRxTxSupport_r10_17_decode_uper, + csfb_DualRxTxSupport_r10_17_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_csfb_DualRxTxSupport_r10_tags_17, + sizeof(asn_DEF_csfb_DualRxTxSupport_r10_tags_17) + /sizeof(asn_DEF_csfb_DualRxTxSupport_r10_tags_17[0]) - 1, /* 1 */ + asn_DEF_csfb_DualRxTxSupport_r10_tags_17, /* Same as above */ + sizeof(asn_DEF_csfb_DualRxTxSupport_r10_tags_17) + /sizeof(asn_DEF_csfb_DualRxTxSupport_r10_tags_17[0]), /* 2 */ + &asn_PER_type_csfb_DualRxTxSupport_r10_constr_17, + 0, 0, /* Defined elsewhere */ + &asn_SPC_csfb_DualRxTxSupport_r10_specs_17 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType8_1[] = { + { ATF_POINTER, 11, offsetof(struct SystemInformationBlockType8, systemTimeInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SystemTimeInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "systemTimeInfo" + }, + { ATF_POINTER, 10, offsetof(struct SystemInformationBlockType8, searchWindowSize), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_searchWindowSize_constraint_1, + &asn_PER_memb_searchWindowSize_constr_3, + 0, + "searchWindowSize" + }, + { ATF_POINTER, 9, offsetof(struct SystemInformationBlockType8, parametersHRPD), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + 0, + &asn_DEF_parametersHRPD_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "parametersHRPD" + }, + { ATF_POINTER, 8, offsetof(struct SystemInformationBlockType8, parameters1XRTT), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + 0, + &asn_DEF_parameters1XRTT_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "parameters1XRTT" + }, + { ATF_POINTER, 7, offsetof(struct SystemInformationBlockType8, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 6, offsetof(struct SystemInformationBlockType8, csfb_SupportForDualRxUEs_r9), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfb-SupportForDualRxUEs-r9" + }, + { ATF_POINTER, 5, offsetof(struct SystemInformationBlockType8, cellReselectionParametersHRPD_v920), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionParametersCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionParametersHRPD-v920" + }, + { ATF_POINTER, 4, offsetof(struct SystemInformationBlockType8, cellReselectionParameters1XRTT_v920), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellReselectionParametersCDMA2000_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellReselectionParameters1XRTT-v920" + }, + { ATF_POINTER, 3, offsetof(struct SystemInformationBlockType8, csfb_RegistrationParam1XRTT_v920), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFB_RegistrationParam1XRTT_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfb-RegistrationParam1XRTT-v920" + }, + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType8, ac_BarringConfig1XRTT_r9), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AC_BarringConfig1XRTT_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ac-BarringConfig1XRTT-r9" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType8, csfb_DualRxTxSupport_r10), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_csfb_DualRxTxSupport_r10_17, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfb-DualRxTxSupport-r10" + }, +}; +static int asn_MAP_SystemInformationBlockType8_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType8_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType8_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* systemTimeInfo at 1664 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* searchWindowSize at 1665 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* parametersHRPD at 1667 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* parameters1XRTT at 1671 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* lateNonCriticalExtension at 1675 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* csfb-SupportForDualRxUEs-r9 at 1676 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* cellReselectionParametersHRPD-v920 at 1677 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* cellReselectionParameters1XRTT-v920 at 1678 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* csfb-RegistrationParam1XRTT-v920 at 1679 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* ac-BarringConfig1XRTT-r9 at 1680 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 } /* csfb-DualRxTxSupport-r10 at 1681 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType8_specs_1 = { + sizeof(struct SystemInformationBlockType8), + offsetof(struct SystemInformationBlockType8, _asn_ctx), + asn_MAP_SystemInformationBlockType8_tag2el_1, + 11, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType8_oms_1, /* Optional members */ + 11, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType8 = { + "SystemInformationBlockType8", + "SystemInformationBlockType8", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType8_tags_1, + sizeof(asn_DEF_SystemInformationBlockType8_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType8_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType8_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType8_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType8_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType8_1, + 11, /* Elements count */ + &asn_SPC_SystemInformationBlockType8_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType8.h b/lte/rrc/asn/SystemInformationBlockType8.h new file mode 100644 index 000000000..9bfa99a0d --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType8.h @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType8_H_ +#define _SystemInformationBlockType8_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include +#include "PreRegistrationInfoHRPD.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemInformationBlockType8__csfb_DualRxTxSupport_r10 { + SystemInformationBlockType8__csfb_DualRxTxSupport_r10_true = 0 +} e_SystemInformationBlockType8__csfb_DualRxTxSupport_r10; + +/* Forward declarations */ +struct SystemTimeInfoCDMA2000; +struct CellReselectionParametersCDMA2000_v920; +struct CSFB_RegistrationParam1XRTT_v920; +struct AC_BarringConfig1XRTT_r9; +struct CellReselectionParametersCDMA2000; +struct CSFB_RegistrationParam1XRTT; + +/* SystemInformationBlockType8 */ +typedef struct SystemInformationBlockType8 { + struct SystemTimeInfoCDMA2000 *systemTimeInfo /* OPTIONAL */; + long *searchWindowSize /* OPTIONAL */; + struct SystemInformationBlockType8__parametersHRPD { + PreRegistrationInfoHRPD_t preRegistrationInfoHRPD; + struct CellReselectionParametersCDMA2000 *cellReselectionParametersHRPD /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *parametersHRPD; + struct SystemInformationBlockType8__parameters1XRTT { + struct CSFB_RegistrationParam1XRTT *csfb_RegistrationParam1XRTT /* OPTIONAL */; + BIT_STRING_t *longCodeState1XRTT /* OPTIONAL */; + struct CellReselectionParametersCDMA2000 *cellReselectionParameters1XRTT /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *parameters1XRTT; + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + BOOLEAN_t *csfb_SupportForDualRxUEs_r9 /* OPTIONAL */; + struct CellReselectionParametersCDMA2000_v920 *cellReselectionParametersHRPD_v920 /* OPTIONAL */; + struct CellReselectionParametersCDMA2000_v920 *cellReselectionParameters1XRTT_v920 /* OPTIONAL */; + struct CSFB_RegistrationParam1XRTT_v920 *csfb_RegistrationParam1XRTT_v920 /* OPTIONAL */; + struct AC_BarringConfig1XRTT_r9 *ac_BarringConfig1XRTT_r9 /* OPTIONAL */; + long *csfb_DualRxTxSupport_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType8_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_csfb_DualRxTxSupport_r10_17; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType8; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "SystemTimeInfoCDMA2000.h" +#include "CellReselectionParametersCDMA2000-v920.h" +#include "CSFB-RegistrationParam1XRTT-v920.h" +#include "AC-BarringConfig1XRTT-r9.h" +#include "CellReselectionParametersCDMA2000.h" +#include "CSFB-RegistrationParam1XRTT.h" + +#endif /* _SystemInformationBlockType8_H_ */ +#include diff --git a/lte/rrc/asn/SystemInformationBlockType9.c b/lte/rrc/asn/SystemInformationBlockType9.c new file mode 100644 index 000000000..1e358cd39 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType9.c @@ -0,0 +1,103 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemInformationBlockType9.h" + +static int +memb_hnb_Name_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size >= 1 && size <= 48)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_hnb_Name_constr_2 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 6, 6, 1, 48 } /* (SIZE(1..48)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_SystemInformationBlockType9_1[] = { + { ATF_POINTER, 2, offsetof(struct SystemInformationBlockType9, hnb_Name), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_hnb_Name_constraint_1, + &asn_PER_memb_hnb_Name_constr_2, + 0, + "hnb-Name" + }, + { ATF_POINTER, 1, offsetof(struct SystemInformationBlockType9, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, +}; +static int asn_MAP_SystemInformationBlockType9_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_SystemInformationBlockType9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemInformationBlockType9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* hnb-Name at 1750 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* lateNonCriticalExtension at 1752 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemInformationBlockType9_specs_1 = { + sizeof(struct SystemInformationBlockType9), + offsetof(struct SystemInformationBlockType9, _asn_ctx), + asn_MAP_SystemInformationBlockType9_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_SystemInformationBlockType9_oms_1, /* Optional members */ + 1, 1, /* Root/Additions */ + 0, /* Start extensions */ + 3 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType9 = { + "SystemInformationBlockType9", + "SystemInformationBlockType9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemInformationBlockType9_tags_1, + sizeof(asn_DEF_SystemInformationBlockType9_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType9_tags_1[0]), /* 1 */ + asn_DEF_SystemInformationBlockType9_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemInformationBlockType9_tags_1) + /sizeof(asn_DEF_SystemInformationBlockType9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemInformationBlockType9_1, + 2, /* Elements count */ + &asn_SPC_SystemInformationBlockType9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemInformationBlockType9.h b/lte/rrc/asn/SystemInformationBlockType9.h new file mode 100644 index 000000000..ea9d4a245 --- /dev/null +++ b/lte/rrc/asn/SystemInformationBlockType9.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemInformationBlockType9_H_ +#define _SystemInformationBlockType9_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* SystemInformationBlockType9 */ +typedef struct SystemInformationBlockType9 { + OCTET_STRING_t *hnb_Name /* OPTIONAL */; + /* + * This type is extensible, + * possible extensions are below. + */ + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemInformationBlockType9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemInformationBlockType9; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemInformationBlockType9_H_ */ +#include diff --git a/lte/rrc/asn/SystemTimeInfoCDMA2000.c b/lte/rrc/asn/SystemTimeInfoCDMA2000.c new file mode 100644 index 000000000..023db0484 --- /dev/null +++ b/lte/rrc/asn/SystemTimeInfoCDMA2000.c @@ -0,0 +1,205 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "SystemTimeInfoCDMA2000.h" + +static int +memb_synchronousSystemTime_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 39)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_asynchronousSystemTime_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 49)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_synchronousSystemTime_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 39, 39 } /* (SIZE(39..39)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_asynchronousSystemTime_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 49, 49 } /* (SIZE(49..49)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_cdma_SystemTime_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_cdma_SystemTime_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemTimeInfoCDMA2000__cdma_SystemTime, choice.synchronousSystemTime), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_synchronousSystemTime_constraint_3, + &asn_PER_memb_synchronousSystemTime_constr_4, + 0, + "synchronousSystemTime" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemTimeInfoCDMA2000__cdma_SystemTime, choice.asynchronousSystemTime), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_asynchronousSystemTime_constraint_3, + &asn_PER_memb_asynchronousSystemTime_constr_5, + 0, + "asynchronousSystemTime" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_cdma_SystemTime_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* synchronousSystemTime at 3138 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* asynchronousSystemTime at 3139 */ +}; +static asn_CHOICE_specifics_t asn_SPC_cdma_SystemTime_specs_3 = { + sizeof(struct SystemTimeInfoCDMA2000__cdma_SystemTime), + offsetof(struct SystemTimeInfoCDMA2000__cdma_SystemTime, _asn_ctx), + offsetof(struct SystemTimeInfoCDMA2000__cdma_SystemTime, present), + sizeof(((struct SystemTimeInfoCDMA2000__cdma_SystemTime *)0)->present), + asn_MAP_cdma_SystemTime_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_cdma_SystemTime_3 = { + "cdma-SystemTime", + "cdma-SystemTime", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_cdma_SystemTime_constr_3, + asn_MBR_cdma_SystemTime_3, + 2, /* Elements count */ + &asn_SPC_cdma_SystemTime_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_SystemTimeInfoCDMA2000_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct SystemTimeInfoCDMA2000, cdma_EUTRA_Synchronisation), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma-EUTRA-Synchronisation" + }, + { ATF_NOFLAGS, 0, offsetof(struct SystemTimeInfoCDMA2000, cdma_SystemTime), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_cdma_SystemTime_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma-SystemTime" + }, +}; +static ber_tlv_tag_t asn_DEF_SystemTimeInfoCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_SystemTimeInfoCDMA2000_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cdma-EUTRA-Synchronisation at 3136 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* cdma-SystemTime at 3138 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_SystemTimeInfoCDMA2000_specs_1 = { + sizeof(struct SystemTimeInfoCDMA2000), + offsetof(struct SystemTimeInfoCDMA2000, _asn_ctx), + asn_MAP_SystemTimeInfoCDMA2000_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_SystemTimeInfoCDMA2000 = { + "SystemTimeInfoCDMA2000", + "SystemTimeInfoCDMA2000", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_SystemTimeInfoCDMA2000_tags_1, + sizeof(asn_DEF_SystemTimeInfoCDMA2000_tags_1) + /sizeof(asn_DEF_SystemTimeInfoCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_SystemTimeInfoCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_SystemTimeInfoCDMA2000_tags_1) + /sizeof(asn_DEF_SystemTimeInfoCDMA2000_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_SystemTimeInfoCDMA2000_1, + 2, /* Elements count */ + &asn_SPC_SystemTimeInfoCDMA2000_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/SystemTimeInfoCDMA2000.h b/lte/rrc/asn/SystemTimeInfoCDMA2000.h new file mode 100644 index 000000000..d51615392 --- /dev/null +++ b/lte/rrc/asn/SystemTimeInfoCDMA2000.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _SystemTimeInfoCDMA2000_H_ +#define _SystemTimeInfoCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum SystemTimeInfoCDMA2000__cdma_SystemTime_PR { + SystemTimeInfoCDMA2000__cdma_SystemTime_PR_NOTHING, /* No components present */ + SystemTimeInfoCDMA2000__cdma_SystemTime_PR_synchronousSystemTime, + SystemTimeInfoCDMA2000__cdma_SystemTime_PR_asynchronousSystemTime +} SystemTimeInfoCDMA2000__cdma_SystemTime_PR; + +/* SystemTimeInfoCDMA2000 */ +typedef struct SystemTimeInfoCDMA2000 { + BOOLEAN_t cdma_EUTRA_Synchronisation; + struct SystemTimeInfoCDMA2000__cdma_SystemTime { + SystemTimeInfoCDMA2000__cdma_SystemTime_PR present; + union SystemTimeInfoCDMA2000__cdma_SystemTime_u { + BIT_STRING_t synchronousSystemTime; + BIT_STRING_t asynchronousSystemTime; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } cdma_SystemTime; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} SystemTimeInfoCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_SystemTimeInfoCDMA2000; + +#ifdef __cplusplus +} +#endif + +#endif /* _SystemTimeInfoCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/T-PollRetransmit.c b/lte/rrc/asn/T-PollRetransmit.c new file mode 100644 index 000000000..b2d1f0380 --- /dev/null +++ b/lte/rrc/asn/T-PollRetransmit.c @@ -0,0 +1,270 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "T-PollRetransmit.h" + +int +T_PollRetransmit_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +T_PollRetransmit_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +T_PollRetransmit_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +T_PollRetransmit_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +T_PollRetransmit_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +T_PollRetransmit_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +T_PollRetransmit_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +T_PollRetransmit_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +T_PollRetransmit_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +T_PollRetransmit_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + T_PollRetransmit_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_T_PollRetransmit_constr_1 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_T_PollRetransmit_value2enum_1[] = { + { 0, 3, "ms5" }, + { 1, 4, "ms10" }, + { 2, 4, "ms15" }, + { 3, 4, "ms20" }, + { 4, 4, "ms25" }, + { 5, 4, "ms30" }, + { 6, 4, "ms35" }, + { 7, 4, "ms40" }, + { 8, 4, "ms45" }, + { 9, 4, "ms50" }, + { 10, 4, "ms55" }, + { 11, 4, "ms60" }, + { 12, 4, "ms65" }, + { 13, 4, "ms70" }, + { 14, 4, "ms75" }, + { 15, 4, "ms80" }, + { 16, 4, "ms85" }, + { 17, 4, "ms90" }, + { 18, 4, "ms95" }, + { 19, 5, "ms100" }, + { 20, 5, "ms105" }, + { 21, 5, "ms110" }, + { 22, 5, "ms115" }, + { 23, 5, "ms120" }, + { 24, 5, "ms125" }, + { 25, 5, "ms130" }, + { 26, 5, "ms135" }, + { 27, 5, "ms140" }, + { 28, 5, "ms145" }, + { 29, 5, "ms150" }, + { 30, 5, "ms155" }, + { 31, 5, "ms160" }, + { 32, 5, "ms165" }, + { 33, 5, "ms170" }, + { 34, 5, "ms175" }, + { 35, 5, "ms180" }, + { 36, 5, "ms185" }, + { 37, 5, "ms190" }, + { 38, 5, "ms195" }, + { 39, 5, "ms200" }, + { 40, 5, "ms205" }, + { 41, 5, "ms210" }, + { 42, 5, "ms215" }, + { 43, 5, "ms220" }, + { 44, 5, "ms225" }, + { 45, 5, "ms230" }, + { 46, 5, "ms235" }, + { 47, 5, "ms240" }, + { 48, 5, "ms245" }, + { 49, 5, "ms250" }, + { 50, 5, "ms300" }, + { 51, 5, "ms350" }, + { 52, 5, "ms400" }, + { 53, 5, "ms450" }, + { 54, 5, "ms500" }, + { 55, 6, "spare9" }, + { 56, 6, "spare8" }, + { 57, 6, "spare7" }, + { 58, 6, "spare6" }, + { 59, 6, "spare5" }, + { 60, 6, "spare4" }, + { 61, 6, "spare3" }, + { 62, 6, "spare2" }, + { 63, 6, "spare1" } +}; +static unsigned int asn_MAP_T_PollRetransmit_enum2value_1[] = { + 1, /* ms10(1) */ + 19, /* ms100(19) */ + 20, /* ms105(20) */ + 21, /* ms110(21) */ + 22, /* ms115(22) */ + 23, /* ms120(23) */ + 24, /* ms125(24) */ + 25, /* ms130(25) */ + 26, /* ms135(26) */ + 27, /* ms140(27) */ + 28, /* ms145(28) */ + 2, /* ms15(2) */ + 29, /* ms150(29) */ + 30, /* ms155(30) */ + 31, /* ms160(31) */ + 32, /* ms165(32) */ + 33, /* ms170(33) */ + 34, /* ms175(34) */ + 35, /* ms180(35) */ + 36, /* ms185(36) */ + 37, /* ms190(37) */ + 38, /* ms195(38) */ + 3, /* ms20(3) */ + 39, /* ms200(39) */ + 40, /* ms205(40) */ + 41, /* ms210(41) */ + 42, /* ms215(42) */ + 43, /* ms220(43) */ + 44, /* ms225(44) */ + 45, /* ms230(45) */ + 46, /* ms235(46) */ + 47, /* ms240(47) */ + 48, /* ms245(48) */ + 4, /* ms25(4) */ + 49, /* ms250(49) */ + 5, /* ms30(5) */ + 50, /* ms300(50) */ + 6, /* ms35(6) */ + 51, /* ms350(51) */ + 7, /* ms40(7) */ + 52, /* ms400(52) */ + 8, /* ms45(8) */ + 53, /* ms450(53) */ + 0, /* ms5(0) */ + 9, /* ms50(9) */ + 54, /* ms500(54) */ + 10, /* ms55(10) */ + 11, /* ms60(11) */ + 12, /* ms65(12) */ + 13, /* ms70(13) */ + 14, /* ms75(14) */ + 15, /* ms80(15) */ + 16, /* ms85(16) */ + 17, /* ms90(17) */ + 18, /* ms95(18) */ + 63, /* spare1(63) */ + 62, /* spare2(62) */ + 61, /* spare3(61) */ + 60, /* spare4(60) */ + 59, /* spare5(59) */ + 58, /* spare6(58) */ + 57, /* spare7(57) */ + 56, /* spare8(56) */ + 55 /* spare9(55) */ +}; +static asn_INTEGER_specifics_t asn_SPC_T_PollRetransmit_specs_1 = { + asn_MAP_T_PollRetransmit_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_T_PollRetransmit_enum2value_1, /* N => "tag"; sorted by N */ + 64, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_T_PollRetransmit_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_T_PollRetransmit = { + "T-PollRetransmit", + "T-PollRetransmit", + T_PollRetransmit_free, + T_PollRetransmit_print, + T_PollRetransmit_constraint, + T_PollRetransmit_decode_ber, + T_PollRetransmit_encode_der, + T_PollRetransmit_decode_xer, + T_PollRetransmit_encode_xer, + T_PollRetransmit_decode_uper, + T_PollRetransmit_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_T_PollRetransmit_tags_1, + sizeof(asn_DEF_T_PollRetransmit_tags_1) + /sizeof(asn_DEF_T_PollRetransmit_tags_1[0]), /* 1 */ + asn_DEF_T_PollRetransmit_tags_1, /* Same as above */ + sizeof(asn_DEF_T_PollRetransmit_tags_1) + /sizeof(asn_DEF_T_PollRetransmit_tags_1[0]), /* 1 */ + &asn_PER_type_T_PollRetransmit_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_T_PollRetransmit_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/T-PollRetransmit.h b/lte/rrc/asn/T-PollRetransmit.h new file mode 100644 index 000000000..9caa24aa5 --- /dev/null +++ b/lte/rrc/asn/T-PollRetransmit.h @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _T_PollRetransmit_H_ +#define _T_PollRetransmit_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum T_PollRetransmit { + T_PollRetransmit_ms5 = 0, + T_PollRetransmit_ms10 = 1, + T_PollRetransmit_ms15 = 2, + T_PollRetransmit_ms20 = 3, + T_PollRetransmit_ms25 = 4, + T_PollRetransmit_ms30 = 5, + T_PollRetransmit_ms35 = 6, + T_PollRetransmit_ms40 = 7, + T_PollRetransmit_ms45 = 8, + T_PollRetransmit_ms50 = 9, + T_PollRetransmit_ms55 = 10, + T_PollRetransmit_ms60 = 11, + T_PollRetransmit_ms65 = 12, + T_PollRetransmit_ms70 = 13, + T_PollRetransmit_ms75 = 14, + T_PollRetransmit_ms80 = 15, + T_PollRetransmit_ms85 = 16, + T_PollRetransmit_ms90 = 17, + T_PollRetransmit_ms95 = 18, + T_PollRetransmit_ms100 = 19, + T_PollRetransmit_ms105 = 20, + T_PollRetransmit_ms110 = 21, + T_PollRetransmit_ms115 = 22, + T_PollRetransmit_ms120 = 23, + T_PollRetransmit_ms125 = 24, + T_PollRetransmit_ms130 = 25, + T_PollRetransmit_ms135 = 26, + T_PollRetransmit_ms140 = 27, + T_PollRetransmit_ms145 = 28, + T_PollRetransmit_ms150 = 29, + T_PollRetransmit_ms155 = 30, + T_PollRetransmit_ms160 = 31, + T_PollRetransmit_ms165 = 32, + T_PollRetransmit_ms170 = 33, + T_PollRetransmit_ms175 = 34, + T_PollRetransmit_ms180 = 35, + T_PollRetransmit_ms185 = 36, + T_PollRetransmit_ms190 = 37, + T_PollRetransmit_ms195 = 38, + T_PollRetransmit_ms200 = 39, + T_PollRetransmit_ms205 = 40, + T_PollRetransmit_ms210 = 41, + T_PollRetransmit_ms215 = 42, + T_PollRetransmit_ms220 = 43, + T_PollRetransmit_ms225 = 44, + T_PollRetransmit_ms230 = 45, + T_PollRetransmit_ms235 = 46, + T_PollRetransmit_ms240 = 47, + T_PollRetransmit_ms245 = 48, + T_PollRetransmit_ms250 = 49, + T_PollRetransmit_ms300 = 50, + T_PollRetransmit_ms350 = 51, + T_PollRetransmit_ms400 = 52, + T_PollRetransmit_ms450 = 53, + T_PollRetransmit_ms500 = 54, + T_PollRetransmit_spare9 = 55, + T_PollRetransmit_spare8 = 56, + T_PollRetransmit_spare7 = 57, + T_PollRetransmit_spare6 = 58, + T_PollRetransmit_spare5 = 59, + T_PollRetransmit_spare4 = 60, + T_PollRetransmit_spare3 = 61, + T_PollRetransmit_spare2 = 62, + T_PollRetransmit_spare1 = 63 +} e_T_PollRetransmit; + +/* T-PollRetransmit */ +typedef long T_PollRetransmit_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_T_PollRetransmit; +asn_struct_free_f T_PollRetransmit_free; +asn_struct_print_f T_PollRetransmit_print; +asn_constr_check_f T_PollRetransmit_constraint; +ber_type_decoder_f T_PollRetransmit_decode_ber; +der_type_encoder_f T_PollRetransmit_encode_der; +xer_type_decoder_f T_PollRetransmit_decode_xer; +xer_type_encoder_f T_PollRetransmit_encode_xer; +per_type_decoder_f T_PollRetransmit_decode_uper; +per_type_encoder_f T_PollRetransmit_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _T_PollRetransmit_H_ */ +#include diff --git a/lte/rrc/asn/T-Reordering.c b/lte/rrc/asn/T-Reordering.c new file mode 100644 index 000000000..5b4debaf4 --- /dev/null +++ b/lte/rrc/asn/T-Reordering.c @@ -0,0 +1,206 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "T-Reordering.h" + +int +T_Reordering_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +T_Reordering_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +T_Reordering_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + T_Reordering_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +T_Reordering_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +T_Reordering_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +T_Reordering_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +T_Reordering_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +T_Reordering_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +T_Reordering_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +T_Reordering_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + T_Reordering_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_T_Reordering_constr_1 = { + { APC_CONSTRAINED, 5, 5, 0, 31 } /* (0..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_T_Reordering_value2enum_1[] = { + { 0, 3, "ms0" }, + { 1, 3, "ms5" }, + { 2, 4, "ms10" }, + { 3, 4, "ms15" }, + { 4, 4, "ms20" }, + { 5, 4, "ms25" }, + { 6, 4, "ms30" }, + { 7, 4, "ms35" }, + { 8, 4, "ms40" }, + { 9, 4, "ms45" }, + { 10, 4, "ms50" }, + { 11, 4, "ms55" }, + { 12, 4, "ms60" }, + { 13, 4, "ms65" }, + { 14, 4, "ms70" }, + { 15, 4, "ms75" }, + { 16, 4, "ms80" }, + { 17, 4, "ms85" }, + { 18, 4, "ms90" }, + { 19, 4, "ms95" }, + { 20, 5, "ms100" }, + { 21, 5, "ms110" }, + { 22, 5, "ms120" }, + { 23, 5, "ms130" }, + { 24, 5, "ms140" }, + { 25, 5, "ms150" }, + { 26, 5, "ms160" }, + { 27, 5, "ms170" }, + { 28, 5, "ms180" }, + { 29, 5, "ms190" }, + { 30, 5, "ms200" }, + { 31, 6, "spare1" } +}; +static unsigned int asn_MAP_T_Reordering_enum2value_1[] = { + 0, /* ms0(0) */ + 2, /* ms10(2) */ + 20, /* ms100(20) */ + 21, /* ms110(21) */ + 22, /* ms120(22) */ + 23, /* ms130(23) */ + 24, /* ms140(24) */ + 3, /* ms15(3) */ + 25, /* ms150(25) */ + 26, /* ms160(26) */ + 27, /* ms170(27) */ + 28, /* ms180(28) */ + 29, /* ms190(29) */ + 4, /* ms20(4) */ + 30, /* ms200(30) */ + 5, /* ms25(5) */ + 6, /* ms30(6) */ + 7, /* ms35(7) */ + 8, /* ms40(8) */ + 9, /* ms45(9) */ + 1, /* ms5(1) */ + 10, /* ms50(10) */ + 11, /* ms55(11) */ + 12, /* ms60(12) */ + 13, /* ms65(13) */ + 14, /* ms70(14) */ + 15, /* ms75(15) */ + 16, /* ms80(16) */ + 17, /* ms85(17) */ + 18, /* ms90(18) */ + 19, /* ms95(19) */ + 31 /* spare1(31) */ +}; +static asn_INTEGER_specifics_t asn_SPC_T_Reordering_specs_1 = { + asn_MAP_T_Reordering_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_T_Reordering_enum2value_1, /* N => "tag"; sorted by N */ + 32, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_T_Reordering_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_T_Reordering = { + "T-Reordering", + "T-Reordering", + T_Reordering_free, + T_Reordering_print, + T_Reordering_constraint, + T_Reordering_decode_ber, + T_Reordering_encode_der, + T_Reordering_decode_xer, + T_Reordering_encode_xer, + T_Reordering_decode_uper, + T_Reordering_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_T_Reordering_tags_1, + sizeof(asn_DEF_T_Reordering_tags_1) + /sizeof(asn_DEF_T_Reordering_tags_1[0]), /* 1 */ + asn_DEF_T_Reordering_tags_1, /* Same as above */ + sizeof(asn_DEF_T_Reordering_tags_1) + /sizeof(asn_DEF_T_Reordering_tags_1[0]), /* 1 */ + &asn_PER_type_T_Reordering_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_T_Reordering_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/T-Reordering.h b/lte/rrc/asn/T-Reordering.h new file mode 100644 index 000000000..0724cf357 --- /dev/null +++ b/lte/rrc/asn/T-Reordering.h @@ -0,0 +1,77 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _T_Reordering_H_ +#define _T_Reordering_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum T_Reordering { + T_Reordering_ms0 = 0, + T_Reordering_ms5 = 1, + T_Reordering_ms10 = 2, + T_Reordering_ms15 = 3, + T_Reordering_ms20 = 4, + T_Reordering_ms25 = 5, + T_Reordering_ms30 = 6, + T_Reordering_ms35 = 7, + T_Reordering_ms40 = 8, + T_Reordering_ms45 = 9, + T_Reordering_ms50 = 10, + T_Reordering_ms55 = 11, + T_Reordering_ms60 = 12, + T_Reordering_ms65 = 13, + T_Reordering_ms70 = 14, + T_Reordering_ms75 = 15, + T_Reordering_ms80 = 16, + T_Reordering_ms85 = 17, + T_Reordering_ms90 = 18, + T_Reordering_ms95 = 19, + T_Reordering_ms100 = 20, + T_Reordering_ms110 = 21, + T_Reordering_ms120 = 22, + T_Reordering_ms130 = 23, + T_Reordering_ms140 = 24, + T_Reordering_ms150 = 25, + T_Reordering_ms160 = 26, + T_Reordering_ms170 = 27, + T_Reordering_ms180 = 28, + T_Reordering_ms190 = 29, + T_Reordering_ms200 = 30, + T_Reordering_spare1 = 31 +} e_T_Reordering; + +/* T-Reordering */ +typedef long T_Reordering_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_T_Reordering; +asn_struct_free_f T_Reordering_free; +asn_struct_print_f T_Reordering_print; +asn_constr_check_f T_Reordering_constraint; +ber_type_decoder_f T_Reordering_decode_ber; +der_type_encoder_f T_Reordering_encode_der; +xer_type_decoder_f T_Reordering_decode_xer; +xer_type_encoder_f T_Reordering_encode_xer; +per_type_decoder_f T_Reordering_decode_uper; +per_type_encoder_f T_Reordering_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _T_Reordering_H_ */ +#include diff --git a/lte/rrc/asn/T-Reselection.c b/lte/rrc/asn/T-Reselection.c new file mode 100644 index 000000000..8826aa190 --- /dev/null +++ b/lte/rrc/asn/T-Reselection.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "T-Reselection.h" + +int +T_Reselection_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +T_Reselection_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +T_Reselection_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + T_Reselection_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +T_Reselection_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +T_Reselection_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +T_Reselection_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +T_Reselection_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +T_Reselection_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +T_Reselection_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +T_Reselection_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + T_Reselection_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_T_Reselection_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_T_Reselection_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_T_Reselection = { + "T-Reselection", + "T-Reselection", + T_Reselection_free, + T_Reselection_print, + T_Reselection_constraint, + T_Reselection_decode_ber, + T_Reselection_encode_der, + T_Reselection_decode_xer, + T_Reselection_encode_xer, + T_Reselection_decode_uper, + T_Reselection_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_T_Reselection_tags_1, + sizeof(asn_DEF_T_Reselection_tags_1) + /sizeof(asn_DEF_T_Reselection_tags_1[0]), /* 1 */ + asn_DEF_T_Reselection_tags_1, /* Same as above */ + sizeof(asn_DEF_T_Reselection_tags_1) + /sizeof(asn_DEF_T_Reselection_tags_1[0]), /* 1 */ + &asn_PER_type_T_Reselection_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/T-Reselection.h b/lte/rrc/asn/T-Reselection.h new file mode 100644 index 000000000..224a5ae3f --- /dev/null +++ b/lte/rrc/asn/T-Reselection.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _T_Reselection_H_ +#define _T_Reselection_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* T-Reselection */ +typedef long T_Reselection_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_T_Reselection; +asn_struct_free_f T_Reselection_free; +asn_struct_print_f T_Reselection_print; +asn_constr_check_f T_Reselection_constraint; +ber_type_decoder_f T_Reselection_decode_ber; +der_type_encoder_f T_Reselection_encode_der; +xer_type_decoder_f T_Reselection_decode_xer; +xer_type_encoder_f T_Reselection_encode_xer; +per_type_decoder_f T_Reselection_decode_uper; +per_type_encoder_f T_Reselection_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _T_Reselection_H_ */ +#include diff --git a/lte/rrc/asn/T-StatusProhibit.c b/lte/rrc/asn/T-StatusProhibit.c new file mode 100644 index 000000000..05d4061cd --- /dev/null +++ b/lte/rrc/asn/T-StatusProhibit.c @@ -0,0 +1,270 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "T-StatusProhibit.h" + +int +T_StatusProhibit_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +T_StatusProhibit_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +T_StatusProhibit_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +T_StatusProhibit_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +T_StatusProhibit_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +T_StatusProhibit_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +T_StatusProhibit_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +T_StatusProhibit_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +T_StatusProhibit_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +T_StatusProhibit_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + T_StatusProhibit_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_T_StatusProhibit_constr_1 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_T_StatusProhibit_value2enum_1[] = { + { 0, 3, "ms0" }, + { 1, 3, "ms5" }, + { 2, 4, "ms10" }, + { 3, 4, "ms15" }, + { 4, 4, "ms20" }, + { 5, 4, "ms25" }, + { 6, 4, "ms30" }, + { 7, 4, "ms35" }, + { 8, 4, "ms40" }, + { 9, 4, "ms45" }, + { 10, 4, "ms50" }, + { 11, 4, "ms55" }, + { 12, 4, "ms60" }, + { 13, 4, "ms65" }, + { 14, 4, "ms70" }, + { 15, 4, "ms75" }, + { 16, 4, "ms80" }, + { 17, 4, "ms85" }, + { 18, 4, "ms90" }, + { 19, 4, "ms95" }, + { 20, 5, "ms100" }, + { 21, 5, "ms105" }, + { 22, 5, "ms110" }, + { 23, 5, "ms115" }, + { 24, 5, "ms120" }, + { 25, 5, "ms125" }, + { 26, 5, "ms130" }, + { 27, 5, "ms135" }, + { 28, 5, "ms140" }, + { 29, 5, "ms145" }, + { 30, 5, "ms150" }, + { 31, 5, "ms155" }, + { 32, 5, "ms160" }, + { 33, 5, "ms165" }, + { 34, 5, "ms170" }, + { 35, 5, "ms175" }, + { 36, 5, "ms180" }, + { 37, 5, "ms185" }, + { 38, 5, "ms190" }, + { 39, 5, "ms195" }, + { 40, 5, "ms200" }, + { 41, 5, "ms205" }, + { 42, 5, "ms210" }, + { 43, 5, "ms215" }, + { 44, 5, "ms220" }, + { 45, 5, "ms225" }, + { 46, 5, "ms230" }, + { 47, 5, "ms235" }, + { 48, 5, "ms240" }, + { 49, 5, "ms245" }, + { 50, 5, "ms250" }, + { 51, 5, "ms300" }, + { 52, 5, "ms350" }, + { 53, 5, "ms400" }, + { 54, 5, "ms450" }, + { 55, 5, "ms500" }, + { 56, 6, "spare8" }, + { 57, 6, "spare7" }, + { 58, 6, "spare6" }, + { 59, 6, "spare5" }, + { 60, 6, "spare4" }, + { 61, 6, "spare3" }, + { 62, 6, "spare2" }, + { 63, 6, "spare1" } +}; +static unsigned int asn_MAP_T_StatusProhibit_enum2value_1[] = { + 0, /* ms0(0) */ + 2, /* ms10(2) */ + 20, /* ms100(20) */ + 21, /* ms105(21) */ + 22, /* ms110(22) */ + 23, /* ms115(23) */ + 24, /* ms120(24) */ + 25, /* ms125(25) */ + 26, /* ms130(26) */ + 27, /* ms135(27) */ + 28, /* ms140(28) */ + 29, /* ms145(29) */ + 3, /* ms15(3) */ + 30, /* ms150(30) */ + 31, /* ms155(31) */ + 32, /* ms160(32) */ + 33, /* ms165(33) */ + 34, /* ms170(34) */ + 35, /* ms175(35) */ + 36, /* ms180(36) */ + 37, /* ms185(37) */ + 38, /* ms190(38) */ + 39, /* ms195(39) */ + 4, /* ms20(4) */ + 40, /* ms200(40) */ + 41, /* ms205(41) */ + 42, /* ms210(42) */ + 43, /* ms215(43) */ + 44, /* ms220(44) */ + 45, /* ms225(45) */ + 46, /* ms230(46) */ + 47, /* ms235(47) */ + 48, /* ms240(48) */ + 49, /* ms245(49) */ + 5, /* ms25(5) */ + 50, /* ms250(50) */ + 6, /* ms30(6) */ + 51, /* ms300(51) */ + 7, /* ms35(7) */ + 52, /* ms350(52) */ + 8, /* ms40(8) */ + 53, /* ms400(53) */ + 9, /* ms45(9) */ + 54, /* ms450(54) */ + 1, /* ms5(1) */ + 10, /* ms50(10) */ + 55, /* ms500(55) */ + 11, /* ms55(11) */ + 12, /* ms60(12) */ + 13, /* ms65(13) */ + 14, /* ms70(14) */ + 15, /* ms75(15) */ + 16, /* ms80(16) */ + 17, /* ms85(17) */ + 18, /* ms90(18) */ + 19, /* ms95(19) */ + 63, /* spare1(63) */ + 62, /* spare2(62) */ + 61, /* spare3(61) */ + 60, /* spare4(60) */ + 59, /* spare5(59) */ + 58, /* spare6(58) */ + 57, /* spare7(57) */ + 56 /* spare8(56) */ +}; +static asn_INTEGER_specifics_t asn_SPC_T_StatusProhibit_specs_1 = { + asn_MAP_T_StatusProhibit_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_T_StatusProhibit_enum2value_1, /* N => "tag"; sorted by N */ + 64, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_T_StatusProhibit_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_T_StatusProhibit = { + "T-StatusProhibit", + "T-StatusProhibit", + T_StatusProhibit_free, + T_StatusProhibit_print, + T_StatusProhibit_constraint, + T_StatusProhibit_decode_ber, + T_StatusProhibit_encode_der, + T_StatusProhibit_decode_xer, + T_StatusProhibit_encode_xer, + T_StatusProhibit_decode_uper, + T_StatusProhibit_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_T_StatusProhibit_tags_1, + sizeof(asn_DEF_T_StatusProhibit_tags_1) + /sizeof(asn_DEF_T_StatusProhibit_tags_1[0]), /* 1 */ + asn_DEF_T_StatusProhibit_tags_1, /* Same as above */ + sizeof(asn_DEF_T_StatusProhibit_tags_1) + /sizeof(asn_DEF_T_StatusProhibit_tags_1[0]), /* 1 */ + &asn_PER_type_T_StatusProhibit_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_T_StatusProhibit_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/T-StatusProhibit.h b/lte/rrc/asn/T-StatusProhibit.h new file mode 100644 index 000000000..57a134725 --- /dev/null +++ b/lte/rrc/asn/T-StatusProhibit.h @@ -0,0 +1,109 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _T_StatusProhibit_H_ +#define _T_StatusProhibit_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum T_StatusProhibit { + T_StatusProhibit_ms0 = 0, + T_StatusProhibit_ms5 = 1, + T_StatusProhibit_ms10 = 2, + T_StatusProhibit_ms15 = 3, + T_StatusProhibit_ms20 = 4, + T_StatusProhibit_ms25 = 5, + T_StatusProhibit_ms30 = 6, + T_StatusProhibit_ms35 = 7, + T_StatusProhibit_ms40 = 8, + T_StatusProhibit_ms45 = 9, + T_StatusProhibit_ms50 = 10, + T_StatusProhibit_ms55 = 11, + T_StatusProhibit_ms60 = 12, + T_StatusProhibit_ms65 = 13, + T_StatusProhibit_ms70 = 14, + T_StatusProhibit_ms75 = 15, + T_StatusProhibit_ms80 = 16, + T_StatusProhibit_ms85 = 17, + T_StatusProhibit_ms90 = 18, + T_StatusProhibit_ms95 = 19, + T_StatusProhibit_ms100 = 20, + T_StatusProhibit_ms105 = 21, + T_StatusProhibit_ms110 = 22, + T_StatusProhibit_ms115 = 23, + T_StatusProhibit_ms120 = 24, + T_StatusProhibit_ms125 = 25, + T_StatusProhibit_ms130 = 26, + T_StatusProhibit_ms135 = 27, + T_StatusProhibit_ms140 = 28, + T_StatusProhibit_ms145 = 29, + T_StatusProhibit_ms150 = 30, + T_StatusProhibit_ms155 = 31, + T_StatusProhibit_ms160 = 32, + T_StatusProhibit_ms165 = 33, + T_StatusProhibit_ms170 = 34, + T_StatusProhibit_ms175 = 35, + T_StatusProhibit_ms180 = 36, + T_StatusProhibit_ms185 = 37, + T_StatusProhibit_ms190 = 38, + T_StatusProhibit_ms195 = 39, + T_StatusProhibit_ms200 = 40, + T_StatusProhibit_ms205 = 41, + T_StatusProhibit_ms210 = 42, + T_StatusProhibit_ms215 = 43, + T_StatusProhibit_ms220 = 44, + T_StatusProhibit_ms225 = 45, + T_StatusProhibit_ms230 = 46, + T_StatusProhibit_ms235 = 47, + T_StatusProhibit_ms240 = 48, + T_StatusProhibit_ms245 = 49, + T_StatusProhibit_ms250 = 50, + T_StatusProhibit_ms300 = 51, + T_StatusProhibit_ms350 = 52, + T_StatusProhibit_ms400 = 53, + T_StatusProhibit_ms450 = 54, + T_StatusProhibit_ms500 = 55, + T_StatusProhibit_spare8 = 56, + T_StatusProhibit_spare7 = 57, + T_StatusProhibit_spare6 = 58, + T_StatusProhibit_spare5 = 59, + T_StatusProhibit_spare4 = 60, + T_StatusProhibit_spare3 = 61, + T_StatusProhibit_spare2 = 62, + T_StatusProhibit_spare1 = 63 +} e_T_StatusProhibit; + +/* T-StatusProhibit */ +typedef long T_StatusProhibit_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_T_StatusProhibit; +asn_struct_free_f T_StatusProhibit_free; +asn_struct_print_f T_StatusProhibit_print; +asn_constr_check_f T_StatusProhibit_constraint; +ber_type_decoder_f T_StatusProhibit_decode_ber; +der_type_encoder_f T_StatusProhibit_encode_der; +xer_type_decoder_f T_StatusProhibit_decode_xer; +xer_type_encoder_f T_StatusProhibit_encode_xer; +per_type_decoder_f T_StatusProhibit_decode_uper; +per_type_encoder_f T_StatusProhibit_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _T_StatusProhibit_H_ */ +#include diff --git a/lte/rrc/asn/TDD-Config.c b/lte/rrc/asn/TDD-Config.c index 5af093c36..c2566990e 100644 --- a/lte/rrc/asn/TDD-Config.c +++ b/lte/rrc/asn/TDD-Config.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "TDD-Config.h" @@ -22,7 +23,6 @@ static void subframeAssignment_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -111,7 +111,6 @@ static void specialSubframePatterns_10_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_NativeEnumerated.free_struct; td->print_struct = asn_DEF_NativeEnumerated.print_struct; - td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; @@ -184,17 +183,17 @@ specialSubframePatterns_10_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_subframeAssignment_constr_2 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_subframeAssignment_constr_2 = { { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static asn_per_constraints_t asn_PER_type_specialSubframePatterns_constr_10 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_specialSubframePatterns_constr_10 = { { APC_CONSTRAINED, 4, 4, 0, 8 } /* (0..8) */, { APC_UNCONSTRAINED, -1, -1, 0, 0 }, 0, 0 /* No PER value map */ }; -static const asn_INTEGER_enum_map_t asn_MAP_subframeAssignment_value2enum_2[] = { +static asn_INTEGER_enum_map_t asn_MAP_subframeAssignment_value2enum_2[] = { { 0, 3, "sa0" }, { 1, 3, "sa1" }, { 2, 3, "sa2" }, @@ -203,7 +202,7 @@ static const asn_INTEGER_enum_map_t asn_MAP_subframeAssignment_value2enum_2[] = { 5, 3, "sa5" }, { 6, 3, "sa6" } }; -static const unsigned int asn_MAP_subframeAssignment_enum2value_2[] = { +static unsigned int asn_MAP_subframeAssignment_enum2value_2[] = { 0, /* sa0(0) */ 1, /* sa1(1) */ 2, /* sa2(2) */ @@ -212,7 +211,7 @@ static const unsigned int asn_MAP_subframeAssignment_enum2value_2[] = { 5, /* sa5(5) */ 6 /* sa6(6) */ }; -static const asn_INTEGER_specifics_t asn_SPC_subframeAssignment_specs_2 = { +static asn_INTEGER_specifics_t asn_SPC_subframeAssignment_specs_2 = { asn_MAP_subframeAssignment_value2enum_2, /* "tag" => N; sorted by tag */ asn_MAP_subframeAssignment_enum2value_2, /* N => "tag"; sorted by N */ 7, /* Number of elements in the maps */ @@ -221,7 +220,7 @@ static const asn_INTEGER_specifics_t asn_SPC_subframeAssignment_specs_2 = { 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_subframeAssignment_tags_2[] = { +static ber_tlv_tag_t asn_DEF_subframeAssignment_tags_2[] = { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -250,7 +249,7 @@ asn_TYPE_descriptor_t asn_DEF_subframeAssignment_2 = { &asn_SPC_subframeAssignment_specs_2 /* Additional specs */ }; -static const asn_INTEGER_enum_map_t asn_MAP_specialSubframePatterns_value2enum_10[] = { +static asn_INTEGER_enum_map_t asn_MAP_specialSubframePatterns_value2enum_10[] = { { 0, 4, "ssp0" }, { 1, 4, "ssp1" }, { 2, 4, "ssp2" }, @@ -261,7 +260,7 @@ static const asn_INTEGER_enum_map_t asn_MAP_specialSubframePatterns_value2enum_1 { 7, 4, "ssp7" }, { 8, 4, "ssp8" } }; -static const unsigned int asn_MAP_specialSubframePatterns_enum2value_10[] = { +static unsigned int asn_MAP_specialSubframePatterns_enum2value_10[] = { 0, /* ssp0(0) */ 1, /* ssp1(1) */ 2, /* ssp2(2) */ @@ -272,7 +271,7 @@ static const unsigned int asn_MAP_specialSubframePatterns_enum2value_10[] = { 7, /* ssp7(7) */ 8 /* ssp8(8) */ }; -static const asn_INTEGER_specifics_t asn_SPC_specialSubframePatterns_specs_10 = { +static asn_INTEGER_specifics_t asn_SPC_specialSubframePatterns_specs_10 = { asn_MAP_specialSubframePatterns_value2enum_10, /* "tag" => N; sorted by tag */ asn_MAP_specialSubframePatterns_enum2value_10, /* N => "tag"; sorted by N */ 9, /* Number of elements in the maps */ @@ -281,7 +280,7 @@ static const asn_INTEGER_specifics_t asn_SPC_specialSubframePatterns_specs_10 = 0, /* Native long size */ 0 }; -static const ber_tlv_tag_t asn_DEF_specialSubframePatterns_tags_10[] = { +static ber_tlv_tag_t asn_DEF_specialSubframePatterns_tags_10[] = { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) }; @@ -330,12 +329,12 @@ static asn_TYPE_member_t asn_MBR_TDD_Config_1[] = { "specialSubframePatterns" }, }; -static const ber_tlv_tag_t asn_DEF_TDD_Config_tags_1[] = { +static ber_tlv_tag_t asn_DEF_TDD_Config_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) }; -static const asn_TYPE_tag2member_t asn_MAP_TDD_Config_tag2el_1[] = { - { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeAssignment */ - { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* specialSubframePatterns */ +static asn_TYPE_tag2member_t asn_MAP_TDD_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* subframeAssignment at 2774 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* specialSubframePatterns at 2776 */ }; static asn_SEQUENCE_specifics_t asn_SPC_TDD_Config_specs_1 = { sizeof(struct TDD_Config), diff --git a/lte/rrc/asn/TDD-Config.h b/lte/rrc/asn/TDD-Config.h index 9c66808a3..6f3127e54 100644 --- a/lte/rrc/asn/TDD-Config.h +++ b/lte/rrc/asn/TDD-Config.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _TDD_Config_H_ @@ -19,26 +20,26 @@ extern "C" { #endif /* Dependencies */ -typedef enum subframeAssignment { - subframeAssignment_sa0 = 0, - subframeAssignment_sa1 = 1, - subframeAssignment_sa2 = 2, - subframeAssignment_sa3 = 3, - subframeAssignment_sa4 = 4, - subframeAssignment_sa5 = 5, - subframeAssignment_sa6 = 6 -} e_subframeAssignment; -typedef enum specialSubframePatterns { - specialSubframePatterns_ssp0 = 0, - specialSubframePatterns_ssp1 = 1, - specialSubframePatterns_ssp2 = 2, - specialSubframePatterns_ssp3 = 3, - specialSubframePatterns_ssp4 = 4, - specialSubframePatterns_ssp5 = 5, - specialSubframePatterns_ssp6 = 6, - specialSubframePatterns_ssp7 = 7, - specialSubframePatterns_ssp8 = 8 -} e_specialSubframePatterns; +typedef enum TDD_Config__subframeAssignment { + TDD_Config__subframeAssignment_sa0 = 0, + TDD_Config__subframeAssignment_sa1 = 1, + TDD_Config__subframeAssignment_sa2 = 2, + TDD_Config__subframeAssignment_sa3 = 3, + TDD_Config__subframeAssignment_sa4 = 4, + TDD_Config__subframeAssignment_sa5 = 5, + TDD_Config__subframeAssignment_sa6 = 6 +} e_TDD_Config__subframeAssignment; +typedef enum TDD_Config__specialSubframePatterns { + TDD_Config__specialSubframePatterns_ssp0 = 0, + TDD_Config__specialSubframePatterns_ssp1 = 1, + TDD_Config__specialSubframePatterns_ssp2 = 2, + TDD_Config__specialSubframePatterns_ssp3 = 3, + TDD_Config__specialSubframePatterns_ssp4 = 4, + TDD_Config__specialSubframePatterns_ssp5 = 5, + TDD_Config__specialSubframePatterns_ssp6 = 6, + TDD_Config__specialSubframePatterns_ssp7 = 7, + TDD_Config__specialSubframePatterns_ssp8 = 8 +} e_TDD_Config__specialSubframePatterns; /* TDD-Config */ typedef struct TDD_Config { diff --git a/lte/rrc/asn/TMGI-r9.c b/lte/rrc/asn/TMGI-r9.c new file mode 100644 index 000000000..b3dcf0067 --- /dev/null +++ b/lte/rrc/asn/TMGI-r9.c @@ -0,0 +1,194 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TMGI-r9.h" + +static int +memb_plmn_Index_r9_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_serviceId_r9_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_plmn_Index_r9_constr_3 = { + { APC_CONSTRAINED, 3, 3, 1, 6 } /* (1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_plmn_Id_r9_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_serviceId_r9_constr_5 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_plmn_Id_r9_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct TMGI_r9__plmn_Id_r9, choice.plmn_Index_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_plmn_Index_r9_constraint_2, + &asn_PER_memb_plmn_Index_r9_constr_3, + 0, + "plmn-Index-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct TMGI_r9__plmn_Id_r9, choice.explicitValue_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "explicitValue-r9" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_plmn_Id_r9_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Index-r9 at 4094 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* explicitValue-r9 at 4096 */ +}; +static asn_CHOICE_specifics_t asn_SPC_plmn_Id_r9_specs_2 = { + sizeof(struct TMGI_r9__plmn_Id_r9), + offsetof(struct TMGI_r9__plmn_Id_r9, _asn_ctx), + offsetof(struct TMGI_r9__plmn_Id_r9, present), + sizeof(((struct TMGI_r9__plmn_Id_r9 *)0)->present), + asn_MAP_plmn_Id_r9_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_plmn_Id_r9_2 = { + "plmn-Id-r9", + "plmn-Id-r9", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_plmn_Id_r9_constr_2, + asn_MBR_plmn_Id_r9_2, + 2, /* Elements count */ + &asn_SPC_plmn_Id_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_TMGI_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TMGI_r9, plmn_Id_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_plmn_Id_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Id-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct TMGI_r9, serviceId_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_serviceId_r9_constraint_1, + &asn_PER_memb_serviceId_r9_constr_5, + 0, + "serviceId-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_TMGI_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_TMGI_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Id-r9 at 4094 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* serviceId-r9 at 4097 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_TMGI_r9_specs_1 = { + sizeof(struct TMGI_r9), + offsetof(struct TMGI_r9, _asn_ctx), + asn_MAP_TMGI_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_TMGI_r9 = { + "TMGI-r9", + "TMGI-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TMGI_r9_tags_1, + sizeof(asn_DEF_TMGI_r9_tags_1) + /sizeof(asn_DEF_TMGI_r9_tags_1[0]), /* 1 */ + asn_DEF_TMGI_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_TMGI_r9_tags_1) + /sizeof(asn_DEF_TMGI_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_TMGI_r9_1, + 2, /* Elements count */ + &asn_SPC_TMGI_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TMGI-r9.h b/lte/rrc/asn/TMGI-r9.h new file mode 100644 index 000000000..4179d6758 --- /dev/null +++ b/lte/rrc/asn/TMGI-r9.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TMGI_r9_H_ +#define _TMGI_r9_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "PLMN-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TMGI_r9__plmn_Id_r9_PR { + TMGI_r9__plmn_Id_r9_PR_NOTHING, /* No components present */ + TMGI_r9__plmn_Id_r9_PR_plmn_Index_r9, + TMGI_r9__plmn_Id_r9_PR_explicitValue_r9 +} TMGI_r9__plmn_Id_r9_PR; + +/* TMGI-r9 */ +typedef struct TMGI_r9 { + struct TMGI_r9__plmn_Id_r9 { + TMGI_r9__plmn_Id_r9_PR present; + union TMGI_r9__plmn_Id_r9_u { + long plmn_Index_r9; + PLMN_Identity_t explicitValue_r9; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } plmn_Id_r9; + OCTET_STRING_t serviceId_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TMGI_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TMGI_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _TMGI_r9_H_ */ +#include diff --git a/lte/rrc/asn/TPC-Index.c b/lte/rrc/asn/TPC-Index.c new file mode 100644 index 000000000..82c51fe7b --- /dev/null +++ b/lte/rrc/asn/TPC-Index.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TPC-Index.h" + +static int +memb_indexOfFormat3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_indexOfFormat3A_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 31)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_indexOfFormat3_constr_2 = { + { APC_CONSTRAINED, 4, 4, 1, 15 } /* (1..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_indexOfFormat3A_constr_3 = { + { APC_CONSTRAINED, 5, 5, 1, 31 } /* (1..31) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_TPC_Index_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_TPC_Index_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TPC_Index, choice.indexOfFormat3), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_indexOfFormat3_constraint_1, + &asn_PER_memb_indexOfFormat3_constr_2, + 0, + "indexOfFormat3" + }, + { ATF_NOFLAGS, 0, offsetof(struct TPC_Index, choice.indexOfFormat3A), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_indexOfFormat3A_constraint_1, + &asn_PER_memb_indexOfFormat3A_constr_3, + 0, + "indexOfFormat3A" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_TPC_Index_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* indexOfFormat3 at 2794 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* indexOfFormat3A at 2795 */ +}; +static asn_CHOICE_specifics_t asn_SPC_TPC_Index_specs_1 = { + sizeof(struct TPC_Index), + offsetof(struct TPC_Index, _asn_ctx), + offsetof(struct TPC_Index, present), + sizeof(((struct TPC_Index *)0)->present), + asn_MAP_TPC_Index_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_TPC_Index = { + "TPC-Index", + "TPC-Index", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_TPC_Index_constr_1, + asn_MBR_TPC_Index_1, + 2, /* Elements count */ + &asn_SPC_TPC_Index_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TPC-Index.h b/lte/rrc/asn/TPC-Index.h new file mode 100644 index 000000000..19f540ad5 --- /dev/null +++ b/lte/rrc/asn/TPC-Index.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TPC_Index_H_ +#define _TPC_Index_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TPC_Index_PR { + TPC_Index_PR_NOTHING, /* No components present */ + TPC_Index_PR_indexOfFormat3, + TPC_Index_PR_indexOfFormat3A +} TPC_Index_PR; + +/* TPC-Index */ +typedef struct TPC_Index { + TPC_Index_PR present; + union TPC_Index_u { + long indexOfFormat3; + long indexOfFormat3A; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TPC_Index_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TPC_Index; + +#ifdef __cplusplus +} +#endif + +#endif /* _TPC_Index_H_ */ +#include diff --git a/lte/rrc/asn/TPC-PDCCH-Config.c b/lte/rrc/asn/TPC-PDCCH-Config.c new file mode 100644 index 000000000..8c4861394 --- /dev/null +++ b/lte/rrc/asn/TPC-PDCCH-Config.c @@ -0,0 +1,170 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TPC-PDCCH-Config.h" + +static int +memb_tpc_RNTI_constraint_3(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 16)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_tpc_RNTI_constr_4 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_TPC_PDCCH_Config_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_setup_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct TPC_PDCCH_Config__setup, tpc_RNTI), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_tpc_RNTI_constraint_3, + &asn_PER_memb_tpc_RNTI_constr_4, + 0, + "tpc-RNTI" + }, + { ATF_NOFLAGS, 0, offsetof(struct TPC_PDCCH_Config__setup, tpc_Index), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_TPC_Index, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "tpc-Index" + }, +}; +static ber_tlv_tag_t asn_DEF_setup_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_setup_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* tpc-RNTI at 2788 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* tpc-Index at 2790 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_3 = { + sizeof(struct TPC_PDCCH_Config__setup), + offsetof(struct TPC_PDCCH_Config__setup, _asn_ctx), + asn_MAP_setup_tag2el_3, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_3 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_3, + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]) - 1, /* 1 */ + asn_DEF_setup_tags_3, /* Same as above */ + sizeof(asn_DEF_setup_tags_3) + /sizeof(asn_DEF_setup_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_3, + 2, /* Elements count */ + &asn_SPC_setup_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_TPC_PDCCH_Config_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TPC_PDCCH_Config, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct TPC_PDCCH_Config, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_TPC_PDCCH_Config_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release at 2786 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup at 2788 */ +}; +static asn_CHOICE_specifics_t asn_SPC_TPC_PDCCH_Config_specs_1 = { + sizeof(struct TPC_PDCCH_Config), + offsetof(struct TPC_PDCCH_Config, _asn_ctx), + offsetof(struct TPC_PDCCH_Config, present), + sizeof(((struct TPC_PDCCH_Config *)0)->present), + asn_MAP_TPC_PDCCH_Config_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_TPC_PDCCH_Config = { + "TPC-PDCCH-Config", + "TPC-PDCCH-Config", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_TPC_PDCCH_Config_constr_1, + asn_MBR_TPC_PDCCH_Config_1, + 2, /* Elements count */ + &asn_SPC_TPC_PDCCH_Config_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TPC-PDCCH-Config.h b/lte/rrc/asn/TPC-PDCCH-Config.h new file mode 100644 index 000000000..45ce9c33c --- /dev/null +++ b/lte/rrc/asn/TPC-PDCCH-Config.h @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TPC_PDCCH_Config_H_ +#define _TPC_PDCCH_Config_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "TPC-Index.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TPC_PDCCH_Config_PR { + TPC_PDCCH_Config_PR_NOTHING, /* No components present */ + TPC_PDCCH_Config_PR_release, + TPC_PDCCH_Config_PR_setup +} TPC_PDCCH_Config_PR; + +/* TPC-PDCCH-Config */ +typedef struct TPC_PDCCH_Config { + TPC_PDCCH_Config_PR present; + union TPC_PDCCH_Config_u { + NULL_t release; + struct TPC_PDCCH_Config__setup { + BIT_STRING_t tpc_RNTI; + TPC_Index_t tpc_Index; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TPC_PDCCH_Config_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TPC_PDCCH_Config; + +#ifdef __cplusplus +} +#endif + +#endif /* _TPC_PDCCH_Config_H_ */ +#include diff --git a/lte/rrc/asn/ThresholdCDMA2000.c b/lte/rrc/asn/ThresholdCDMA2000.c new file mode 100644 index 000000000..cfedc8876 --- /dev/null +++ b/lte/rrc/asn/ThresholdCDMA2000.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ThresholdCDMA2000.h" + +int +ThresholdCDMA2000_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ThresholdCDMA2000_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ThresholdCDMA2000_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ThresholdCDMA2000_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ThresholdCDMA2000_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ThresholdCDMA2000_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ThresholdCDMA2000_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ThresholdCDMA2000_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ThresholdCDMA2000_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ThresholdCDMA2000_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ThresholdCDMA2000_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ThresholdCDMA2000_constr_1 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ThresholdCDMA2000_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ThresholdCDMA2000 = { + "ThresholdCDMA2000", + "ThresholdCDMA2000", + ThresholdCDMA2000_free, + ThresholdCDMA2000_print, + ThresholdCDMA2000_constraint, + ThresholdCDMA2000_decode_ber, + ThresholdCDMA2000_encode_der, + ThresholdCDMA2000_decode_xer, + ThresholdCDMA2000_encode_xer, + ThresholdCDMA2000_decode_uper, + ThresholdCDMA2000_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ThresholdCDMA2000_tags_1, + sizeof(asn_DEF_ThresholdCDMA2000_tags_1) + /sizeof(asn_DEF_ThresholdCDMA2000_tags_1[0]), /* 1 */ + asn_DEF_ThresholdCDMA2000_tags_1, /* Same as above */ + sizeof(asn_DEF_ThresholdCDMA2000_tags_1) + /sizeof(asn_DEF_ThresholdCDMA2000_tags_1[0]), /* 1 */ + &asn_PER_type_ThresholdCDMA2000_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ThresholdCDMA2000.h b/lte/rrc/asn/ThresholdCDMA2000.h new file mode 100644 index 000000000..c63e87178 --- /dev/null +++ b/lte/rrc/asn/ThresholdCDMA2000.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ThresholdCDMA2000_H_ +#define _ThresholdCDMA2000_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ThresholdCDMA2000 */ +typedef long ThresholdCDMA2000_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ThresholdCDMA2000; +asn_struct_free_f ThresholdCDMA2000_free; +asn_struct_print_f ThresholdCDMA2000_print; +asn_constr_check_f ThresholdCDMA2000_constraint; +ber_type_decoder_f ThresholdCDMA2000_decode_ber; +der_type_encoder_f ThresholdCDMA2000_encode_der; +xer_type_decoder_f ThresholdCDMA2000_decode_xer; +xer_type_encoder_f ThresholdCDMA2000_encode_xer; +per_type_decoder_f ThresholdCDMA2000_decode_uper; +per_type_encoder_f ThresholdCDMA2000_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ThresholdCDMA2000_H_ */ +#include diff --git a/lte/rrc/asn/ThresholdEUTRA.c b/lte/rrc/asn/ThresholdEUTRA.c new file mode 100644 index 000000000..6b3c29ead --- /dev/null +++ b/lte/rrc/asn/ThresholdEUTRA.c @@ -0,0 +1,71 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ThresholdEUTRA.h" + +static asn_per_constraints_t asn_PER_type_ThresholdEUTRA_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ThresholdEUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ThresholdEUTRA, choice.threshold_RSRP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshold-RSRP" + }, + { ATF_NOFLAGS, 0, offsetof(struct ThresholdEUTRA, choice.threshold_RSRQ), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRQ_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "threshold-RSRQ" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_ThresholdEUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* threshold-RSRP at 3543 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* threshold-RSRQ at 3545 */ +}; +static asn_CHOICE_specifics_t asn_SPC_ThresholdEUTRA_specs_1 = { + sizeof(struct ThresholdEUTRA), + offsetof(struct ThresholdEUTRA, _asn_ctx), + offsetof(struct ThresholdEUTRA, present), + sizeof(((struct ThresholdEUTRA *)0)->present), + asn_MAP_ThresholdEUTRA_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ThresholdEUTRA = { + "ThresholdEUTRA", + "ThresholdEUTRA", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_ThresholdEUTRA_constr_1, + asn_MBR_ThresholdEUTRA_1, + 2, /* Elements count */ + &asn_SPC_ThresholdEUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ThresholdEUTRA.h b/lte/rrc/asn/ThresholdEUTRA.h new file mode 100644 index 000000000..3f3661b5b --- /dev/null +++ b/lte/rrc/asn/ThresholdEUTRA.h @@ -0,0 +1,50 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ThresholdEUTRA_H_ +#define _ThresholdEUTRA_H_ + + +#include + +/* Including external dependencies */ +#include "RSRP-Range.h" +#include "RSRQ-Range.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ThresholdEUTRA_PR { + ThresholdEUTRA_PR_NOTHING, /* No components present */ + ThresholdEUTRA_PR_threshold_RSRP, + ThresholdEUTRA_PR_threshold_RSRQ +} ThresholdEUTRA_PR; + +/* ThresholdEUTRA */ +typedef struct ThresholdEUTRA { + ThresholdEUTRA_PR present; + union ThresholdEUTRA_u { + RSRP_Range_t threshold_RSRP; + RSRQ_Range_t threshold_RSRQ; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ThresholdEUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ThresholdEUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _ThresholdEUTRA_H_ */ +#include diff --git a/lte/rrc/asn/ThresholdGERAN.c b/lte/rrc/asn/ThresholdGERAN.c new file mode 100644 index 000000000..1933fed9a --- /dev/null +++ b/lte/rrc/asn/ThresholdGERAN.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ThresholdGERAN.h" + +int +ThresholdGERAN_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 63)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +/* + * This type is implemented using NativeInteger, + * so here we adjust the DEF accordingly. + */ +static void +ThresholdGERAN_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeInteger.free_struct; + td->print_struct = asn_DEF_NativeInteger.print_struct; + td->ber_decoder = asn_DEF_NativeInteger.ber_decoder; + td->der_encoder = asn_DEF_NativeInteger.der_encoder; + td->xer_decoder = asn_DEF_NativeInteger.xer_decoder; + td->xer_encoder = asn_DEF_NativeInteger.xer_encoder; + td->uper_decoder = asn_DEF_NativeInteger.uper_decoder; + td->uper_encoder = asn_DEF_NativeInteger.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeInteger.per_constraints; + td->elements = asn_DEF_NativeInteger.elements; + td->elements_count = asn_DEF_NativeInteger.elements_count; + td->specifics = asn_DEF_NativeInteger.specifics; +} + +void +ThresholdGERAN_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +ThresholdGERAN_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +ThresholdGERAN_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +ThresholdGERAN_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +ThresholdGERAN_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +ThresholdGERAN_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +ThresholdGERAN_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +ThresholdGERAN_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + ThresholdGERAN_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_ThresholdGERAN_constr_1 = { + { APC_CONSTRAINED, 6, 6, 0, 63 } /* (0..63) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_ThresholdGERAN_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_ThresholdGERAN = { + "ThresholdGERAN", + "ThresholdGERAN", + ThresholdGERAN_free, + ThresholdGERAN_print, + ThresholdGERAN_constraint, + ThresholdGERAN_decode_ber, + ThresholdGERAN_encode_der, + ThresholdGERAN_decode_xer, + ThresholdGERAN_encode_xer, + ThresholdGERAN_decode_uper, + ThresholdGERAN_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ThresholdGERAN_tags_1, + sizeof(asn_DEF_ThresholdGERAN_tags_1) + /sizeof(asn_DEF_ThresholdGERAN_tags_1[0]), /* 1 */ + asn_DEF_ThresholdGERAN_tags_1, /* Same as above */ + sizeof(asn_DEF_ThresholdGERAN_tags_1) + /sizeof(asn_DEF_ThresholdGERAN_tags_1[0]), /* 1 */ + &asn_PER_type_ThresholdGERAN_constr_1, + 0, 0, /* No members */ + 0 /* No specifics */ +}; + diff --git a/lte/rrc/asn/ThresholdGERAN.h b/lte/rrc/asn/ThresholdGERAN.h new file mode 100644 index 000000000..ad28b973b --- /dev/null +++ b/lte/rrc/asn/ThresholdGERAN.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ThresholdGERAN_H_ +#define _ThresholdGERAN_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ThresholdGERAN */ +typedef long ThresholdGERAN_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ThresholdGERAN; +asn_struct_free_f ThresholdGERAN_free; +asn_struct_print_f ThresholdGERAN_print; +asn_constr_check_f ThresholdGERAN_constraint; +ber_type_decoder_f ThresholdGERAN_decode_ber; +der_type_encoder_f ThresholdGERAN_encode_der; +xer_type_decoder_f ThresholdGERAN_decode_xer; +xer_type_encoder_f ThresholdGERAN_encode_xer; +per_type_decoder_f ThresholdGERAN_decode_uper; +per_type_encoder_f ThresholdGERAN_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _ThresholdGERAN_H_ */ +#include diff --git a/lte/rrc/asn/ThresholdUTRA.c b/lte/rrc/asn/ThresholdUTRA.c new file mode 100644 index 000000000..0695e80be --- /dev/null +++ b/lte/rrc/asn/ThresholdUTRA.c @@ -0,0 +1,131 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ThresholdUTRA.h" + +static int +memb_utra_RSCP_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -5 && value <= 91)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_utra_EcN0_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 49)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_utra_RSCP_constr_2 = { + { APC_CONSTRAINED, 7, 7, -5, 91 } /* (-5..91) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_utra_EcN0_constr_3 = { + { APC_CONSTRAINED, 6, 6, 0, 49 } /* (0..49) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_ThresholdUTRA_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ThresholdUTRA_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ThresholdUTRA, choice.utra_RSCP), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_utra_RSCP_constraint_1, + &asn_PER_memb_utra_RSCP_constr_2, + 0, + "utra-RSCP" + }, + { ATF_NOFLAGS, 0, offsetof(struct ThresholdUTRA, choice.utra_EcN0), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_utra_EcN0_constraint_1, + &asn_PER_memb_utra_EcN0_constr_3, + 0, + "utra-EcN0" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_ThresholdUTRA_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* utra-RSCP at 3590 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* utra-EcN0 at 3591 */ +}; +static asn_CHOICE_specifics_t asn_SPC_ThresholdUTRA_specs_1 = { + sizeof(struct ThresholdUTRA), + offsetof(struct ThresholdUTRA, _asn_ctx), + offsetof(struct ThresholdUTRA, present), + sizeof(((struct ThresholdUTRA *)0)->present), + asn_MAP_ThresholdUTRA_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_ThresholdUTRA = { + "ThresholdUTRA", + "ThresholdUTRA", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_ThresholdUTRA_constr_1, + asn_MBR_ThresholdUTRA_1, + 2, /* Elements count */ + &asn_SPC_ThresholdUTRA_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ThresholdUTRA.h b/lte/rrc/asn/ThresholdUTRA.h new file mode 100644 index 000000000..58916d6c9 --- /dev/null +++ b/lte/rrc/asn/ThresholdUTRA.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ThresholdUTRA_H_ +#define _ThresholdUTRA_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ThresholdUTRA_PR { + ThresholdUTRA_PR_NOTHING, /* No components present */ + ThresholdUTRA_PR_utra_RSCP, + ThresholdUTRA_PR_utra_EcN0 +} ThresholdUTRA_PR; + +/* ThresholdUTRA */ +typedef struct ThresholdUTRA { + ThresholdUTRA_PR present; + union ThresholdUTRA_u { + long utra_RSCP; + long utra_EcN0; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ThresholdUTRA_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ThresholdUTRA; + +#ifdef __cplusplus +} +#endif + +#endif /* _ThresholdUTRA_H_ */ +#include diff --git a/lte/rrc/asn/TimeAlignmentTimer.c b/lte/rrc/asn/TimeAlignmentTimer.c new file mode 100644 index 000000000..d74895d66 --- /dev/null +++ b/lte/rrc/asn/TimeAlignmentTimer.c @@ -0,0 +1,158 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TimeAlignmentTimer.h" + +int +TimeAlignmentTimer_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +TimeAlignmentTimer_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +TimeAlignmentTimer_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +TimeAlignmentTimer_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +TimeAlignmentTimer_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +TimeAlignmentTimer_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +TimeAlignmentTimer_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +TimeAlignmentTimer_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +TimeAlignmentTimer_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +TimeAlignmentTimer_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + TimeAlignmentTimer_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_TimeAlignmentTimer_constr_1 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_TimeAlignmentTimer_value2enum_1[] = { + { 0, 5, "sf500" }, + { 1, 5, "sf750" }, + { 2, 6, "sf1280" }, + { 3, 6, "sf1920" }, + { 4, 6, "sf2560" }, + { 5, 6, "sf5120" }, + { 6, 7, "sf10240" }, + { 7, 8, "infinity" } +}; +static unsigned int asn_MAP_TimeAlignmentTimer_enum2value_1[] = { + 7, /* infinity(7) */ + 6, /* sf10240(6) */ + 2, /* sf1280(2) */ + 3, /* sf1920(3) */ + 4, /* sf2560(4) */ + 0, /* sf500(0) */ + 5, /* sf5120(5) */ + 1 /* sf750(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_TimeAlignmentTimer_specs_1 = { + asn_MAP_TimeAlignmentTimer_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeAlignmentTimer_enum2value_1, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_TimeAlignmentTimer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeAlignmentTimer = { + "TimeAlignmentTimer", + "TimeAlignmentTimer", + TimeAlignmentTimer_free, + TimeAlignmentTimer_print, + TimeAlignmentTimer_constraint, + TimeAlignmentTimer_decode_ber, + TimeAlignmentTimer_encode_der, + TimeAlignmentTimer_decode_xer, + TimeAlignmentTimer_encode_xer, + TimeAlignmentTimer_decode_uper, + TimeAlignmentTimer_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TimeAlignmentTimer_tags_1, + sizeof(asn_DEF_TimeAlignmentTimer_tags_1) + /sizeof(asn_DEF_TimeAlignmentTimer_tags_1[0]), /* 1 */ + asn_DEF_TimeAlignmentTimer_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeAlignmentTimer_tags_1) + /sizeof(asn_DEF_TimeAlignmentTimer_tags_1[0]), /* 1 */ + &asn_PER_type_TimeAlignmentTimer_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeAlignmentTimer_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TimeAlignmentTimer.h b/lte/rrc/asn/TimeAlignmentTimer.h new file mode 100644 index 000000000..f1bb36d80 --- /dev/null +++ b/lte/rrc/asn/TimeAlignmentTimer.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TimeAlignmentTimer_H_ +#define _TimeAlignmentTimer_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeAlignmentTimer { + TimeAlignmentTimer_sf500 = 0, + TimeAlignmentTimer_sf750 = 1, + TimeAlignmentTimer_sf1280 = 2, + TimeAlignmentTimer_sf1920 = 3, + TimeAlignmentTimer_sf2560 = 4, + TimeAlignmentTimer_sf5120 = 5, + TimeAlignmentTimer_sf10240 = 6, + TimeAlignmentTimer_infinity = 7 +} e_TimeAlignmentTimer; + +/* TimeAlignmentTimer */ +typedef long TimeAlignmentTimer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeAlignmentTimer; +asn_struct_free_f TimeAlignmentTimer_free; +asn_struct_print_f TimeAlignmentTimer_print; +asn_constr_check_f TimeAlignmentTimer_constraint; +ber_type_decoder_f TimeAlignmentTimer_decode_ber; +der_type_encoder_f TimeAlignmentTimer_encode_der; +xer_type_decoder_f TimeAlignmentTimer_decode_xer; +xer_type_encoder_f TimeAlignmentTimer_encode_xer; +per_type_decoder_f TimeAlignmentTimer_decode_uper; +per_type_encoder_f TimeAlignmentTimer_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeAlignmentTimer_H_ */ +#include diff --git a/lte/rrc/asn/TimeToTrigger.c b/lte/rrc/asn/TimeToTrigger.c new file mode 100644 index 000000000..30baacaec --- /dev/null +++ b/lte/rrc/asn/TimeToTrigger.c @@ -0,0 +1,174 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TimeToTrigger.h" + +int +TimeToTrigger_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +TimeToTrigger_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +TimeToTrigger_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +TimeToTrigger_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +TimeToTrigger_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +TimeToTrigger_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +TimeToTrigger_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +TimeToTrigger_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +TimeToTrigger_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +TimeToTrigger_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + TimeToTrigger_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_TimeToTrigger_constr_1 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_TimeToTrigger_value2enum_1[] = { + { 0, 3, "ms0" }, + { 1, 4, "ms40" }, + { 2, 4, "ms64" }, + { 3, 4, "ms80" }, + { 4, 5, "ms100" }, + { 5, 5, "ms128" }, + { 6, 5, "ms160" }, + { 7, 5, "ms256" }, + { 8, 5, "ms320" }, + { 9, 5, "ms480" }, + { 10, 5, "ms512" }, + { 11, 5, "ms640" }, + { 12, 6, "ms1024" }, + { 13, 6, "ms1280" }, + { 14, 6, "ms2560" }, + { 15, 6, "ms5120" } +}; +static unsigned int asn_MAP_TimeToTrigger_enum2value_1[] = { + 0, /* ms0(0) */ + 4, /* ms100(4) */ + 12, /* ms1024(12) */ + 5, /* ms128(5) */ + 13, /* ms1280(13) */ + 6, /* ms160(6) */ + 7, /* ms256(7) */ + 14, /* ms2560(14) */ + 8, /* ms320(8) */ + 1, /* ms40(1) */ + 9, /* ms480(9) */ + 10, /* ms512(10) */ + 15, /* ms5120(15) */ + 2, /* ms64(2) */ + 11, /* ms640(11) */ + 3 /* ms80(3) */ +}; +static asn_INTEGER_specifics_t asn_SPC_TimeToTrigger_specs_1 = { + asn_MAP_TimeToTrigger_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_TimeToTrigger_enum2value_1, /* N => "tag"; sorted by N */ + 16, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_TimeToTrigger_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_TimeToTrigger = { + "TimeToTrigger", + "TimeToTrigger", + TimeToTrigger_free, + TimeToTrigger_print, + TimeToTrigger_constraint, + TimeToTrigger_decode_ber, + TimeToTrigger_encode_der, + TimeToTrigger_decode_xer, + TimeToTrigger_encode_xer, + TimeToTrigger_decode_uper, + TimeToTrigger_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TimeToTrigger_tags_1, + sizeof(asn_DEF_TimeToTrigger_tags_1) + /sizeof(asn_DEF_TimeToTrigger_tags_1[0]), /* 1 */ + asn_DEF_TimeToTrigger_tags_1, /* Same as above */ + sizeof(asn_DEF_TimeToTrigger_tags_1) + /sizeof(asn_DEF_TimeToTrigger_tags_1[0]), /* 1 */ + &asn_PER_type_TimeToTrigger_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_TimeToTrigger_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TimeToTrigger.h b/lte/rrc/asn/TimeToTrigger.h new file mode 100644 index 000000000..f6d5e54d2 --- /dev/null +++ b/lte/rrc/asn/TimeToTrigger.h @@ -0,0 +1,61 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TimeToTrigger_H_ +#define _TimeToTrigger_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum TimeToTrigger { + TimeToTrigger_ms0 = 0, + TimeToTrigger_ms40 = 1, + TimeToTrigger_ms64 = 2, + TimeToTrigger_ms80 = 3, + TimeToTrigger_ms100 = 4, + TimeToTrigger_ms128 = 5, + TimeToTrigger_ms160 = 6, + TimeToTrigger_ms256 = 7, + TimeToTrigger_ms320 = 8, + TimeToTrigger_ms480 = 9, + TimeToTrigger_ms512 = 10, + TimeToTrigger_ms640 = 11, + TimeToTrigger_ms1024 = 12, + TimeToTrigger_ms1280 = 13, + TimeToTrigger_ms2560 = 14, + TimeToTrigger_ms5120 = 15 +} e_TimeToTrigger; + +/* TimeToTrigger */ +typedef long TimeToTrigger_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TimeToTrigger; +asn_struct_free_f TimeToTrigger_free; +asn_struct_print_f TimeToTrigger_print; +asn_constr_check_f TimeToTrigger_constraint; +ber_type_decoder_f TimeToTrigger_decode_ber; +der_type_encoder_f TimeToTrigger_encode_der; +xer_type_decoder_f TimeToTrigger_decode_xer; +xer_type_encoder_f TimeToTrigger_encode_xer; +per_type_decoder_f TimeToTrigger_decode_uper; +per_type_encoder_f TimeToTrigger_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _TimeToTrigger_H_ */ +#include diff --git a/lte/rrc/asn/TraceReference-r10.c b/lte/rrc/asn/TraceReference-r10.c new file mode 100644 index 000000000..06e23e1a0 --- /dev/null +++ b/lte/rrc/asn/TraceReference-r10.c @@ -0,0 +1,101 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TraceReference-r10.h" + +static int +memb_traceId_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + size = st->size; + + if((size == 3)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_traceId_r10_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 3, 3 } /* (SIZE(3..3)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_TraceReference_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct TraceReference_r10, plmn_Identity_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PLMN_Identity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "plmn-Identity-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct TraceReference_r10, traceId_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_traceId_r10_constraint_1, + &asn_PER_memb_traceId_r10_constr_3, + 0, + "traceId-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_TraceReference_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_TraceReference_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* plmn-Identity-r10 at 3712 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* traceId-r10 at 3713 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_TraceReference_r10_specs_1 = { + sizeof(struct TraceReference_r10), + offsetof(struct TraceReference_r10, _asn_ctx), + asn_MAP_TraceReference_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_TraceReference_r10 = { + "TraceReference-r10", + "TraceReference-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TraceReference_r10_tags_1, + sizeof(asn_DEF_TraceReference_r10_tags_1) + /sizeof(asn_DEF_TraceReference_r10_tags_1[0]), /* 1 */ + asn_DEF_TraceReference_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_TraceReference_r10_tags_1) + /sizeof(asn_DEF_TraceReference_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_TraceReference_r10_1, + 2, /* Elements count */ + &asn_SPC_TraceReference_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TraceReference-r10.h b/lte/rrc/asn/TraceReference-r10.h new file mode 100644 index 000000000..12c8fcd2c --- /dev/null +++ b/lte/rrc/asn/TraceReference-r10.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TraceReference_r10_H_ +#define _TraceReference_r10_H_ + + +#include + +/* Including external dependencies */ +#include "PLMN-Identity.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* TraceReference-r10 */ +typedef struct TraceReference_r10 { + PLMN_Identity_t plmn_Identity_r10; + OCTET_STRING_t traceId_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TraceReference_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TraceReference_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _TraceReference_r10_H_ */ +#include diff --git a/lte/rrc/asn/TrackingAreaCode.c b/lte/rrc/asn/TrackingAreaCode.c index 5589e9e23..98b9ed5e4 100644 --- a/lte/rrc/asn/TrackingAreaCode.c +++ b/lte/rrc/asn/TrackingAreaCode.c @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #include "TrackingAreaCode.h" @@ -45,7 +46,6 @@ static void TrackingAreaCode_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { td->free_struct = asn_DEF_BIT_STRING.free_struct; td->print_struct = asn_DEF_BIT_STRING.print_struct; - td->check_constraints = asn_DEF_BIT_STRING.check_constraints; td->ber_decoder = asn_DEF_BIT_STRING.ber_decoder; td->der_encoder = asn_DEF_BIT_STRING.der_encoder; td->xer_decoder = asn_DEF_BIT_STRING.xer_decoder; @@ -118,12 +118,12 @@ TrackingAreaCode_encode_uper(asn_TYPE_descriptor_t *td, return td->uper_encoder(td, constraints, structure, per_out); } -static asn_per_constraints_t asn_PER_type_TrackingAreaCode_constr_1 GCC_NOTUSED = { +static asn_per_constraints_t asn_PER_type_TrackingAreaCode_constr_1 = { { APC_UNCONSTRAINED, -1, -1, 0, 0 }, { APC_CONSTRAINED, 0, 0, 16, 16 } /* (SIZE(16..16)) */, 0, 0 /* No PER value map */ }; -static const ber_tlv_tag_t asn_DEF_TrackingAreaCode_tags_1[] = { +static ber_tlv_tag_t asn_DEF_TrackingAreaCode_tags_1[] = { (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)) }; asn_TYPE_descriptor_t asn_DEF_TrackingAreaCode = { diff --git a/lte/rrc/asn/TrackingAreaCode.h b/lte/rrc/asn/TrackingAreaCode.h index aa055f5e4..6a8ea91c2 100644 --- a/lte/rrc/asn/TrackingAreaCode.h +++ b/lte/rrc/asn/TrackingAreaCode.h @@ -1,7 +1,8 @@ /* - * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) * From ASN.1 module "EUTRA-RRC-Definitions" - * found in "EUTRA-RRC-Definitions.asn" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` */ #ifndef _TrackingAreaCode_H_ diff --git a/lte/rrc/asn/TrackingAreaCodeList-r10.c b/lte/rrc/asn/TrackingAreaCodeList-r10.c new file mode 100644 index 000000000..564294ff1 --- /dev/null +++ b/lte/rrc/asn/TrackingAreaCodeList-r10.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "TrackingAreaCodeList-r10.h" + +static asn_per_constraints_t asn_PER_type_TrackingAreaCodeList_r10_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_TrackingAreaCodeList_r10_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (3 << 2)), + 0, + &asn_DEF_TrackingAreaCode, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_TrackingAreaCodeList_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_TrackingAreaCodeList_r10_specs_1 = { + sizeof(struct TrackingAreaCodeList_r10), + offsetof(struct TrackingAreaCodeList_r10, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_TrackingAreaCodeList_r10 = { + "TrackingAreaCodeList-r10", + "TrackingAreaCodeList-r10", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_TrackingAreaCodeList_r10_tags_1, + sizeof(asn_DEF_TrackingAreaCodeList_r10_tags_1) + /sizeof(asn_DEF_TrackingAreaCodeList_r10_tags_1[0]), /* 1 */ + asn_DEF_TrackingAreaCodeList_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_TrackingAreaCodeList_r10_tags_1) + /sizeof(asn_DEF_TrackingAreaCodeList_r10_tags_1[0]), /* 1 */ + &asn_PER_type_TrackingAreaCodeList_r10_constr_1, + asn_MBR_TrackingAreaCodeList_r10_1, + 1, /* Single element */ + &asn_SPC_TrackingAreaCodeList_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/TrackingAreaCodeList-r10.h b/lte/rrc/asn/TrackingAreaCodeList-r10.h new file mode 100644 index 000000000..692bd83ca --- /dev/null +++ b/lte/rrc/asn/TrackingAreaCodeList-r10.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _TrackingAreaCodeList_r10_H_ +#define _TrackingAreaCodeList_r10_H_ + + +#include + +/* Including external dependencies */ +#include "TrackingAreaCode.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* TrackingAreaCodeList-r10 */ +typedef struct TrackingAreaCodeList_r10 { + A_SEQUENCE_OF(TrackingAreaCode_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} TrackingAreaCodeList_r10_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_TrackingAreaCodeList_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _TrackingAreaCodeList_r10_H_ */ +#include diff --git a/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.c b/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.c new file mode 100644 index 000000000..eb469283a --- /dev/null +++ b/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.c @@ -0,0 +1,346 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-BasedNetwPerfMeasParameters-r10.h" + +static int +loggedMeasurementsIdle_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +loggedMeasurementsIdle_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +loggedMeasurementsIdle_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +loggedMeasurementsIdle_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +loggedMeasurementsIdle_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +loggedMeasurementsIdle_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +loggedMeasurementsIdle_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +loggedMeasurementsIdle_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +loggedMeasurementsIdle_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + loggedMeasurementsIdle_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +standaloneGNSS_Location_r10_4_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +standaloneGNSS_Location_r10_4_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +standaloneGNSS_Location_r10_4_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +standaloneGNSS_Location_r10_4_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +standaloneGNSS_Location_r10_4_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +standaloneGNSS_Location_r10_4_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +standaloneGNSS_Location_r10_4_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +standaloneGNSS_Location_r10_4_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +standaloneGNSS_Location_r10_4_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + standaloneGNSS_Location_r10_4_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_loggedMeasurementsIdle_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_standaloneGNSS_Location_r10_constr_4 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_loggedMeasurementsIdle_r10_value2enum_2[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_loggedMeasurementsIdle_r10_enum2value_2[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_loggedMeasurementsIdle_r10_specs_2 = { + asn_MAP_loggedMeasurementsIdle_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_loggedMeasurementsIdle_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_loggedMeasurementsIdle_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_loggedMeasurementsIdle_r10_2 = { + "loggedMeasurementsIdle-r10", + "loggedMeasurementsIdle-r10", + loggedMeasurementsIdle_r10_2_free, + loggedMeasurementsIdle_r10_2_print, + loggedMeasurementsIdle_r10_2_constraint, + loggedMeasurementsIdle_r10_2_decode_ber, + loggedMeasurementsIdle_r10_2_encode_der, + loggedMeasurementsIdle_r10_2_decode_xer, + loggedMeasurementsIdle_r10_2_encode_xer, + loggedMeasurementsIdle_r10_2_decode_uper, + loggedMeasurementsIdle_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_loggedMeasurementsIdle_r10_tags_2, + sizeof(asn_DEF_loggedMeasurementsIdle_r10_tags_2) + /sizeof(asn_DEF_loggedMeasurementsIdle_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_loggedMeasurementsIdle_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_loggedMeasurementsIdle_r10_tags_2) + /sizeof(asn_DEF_loggedMeasurementsIdle_r10_tags_2[0]), /* 2 */ + &asn_PER_type_loggedMeasurementsIdle_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_loggedMeasurementsIdle_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_standaloneGNSS_Location_r10_value2enum_4[] = { + { 0, 9, "supported" } +}; +static unsigned int asn_MAP_standaloneGNSS_Location_r10_enum2value_4[] = { + 0 /* supported(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_standaloneGNSS_Location_r10_specs_4 = { + asn_MAP_standaloneGNSS_Location_r10_value2enum_4, /* "tag" => N; sorted by tag */ + asn_MAP_standaloneGNSS_Location_r10_enum2value_4, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_standaloneGNSS_Location_r10_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_standaloneGNSS_Location_r10_4 = { + "standaloneGNSS-Location-r10", + "standaloneGNSS-Location-r10", + standaloneGNSS_Location_r10_4_free, + standaloneGNSS_Location_r10_4_print, + standaloneGNSS_Location_r10_4_constraint, + standaloneGNSS_Location_r10_4_decode_ber, + standaloneGNSS_Location_r10_4_encode_der, + standaloneGNSS_Location_r10_4_decode_xer, + standaloneGNSS_Location_r10_4_encode_xer, + standaloneGNSS_Location_r10_4_decode_uper, + standaloneGNSS_Location_r10_4_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_standaloneGNSS_Location_r10_tags_4, + sizeof(asn_DEF_standaloneGNSS_Location_r10_tags_4) + /sizeof(asn_DEF_standaloneGNSS_Location_r10_tags_4[0]) - 1, /* 1 */ + asn_DEF_standaloneGNSS_Location_r10_tags_4, /* Same as above */ + sizeof(asn_DEF_standaloneGNSS_Location_r10_tags_4) + /sizeof(asn_DEF_standaloneGNSS_Location_r10_tags_4[0]), /* 2 */ + &asn_PER_type_standaloneGNSS_Location_r10_constr_4, + 0, 0, /* Defined elsewhere */ + &asn_SPC_standaloneGNSS_Location_r10_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UE_BasedNetwPerfMeasParameters_r10_1[] = { + { ATF_POINTER, 2, offsetof(struct UE_BasedNetwPerfMeasParameters_r10, loggedMeasurementsIdle_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_loggedMeasurementsIdle_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "loggedMeasurementsIdle-r10" + }, + { ATF_POINTER, 1, offsetof(struct UE_BasedNetwPerfMeasParameters_r10, standaloneGNSS_Location_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_standaloneGNSS_Location_r10_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "standaloneGNSS-Location-r10" + }, +}; +static int asn_MAP_UE_BasedNetwPerfMeasParameters_r10_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_BasedNetwPerfMeasParameters_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* loggedMeasurementsIdle-r10 at 4009 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* standaloneGNSS-Location-r10 at 4010 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_BasedNetwPerfMeasParameters_r10_specs_1 = { + sizeof(struct UE_BasedNetwPerfMeasParameters_r10), + offsetof(struct UE_BasedNetwPerfMeasParameters_r10, _asn_ctx), + asn_MAP_UE_BasedNetwPerfMeasParameters_r10_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UE_BasedNetwPerfMeasParameters_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_BasedNetwPerfMeasParameters_r10 = { + "UE-BasedNetwPerfMeasParameters-r10", + "UE-BasedNetwPerfMeasParameters-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1, + sizeof(asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1) + /sizeof(asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1[0]), /* 1 */ + asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1) + /sizeof(asn_DEF_UE_BasedNetwPerfMeasParameters_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_BasedNetwPerfMeasParameters_r10_1, + 2, /* Elements count */ + &asn_SPC_UE_BasedNetwPerfMeasParameters_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h b/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h new file mode 100644 index 000000000..a1251892e --- /dev/null +++ b/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_BasedNetwPerfMeasParameters_r10_H_ +#define _UE_BasedNetwPerfMeasParameters_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_BasedNetwPerfMeasParameters_r10__loggedMeasurementsIdle_r10 { + UE_BasedNetwPerfMeasParameters_r10__loggedMeasurementsIdle_r10_supported = 0 +} e_UE_BasedNetwPerfMeasParameters_r10__loggedMeasurementsIdle_r10; +typedef enum UE_BasedNetwPerfMeasParameters_r10__standaloneGNSS_Location_r10 { + UE_BasedNetwPerfMeasParameters_r10__standaloneGNSS_Location_r10_supported = 0 +} e_UE_BasedNetwPerfMeasParameters_r10__standaloneGNSS_Location_r10; + +/* UE-BasedNetwPerfMeasParameters-r10 */ +typedef struct UE_BasedNetwPerfMeasParameters_r10 { + long *loggedMeasurementsIdle_r10 /* OPTIONAL */; + long *standaloneGNSS_Location_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_BasedNetwPerfMeasParameters_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_loggedMeasurementsIdle_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_standaloneGNSS_Location_r10_4; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UE_BasedNetwPerfMeasParameters_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_BasedNetwPerfMeasParameters_r10_H_ */ +#include diff --git a/lte/rrc/asn/UE-CapabilityRAT-Container.c b/lte/rrc/asn/UE-CapabilityRAT-Container.c new file mode 100644 index 000000000..e1475aaa0 --- /dev/null +++ b/lte/rrc/asn/UE-CapabilityRAT-Container.c @@ -0,0 +1,70 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-CapabilityRAT-Container.h" + +static asn_TYPE_member_t asn_MBR_UE_CapabilityRAT_Container_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_CapabilityRAT_Container, rat_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RAT_Type, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rat-Type" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_CapabilityRAT_Container, ueCapabilityRAT_Container), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueCapabilityRAT-Container" + }, +}; +static ber_tlv_tag_t asn_DEF_UE_CapabilityRAT_Container_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_CapabilityRAT_Container_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rat-Type at 3720 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* ueCapabilityRAT-Container at 3721 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_CapabilityRAT_Container_specs_1 = { + sizeof(struct UE_CapabilityRAT_Container), + offsetof(struct UE_CapabilityRAT_Container, _asn_ctx), + asn_MAP_UE_CapabilityRAT_Container_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_CapabilityRAT_Container = { + "UE-CapabilityRAT-Container", + "UE-CapabilityRAT-Container", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_CapabilityRAT_Container_tags_1, + sizeof(asn_DEF_UE_CapabilityRAT_Container_tags_1) + /sizeof(asn_DEF_UE_CapabilityRAT_Container_tags_1[0]), /* 1 */ + asn_DEF_UE_CapabilityRAT_Container_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_CapabilityRAT_Container_tags_1) + /sizeof(asn_DEF_UE_CapabilityRAT_Container_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_CapabilityRAT_Container_1, + 2, /* Elements count */ + &asn_SPC_UE_CapabilityRAT_Container_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-CapabilityRAT-Container.h b/lte/rrc/asn/UE-CapabilityRAT-Container.h new file mode 100644 index 000000000..40fed9edb --- /dev/null +++ b/lte/rrc/asn/UE-CapabilityRAT-Container.h @@ -0,0 +1,40 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_CapabilityRAT_Container_H_ +#define _UE_CapabilityRAT_Container_H_ + + +#include + +/* Including external dependencies */ +#include "RAT-Type.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-CapabilityRAT-Container */ +typedef struct UE_CapabilityRAT_Container { + RAT_Type_t rat_Type; + OCTET_STRING_t ueCapabilityRAT_Container; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_CapabilityRAT_Container_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_CapabilityRAT_Container; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_CapabilityRAT_Container_H_ */ +#include diff --git a/lte/rrc/asn/UE-CapabilityRAT-ContainerList.c b/lte/rrc/asn/UE-CapabilityRAT-ContainerList.c new file mode 100644 index 000000000..aa65986c8 --- /dev/null +++ b/lte/rrc/asn/UE-CapabilityRAT-ContainerList.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-CapabilityRAT-ContainerList.h" + +static asn_per_constraints_t asn_PER_type_UE_CapabilityRAT_ContainerList_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 4, 4, 0, 8 } /* (SIZE(0..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_UE_CapabilityRAT_ContainerList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_UE_CapabilityRAT_Container, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_UE_CapabilityRAT_ContainerList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_UE_CapabilityRAT_ContainerList_specs_1 = { + sizeof(struct UE_CapabilityRAT_ContainerList), + offsetof(struct UE_CapabilityRAT_ContainerList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_CapabilityRAT_ContainerList = { + "UE-CapabilityRAT-ContainerList", + "UE-CapabilityRAT-ContainerList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_CapabilityRAT_ContainerList_tags_1, + sizeof(asn_DEF_UE_CapabilityRAT_ContainerList_tags_1) + /sizeof(asn_DEF_UE_CapabilityRAT_ContainerList_tags_1[0]), /* 1 */ + asn_DEF_UE_CapabilityRAT_ContainerList_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_CapabilityRAT_ContainerList_tags_1) + /sizeof(asn_DEF_UE_CapabilityRAT_ContainerList_tags_1[0]), /* 1 */ + &asn_PER_type_UE_CapabilityRAT_ContainerList_constr_1, + asn_MBR_UE_CapabilityRAT_ContainerList_1, + 1, /* Single element */ + &asn_SPC_UE_CapabilityRAT_ContainerList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-CapabilityRAT-ContainerList.h b/lte/rrc/asn/UE-CapabilityRAT-ContainerList.h new file mode 100644 index 000000000..0ba46f6dc --- /dev/null +++ b/lte/rrc/asn/UE-CapabilityRAT-ContainerList.h @@ -0,0 +1,44 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_CapabilityRAT_ContainerList_H_ +#define _UE_CapabilityRAT_ContainerList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UE_CapabilityRAT_Container; + +/* UE-CapabilityRAT-ContainerList */ +typedef struct UE_CapabilityRAT_ContainerList { + A_SEQUENCE_OF(struct UE_CapabilityRAT_Container) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_CapabilityRAT_ContainerList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_CapabilityRAT_ContainerList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UE-CapabilityRAT-Container.h" + +#endif /* _UE_CapabilityRAT_ContainerList_H_ */ +#include diff --git a/lte/rrc/asn/UE-CapabilityRequest.c b/lte/rrc/asn/UE-CapabilityRequest.c new file mode 100644 index 000000000..c296cdc89 --- /dev/null +++ b/lte/rrc/asn/UE-CapabilityRequest.c @@ -0,0 +1,58 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-CapabilityRequest.h" + +static asn_per_constraints_t asn_PER_type_UE_CapabilityRequest_constr_1 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 3, 3, 1, 8 } /* (SIZE(1..8)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_UE_CapabilityRequest_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)), + 0, + &asn_DEF_RAT_Type, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static ber_tlv_tag_t asn_DEF_UE_CapabilityRequest_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_UE_CapabilityRequest_specs_1 = { + sizeof(struct UE_CapabilityRequest), + offsetof(struct UE_CapabilityRequest, _asn_ctx), + 1, /* XER encoding is XMLValueList */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_CapabilityRequest = { + "UE-CapabilityRequest", + "UE-CapabilityRequest", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_CapabilityRequest_tags_1, + sizeof(asn_DEF_UE_CapabilityRequest_tags_1) + /sizeof(asn_DEF_UE_CapabilityRequest_tags_1[0]), /* 1 */ + asn_DEF_UE_CapabilityRequest_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_CapabilityRequest_tags_1) + /sizeof(asn_DEF_UE_CapabilityRequest_tags_1[0]), /* 1 */ + &asn_PER_type_UE_CapabilityRequest_constr_1, + asn_MBR_UE_CapabilityRequest_1, + 1, /* Single element */ + &asn_SPC_UE_CapabilityRequest_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-CapabilityRequest.h b/lte/rrc/asn/UE-CapabilityRequest.h new file mode 100644 index 000000000..ef218a10b --- /dev/null +++ b/lte/rrc/asn/UE-CapabilityRequest.h @@ -0,0 +1,39 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_CapabilityRequest_H_ +#define _UE_CapabilityRequest_H_ + + +#include + +/* Including external dependencies */ +#include "RAT-Type.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UE-CapabilityRequest */ +typedef struct UE_CapabilityRequest { + A_SEQUENCE_OF(RAT_Type_t) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_CapabilityRequest_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_CapabilityRequest; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_CapabilityRequest_H_ */ +#include diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c b/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c new file mode 100644 index 000000000..04f902676 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c @@ -0,0 +1,246 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-EUTRA-Capability-v1020-IEs.h" + +static int +memb_ue_Category_v1020_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 6 && value <= 8)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_featureGroupIndicators_v1020_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ue_Category_v1020_constr_2 = { + { APC_CONSTRAINED, 2, 2, 6, 8 } /* (6..8) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_featureGroupIndicators_v1020_constr_6 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_10 = { + sizeof(struct UE_EUTRA_Capability_v1020_IEs__nonCriticalExtension), + offsetof(struct UE_EUTRA_Capability_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_10 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_10, + sizeof(asn_DEF_nonCriticalExtension_tags_10) + /sizeof(asn_DEF_nonCriticalExtension_tags_10[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_10, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_10) + /sizeof(asn_DEF_nonCriticalExtension_tags_10[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UE_EUTRA_Capability_v1020_IEs_1[] = { + { ATF_POINTER, 9, offsetof(struct UE_EUTRA_Capability_v1020_IEs, ue_Category_v1020), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ue_Category_v1020_constraint_1, + &asn_PER_memb_ue_Category_v1020_constr_2, + 0, + "ue-Category-v1020" + }, + { ATF_POINTER, 8, offsetof(struct UE_EUTRA_Capability_v1020_IEs, phyLayerParameters_v1020), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhyLayerParameters_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phyLayerParameters-v1020" + }, + { ATF_POINTER, 7, offsetof(struct UE_EUTRA_Capability_v1020_IEs, rf_Parameters_v1020), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RF_Parameters_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rf-Parameters-v1020" + }, + { ATF_POINTER, 6, offsetof(struct UE_EUTRA_Capability_v1020_IEs, measParameters_v1020), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasParameters_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measParameters-v1020" + }, + { ATF_POINTER, 5, offsetof(struct UE_EUTRA_Capability_v1020_IEs, featureGroupIndicators_v1020), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_featureGroupIndicators_v1020_constraint_1, + &asn_PER_memb_featureGroupIndicators_v1020_constr_6, + 0, + "featureGroupIndicators-v1020" + }, + { ATF_POINTER, 4, offsetof(struct UE_EUTRA_Capability_v1020_IEs, interRAT_ParametersCDMA2000_v1020), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-ParametersCDMA2000-v1020" + }, + { ATF_POINTER, 3, offsetof(struct UE_EUTRA_Capability_v1020_IEs, ue_BasedNetwPerfMeasParameters_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_BasedNetwPerfMeasParameters_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-BasedNetwPerfMeasParameters-r10" + }, + { ATF_POINTER, 2, offsetof(struct UE_EUTRA_Capability_v1020_IEs, interRAT_ParametersUTRA_TDD_v1020), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersUTRA_TDD_v1020, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-ParametersUTRA-TDD-v1020" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + 0, + &asn_DEF_nonCriticalExtension_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UE_EUTRA_Capability_v1020_IEs_oms_1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; +static ber_tlv_tag_t asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_EUTRA_Capability_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-Category-v1020 at 3763 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* phyLayerParameters-v1020 at 3764 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rf-Parameters-v1020 at 3765 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* measParameters-v1020 at 3766 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* featureGroupIndicators-v1020 at 3767 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* interRAT-ParametersCDMA2000-v1020 at 3768 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* ue-BasedNetwPerfMeasParameters-r10 at 3769 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* interRAT-ParametersUTRA-TDD-v1020 at 3770 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* nonCriticalExtension at 3771 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_EUTRA_Capability_v1020_IEs_specs_1 = { + sizeof(struct UE_EUTRA_Capability_v1020_IEs), + offsetof(struct UE_EUTRA_Capability_v1020_IEs, _asn_ctx), + asn_MAP_UE_EUTRA_Capability_v1020_IEs_tag2el_1, + 9, /* Count of tags in the map */ + asn_MAP_UE_EUTRA_Capability_v1020_IEs_oms_1, /* Optional members */ + 9, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability_v1020_IEs = { + "UE-EUTRA-Capability-v1020-IEs", + "UE-EUTRA-Capability-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1, + sizeof(asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_EUTRA_Capability_v1020_IEs_1, + 9, /* Elements count */ + &asn_SPC_UE_EUTRA_Capability_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h b/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h new file mode 100644 index 000000000..951c8e994 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_EUTRA_Capability_v1020_IEs_H_ +#define _UE_EUTRA_Capability_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct PhyLayerParameters_v1020; +struct RF_Parameters_v1020; +struct MeasParameters_v1020; +struct IRAT_ParametersCDMA2000_1XRTT_v1020; +struct UE_BasedNetwPerfMeasParameters_r10; +struct IRAT_ParametersUTRA_TDD_v1020; + +/* UE-EUTRA-Capability-v1020-IEs */ +typedef struct UE_EUTRA_Capability_v1020_IEs { + long *ue_Category_v1020 /* OPTIONAL */; + struct PhyLayerParameters_v1020 *phyLayerParameters_v1020 /* OPTIONAL */; + struct RF_Parameters_v1020 *rf_Parameters_v1020 /* OPTIONAL */; + struct MeasParameters_v1020 *measParameters_v1020 /* OPTIONAL */; + BIT_STRING_t *featureGroupIndicators_v1020 /* OPTIONAL */; + struct IRAT_ParametersCDMA2000_1XRTT_v1020 *interRAT_ParametersCDMA2000_v1020 /* OPTIONAL */; + struct UE_BasedNetwPerfMeasParameters_r10 *ue_BasedNetwPerfMeasParameters_r10 /* OPTIONAL */; + struct IRAT_ParametersUTRA_TDD_v1020 *interRAT_ParametersUTRA_TDD_v1020 /* OPTIONAL */; + struct UE_EUTRA_Capability_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_EUTRA_Capability_v1020_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "PhyLayerParameters-v1020.h" +#include "RF-Parameters-v1020.h" +#include "MeasParameters-v1020.h" +#include "IRAT-ParametersCDMA2000-1XRTT-v1020.h" +#include "UE-BasedNetwPerfMeasParameters-r10.h" +#include "IRAT-ParametersUTRA-TDD-v1020.h" + +#endif /* _UE_EUTRA_Capability_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c b/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c new file mode 100644 index 000000000..98ca06f61 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c @@ -0,0 +1,279 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-EUTRA-Capability-v920-IEs.h" + +static int +deviceType_r9_6_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deviceType_r9_6_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deviceType_r9_6_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deviceType_r9_6_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deviceType_r9_6_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deviceType_r9_6_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deviceType_r9_6_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deviceType_r9_6_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deviceType_r9_6_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deviceType_r9_6_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deviceType_r9_6_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_deviceType_r9_constr_6 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deviceType_r9_value2enum_6[] = { + { 0, 22, "noBenFromBatConsumpOpt" } +}; +static unsigned int asn_MAP_deviceType_r9_enum2value_6[] = { + 0 /* noBenFromBatConsumpOpt(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deviceType_r9_specs_6 = { + asn_MAP_deviceType_r9_value2enum_6, /* "tag" => N; sorted by tag */ + asn_MAP_deviceType_r9_enum2value_6, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deviceType_r9_tags_6[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deviceType_r9_6 = { + "deviceType-r9", + "deviceType-r9", + deviceType_r9_6_free, + deviceType_r9_6_print, + deviceType_r9_6_constraint, + deviceType_r9_6_decode_ber, + deviceType_r9_6_encode_der, + deviceType_r9_6_decode_xer, + deviceType_r9_6_encode_xer, + deviceType_r9_6_decode_uper, + deviceType_r9_6_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deviceType_r9_tags_6, + sizeof(asn_DEF_deviceType_r9_tags_6) + /sizeof(asn_DEF_deviceType_r9_tags_6[0]) - 1, /* 1 */ + asn_DEF_deviceType_r9_tags_6, /* Same as above */ + sizeof(asn_DEF_deviceType_r9_tags_6) + /sizeof(asn_DEF_deviceType_r9_tags_6[0]), /* 2 */ + &asn_PER_type_deviceType_r9_constr_6, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deviceType_r9_specs_6 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UE_EUTRA_Capability_v920_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability_v920_IEs, phyLayerParameters_v920), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhyLayerParameters_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phyLayerParameters-v920" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability_v920_IEs, interRAT_ParametersGERAN_v920), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersGERAN_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-ParametersGERAN-v920" + }, + { ATF_POINTER, 3, offsetof(struct UE_EUTRA_Capability_v920_IEs, interRAT_ParametersUTRA_v920), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersUTRA_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-ParametersUTRA-v920" + }, + { ATF_POINTER, 2, offsetof(struct UE_EUTRA_Capability_v920_IEs, interRAT_ParametersCDMA2000_v920), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersCDMA2000_1XRTT_v920, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-ParametersCDMA2000-v920" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability_v920_IEs, deviceType_r9), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deviceType_r9_6, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deviceType-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability_v920_IEs, csg_ProximityIndicationParameters_r9), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSG_ProximityIndicationParameters_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csg-ProximityIndicationParameters-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability_v920_IEs, neighCellSI_AcquisitionParameters_r9), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NeighCellSI_AcquisitionParameters_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "neighCellSI-AcquisitionParameters-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability_v920_IEs, son_Parameters_r9), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SON_Parameters_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "son-Parameters-r9" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability_v920_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_EUTRA_Capability_v940_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UE_EUTRA_Capability_v920_IEs_oms_1[] = { 2, 3, 4, 8 }; +static ber_tlv_tag_t asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_EUTRA_Capability_v920_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* phyLayerParameters-v920 at 3746 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* interRAT-ParametersGERAN-v920 at 3747 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* interRAT-ParametersUTRA-v920 at 3748 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* interRAT-ParametersCDMA2000-v920 at 3749 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* deviceType-r9 at 3750 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* csg-ProximityIndicationParameters-r9 at 3751 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* neighCellSI-AcquisitionParameters-r9 at 3752 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* son-Parameters-r9 at 3753 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* nonCriticalExtension at 3754 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_EUTRA_Capability_v920_IEs_specs_1 = { + sizeof(struct UE_EUTRA_Capability_v920_IEs), + offsetof(struct UE_EUTRA_Capability_v920_IEs, _asn_ctx), + asn_MAP_UE_EUTRA_Capability_v920_IEs_tag2el_1, + 9, /* Count of tags in the map */ + asn_MAP_UE_EUTRA_Capability_v920_IEs_oms_1, /* Optional members */ + 4, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability_v920_IEs = { + "UE-EUTRA-Capability-v920-IEs", + "UE-EUTRA-Capability-v920-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1, + sizeof(asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1[0]), /* 1 */ + asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_v920_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_EUTRA_Capability_v920_IEs_1, + 9, /* Elements count */ + &asn_SPC_UE_EUTRA_Capability_v920_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h b/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h new file mode 100644 index 000000000..6da39f924 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h @@ -0,0 +1,67 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_EUTRA_Capability_v920_IEs_H_ +#define _UE_EUTRA_Capability_v920_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "PhyLayerParameters-v920.h" +#include "IRAT-ParametersGERAN-v920.h" +#include +#include "CSG-ProximityIndicationParameters-r9.h" +#include "NeighCellSI-AcquisitionParameters-r9.h" +#include "SON-Parameters-r9.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_EUTRA_Capability_v920_IEs__deviceType_r9 { + UE_EUTRA_Capability_v920_IEs__deviceType_r9_noBenFromBatConsumpOpt = 0 +} e_UE_EUTRA_Capability_v920_IEs__deviceType_r9; + +/* Forward declarations */ +struct IRAT_ParametersUTRA_v920; +struct IRAT_ParametersCDMA2000_1XRTT_v920; +struct UE_EUTRA_Capability_v940_IEs; + +/* UE-EUTRA-Capability-v920-IEs */ +typedef struct UE_EUTRA_Capability_v920_IEs { + PhyLayerParameters_v920_t phyLayerParameters_v920; + IRAT_ParametersGERAN_v920_t interRAT_ParametersGERAN_v920; + struct IRAT_ParametersUTRA_v920 *interRAT_ParametersUTRA_v920 /* OPTIONAL */; + struct IRAT_ParametersCDMA2000_1XRTT_v920 *interRAT_ParametersCDMA2000_v920 /* OPTIONAL */; + long *deviceType_r9 /* OPTIONAL */; + CSG_ProximityIndicationParameters_r9_t csg_ProximityIndicationParameters_r9; + NeighCellSI_AcquisitionParameters_r9_t neighCellSI_AcquisitionParameters_r9; + SON_Parameters_r9_t son_Parameters_r9; + struct UE_EUTRA_Capability_v940_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_EUTRA_Capability_v920_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deviceType_r9_6; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability_v920_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "IRAT-ParametersUTRA-v920.h" +#include "IRAT-ParametersCDMA2000-1XRTT-v920.h" +#include "UE-EUTRA-Capability-v940-IEs.h" + +#endif /* _UE_EUTRA_Capability_v920_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c b/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c new file mode 100644 index 000000000..385b3f9f5 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-EUTRA-Capability-v940-IEs.h" + +static asn_TYPE_member_t asn_MBR_UE_EUTRA_Capability_v940_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UE_EUTRA_Capability_v940_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability_v940_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_EUTRA_Capability_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UE_EUTRA_Capability_v940_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_EUTRA_Capability_v940_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 3758 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 3759 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_EUTRA_Capability_v940_IEs_specs_1 = { + sizeof(struct UE_EUTRA_Capability_v940_IEs), + offsetof(struct UE_EUTRA_Capability_v940_IEs, _asn_ctx), + asn_MAP_UE_EUTRA_Capability_v940_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UE_EUTRA_Capability_v940_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability_v940_IEs = { + "UE-EUTRA-Capability-v940-IEs", + "UE-EUTRA-Capability-v940-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1, + sizeof(asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1[0]), /* 1 */ + asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_v940_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_EUTRA_Capability_v940_IEs_1, + 2, /* Elements count */ + &asn_SPC_UE_EUTRA_Capability_v940_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h b/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h new file mode 100644 index 000000000..1dfc2f4c2 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_EUTRA_Capability_v940_IEs_H_ +#define _UE_EUTRA_Capability_v940_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UE_EUTRA_Capability_v1020_IEs; + +/* UE-EUTRA-Capability-v940-IEs */ +typedef struct UE_EUTRA_Capability_v940_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct UE_EUTRA_Capability_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_EUTRA_Capability_v940_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability_v940_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UE-EUTRA-Capability-v1020-IEs.h" + +#endif /* _UE_EUTRA_Capability_v940_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UE-EUTRA-Capability.c b/lte/rrc/asn/UE-EUTRA-Capability.c new file mode 100644 index 000000000..90c1d7d34 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability.c @@ -0,0 +1,323 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-EUTRA-Capability.h" + +static int +memb_ue_Category_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 5)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_featureGroupIndicators_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 32)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_ue_Category_constr_3 = { + { APC_CONSTRAINED, 3, 3, 1, 5 } /* (1..5) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_featureGroupIndicators_constr_8 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 32, 32 } /* (SIZE(32..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_interRAT_Parameters_9[] = { + { ATF_POINTER, 7, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, utraFDD), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersUTRA_FDD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utraFDD" + }, + { ATF_POINTER, 6, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, utraTDD128), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersUTRA_TDD128, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utraTDD128" + }, + { ATF_POINTER, 5, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, utraTDD384), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersUTRA_TDD384, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utraTDD384" + }, + { ATF_POINTER, 4, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, utraTDD768), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersUTRA_TDD768, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "utraTDD768" + }, + { ATF_POINTER, 3, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, geran), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersGERAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "geran" + }, + { ATF_POINTER, 2, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, cdma2000_HRPD), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersCDMA2000_HRPD, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-HRPD" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, cdma2000_1xRTT), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_IRAT_ParametersCDMA2000_1XRTT, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-1xRTT" + }, +}; +static int asn_MAP_interRAT_Parameters_oms_9[] = { 0, 1, 2, 3, 4, 5, 6 }; +static ber_tlv_tag_t asn_DEF_interRAT_Parameters_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_interRAT_Parameters_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* utraFDD at 3734 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* utraTDD128 at 3735 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* utraTDD384 at 3736 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* utraTDD768 at 3737 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* geran at 3738 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* cdma2000-HRPD at 3739 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* cdma2000-1xRTT at 3740 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_interRAT_Parameters_specs_9 = { + sizeof(struct UE_EUTRA_Capability__interRAT_Parameters), + offsetof(struct UE_EUTRA_Capability__interRAT_Parameters, _asn_ctx), + asn_MAP_interRAT_Parameters_tag2el_9, + 7, /* Count of tags in the map */ + asn_MAP_interRAT_Parameters_oms_9, /* Optional members */ + 7, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_interRAT_Parameters_9 = { + "interRAT-Parameters", + "interRAT-Parameters", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_interRAT_Parameters_tags_9, + sizeof(asn_DEF_interRAT_Parameters_tags_9) + /sizeof(asn_DEF_interRAT_Parameters_tags_9[0]) - 1, /* 1 */ + asn_DEF_interRAT_Parameters_tags_9, /* Same as above */ + sizeof(asn_DEF_interRAT_Parameters_tags_9) + /sizeof(asn_DEF_interRAT_Parameters_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_interRAT_Parameters_9, + 7, /* Elements count */ + &asn_SPC_interRAT_Parameters_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UE_EUTRA_Capability_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, accessStratumRelease), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_AccessStratumRelease, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "accessStratumRelease" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, ue_Category), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_ue_Category_constraint_1, + &asn_PER_memb_ue_Category_constr_3, + 0, + "ue-Category" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, pdcp_Parameters), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PDCP_Parameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pdcp-Parameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, phyLayerParameters), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhyLayerParameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "phyLayerParameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, rf_Parameters), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RF_Parameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rf-Parameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, measParameters), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasParameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measParameters" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability, featureGroupIndicators), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_featureGroupIndicators_constraint_1, + &asn_PER_memb_featureGroupIndicators_constr_8, + 0, + "featureGroupIndicators" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_EUTRA_Capability, interRAT_Parameters), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + 0, + &asn_DEF_interRAT_Parameters_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interRAT-Parameters" + }, + { ATF_POINTER, 1, offsetof(struct UE_EUTRA_Capability, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_EUTRA_Capability_v920_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UE_EUTRA_Capability_oms_1[] = { 6, 8 }; +static ber_tlv_tag_t asn_DEF_UE_EUTRA_Capability_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_EUTRA_Capability_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* accessStratumRelease at 3726 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* ue-Category at 3727 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pdcp-Parameters at 3728 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* phyLayerParameters at 3729 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* rf-Parameters at 3730 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* measParameters at 3731 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* featureGroupIndicators at 3732 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* interRAT-Parameters at 3734 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 } /* nonCriticalExtension at 3742 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_EUTRA_Capability_specs_1 = { + sizeof(struct UE_EUTRA_Capability), + offsetof(struct UE_EUTRA_Capability, _asn_ctx), + asn_MAP_UE_EUTRA_Capability_tag2el_1, + 9, /* Count of tags in the map */ + asn_MAP_UE_EUTRA_Capability_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability = { + "UE-EUTRA-Capability", + "UE-EUTRA-Capability", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_EUTRA_Capability_tags_1, + sizeof(asn_DEF_UE_EUTRA_Capability_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_tags_1[0]), /* 1 */ + asn_DEF_UE_EUTRA_Capability_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_EUTRA_Capability_tags_1) + /sizeof(asn_DEF_UE_EUTRA_Capability_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_EUTRA_Capability_1, + 9, /* Elements count */ + &asn_SPC_UE_EUTRA_Capability_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-EUTRA-Capability.h b/lte/rrc/asn/UE-EUTRA-Capability.h new file mode 100644 index 000000000..47519b3d5 --- /dev/null +++ b/lte/rrc/asn/UE-EUTRA-Capability.h @@ -0,0 +1,83 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_EUTRA_Capability_H_ +#define _UE_EUTRA_Capability_H_ + + +#include + +/* Including external dependencies */ +#include "AccessStratumRelease.h" +#include +#include "PDCP-Parameters.h" +#include "PhyLayerParameters.h" +#include "RF-Parameters.h" +#include "MeasParameters.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UE_EUTRA_Capability_v920_IEs; +struct IRAT_ParametersUTRA_FDD; +struct IRAT_ParametersUTRA_TDD128; +struct IRAT_ParametersUTRA_TDD384; +struct IRAT_ParametersUTRA_TDD768; +struct IRAT_ParametersGERAN; +struct IRAT_ParametersCDMA2000_HRPD; +struct IRAT_ParametersCDMA2000_1XRTT; + +/* UE-EUTRA-Capability */ +typedef struct UE_EUTRA_Capability { + AccessStratumRelease_t accessStratumRelease; + long ue_Category; + PDCP_Parameters_t pdcp_Parameters; + PhyLayerParameters_t phyLayerParameters; + RF_Parameters_t rf_Parameters; + MeasParameters_t measParameters; + BIT_STRING_t *featureGroupIndicators /* OPTIONAL */; + struct UE_EUTRA_Capability__interRAT_Parameters { + struct IRAT_ParametersUTRA_FDD *utraFDD /* OPTIONAL */; + struct IRAT_ParametersUTRA_TDD128 *utraTDD128 /* OPTIONAL */; + struct IRAT_ParametersUTRA_TDD384 *utraTDD384 /* OPTIONAL */; + struct IRAT_ParametersUTRA_TDD768 *utraTDD768 /* OPTIONAL */; + struct IRAT_ParametersGERAN *geran /* OPTIONAL */; + struct IRAT_ParametersCDMA2000_HRPD *cdma2000_HRPD /* OPTIONAL */; + struct IRAT_ParametersCDMA2000_1XRTT *cdma2000_1xRTT /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } interRAT_Parameters; + struct UE_EUTRA_Capability_v920_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_EUTRA_Capability_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UE_EUTRA_Capability; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UE-EUTRA-Capability-v920-IEs.h" +#include "IRAT-ParametersUTRA-FDD.h" +#include "IRAT-ParametersUTRA-TDD128.h" +#include "IRAT-ParametersUTRA-TDD384.h" +#include "IRAT-ParametersUTRA-TDD768.h" +#include "IRAT-ParametersGERAN.h" +#include "IRAT-ParametersCDMA2000-HRPD.h" +#include "IRAT-ParametersCDMA2000-1XRTT.h" + +#endif /* _UE_EUTRA_Capability_H_ */ +#include diff --git a/lte/rrc/asn/UE-TimersAndConstants.c b/lte/rrc/asn/UE-TimersAndConstants.c new file mode 100644 index 000000000..cf1af9742 --- /dev/null +++ b/lte/rrc/asn/UE-TimersAndConstants.c @@ -0,0 +1,1012 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UE-TimersAndConstants.h" + +static int +t300_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t300_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t300_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t300_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t300_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t300_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t300_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t300_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t300_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t300_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t300_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t300_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t300_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t300_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t300_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t300_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t300_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t300_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +t301_11_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t301_11_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t301_11_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t301_11_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t301_11_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t301_11_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t301_11_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t301_11_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t301_11_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t301_11_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t301_11_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t301_11_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t301_11_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t301_11_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t301_11_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t301_11_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t301_11_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t301_11_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +t310_20_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t310_20_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t310_20_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t310_20_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t310_20_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t310_20_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t310_20_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t310_20_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t310_20_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t310_20_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t310_20_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t310_20_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t310_20_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t310_20_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t310_20_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t310_20_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t310_20_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t310_20_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +n310_28_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +n310_28_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +n310_28_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + n310_28_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +n310_28_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + n310_28_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +n310_28_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + n310_28_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +n310_28_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + n310_28_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +n310_28_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + n310_28_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +n310_28_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + n310_28_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +n310_28_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + n310_28_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +n310_28_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + n310_28_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +t311_37_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +t311_37_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +t311_37_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + t311_37_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +t311_37_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + t311_37_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +t311_37_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + t311_37_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +t311_37_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + t311_37_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +t311_37_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + t311_37_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +t311_37_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + t311_37_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +t311_37_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + t311_37_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +t311_37_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + t311_37_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +n311_45_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +n311_45_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +n311_45_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + n311_45_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +n311_45_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + n311_45_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +n311_45_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + n311_45_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +n311_45_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + n311_45_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +n311_45_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + n311_45_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +n311_45_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + n311_45_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +n311_45_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + n311_45_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +n311_45_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + n311_45_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_t300_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_t301_constr_11 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_t310_constr_20 = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n310_constr_28 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_t311_constr_37 = { + { APC_CONSTRAINED, 3, 3, 0, 6 } /* (0..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_n311_constr_45 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_t300_value2enum_2[] = { + { 0, 5, "ms100" }, + { 1, 5, "ms200" }, + { 2, 5, "ms300" }, + { 3, 5, "ms400" }, + { 4, 5, "ms600" }, + { 5, 6, "ms1000" }, + { 6, 6, "ms1500" }, + { 7, 6, "ms2000" } +}; +static unsigned int asn_MAP_t300_enum2value_2[] = { + 0, /* ms100(0) */ + 5, /* ms1000(5) */ + 6, /* ms1500(6) */ + 1, /* ms200(1) */ + 7, /* ms2000(7) */ + 2, /* ms300(2) */ + 3, /* ms400(3) */ + 4 /* ms600(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t300_specs_2 = { + asn_MAP_t300_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_t300_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t300_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t300_2 = { + "t300", + "t300", + t300_2_free, + t300_2_print, + t300_2_constraint, + t300_2_decode_ber, + t300_2_encode_der, + t300_2_decode_xer, + t300_2_encode_xer, + t300_2_decode_uper, + t300_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t300_tags_2, + sizeof(asn_DEF_t300_tags_2) + /sizeof(asn_DEF_t300_tags_2[0]) - 1, /* 1 */ + asn_DEF_t300_tags_2, /* Same as above */ + sizeof(asn_DEF_t300_tags_2) + /sizeof(asn_DEF_t300_tags_2[0]), /* 2 */ + &asn_PER_type_t300_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t300_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_t301_value2enum_11[] = { + { 0, 5, "ms100" }, + { 1, 5, "ms200" }, + { 2, 5, "ms300" }, + { 3, 5, "ms400" }, + { 4, 5, "ms600" }, + { 5, 6, "ms1000" }, + { 6, 6, "ms1500" }, + { 7, 6, "ms2000" } +}; +static unsigned int asn_MAP_t301_enum2value_11[] = { + 0, /* ms100(0) */ + 5, /* ms1000(5) */ + 6, /* ms1500(6) */ + 1, /* ms200(1) */ + 7, /* ms2000(7) */ + 2, /* ms300(2) */ + 3, /* ms400(3) */ + 4 /* ms600(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t301_specs_11 = { + asn_MAP_t301_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_t301_enum2value_11, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t301_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t301_11 = { + "t301", + "t301", + t301_11_free, + t301_11_print, + t301_11_constraint, + t301_11_decode_ber, + t301_11_encode_der, + t301_11_decode_xer, + t301_11_encode_xer, + t301_11_decode_uper, + t301_11_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t301_tags_11, + sizeof(asn_DEF_t301_tags_11) + /sizeof(asn_DEF_t301_tags_11[0]) - 1, /* 1 */ + asn_DEF_t301_tags_11, /* Same as above */ + sizeof(asn_DEF_t301_tags_11) + /sizeof(asn_DEF_t301_tags_11[0]), /* 2 */ + &asn_PER_type_t301_constr_11, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t301_specs_11 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_t310_value2enum_20[] = { + { 0, 3, "ms0" }, + { 1, 4, "ms50" }, + { 2, 5, "ms100" }, + { 3, 5, "ms200" }, + { 4, 5, "ms500" }, + { 5, 6, "ms1000" }, + { 6, 6, "ms2000" } +}; +static unsigned int asn_MAP_t310_enum2value_20[] = { + 0, /* ms0(0) */ + 2, /* ms100(2) */ + 5, /* ms1000(5) */ + 3, /* ms200(3) */ + 6, /* ms2000(6) */ + 1, /* ms50(1) */ + 4 /* ms500(4) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t310_specs_20 = { + asn_MAP_t310_value2enum_20, /* "tag" => N; sorted by tag */ + asn_MAP_t310_enum2value_20, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t310_tags_20[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t310_20 = { + "t310", + "t310", + t310_20_free, + t310_20_print, + t310_20_constraint, + t310_20_decode_ber, + t310_20_encode_der, + t310_20_decode_xer, + t310_20_encode_xer, + t310_20_decode_uper, + t310_20_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t310_tags_20, + sizeof(asn_DEF_t310_tags_20) + /sizeof(asn_DEF_t310_tags_20[0]) - 1, /* 1 */ + asn_DEF_t310_tags_20, /* Same as above */ + sizeof(asn_DEF_t310_tags_20) + /sizeof(asn_DEF_t310_tags_20[0]), /* 2 */ + &asn_PER_type_t310_constr_20, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t310_specs_20 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_n310_value2enum_28[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n3" }, + { 3, 2, "n4" }, + { 4, 2, "n6" }, + { 5, 2, "n8" }, + { 6, 3, "n10" }, + { 7, 3, "n20" } +}; +static unsigned int asn_MAP_n310_enum2value_28[] = { + 0, /* n1(0) */ + 6, /* n10(6) */ + 1, /* n2(1) */ + 7, /* n20(7) */ + 2, /* n3(2) */ + 3, /* n4(3) */ + 4, /* n6(4) */ + 5 /* n8(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_n310_specs_28 = { + asn_MAP_n310_value2enum_28, /* "tag" => N; sorted by tag */ + asn_MAP_n310_enum2value_28, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_n310_tags_28[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n310_28 = { + "n310", + "n310", + n310_28_free, + n310_28_print, + n310_28_constraint, + n310_28_decode_ber, + n310_28_encode_der, + n310_28_decode_xer, + n310_28_encode_xer, + n310_28_decode_uper, + n310_28_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n310_tags_28, + sizeof(asn_DEF_n310_tags_28) + /sizeof(asn_DEF_n310_tags_28[0]) - 1, /* 1 */ + asn_DEF_n310_tags_28, /* Same as above */ + sizeof(asn_DEF_n310_tags_28) + /sizeof(asn_DEF_n310_tags_28[0]), /* 2 */ + &asn_PER_type_n310_constr_28, + 0, 0, /* Defined elsewhere */ + &asn_SPC_n310_specs_28 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_t311_value2enum_37[] = { + { 0, 6, "ms1000" }, + { 1, 6, "ms3000" }, + { 2, 6, "ms5000" }, + { 3, 7, "ms10000" }, + { 4, 7, "ms15000" }, + { 5, 7, "ms20000" }, + { 6, 7, "ms30000" } +}; +static unsigned int asn_MAP_t311_enum2value_37[] = { + 0, /* ms1000(0) */ + 3, /* ms10000(3) */ + 4, /* ms15000(4) */ + 5, /* ms20000(5) */ + 1, /* ms3000(1) */ + 6, /* ms30000(6) */ + 2 /* ms5000(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_t311_specs_37 = { + asn_MAP_t311_value2enum_37, /* "tag" => N; sorted by tag */ + asn_MAP_t311_enum2value_37, /* N => "tag"; sorted by N */ + 7, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_t311_tags_37[] = { + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_t311_37 = { + "t311", + "t311", + t311_37_free, + t311_37_print, + t311_37_constraint, + t311_37_decode_ber, + t311_37_encode_der, + t311_37_decode_xer, + t311_37_encode_xer, + t311_37_decode_uper, + t311_37_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_t311_tags_37, + sizeof(asn_DEF_t311_tags_37) + /sizeof(asn_DEF_t311_tags_37[0]) - 1, /* 1 */ + asn_DEF_t311_tags_37, /* Same as above */ + sizeof(asn_DEF_t311_tags_37) + /sizeof(asn_DEF_t311_tags_37[0]), /* 2 */ + &asn_PER_type_t311_constr_37, + 0, 0, /* Defined elsewhere */ + &asn_SPC_t311_specs_37 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_n311_value2enum_45[] = { + { 0, 2, "n1" }, + { 1, 2, "n2" }, + { 2, 2, "n3" }, + { 3, 2, "n4" }, + { 4, 2, "n5" }, + { 5, 2, "n6" }, + { 6, 2, "n8" }, + { 7, 3, "n10" } +}; +static unsigned int asn_MAP_n311_enum2value_45[] = { + 0, /* n1(0) */ + 7, /* n10(7) */ + 1, /* n2(1) */ + 2, /* n3(2) */ + 3, /* n4(3) */ + 4, /* n5(4) */ + 5, /* n6(5) */ + 6 /* n8(6) */ +}; +static asn_INTEGER_specifics_t asn_SPC_n311_specs_45 = { + asn_MAP_n311_value2enum_45, /* "tag" => N; sorted by tag */ + asn_MAP_n311_enum2value_45, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_n311_tags_45[] = { + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_n311_45 = { + "n311", + "n311", + n311_45_free, + n311_45_print, + n311_45_constraint, + n311_45_decode_ber, + n311_45_encode_der, + n311_45_decode_xer, + n311_45_encode_xer, + n311_45_decode_uper, + n311_45_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_n311_tags_45, + sizeof(asn_DEF_n311_tags_45) + /sizeof(asn_DEF_n311_tags_45[0]) - 1, /* 1 */ + asn_DEF_n311_tags_45, /* Same as above */ + sizeof(asn_DEF_n311_tags_45) + /sizeof(asn_DEF_n311_tags_45[0]), /* 2 */ + &asn_PER_type_n311_constr_45, + 0, 0, /* Defined elsewhere */ + &asn_SPC_n311_specs_45 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UE_TimersAndConstants_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UE_TimersAndConstants, t300), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t300_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t300" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_TimersAndConstants, t301), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t301_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t301" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_TimersAndConstants, t310), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t310_20, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t310" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_TimersAndConstants, n310), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_n310_28, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n310" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_TimersAndConstants, t311), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_t311_37, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t311" + }, + { ATF_NOFLAGS, 0, offsetof(struct UE_TimersAndConstants, n311), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_n311_45, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "n311" + }, +}; +static ber_tlv_tag_t asn_DEF_UE_TimersAndConstants_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UE_TimersAndConstants_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t300 at 4016 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* t301 at 4019 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* t310 at 4022 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* n310 at 4024 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* t311 at 4026 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* n311 at 4029 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UE_TimersAndConstants_specs_1 = { + sizeof(struct UE_TimersAndConstants), + offsetof(struct UE_TimersAndConstants, _asn_ctx), + asn_MAP_UE_TimersAndConstants_tag2el_1, + 6, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + 5, /* Start extensions */ + 7 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UE_TimersAndConstants = { + "UE-TimersAndConstants", + "UE-TimersAndConstants", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UE_TimersAndConstants_tags_1, + sizeof(asn_DEF_UE_TimersAndConstants_tags_1) + /sizeof(asn_DEF_UE_TimersAndConstants_tags_1[0]), /* 1 */ + asn_DEF_UE_TimersAndConstants_tags_1, /* Same as above */ + sizeof(asn_DEF_UE_TimersAndConstants_tags_1) + /sizeof(asn_DEF_UE_TimersAndConstants_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UE_TimersAndConstants_1, + 6, /* Elements count */ + &asn_SPC_UE_TimersAndConstants_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UE-TimersAndConstants.h b/lte/rrc/asn/UE-TimersAndConstants.h new file mode 100644 index 000000000..796e84d0d --- /dev/null +++ b/lte/rrc/asn/UE-TimersAndConstants.h @@ -0,0 +1,113 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UE_TimersAndConstants_H_ +#define _UE_TimersAndConstants_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UE_TimersAndConstants__t300 { + UE_TimersAndConstants__t300_ms100 = 0, + UE_TimersAndConstants__t300_ms200 = 1, + UE_TimersAndConstants__t300_ms300 = 2, + UE_TimersAndConstants__t300_ms400 = 3, + UE_TimersAndConstants__t300_ms600 = 4, + UE_TimersAndConstants__t300_ms1000 = 5, + UE_TimersAndConstants__t300_ms1500 = 6, + UE_TimersAndConstants__t300_ms2000 = 7 +} e_UE_TimersAndConstants__t300; +typedef enum UE_TimersAndConstants__t301 { + UE_TimersAndConstants__t301_ms100 = 0, + UE_TimersAndConstants__t301_ms200 = 1, + UE_TimersAndConstants__t301_ms300 = 2, + UE_TimersAndConstants__t301_ms400 = 3, + UE_TimersAndConstants__t301_ms600 = 4, + UE_TimersAndConstants__t301_ms1000 = 5, + UE_TimersAndConstants__t301_ms1500 = 6, + UE_TimersAndConstants__t301_ms2000 = 7 +} e_UE_TimersAndConstants__t301; +typedef enum UE_TimersAndConstants__t310 { + UE_TimersAndConstants__t310_ms0 = 0, + UE_TimersAndConstants__t310_ms50 = 1, + UE_TimersAndConstants__t310_ms100 = 2, + UE_TimersAndConstants__t310_ms200 = 3, + UE_TimersAndConstants__t310_ms500 = 4, + UE_TimersAndConstants__t310_ms1000 = 5, + UE_TimersAndConstants__t310_ms2000 = 6 +} e_UE_TimersAndConstants__t310; +typedef enum UE_TimersAndConstants__n310 { + UE_TimersAndConstants__n310_n1 = 0, + UE_TimersAndConstants__n310_n2 = 1, + UE_TimersAndConstants__n310_n3 = 2, + UE_TimersAndConstants__n310_n4 = 3, + UE_TimersAndConstants__n310_n6 = 4, + UE_TimersAndConstants__n310_n8 = 5, + UE_TimersAndConstants__n310_n10 = 6, + UE_TimersAndConstants__n310_n20 = 7 +} e_UE_TimersAndConstants__n310; +typedef enum UE_TimersAndConstants__t311 { + UE_TimersAndConstants__t311_ms1000 = 0, + UE_TimersAndConstants__t311_ms3000 = 1, + UE_TimersAndConstants__t311_ms5000 = 2, + UE_TimersAndConstants__t311_ms10000 = 3, + UE_TimersAndConstants__t311_ms15000 = 4, + UE_TimersAndConstants__t311_ms20000 = 5, + UE_TimersAndConstants__t311_ms30000 = 6 +} e_UE_TimersAndConstants__t311; +typedef enum UE_TimersAndConstants__n311 { + UE_TimersAndConstants__n311_n1 = 0, + UE_TimersAndConstants__n311_n2 = 1, + UE_TimersAndConstants__n311_n3 = 2, + UE_TimersAndConstants__n311_n4 = 3, + UE_TimersAndConstants__n311_n5 = 4, + UE_TimersAndConstants__n311_n6 = 5, + UE_TimersAndConstants__n311_n8 = 6, + UE_TimersAndConstants__n311_n10 = 7 +} e_UE_TimersAndConstants__n311; + +/* UE-TimersAndConstants */ +typedef struct UE_TimersAndConstants { + long t300; + long t301; + long t310; + long n310; + long t311; + long n311; + /* + * This type is extensible, + * possible extensions are below. + */ + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UE_TimersAndConstants_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_t300_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_t301_11; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_t310_20; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_n310_28; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_t311_37; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_n311_45; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UE_TimersAndConstants; + +#ifdef __cplusplus +} +#endif + +#endif /* _UE_TimersAndConstants_H_ */ +#include diff --git a/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c b/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c new file mode 100644 index 000000000..0b1d5f1c5 --- /dev/null +++ b/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UECapabilityEnquiry-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_UECapabilityEnquiry_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry_r8_IEs, ue_CapabilityRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_CapabilityRequest, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-CapabilityRequest" + }, + { ATF_POINTER, 1, offsetof(struct UECapabilityEnquiry_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UECapabilityEnquiry_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UECapabilityEnquiry_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UECapabilityEnquiry_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-CapabilityRequest at 1245 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1246 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UECapabilityEnquiry_r8_IEs_specs_1 = { + sizeof(struct UECapabilityEnquiry_r8_IEs), + offsetof(struct UECapabilityEnquiry_r8_IEs, _asn_ctx), + asn_MAP_UECapabilityEnquiry_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UECapabilityEnquiry_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UECapabilityEnquiry_r8_IEs = { + "UECapabilityEnquiry-r8-IEs", + "UECapabilityEnquiry-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1, + sizeof(asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityEnquiry_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UECapabilityEnquiry_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_UECapabilityEnquiry_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h b/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h new file mode 100644 index 000000000..2aff01d4d --- /dev/null +++ b/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UECapabilityEnquiry_r8_IEs_H_ +#define _UECapabilityEnquiry_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "UE-CapabilityRequest.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UECapabilityEnquiry_v8a0_IEs; + +/* UECapabilityEnquiry-r8-IEs */ +typedef struct UECapabilityEnquiry_r8_IEs { + UE_CapabilityRequest_t ue_CapabilityRequest; + struct UECapabilityEnquiry_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UECapabilityEnquiry_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UECapabilityEnquiry_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UECapabilityEnquiry-v8a0-IEs.h" + +#endif /* _UECapabilityEnquiry_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c b/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c new file mode 100644 index 000000000..f52cf7789 --- /dev/null +++ b/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UECapabilityEnquiry-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct UECapabilityEnquiry_v8a0_IEs__nonCriticalExtension), + offsetof(struct UECapabilityEnquiry_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UECapabilityEnquiry_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UECapabilityEnquiry_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct UECapabilityEnquiry_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UECapabilityEnquiry_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UECapabilityEnquiry_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1250 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1251 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UECapabilityEnquiry_v8a0_IEs_specs_1 = { + sizeof(struct UECapabilityEnquiry_v8a0_IEs), + offsetof(struct UECapabilityEnquiry_v8a0_IEs, _asn_ctx), + asn_MAP_UECapabilityEnquiry_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UECapabilityEnquiry_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UECapabilityEnquiry_v8a0_IEs = { + "UECapabilityEnquiry-v8a0-IEs", + "UECapabilityEnquiry-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1, + sizeof(asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityEnquiry_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UECapabilityEnquiry_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_UECapabilityEnquiry_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h b/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h new file mode 100644 index 000000000..be11073bf --- /dev/null +++ b/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UECapabilityEnquiry_v8a0_IEs_H_ +#define _UECapabilityEnquiry_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UECapabilityEnquiry-v8a0-IEs */ +typedef struct UECapabilityEnquiry_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct UECapabilityEnquiry_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UECapabilityEnquiry_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UECapabilityEnquiry_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _UECapabilityEnquiry_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UECapabilityEnquiry.c b/lte/rrc/asn/UECapabilityEnquiry.c new file mode 100644 index 000000000..d032b1851 --- /dev/null +++ b/lte/rrc/asn/UECapabilityEnquiry.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UECapabilityEnquiry.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry__criticalExtensions__c1, choice.ueCapabilityEnquiry_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UECapabilityEnquiry_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueCapabilityEnquiry-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueCapabilityEnquiry-r8 at 1237 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1238 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1238 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1238 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct UECapabilityEnquiry__criticalExtensions__c1), + offsetof(struct UECapabilityEnquiry__criticalExtensions__c1, _asn_ctx), + offsetof(struct UECapabilityEnquiry__criticalExtensions__c1, present), + sizeof(((struct UECapabilityEnquiry__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct UECapabilityEnquiry__criticalExtensions__criticalExtensionsFuture), + offsetof(struct UECapabilityEnquiry__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1237 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1240 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct UECapabilityEnquiry__criticalExtensions), + offsetof(struct UECapabilityEnquiry__criticalExtensions, _asn_ctx), + offsetof(struct UECapabilityEnquiry__criticalExtensions, present), + sizeof(((struct UECapabilityEnquiry__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UECapabilityEnquiry_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityEnquiry, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_UECapabilityEnquiry_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UECapabilityEnquiry_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1234 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1239 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UECapabilityEnquiry_specs_1 = { + sizeof(struct UECapabilityEnquiry), + offsetof(struct UECapabilityEnquiry, _asn_ctx), + asn_MAP_UECapabilityEnquiry_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UECapabilityEnquiry = { + "UECapabilityEnquiry", + "UECapabilityEnquiry", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UECapabilityEnquiry_tags_1, + sizeof(asn_DEF_UECapabilityEnquiry_tags_1) + /sizeof(asn_DEF_UECapabilityEnquiry_tags_1[0]), /* 1 */ + asn_DEF_UECapabilityEnquiry_tags_1, /* Same as above */ + sizeof(asn_DEF_UECapabilityEnquiry_tags_1) + /sizeof(asn_DEF_UECapabilityEnquiry_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UECapabilityEnquiry_1, + 2, /* Elements count */ + &asn_SPC_UECapabilityEnquiry_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UECapabilityEnquiry.h b/lte/rrc/asn/UECapabilityEnquiry.h new file mode 100644 index 000000000..257fbbe72 --- /dev/null +++ b/lte/rrc/asn/UECapabilityEnquiry.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UECapabilityEnquiry_H_ +#define _UECapabilityEnquiry_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "UECapabilityEnquiry-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UECapabilityEnquiry__criticalExtensions_PR { + UECapabilityEnquiry__criticalExtensions_PR_NOTHING, /* No components present */ + UECapabilityEnquiry__criticalExtensions_PR_c1, + UECapabilityEnquiry__criticalExtensions_PR_criticalExtensionsFuture +} UECapabilityEnquiry__criticalExtensions_PR; +typedef enum UECapabilityEnquiry__criticalExtensions__c1_PR { + UECapabilityEnquiry__criticalExtensions__c1_PR_NOTHING, /* No components present */ + UECapabilityEnquiry__criticalExtensions__c1_PR_ueCapabilityEnquiry_r8, + UECapabilityEnquiry__criticalExtensions__c1_PR_spare3, + UECapabilityEnquiry__criticalExtensions__c1_PR_spare2, + UECapabilityEnquiry__criticalExtensions__c1_PR_spare1 +} UECapabilityEnquiry__criticalExtensions__c1_PR; + +/* UECapabilityEnquiry */ +typedef struct UECapabilityEnquiry { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct UECapabilityEnquiry__criticalExtensions { + UECapabilityEnquiry__criticalExtensions_PR present; + union UECapabilityEnquiry__criticalExtensions_u { + struct UECapabilityEnquiry__criticalExtensions__c1 { + UECapabilityEnquiry__criticalExtensions__c1_PR present; + union UECapabilityEnquiry__criticalExtensions__c1_u { + UECapabilityEnquiry_r8_IEs_t ueCapabilityEnquiry_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct UECapabilityEnquiry__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UECapabilityEnquiry_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UECapabilityEnquiry; + +#ifdef __cplusplus +} +#endif + +#endif /* _UECapabilityEnquiry_H_ */ +#include diff --git a/lte/rrc/asn/UECapabilityInformation-r8-IEs.c b/lte/rrc/asn/UECapabilityInformation-r8-IEs.c new file mode 100644 index 000000000..a0e7beb9c --- /dev/null +++ b/lte/rrc/asn/UECapabilityInformation-r8-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UECapabilityInformation-r8-IEs.h" + +static asn_TYPE_member_t asn_MBR_UECapabilityInformation_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation_r8_IEs, ue_CapabilityRAT_ContainerList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UE_CapabilityRAT_ContainerList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ue-CapabilityRAT-ContainerList" + }, + { ATF_POINTER, 1, offsetof(struct UECapabilityInformation_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UECapabilityInformation_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UECapabilityInformation_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_UECapabilityInformation_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UECapabilityInformation_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-CapabilityRAT-ContainerList at 1271 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1272 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UECapabilityInformation_r8_IEs_specs_1 = { + sizeof(struct UECapabilityInformation_r8_IEs), + offsetof(struct UECapabilityInformation_r8_IEs, _asn_ctx), + asn_MAP_UECapabilityInformation_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UECapabilityInformation_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UECapabilityInformation_r8_IEs = { + "UECapabilityInformation-r8-IEs", + "UECapabilityInformation-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UECapabilityInformation_r8_IEs_tags_1, + sizeof(asn_DEF_UECapabilityInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityInformation_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_UECapabilityInformation_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UECapabilityInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityInformation_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UECapabilityInformation_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_UECapabilityInformation_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UECapabilityInformation-r8-IEs.h b/lte/rrc/asn/UECapabilityInformation-r8-IEs.h new file mode 100644 index 000000000..1d502ff77 --- /dev/null +++ b/lte/rrc/asn/UECapabilityInformation-r8-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UECapabilityInformation_r8_IEs_H_ +#define _UECapabilityInformation_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "UE-CapabilityRAT-ContainerList.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UECapabilityInformation_v8a0_IEs; + +/* UECapabilityInformation-r8-IEs */ +typedef struct UECapabilityInformation_r8_IEs { + UE_CapabilityRAT_ContainerList_t ue_CapabilityRAT_ContainerList; + struct UECapabilityInformation_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UECapabilityInformation_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UECapabilityInformation_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UECapabilityInformation-v8a0-IEs.h" + +#endif /* _UECapabilityInformation_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.c b/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.c new file mode 100644 index 000000000..81048d0ce --- /dev/null +++ b/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UECapabilityInformation-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct UECapabilityInformation_v8a0_IEs__nonCriticalExtension), + offsetof(struct UECapabilityInformation_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UECapabilityInformation_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UECapabilityInformation_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct UECapabilityInformation_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UECapabilityInformation_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UECapabilityInformation_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1276 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1277 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UECapabilityInformation_v8a0_IEs_specs_1 = { + sizeof(struct UECapabilityInformation_v8a0_IEs), + offsetof(struct UECapabilityInformation_v8a0_IEs, _asn_ctx), + asn_MAP_UECapabilityInformation_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UECapabilityInformation_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UECapabilityInformation_v8a0_IEs = { + "UECapabilityInformation-v8a0-IEs", + "UECapabilityInformation-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1, + sizeof(asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1) + /sizeof(asn_DEF_UECapabilityInformation_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UECapabilityInformation_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_UECapabilityInformation_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.h b/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.h new file mode 100644 index 000000000..7e056ef67 --- /dev/null +++ b/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UECapabilityInformation_v8a0_IEs_H_ +#define _UECapabilityInformation_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UECapabilityInformation-v8a0-IEs */ +typedef struct UECapabilityInformation_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct UECapabilityInformation_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UECapabilityInformation_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UECapabilityInformation_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _UECapabilityInformation_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UECapabilityInformation.c b/lte/rrc/asn/UECapabilityInformation.c new file mode 100644 index 000000000..634bdc59a --- /dev/null +++ b/lte/rrc/asn/UECapabilityInformation.c @@ -0,0 +1,294 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UECapabilityInformation.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.ueCapabilityInformation_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UECapabilityInformation_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueCapabilityInformation-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueCapabilityInformation-r8 at 1261 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 at 1262 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 at 1263 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 at 1263 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 at 1263 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 at 1264 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 at 1264 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 at 1264 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct UECapabilityInformation__criticalExtensions__c1), + offsetof(struct UECapabilityInformation__criticalExtensions__c1, _asn_ctx), + offsetof(struct UECapabilityInformation__criticalExtensions__c1, present), + sizeof(((struct UECapabilityInformation__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 8, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_13[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_13 = { + sizeof(struct UECapabilityInformation__criticalExtensions__criticalExtensionsFuture), + offsetof(struct UECapabilityInformation__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_13 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_13, + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_13, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_13) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_13[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_13 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_13, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1261 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1266 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct UECapabilityInformation__criticalExtensions), + offsetof(struct UECapabilityInformation__criticalExtensions, _asn_ctx), + offsetof(struct UECapabilityInformation__criticalExtensions, present), + sizeof(((struct UECapabilityInformation__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UECapabilityInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct UECapabilityInformation, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_UECapabilityInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UECapabilityInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1258 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1265 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UECapabilityInformation_specs_1 = { + sizeof(struct UECapabilityInformation), + offsetof(struct UECapabilityInformation, _asn_ctx), + asn_MAP_UECapabilityInformation_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UECapabilityInformation = { + "UECapabilityInformation", + "UECapabilityInformation", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UECapabilityInformation_tags_1, + sizeof(asn_DEF_UECapabilityInformation_tags_1) + /sizeof(asn_DEF_UECapabilityInformation_tags_1[0]), /* 1 */ + asn_DEF_UECapabilityInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_UECapabilityInformation_tags_1) + /sizeof(asn_DEF_UECapabilityInformation_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UECapabilityInformation_1, + 2, /* Elements count */ + &asn_SPC_UECapabilityInformation_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UECapabilityInformation.h b/lte/rrc/asn/UECapabilityInformation.h new file mode 100644 index 000000000..c133b1037 --- /dev/null +++ b/lte/rrc/asn/UECapabilityInformation.h @@ -0,0 +1,88 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UECapabilityInformation_H_ +#define _UECapabilityInformation_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "UECapabilityInformation-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UECapabilityInformation__criticalExtensions_PR { + UECapabilityInformation__criticalExtensions_PR_NOTHING, /* No components present */ + UECapabilityInformation__criticalExtensions_PR_c1, + UECapabilityInformation__criticalExtensions_PR_criticalExtensionsFuture +} UECapabilityInformation__criticalExtensions_PR; +typedef enum UECapabilityInformation__criticalExtensions__c1_PR { + UECapabilityInformation__criticalExtensions__c1_PR_NOTHING, /* No components present */ + UECapabilityInformation__criticalExtensions__c1_PR_ueCapabilityInformation_r8, + UECapabilityInformation__criticalExtensions__c1_PR_spare7, + UECapabilityInformation__criticalExtensions__c1_PR_spare6, + UECapabilityInformation__criticalExtensions__c1_PR_spare5, + UECapabilityInformation__criticalExtensions__c1_PR_spare4, + UECapabilityInformation__criticalExtensions__c1_PR_spare3, + UECapabilityInformation__criticalExtensions__c1_PR_spare2, + UECapabilityInformation__criticalExtensions__c1_PR_spare1 +} UECapabilityInformation__criticalExtensions__c1_PR; + +/* UECapabilityInformation */ +typedef struct UECapabilityInformation { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct UECapabilityInformation__criticalExtensions { + UECapabilityInformation__criticalExtensions_PR present; + union UECapabilityInformation__criticalExtensions_u { + struct UECapabilityInformation__criticalExtensions__c1 { + UECapabilityInformation__criticalExtensions__c1_PR present; + union UECapabilityInformation__criticalExtensions__c1_u { + UECapabilityInformation_r8_IEs_t ueCapabilityInformation_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct UECapabilityInformation__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UECapabilityInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UECapabilityInformation; + +#ifdef __cplusplus +} +#endif + +#endif /* _UECapabilityInformation_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationRequest-r9-IEs.c b/lte/rrc/asn/UEInformationRequest-r9-IEs.c new file mode 100644 index 000000000..92aacc68e --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-r9-IEs.c @@ -0,0 +1,82 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationRequest-r9-IEs.h" + +static asn_TYPE_member_t asn_MBR_UEInformationRequest_r9_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9_IEs, rach_ReportReq_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rach-ReportReq-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9_IEs, rlf_ReportReq_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlf-ReportReq-r9" + }, + { ATF_POINTER, 1, offsetof(struct UEInformationRequest_r9_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationRequest_v930_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UEInformationRequest_r9_IEs_oms_1[] = { 2 }; +static ber_tlv_tag_t asn_DEF_UEInformationRequest_r9_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationRequest_r9_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rach-ReportReq-r9 at 1293 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlf-ReportReq-r9 at 1294 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 1295 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationRequest_r9_IEs_specs_1 = { + sizeof(struct UEInformationRequest_r9_IEs), + offsetof(struct UEInformationRequest_r9_IEs, _asn_ctx), + asn_MAP_UEInformationRequest_r9_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UEInformationRequest_r9_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_r9_IEs = { + "UEInformationRequest-r9-IEs", + "UEInformationRequest-r9-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationRequest_r9_IEs_tags_1, + sizeof(asn_DEF_UEInformationRequest_r9_IEs_tags_1) + /sizeof(asn_DEF_UEInformationRequest_r9_IEs_tags_1[0]), /* 1 */ + asn_DEF_UEInformationRequest_r9_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationRequest_r9_IEs_tags_1) + /sizeof(asn_DEF_UEInformationRequest_r9_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationRequest_r9_IEs_1, + 3, /* Elements count */ + &asn_SPC_UEInformationRequest_r9_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationRequest-r9-IEs.h b/lte/rrc/asn/UEInformationRequest-r9-IEs.h new file mode 100644 index 000000000..22c1e6424 --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-r9-IEs.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationRequest_r9_IEs_H_ +#define _UEInformationRequest_r9_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEInformationRequest_v930_IEs; + +/* UEInformationRequest-r9-IEs */ +typedef struct UEInformationRequest_r9_IEs { + BOOLEAN_t rach_ReportReq_r9; + BOOLEAN_t rlf_ReportReq_r9; + struct UEInformationRequest_v930_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationRequest_r9_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_r9_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UEInformationRequest-v930-IEs.h" + +#endif /* _UEInformationRequest_r9_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationRequest-r9.c b/lte/rrc/asn/UEInformationRequest-r9.c new file mode 100644 index 000000000..1e79e2e3b --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-r9.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationRequest-r9.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9__criticalExtensions__c1, choice.ueInformationRequest_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationRequest_r9_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueInformationRequest-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueInformationRequest-r9 at 1285 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1286 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1286 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1286 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct UEInformationRequest_r9__criticalExtensions__c1), + offsetof(struct UEInformationRequest_r9__criticalExtensions__c1, _asn_ctx), + offsetof(struct UEInformationRequest_r9__criticalExtensions__c1, present), + sizeof(((struct UEInformationRequest_r9__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct UEInformationRequest_r9__criticalExtensions__criticalExtensionsFuture), + offsetof(struct UEInformationRequest_r9__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1285 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1288 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct UEInformationRequest_r9__criticalExtensions), + offsetof(struct UEInformationRequest_r9__criticalExtensions, _asn_ctx), + offsetof(struct UEInformationRequest_r9__criticalExtensions, present), + sizeof(((struct UEInformationRequest_r9__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UEInformationRequest_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationRequest_r9, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_UEInformationRequest_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationRequest_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1282 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1287 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationRequest_r9_specs_1 = { + sizeof(struct UEInformationRequest_r9), + offsetof(struct UEInformationRequest_r9, _asn_ctx), + asn_MAP_UEInformationRequest_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_r9 = { + "UEInformationRequest-r9", + "UEInformationRequest-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationRequest_r9_tags_1, + sizeof(asn_DEF_UEInformationRequest_r9_tags_1) + /sizeof(asn_DEF_UEInformationRequest_r9_tags_1[0]), /* 1 */ + asn_DEF_UEInformationRequest_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationRequest_r9_tags_1) + /sizeof(asn_DEF_UEInformationRequest_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationRequest_r9_1, + 2, /* Elements count */ + &asn_SPC_UEInformationRequest_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationRequest-r9.h b/lte/rrc/asn/UEInformationRequest-r9.h new file mode 100644 index 000000000..f29db7020 --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-r9.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationRequest_r9_H_ +#define _UEInformationRequest_r9_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "UEInformationRequest-r9-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UEInformationRequest_r9__criticalExtensions_PR { + UEInformationRequest_r9__criticalExtensions_PR_NOTHING, /* No components present */ + UEInformationRequest_r9__criticalExtensions_PR_c1, + UEInformationRequest_r9__criticalExtensions_PR_criticalExtensionsFuture +} UEInformationRequest_r9__criticalExtensions_PR; +typedef enum UEInformationRequest_r9__criticalExtensions__c1_PR { + UEInformationRequest_r9__criticalExtensions__c1_PR_NOTHING, /* No components present */ + UEInformationRequest_r9__criticalExtensions__c1_PR_ueInformationRequest_r9, + UEInformationRequest_r9__criticalExtensions__c1_PR_spare3, + UEInformationRequest_r9__criticalExtensions__c1_PR_spare2, + UEInformationRequest_r9__criticalExtensions__c1_PR_spare1 +} UEInformationRequest_r9__criticalExtensions__c1_PR; + +/* UEInformationRequest-r9 */ +typedef struct UEInformationRequest_r9 { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct UEInformationRequest_r9__criticalExtensions { + UEInformationRequest_r9__criticalExtensions_PR present; + union UEInformationRequest_r9__criticalExtensions_u { + struct UEInformationRequest_r9__criticalExtensions__c1 { + UEInformationRequest_r9__criticalExtensions__c1_PR present; + union UEInformationRequest_r9__criticalExtensions__c1_u { + UEInformationRequest_r9_IEs_t ueInformationRequest_r9; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct UEInformationRequest_r9__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationRequest_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEInformationRequest_r9_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationRequest-v1020-IEs.c b/lte/rrc/asn/UEInformationRequest-v1020-IEs.c new file mode 100644 index 000000000..16f455f4f --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-v1020-IEs.c @@ -0,0 +1,247 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationRequest-v1020-IEs.h" + +static int +logMeasReportReq_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +logMeasReportReq_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +logMeasReportReq_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +logMeasReportReq_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +logMeasReportReq_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +logMeasReportReq_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +logMeasReportReq_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +logMeasReportReq_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +logMeasReportReq_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +logMeasReportReq_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + logMeasReportReq_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_logMeasReportReq_r10_constr_2 = { + { APC_CONSTRAINED, 0, 0, 0, 0 } /* (0..0) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_logMeasReportReq_r10_value2enum_2[] = { + { 0, 4, "true" } +}; +static unsigned int asn_MAP_logMeasReportReq_r10_enum2value_2[] = { + 0 /* true(0) */ +}; +static asn_INTEGER_specifics_t asn_SPC_logMeasReportReq_r10_specs_2 = { + asn_MAP_logMeasReportReq_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_logMeasReportReq_r10_enum2value_2, /* N => "tag"; sorted by N */ + 1, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_logMeasReportReq_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_logMeasReportReq_r10_2 = { + "logMeasReportReq-r10", + "logMeasReportReq-r10", + logMeasReportReq_r10_2_free, + logMeasReportReq_r10_2_print, + logMeasReportReq_r10_2_constraint, + logMeasReportReq_r10_2_decode_ber, + logMeasReportReq_r10_2_encode_der, + logMeasReportReq_r10_2_decode_xer, + logMeasReportReq_r10_2_encode_xer, + logMeasReportReq_r10_2_decode_uper, + logMeasReportReq_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_logMeasReportReq_r10_tags_2, + sizeof(asn_DEF_logMeasReportReq_r10_tags_2) + /sizeof(asn_DEF_logMeasReportReq_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_logMeasReportReq_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_logMeasReportReq_r10_tags_2) + /sizeof(asn_DEF_logMeasReportReq_r10_tags_2[0]), /* 2 */ + &asn_PER_type_logMeasReportReq_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_logMeasReportReq_r10_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_4[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_4 = { + sizeof(struct UEInformationRequest_v1020_IEs__nonCriticalExtension), + offsetof(struct UEInformationRequest_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_4 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_4, + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_4, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_4) + /sizeof(asn_DEF_nonCriticalExtension_tags_4[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_4 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UEInformationRequest_v1020_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UEInformationRequest_v1020_IEs, logMeasReportReq_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_logMeasReportReq_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasReportReq-r10" + }, + { ATF_POINTER, 1, offsetof(struct UEInformationRequest_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UEInformationRequest_v1020_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UEInformationRequest_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationRequest_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* logMeasReportReq-r10 at 1304 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1305 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationRequest_v1020_IEs_specs_1 = { + sizeof(struct UEInformationRequest_v1020_IEs), + offsetof(struct UEInformationRequest_v1020_IEs, _asn_ctx), + asn_MAP_UEInformationRequest_v1020_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UEInformationRequest_v1020_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_v1020_IEs = { + "UEInformationRequest-v1020-IEs", + "UEInformationRequest-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationRequest_v1020_IEs_tags_1, + sizeof(asn_DEF_UEInformationRequest_v1020_IEs_tags_1) + /sizeof(asn_DEF_UEInformationRequest_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_UEInformationRequest_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationRequest_v1020_IEs_tags_1) + /sizeof(asn_DEF_UEInformationRequest_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationRequest_v1020_IEs_1, + 2, /* Elements count */ + &asn_SPC_UEInformationRequest_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationRequest-v1020-IEs.h b/lte/rrc/asn/UEInformationRequest-v1020-IEs.h new file mode 100644 index 000000000..a3029b1ee --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-v1020-IEs.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationRequest_v1020_IEs_H_ +#define _UEInformationRequest_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UEInformationRequest_v1020_IEs__logMeasReportReq_r10 { + UEInformationRequest_v1020_IEs__logMeasReportReq_r10_true = 0 +} e_UEInformationRequest_v1020_IEs__logMeasReportReq_r10; + +/* UEInformationRequest-v1020-IEs */ +typedef struct UEInformationRequest_v1020_IEs { + long *logMeasReportReq_r10 /* OPTIONAL */; + struct UEInformationRequest_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationRequest_v1020_IEs_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_logMeasReportReq_r10_2; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEInformationRequest_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationRequest-v930-IEs.c b/lte/rrc/asn/UEInformationRequest-v930-IEs.c new file mode 100644 index 000000000..b0918f3d2 --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-v930-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationRequest-v930-IEs.h" + +static asn_TYPE_member_t asn_MBR_UEInformationRequest_v930_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UEInformationRequest_v930_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct UEInformationRequest_v930_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationRequest_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UEInformationRequest_v930_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UEInformationRequest_v930_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationRequest_v930_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1299 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1300 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationRequest_v930_IEs_specs_1 = { + sizeof(struct UEInformationRequest_v930_IEs), + offsetof(struct UEInformationRequest_v930_IEs, _asn_ctx), + asn_MAP_UEInformationRequest_v930_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UEInformationRequest_v930_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_v930_IEs = { + "UEInformationRequest-v930-IEs", + "UEInformationRequest-v930-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationRequest_v930_IEs_tags_1, + sizeof(asn_DEF_UEInformationRequest_v930_IEs_tags_1) + /sizeof(asn_DEF_UEInformationRequest_v930_IEs_tags_1[0]), /* 1 */ + asn_DEF_UEInformationRequest_v930_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationRequest_v930_IEs_tags_1) + /sizeof(asn_DEF_UEInformationRequest_v930_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationRequest_v930_IEs_1, + 2, /* Elements count */ + &asn_SPC_UEInformationRequest_v930_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationRequest-v930-IEs.h b/lte/rrc/asn/UEInformationRequest-v930-IEs.h new file mode 100644 index 000000000..675214c23 --- /dev/null +++ b/lte/rrc/asn/UEInformationRequest-v930-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationRequest_v930_IEs_H_ +#define _UEInformationRequest_v930_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEInformationRequest_v1020_IEs; + +/* UEInformationRequest-v930-IEs */ +typedef struct UEInformationRequest_v930_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct UEInformationRequest_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationRequest_v930_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationRequest_v930_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UEInformationRequest-v1020-IEs.h" + +#endif /* _UEInformationRequest_v930_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationResponse-r9-IEs.c b/lte/rrc/asn/UEInformationResponse-r9-IEs.c new file mode 100644 index 000000000..07f153b23 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-r9-IEs.c @@ -0,0 +1,175 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationResponse-r9-IEs.h" + +static int +memb_numberOfPreamblesSent_r9_constraint_2(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 1 && value <= 200)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_numberOfPreamblesSent_r9_constr_3 = { + { APC_CONSTRAINED, 8, 8, 1, 200 } /* (1..200) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_rach_Report_r9_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9_IEs__rach_Report_r9, numberOfPreamblesSent_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_numberOfPreamblesSent_r9_constraint_2, + &asn_PER_memb_numberOfPreamblesSent_r9_constr_3, + 0, + "numberOfPreamblesSent-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9_IEs__rach_Report_r9, contentionDetected_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "contentionDetected-r9" + }, +}; +static ber_tlv_tag_t asn_DEF_rach_Report_r9_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_rach_Report_r9_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* numberOfPreamblesSent-r9 at 1322 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* contentionDetected-r9 at 1323 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_rach_Report_r9_specs_2 = { + sizeof(struct UEInformationResponse_r9_IEs__rach_Report_r9), + offsetof(struct UEInformationResponse_r9_IEs__rach_Report_r9, _asn_ctx), + asn_MAP_rach_Report_r9_tag2el_2, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_rach_Report_r9_2 = { + "rach-Report-r9", + "rach-Report-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_rach_Report_r9_tags_2, + sizeof(asn_DEF_rach_Report_r9_tags_2) + /sizeof(asn_DEF_rach_Report_r9_tags_2[0]) - 1, /* 1 */ + asn_DEF_rach_Report_r9_tags_2, /* Same as above */ + sizeof(asn_DEF_rach_Report_r9_tags_2) + /sizeof(asn_DEF_rach_Report_r9_tags_2[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_rach_Report_r9_2, + 2, /* Elements count */ + &asn_SPC_rach_Report_r9_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UEInformationResponse_r9_IEs_1[] = { + { ATF_POINTER, 3, offsetof(struct UEInformationResponse_r9_IEs, rach_Report_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + 0, + &asn_DEF_rach_Report_r9_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rach-Report-r9" + }, + { ATF_POINTER, 2, offsetof(struct UEInformationResponse_r9_IEs, rlf_Report_r9), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RLF_Report_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rlf-Report-r9" + }, + { ATF_POINTER, 1, offsetof(struct UEInformationResponse_r9_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationResponse_v930_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UEInformationResponse_r9_IEs_oms_1[] = { 0, 1, 2 }; +static ber_tlv_tag_t asn_DEF_UEInformationResponse_r9_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationResponse_r9_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rach-Report-r9 at 1322 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* rlf-Report-r9 at 1325 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* nonCriticalExtension at 1326 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationResponse_r9_IEs_specs_1 = { + sizeof(struct UEInformationResponse_r9_IEs), + offsetof(struct UEInformationResponse_r9_IEs, _asn_ctx), + asn_MAP_UEInformationResponse_r9_IEs_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_UEInformationResponse_r9_IEs_oms_1, /* Optional members */ + 3, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_r9_IEs = { + "UEInformationResponse-r9-IEs", + "UEInformationResponse-r9-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationResponse_r9_IEs_tags_1, + sizeof(asn_DEF_UEInformationResponse_r9_IEs_tags_1) + /sizeof(asn_DEF_UEInformationResponse_r9_IEs_tags_1[0]), /* 1 */ + asn_DEF_UEInformationResponse_r9_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationResponse_r9_IEs_tags_1) + /sizeof(asn_DEF_UEInformationResponse_r9_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationResponse_r9_IEs_1, + 3, /* Elements count */ + &asn_SPC_UEInformationResponse_r9_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationResponse-r9-IEs.h b/lte/rrc/asn/UEInformationResponse-r9-IEs.h new file mode 100644 index 000000000..55571b1c2 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-r9-IEs.h @@ -0,0 +1,55 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationResponse_r9_IEs_H_ +#define _UEInformationResponse_r9_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct RLF_Report_r9; +struct UEInformationResponse_v930_IEs; + +/* UEInformationResponse-r9-IEs */ +typedef struct UEInformationResponse_r9_IEs { + struct UEInformationResponse_r9_IEs__rach_Report_r9 { + long numberOfPreamblesSent_r9; + BOOLEAN_t contentionDetected_r9; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *rach_Report_r9; + struct RLF_Report_r9 *rlf_Report_r9 /* OPTIONAL */; + struct UEInformationResponse_v930_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationResponse_r9_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_r9_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "RLF-Report-r9.h" +#include "UEInformationResponse-v930-IEs.h" + +#endif /* _UEInformationResponse_r9_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationResponse-r9.c b/lte/rrc/asn/UEInformationResponse-r9.c new file mode 100644 index 000000000..f12e8cc87 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-r9.c @@ -0,0 +1,254 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationResponse-r9.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_4 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_4[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9__criticalExtensions__c1, choice.ueInformationResponse_r9), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationResponse_r9_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueInformationResponse-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_4[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueInformationResponse-r9 at 1313 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1314 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1314 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1314 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_4 = { + sizeof(struct UEInformationResponse_r9__criticalExtensions__c1), + offsetof(struct UEInformationResponse_r9__criticalExtensions__c1, _asn_ctx), + offsetof(struct UEInformationResponse_r9__criticalExtensions__c1, present), + sizeof(((struct UEInformationResponse_r9__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_4, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_4 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_4, + asn_MBR_c1_4, + 4, /* Elements count */ + &asn_SPC_c1_specs_4 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_9 = { + sizeof(struct UEInformationResponse_r9__criticalExtensions__criticalExtensionsFuture), + offsetof(struct UEInformationResponse_r9__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_9 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_9, + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_9, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_9) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_4, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1313 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1316 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_3 = { + sizeof(struct UEInformationResponse_r9__criticalExtensions), + offsetof(struct UEInformationResponse_r9__criticalExtensions, _asn_ctx), + offsetof(struct UEInformationResponse_r9__criticalExtensions, present), + sizeof(((struct UEInformationResponse_r9__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_3, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_3 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_3, + asn_MBR_criticalExtensions_3, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UEInformationResponse_r9_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9, rrc_TransactionIdentifier), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRC_TransactionIdentifier, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrc-TransactionIdentifier" + }, + { ATF_NOFLAGS, 0, offsetof(struct UEInformationResponse_r9, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_UEInformationResponse_r9_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationResponse_r9_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrc-TransactionIdentifier at 1310 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensions at 1315 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationResponse_r9_specs_1 = { + sizeof(struct UEInformationResponse_r9), + offsetof(struct UEInformationResponse_r9, _asn_ctx), + asn_MAP_UEInformationResponse_r9_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_r9 = { + "UEInformationResponse-r9", + "UEInformationResponse-r9", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationResponse_r9_tags_1, + sizeof(asn_DEF_UEInformationResponse_r9_tags_1) + /sizeof(asn_DEF_UEInformationResponse_r9_tags_1[0]), /* 1 */ + asn_DEF_UEInformationResponse_r9_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationResponse_r9_tags_1) + /sizeof(asn_DEF_UEInformationResponse_r9_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationResponse_r9_1, + 2, /* Elements count */ + &asn_SPC_UEInformationResponse_r9_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationResponse-r9.h b/lte/rrc/asn/UEInformationResponse-r9.h new file mode 100644 index 000000000..e53e860f4 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-r9.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationResponse_r9_H_ +#define _UEInformationResponse_r9_H_ + + +#include + +/* Including external dependencies */ +#include "RRC-TransactionIdentifier.h" +#include "UEInformationResponse-r9-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UEInformationResponse_r9__criticalExtensions_PR { + UEInformationResponse_r9__criticalExtensions_PR_NOTHING, /* No components present */ + UEInformationResponse_r9__criticalExtensions_PR_c1, + UEInformationResponse_r9__criticalExtensions_PR_criticalExtensionsFuture +} UEInformationResponse_r9__criticalExtensions_PR; +typedef enum UEInformationResponse_r9__criticalExtensions__c1_PR { + UEInformationResponse_r9__criticalExtensions__c1_PR_NOTHING, /* No components present */ + UEInformationResponse_r9__criticalExtensions__c1_PR_ueInformationResponse_r9, + UEInformationResponse_r9__criticalExtensions__c1_PR_spare3, + UEInformationResponse_r9__criticalExtensions__c1_PR_spare2, + UEInformationResponse_r9__criticalExtensions__c1_PR_spare1 +} UEInformationResponse_r9__criticalExtensions__c1_PR; + +/* UEInformationResponse-r9 */ +typedef struct UEInformationResponse_r9 { + RRC_TransactionIdentifier_t rrc_TransactionIdentifier; + struct UEInformationResponse_r9__criticalExtensions { + UEInformationResponse_r9__criticalExtensions_PR present; + union UEInformationResponse_r9__criticalExtensions_u { + struct UEInformationResponse_r9__criticalExtensions__c1 { + UEInformationResponse_r9__criticalExtensions__c1_PR present; + union UEInformationResponse_r9__criticalExtensions__c1_u { + UEInformationResponse_r9_IEs_t ueInformationResponse_r9; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct UEInformationResponse_r9__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationResponse_r9_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_r9; + +#ifdef __cplusplus +} +#endif + +#endif /* _UEInformationResponse_r9_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationResponse-v1020-IEs.c b/lte/rrc/asn/UEInformationResponse-v1020-IEs.c new file mode 100644 index 000000000..5378c1e19 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-v1020-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationResponse-v1020-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct UEInformationResponse_v1020_IEs__nonCriticalExtension), + offsetof(struct UEInformationResponse_v1020_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UEInformationResponse_v1020_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UEInformationResponse_v1020_IEs, logMeasReport_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_LogMeasReport_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "logMeasReport-r10" + }, + { ATF_POINTER, 1, offsetof(struct UEInformationResponse_v1020_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UEInformationResponse_v1020_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UEInformationResponse_v1020_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationResponse_v1020_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* logMeasReport-r10 at 1335 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1336 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationResponse_v1020_IEs_specs_1 = { + sizeof(struct UEInformationResponse_v1020_IEs), + offsetof(struct UEInformationResponse_v1020_IEs, _asn_ctx), + asn_MAP_UEInformationResponse_v1020_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UEInformationResponse_v1020_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_v1020_IEs = { + "UEInformationResponse-v1020-IEs", + "UEInformationResponse-v1020-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationResponse_v1020_IEs_tags_1, + sizeof(asn_DEF_UEInformationResponse_v1020_IEs_tags_1) + /sizeof(asn_DEF_UEInformationResponse_v1020_IEs_tags_1[0]), /* 1 */ + asn_DEF_UEInformationResponse_v1020_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationResponse_v1020_IEs_tags_1) + /sizeof(asn_DEF_UEInformationResponse_v1020_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationResponse_v1020_IEs_1, + 2, /* Elements count */ + &asn_SPC_UEInformationResponse_v1020_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationResponse-v1020-IEs.h b/lte/rrc/asn/UEInformationResponse-v1020-IEs.h new file mode 100644 index 000000000..0eefa6079 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-v1020-IEs.h @@ -0,0 +1,48 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationResponse_v1020_IEs_H_ +#define _UEInformationResponse_v1020_IEs_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct LogMeasReport_r10; + +/* UEInformationResponse-v1020-IEs */ +typedef struct UEInformationResponse_v1020_IEs { + struct LogMeasReport_r10 *logMeasReport_r10 /* OPTIONAL */; + struct UEInformationResponse_v1020_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationResponse_v1020_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_v1020_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "LogMeasReport-r10.h" + +#endif /* _UEInformationResponse_v1020_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UEInformationResponse-v930-IEs.c b/lte/rrc/asn/UEInformationResponse-v930-IEs.c new file mode 100644 index 000000000..6ca57a015 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-v930-IEs.c @@ -0,0 +1,72 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UEInformationResponse-v930-IEs.h" + +static asn_TYPE_member_t asn_MBR_UEInformationResponse_v930_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct UEInformationResponse_v930_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct UEInformationResponse_v930_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationResponse_v1020_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_UEInformationResponse_v930_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UEInformationResponse_v930_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UEInformationResponse_v930_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1330 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1331 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UEInformationResponse_v930_IEs_specs_1 = { + sizeof(struct UEInformationResponse_v930_IEs), + offsetof(struct UEInformationResponse_v930_IEs, _asn_ctx), + asn_MAP_UEInformationResponse_v930_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UEInformationResponse_v930_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_v930_IEs = { + "UEInformationResponse-v930-IEs", + "UEInformationResponse-v930-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UEInformationResponse_v930_IEs_tags_1, + sizeof(asn_DEF_UEInformationResponse_v930_IEs_tags_1) + /sizeof(asn_DEF_UEInformationResponse_v930_IEs_tags_1[0]), /* 1 */ + asn_DEF_UEInformationResponse_v930_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UEInformationResponse_v930_IEs_tags_1) + /sizeof(asn_DEF_UEInformationResponse_v930_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UEInformationResponse_v930_IEs_1, + 2, /* Elements count */ + &asn_SPC_UEInformationResponse_v930_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UEInformationResponse-v930-IEs.h b/lte/rrc/asn/UEInformationResponse-v930-IEs.h new file mode 100644 index 000000000..079bd2035 --- /dev/null +++ b/lte/rrc/asn/UEInformationResponse-v930-IEs.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UEInformationResponse_v930_IEs_H_ +#define _UEInformationResponse_v930_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct UEInformationResponse_v1020_IEs; + +/* UEInformationResponse-v930-IEs */ +typedef struct UEInformationResponse_v930_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct UEInformationResponse_v1020_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UEInformationResponse_v930_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UEInformationResponse_v930_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "UEInformationResponse-v1020-IEs.h" + +#endif /* _UEInformationResponse_v930_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.c b/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.c new file mode 100644 index 000000000..413e8058e --- /dev/null +++ b/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.c @@ -0,0 +1,134 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "UERadioAccessCapabilityInformation-r8-IEs.h" + +static int +memb_ue_RadioAccessCapabilityInfo_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const OCTET_STRING_t *st = (const OCTET_STRING_t *)sptr; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + + if(1 /* No applicable constraints whatsoever */) { + /* Nothing is here. See below */ + } + + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +static asn_per_constraints_t asn_PER_memb_ue_RadioAccessCapabilityInfo_constr_2 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_SEMI_CONSTRAINED, -1, -1, 0, 0 } /* (SIZE(0..MAX)) */, + 0, 0 /* No PER value map */ +}; +static const ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct nonCriticalExtension), + offsetof(struct nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UERadioAccessCapabilityInformation_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UERadioAccessCapabilityInformation_r8_IEs, ue_RadioAccessCapabilityInfo), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + memb_ue_RadioAccessCapabilityInfo_constraint_1, + &asn_PER_memb_ue_RadioAccessCapabilityInfo_constr_2, + 0, + "ue-RadioAccessCapabilityInfo" + }, + { ATF_POINTER, 1, offsetof(struct UERadioAccessCapabilityInformation_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static const int asn_MAP_UERadioAccessCapabilityInformation_r8_IEs_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UERadioAccessCapabilityInformation_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ue-RadioAccessCapabilityInfo */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UERadioAccessCapabilityInformation_r8_IEs_specs_1 = { + sizeof(struct UERadioAccessCapabilityInformation_r8_IEs), + offsetof(struct UERadioAccessCapabilityInformation_r8_IEs, _asn_ctx), + asn_MAP_UERadioAccessCapabilityInformation_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UERadioAccessCapabilityInformation_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UERadioAccessCapabilityInformation_r8_IEs = { + "UERadioAccessCapabilityInformation-r8-IEs", + "UERadioAccessCapabilityInformation-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1, + sizeof(asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1) + /sizeof(asn_DEF_UERadioAccessCapabilityInformation_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UERadioAccessCapabilityInformation_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_UERadioAccessCapabilityInformation_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h b/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h new file mode 100644 index 000000000..d01862ab3 --- /dev/null +++ b/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _UERadioAccessCapabilityInformation_r8_IEs_H_ +#define _UERadioAccessCapabilityInformation_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UERadioAccessCapabilityInformation-r8-IEs */ +typedef struct UERadioAccessCapabilityInformation_r8_IEs { + OCTET_STRING_t ue_RadioAccessCapabilityInfo; + struct nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UERadioAccessCapabilityInformation_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UERadioAccessCapabilityInformation_r8_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _UERadioAccessCapabilityInformation_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation.c b/lte/rrc/asn/UERadioAccessCapabilityInformation.c new file mode 100644 index 000000000..2faaf127c --- /dev/null +++ b/lte/rrc/asn/UERadioAccessCapabilityInformation.c @@ -0,0 +1,283 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#include "UERadioAccessCapabilityInformation.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 GCC_NOTUSED = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.ueRadioAccessCapabilityInformation_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UERadioAccessCapabilityInformation_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueRadioAccessCapabilityInformation-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare7), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare7" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare6), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare6" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare5), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare5" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare4), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare4" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ueRadioAccessCapabilityInformation-r8 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare7 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare6 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* spare5 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* spare4 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* spare3 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* spare2 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 } /* spare1 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct c1), + offsetof(struct c1, _asn_ctx), + offsetof(struct c1, present), + sizeof(((struct c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 8, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 8, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static const ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_12[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_12 = { + sizeof(struct criticalExtensionsFuture), + offsetof(struct criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_12 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_12, + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_12, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_12) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_12[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_12 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_12, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct criticalExtensions), + offsetof(struct criticalExtensions, _asn_ctx), + offsetof(struct criticalExtensions, present), + sizeof(((struct criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UERadioAccessCapabilityInformation_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UERadioAccessCapabilityInformation, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static const ber_tlv_tag_t asn_DEF_UERadioAccessCapabilityInformation_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_UERadioAccessCapabilityInformation_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UERadioAccessCapabilityInformation_specs_1 = { + sizeof(struct UERadioAccessCapabilityInformation), + offsetof(struct UERadioAccessCapabilityInformation, _asn_ctx), + asn_MAP_UERadioAccessCapabilityInformation_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UERadioAccessCapabilityInformation = { + "UERadioAccessCapabilityInformation", + "UERadioAccessCapabilityInformation", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UERadioAccessCapabilityInformation_tags_1, + sizeof(asn_DEF_UERadioAccessCapabilityInformation_tags_1) + /sizeof(asn_DEF_UERadioAccessCapabilityInformation_tags_1[0]), /* 1 */ + asn_DEF_UERadioAccessCapabilityInformation_tags_1, /* Same as above */ + sizeof(asn_DEF_UERadioAccessCapabilityInformation_tags_1) + /sizeof(asn_DEF_UERadioAccessCapabilityInformation_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UERadioAccessCapabilityInformation_1, + 1, /* Elements count */ + &asn_SPC_UERadioAccessCapabilityInformation_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation.h b/lte/rrc/asn/UERadioAccessCapabilityInformation.h new file mode 100644 index 000000000..b4861e139 --- /dev/null +++ b/lte/rrc/asn/UERadioAccessCapabilityInformation.h @@ -0,0 +1,85 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-InterNodeDefinitions" + * found in "EUTRA-InterNodeDefinitions.asn" + */ + +#ifndef _UERadioAccessCapabilityInformation_H_ +#define _UERadioAccessCapabilityInformation_H_ + + +#include + +/* Including external dependencies */ +#include "UERadioAccessCapabilityInformation-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum criticalExtensions_PR { + criticalExtensions_PR_NOTHING, /* No components present */ + criticalExtensions_PR_c1, + criticalExtensions_PR_criticalExtensionsFuture +} criticalExtensions_PR; +typedef enum c1_PR { + c1_PR_NOTHING, /* No components present */ + c1_PR_ueRadioAccessCapabilityInformation_r8, + c1_PR_spare7, + c1_PR_spare6, + c1_PR_spare5, + c1_PR_spare4, + c1_PR_spare3, + c1_PR_spare2, + c1_PR_spare1 +} c1_PR; + +/* UERadioAccessCapabilityInformation */ +typedef struct UERadioAccessCapabilityInformation { + struct criticalExtensions { + criticalExtensions_PR present; + union UERadioAccessCapabilityInformation__criticalExtensions_u { + struct c1 { + c1_PR present; + union UERadioAccessCapabilityInformation__criticalExtensions__c1_u { + UERadioAccessCapabilityInformation_r8_IEs_t ueRadioAccessCapabilityInformation_r8; + NULL_t spare7; + NULL_t spare6; + NULL_t spare5; + NULL_t spare4; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UERadioAccessCapabilityInformation_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UERadioAccessCapabilityInformation; + +#ifdef __cplusplus +} +#endif + +#endif /* _UERadioAccessCapabilityInformation_H_ */ +#include diff --git a/lte/rrc/asn/UL-AM-RLC.c b/lte/rrc/asn/UL-AM-RLC.c new file mode 100644 index 000000000..a679a0f00 --- /dev/null +++ b/lte/rrc/asn/UL-AM-RLC.c @@ -0,0 +1,241 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-AM-RLC.h" + +static int +maxRetxThreshold_5_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +maxRetxThreshold_5_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +maxRetxThreshold_5_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +maxRetxThreshold_5_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +maxRetxThreshold_5_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +maxRetxThreshold_5_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +maxRetxThreshold_5_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +maxRetxThreshold_5_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +maxRetxThreshold_5_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +maxRetxThreshold_5_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + maxRetxThreshold_5_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_maxRetxThreshold_constr_5 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_maxRetxThreshold_value2enum_5[] = { + { 0, 2, "t1" }, + { 1, 2, "t2" }, + { 2, 2, "t3" }, + { 3, 2, "t4" }, + { 4, 2, "t6" }, + { 5, 2, "t8" }, + { 6, 3, "t16" }, + { 7, 3, "t32" } +}; +static unsigned int asn_MAP_maxRetxThreshold_enum2value_5[] = { + 0, /* t1(0) */ + 6, /* t16(6) */ + 1, /* t2(1) */ + 2, /* t3(2) */ + 7, /* t32(7) */ + 3, /* t4(3) */ + 4, /* t6(4) */ + 5 /* t8(5) */ +}; +static asn_INTEGER_specifics_t asn_SPC_maxRetxThreshold_specs_5 = { + asn_MAP_maxRetxThreshold_value2enum_5, /* "tag" => N; sorted by tag */ + asn_MAP_maxRetxThreshold_enum2value_5, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_maxRetxThreshold_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_maxRetxThreshold_5 = { + "maxRetxThreshold", + "maxRetxThreshold", + maxRetxThreshold_5_free, + maxRetxThreshold_5_print, + maxRetxThreshold_5_constraint, + maxRetxThreshold_5_decode_ber, + maxRetxThreshold_5_encode_der, + maxRetxThreshold_5_decode_xer, + maxRetxThreshold_5_encode_xer, + maxRetxThreshold_5_decode_uper, + maxRetxThreshold_5_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_maxRetxThreshold_tags_5, + sizeof(asn_DEF_maxRetxThreshold_tags_5) + /sizeof(asn_DEF_maxRetxThreshold_tags_5[0]) - 1, /* 1 */ + asn_DEF_maxRetxThreshold_tags_5, /* Same as above */ + sizeof(asn_DEF_maxRetxThreshold_tags_5) + /sizeof(asn_DEF_maxRetxThreshold_tags_5[0]), /* 2 */ + &asn_PER_type_maxRetxThreshold_constr_5, + 0, 0, /* Defined elsewhere */ + &asn_SPC_maxRetxThreshold_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UL_AM_RLC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_AM_RLC, t_PollRetransmit), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_T_PollRetransmit, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "t-PollRetransmit" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_AM_RLC, pollPDU), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PollPDU, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pollPDU" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_AM_RLC, pollByte), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PollByte, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pollByte" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_AM_RLC, maxRetxThreshold), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_maxRetxThreshold_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "maxRetxThreshold" + }, +}; +static ber_tlv_tag_t asn_DEF_UL_AM_RLC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UL_AM_RLC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* t-PollRetransmit at 2530 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* pollPDU at 2531 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* pollByte at 2532 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* maxRetxThreshold at 2534 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UL_AM_RLC_specs_1 = { + sizeof(struct UL_AM_RLC), + offsetof(struct UL_AM_RLC, _asn_ctx), + asn_MAP_UL_AM_RLC_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_AM_RLC = { + "UL-AM-RLC", + "UL-AM-RLC", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UL_AM_RLC_tags_1, + sizeof(asn_DEF_UL_AM_RLC_tags_1) + /sizeof(asn_DEF_UL_AM_RLC_tags_1[0]), /* 1 */ + asn_DEF_UL_AM_RLC_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_AM_RLC_tags_1) + /sizeof(asn_DEF_UL_AM_RLC_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UL_AM_RLC_1, + 4, /* Elements count */ + &asn_SPC_UL_AM_RLC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-AM-RLC.h b/lte/rrc/asn/UL-AM-RLC.h new file mode 100644 index 000000000..80c5753e7 --- /dev/null +++ b/lte/rrc/asn/UL-AM-RLC.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_AM_RLC_H_ +#define _UL_AM_RLC_H_ + + +#include + +/* Including external dependencies */ +#include "T-PollRetransmit.h" +#include "PollPDU.h" +#include "PollByte.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UL_AM_RLC__maxRetxThreshold { + UL_AM_RLC__maxRetxThreshold_t1 = 0, + UL_AM_RLC__maxRetxThreshold_t2 = 1, + UL_AM_RLC__maxRetxThreshold_t3 = 2, + UL_AM_RLC__maxRetxThreshold_t4 = 3, + UL_AM_RLC__maxRetxThreshold_t6 = 4, + UL_AM_RLC__maxRetxThreshold_t8 = 5, + UL_AM_RLC__maxRetxThreshold_t16 = 6, + UL_AM_RLC__maxRetxThreshold_t32 = 7 +} e_UL_AM_RLC__maxRetxThreshold; + +/* UL-AM-RLC */ +typedef struct UL_AM_RLC { + T_PollRetransmit_t t_PollRetransmit; + PollPDU_t pollPDU; + PollByte_t pollByte; + long maxRetxThreshold; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_AM_RLC_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_maxRetxThreshold_5; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UL_AM_RLC; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_AM_RLC_H_ */ +#include diff --git a/lte/rrc/asn/UL-CCCH-Message.c b/lte/rrc/asn/UL-CCCH-Message.c new file mode 100644 index 000000000..ea4f35698 --- /dev/null +++ b/lte/rrc/asn/UL-CCCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-CCCH-Message.h" + +static asn_TYPE_member_t asn_MBR_UL_CCCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_CCCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_UL_CCCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_UL_CCCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UL_CCCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 97 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UL_CCCH_Message_specs_1 = { + sizeof(struct UL_CCCH_Message), + offsetof(struct UL_CCCH_Message, _asn_ctx), + asn_MAP_UL_CCCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_CCCH_Message = { + "UL-CCCH-Message", + "UL-CCCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UL_CCCH_Message_tags_1, + sizeof(asn_DEF_UL_CCCH_Message_tags_1) + /sizeof(asn_DEF_UL_CCCH_Message_tags_1[0]), /* 1 */ + asn_DEF_UL_CCCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_CCCH_Message_tags_1) + /sizeof(asn_DEF_UL_CCCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UL_CCCH_Message_1, + 1, /* Elements count */ + &asn_SPC_UL_CCCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-CCCH-Message.h b/lte/rrc/asn/UL-CCCH-Message.h new file mode 100644 index 000000000..113475c91 --- /dev/null +++ b/lte/rrc/asn/UL-CCCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_CCCH_Message_H_ +#define _UL_CCCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "UL-CCCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-CCCH-Message */ +typedef struct UL_CCCH_Message { + UL_CCCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_CCCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_CCCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_CCCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/UL-CCCH-MessageType.c b/lte/rrc/asn/UL-CCCH-MessageType.c new file mode 100644 index 000000000..5edc3af87 --- /dev/null +++ b/lte/rrc/asn/UL-CCCH-MessageType.c @@ -0,0 +1,172 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-CCCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_UL_CCCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_CCCH_MessageType__c1, choice.rrcConnectionReestablishmentRequest), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentRequest, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishmentRequest" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_CCCH_MessageType__c1, choice.rrcConnectionRequest), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionRequest, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionRequest" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* rrcConnectionReestablishmentRequest at 101 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* rrcConnectionRequest at 103 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct UL_CCCH_MessageType__c1), + offsetof(struct UL_CCCH_MessageType__c1, _asn_ctx), + offsetof(struct UL_CCCH_MessageType__c1, present), + sizeof(((struct UL_CCCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 2, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_5[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_5 = { + sizeof(struct UL_CCCH_MessageType__messageClassExtension), + offsetof(struct UL_CCCH_MessageType__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_5 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_5, + sizeof(asn_DEF_messageClassExtension_tags_5) + /sizeof(asn_DEF_messageClassExtension_tags_5[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_5, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_5) + /sizeof(asn_DEF_messageClassExtension_tags_5[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_5 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UL_CCCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_CCCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_CCCH_MessageType, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_5, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_UL_CCCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 101 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 104 */ +}; +static asn_CHOICE_specifics_t asn_SPC_UL_CCCH_MessageType_specs_1 = { + sizeof(struct UL_CCCH_MessageType), + offsetof(struct UL_CCCH_MessageType, _asn_ctx), + offsetof(struct UL_CCCH_MessageType, present), + sizeof(((struct UL_CCCH_MessageType *)0)->present), + asn_MAP_UL_CCCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_CCCH_MessageType = { + "UL-CCCH-MessageType", + "UL-CCCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_UL_CCCH_MessageType_constr_1, + asn_MBR_UL_CCCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_UL_CCCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-CCCH-MessageType.h b/lte/rrc/asn/UL-CCCH-MessageType.h new file mode 100644 index 000000000..8ef5cd128 --- /dev/null +++ b/lte/rrc/asn/UL-CCCH-MessageType.h @@ -0,0 +1,69 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_CCCH_MessageType_H_ +#define _UL_CCCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "RRCConnectionReestablishmentRequest.h" +#include "RRCConnectionRequest.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UL_CCCH_MessageType_PR { + UL_CCCH_MessageType_PR_NOTHING, /* No components present */ + UL_CCCH_MessageType_PR_c1, + UL_CCCH_MessageType_PR_messageClassExtension +} UL_CCCH_MessageType_PR; +typedef enum UL_CCCH_MessageType__c1_PR { + UL_CCCH_MessageType__c1_PR_NOTHING, /* No components present */ + UL_CCCH_MessageType__c1_PR_rrcConnectionReestablishmentRequest, + UL_CCCH_MessageType__c1_PR_rrcConnectionRequest +} UL_CCCH_MessageType__c1_PR; + +/* UL-CCCH-MessageType */ +typedef struct UL_CCCH_MessageType { + UL_CCCH_MessageType_PR present; + union UL_CCCH_MessageType_u { + struct UL_CCCH_MessageType__c1 { + UL_CCCH_MessageType__c1_PR present; + union UL_CCCH_MessageType__c1_u { + RRCConnectionReestablishmentRequest_t rrcConnectionReestablishmentRequest; + RRCConnectionRequest_t rrcConnectionRequest; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct UL_CCCH_MessageType__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_CCCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_CCCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_CCCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/UL-CyclicPrefixLength.c b/lte/rrc/asn/UL-CyclicPrefixLength.c new file mode 100644 index 000000000..c447bbeac --- /dev/null +++ b/lte/rrc/asn/UL-CyclicPrefixLength.c @@ -0,0 +1,146 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-CyclicPrefixLength.h" + +int +UL_CyclicPrefixLength_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +void +UL_CyclicPrefixLength_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +int +UL_CyclicPrefixLength_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +asn_dec_rval_t +UL_CyclicPrefixLength_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +asn_enc_rval_t +UL_CyclicPrefixLength_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +asn_dec_rval_t +UL_CyclicPrefixLength_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +asn_enc_rval_t +UL_CyclicPrefixLength_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +asn_dec_rval_t +UL_CyclicPrefixLength_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +asn_enc_rval_t +UL_CyclicPrefixLength_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + UL_CyclicPrefixLength_1_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_UL_CyclicPrefixLength_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_UL_CyclicPrefixLength_value2enum_1[] = { + { 0, 4, "len1" }, + { 1, 4, "len2" } +}; +static unsigned int asn_MAP_UL_CyclicPrefixLength_enum2value_1[] = { + 0, /* len1(0) */ + 1 /* len2(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_UL_CyclicPrefixLength_specs_1 = { + asn_MAP_UL_CyclicPrefixLength_value2enum_1, /* "tag" => N; sorted by tag */ + asn_MAP_UL_CyclicPrefixLength_enum2value_1, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_UL_CyclicPrefixLength_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +asn_TYPE_descriptor_t asn_DEF_UL_CyclicPrefixLength = { + "UL-CyclicPrefixLength", + "UL-CyclicPrefixLength", + UL_CyclicPrefixLength_free, + UL_CyclicPrefixLength_print, + UL_CyclicPrefixLength_constraint, + UL_CyclicPrefixLength_decode_ber, + UL_CyclicPrefixLength_encode_der, + UL_CyclicPrefixLength_decode_xer, + UL_CyclicPrefixLength_encode_xer, + UL_CyclicPrefixLength_decode_uper, + UL_CyclicPrefixLength_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UL_CyclicPrefixLength_tags_1, + sizeof(asn_DEF_UL_CyclicPrefixLength_tags_1) + /sizeof(asn_DEF_UL_CyclicPrefixLength_tags_1[0]), /* 1 */ + asn_DEF_UL_CyclicPrefixLength_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_CyclicPrefixLength_tags_1) + /sizeof(asn_DEF_UL_CyclicPrefixLength_tags_1[0]), /* 1 */ + &asn_PER_type_UL_CyclicPrefixLength_constr_1, + 0, 0, /* Defined elsewhere */ + &asn_SPC_UL_CyclicPrefixLength_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-CyclicPrefixLength.h b/lte/rrc/asn/UL-CyclicPrefixLength.h new file mode 100644 index 000000000..9511a65c5 --- /dev/null +++ b/lte/rrc/asn/UL-CyclicPrefixLength.h @@ -0,0 +1,47 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_CyclicPrefixLength_H_ +#define _UL_CyclicPrefixLength_H_ + + +#include + +/* Including external dependencies */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UL_CyclicPrefixLength { + UL_CyclicPrefixLength_len1 = 0, + UL_CyclicPrefixLength_len2 = 1 +} e_UL_CyclicPrefixLength; + +/* UL-CyclicPrefixLength */ +typedef long UL_CyclicPrefixLength_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_CyclicPrefixLength; +asn_struct_free_f UL_CyclicPrefixLength_free; +asn_struct_print_f UL_CyclicPrefixLength_print; +asn_constr_check_f UL_CyclicPrefixLength_constraint; +ber_type_decoder_f UL_CyclicPrefixLength_decode_ber; +der_type_encoder_f UL_CyclicPrefixLength_encode_der; +xer_type_decoder_f UL_CyclicPrefixLength_decode_xer; +xer_type_encoder_f UL_CyclicPrefixLength_encode_xer; +per_type_decoder_f UL_CyclicPrefixLength_decode_uper; +per_type_encoder_f UL_CyclicPrefixLength_encode_uper; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_CyclicPrefixLength_H_ */ +#include diff --git a/lte/rrc/asn/UL-DCCH-Message.c b/lte/rrc/asn/UL-DCCH-Message.c new file mode 100644 index 000000000..bf3e605f4 --- /dev/null +++ b/lte/rrc/asn/UL-DCCH-Message.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-DCCH-Message.h" + +static asn_TYPE_member_t asn_MBR_UL_DCCH_Message_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_Message, message), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_UL_DCCH_MessageType, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "message" + }, +}; +static ber_tlv_tag_t asn_DEF_UL_DCCH_Message_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UL_DCCH_Message_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* message at 110 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UL_DCCH_Message_specs_1 = { + sizeof(struct UL_DCCH_Message), + offsetof(struct UL_DCCH_Message, _asn_ctx), + asn_MAP_UL_DCCH_Message_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_DCCH_Message = { + "UL-DCCH-Message", + "UL-DCCH-Message", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UL_DCCH_Message_tags_1, + sizeof(asn_DEF_UL_DCCH_Message_tags_1) + /sizeof(asn_DEF_UL_DCCH_Message_tags_1[0]), /* 1 */ + asn_DEF_UL_DCCH_Message_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_DCCH_Message_tags_1) + /sizeof(asn_DEF_UL_DCCH_Message_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UL_DCCH_Message_1, + 1, /* Elements count */ + &asn_SPC_UL_DCCH_Message_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-DCCH-Message.h b/lte/rrc/asn/UL-DCCH-Message.h new file mode 100644 index 000000000..b383e1ad8 --- /dev/null +++ b/lte/rrc/asn/UL-DCCH-Message.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_DCCH_Message_H_ +#define _UL_DCCH_Message_H_ + + +#include + +/* Including external dependencies */ +#include "UL-DCCH-MessageType.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-DCCH-Message */ +typedef struct UL_DCCH_Message { + UL_DCCH_MessageType_t message; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_DCCH_Message_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_DCCH_Message; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_DCCH_Message_H_ */ +#include diff --git a/lte/rrc/asn/UL-DCCH-MessageType.c b/lte/rrc/asn/UL-DCCH-MessageType.c new file mode 100644 index 000000000..8c3c7e046 --- /dev/null +++ b/lte/rrc/asn/UL-DCCH-MessageType.c @@ -0,0 +1,312 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-DCCH-MessageType.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_2 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_UL_DCCH_MessageType_constr_1 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.csfbParametersRequestCDMA2000), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CSFBParametersRequestCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "csfbParametersRequestCDMA2000" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.measurementReport), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasurementReport, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measurementReport" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.rrcConnectionReconfigurationComplete), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReconfigurationComplete, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReconfigurationComplete" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.rrcConnectionReestablishmentComplete), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionReestablishmentComplete, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionReestablishmentComplete" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.rrcConnectionSetupComplete), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RRCConnectionSetupComplete, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rrcConnectionSetupComplete" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.securityModeComplete), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeComplete, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityModeComplete" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.securityModeFailure), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SecurityModeFailure, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "securityModeFailure" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.ueCapabilityInformation), + (ASN_TAG_CLASS_CONTEXT | (7 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UECapabilityInformation, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueCapabilityInformation" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.ulHandoverPreparationTransfer), + (ASN_TAG_CLASS_CONTEXT | (8 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULHandoverPreparationTransfer, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ulHandoverPreparationTransfer" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.ulInformationTransfer), + (ASN_TAG_CLASS_CONTEXT | (9 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULInformationTransfer, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ulInformationTransfer" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.counterCheckResponse), + (ASN_TAG_CLASS_CONTEXT | (10 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CounterCheckResponse, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "counterCheckResponse" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.ueInformationResponse_r9), + (ASN_TAG_CLASS_CONTEXT | (11 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_UEInformationResponse_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ueInformationResponse-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.proximityIndication_r9), + (ASN_TAG_CLASS_CONTEXT | (12 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ProximityIndication_r9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "proximityIndication-r9" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.rnReconfigurationComplete_r10), + (ASN_TAG_CLASS_CONTEXT | (13 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RNReconfigurationComplete_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "rnReconfigurationComplete-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.mbmsCountingResponse_r10), + (ASN_TAG_CLASS_CONTEXT | (14 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MBMSCountingResponse_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mbmsCountingResponse-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType__c1, choice.interFreqRSTDMeasurementIndication_r10), + (ASN_TAG_CLASS_CONTEXT | (15 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_InterFreqRSTDMeasurementIndication_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "interFreqRSTDMeasurementIndication-r10" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* csfbParametersRequestCDMA2000 at 114 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measurementReport at 115 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* rrcConnectionReconfigurationComplete at 116 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* rrcConnectionReestablishmentComplete at 117 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* rrcConnectionSetupComplete at 118 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* securityModeComplete at 119 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 }, /* securityModeFailure at 120 */ + { (ASN_TAG_CLASS_CONTEXT | (7 << 2)), 7, 0, 0 }, /* ueCapabilityInformation at 121 */ + { (ASN_TAG_CLASS_CONTEXT | (8 << 2)), 8, 0, 0 }, /* ulHandoverPreparationTransfer at 122 */ + { (ASN_TAG_CLASS_CONTEXT | (9 << 2)), 9, 0, 0 }, /* ulInformationTransfer at 123 */ + { (ASN_TAG_CLASS_CONTEXT | (10 << 2)), 10, 0, 0 }, /* counterCheckResponse at 124 */ + { (ASN_TAG_CLASS_CONTEXT | (11 << 2)), 11, 0, 0 }, /* ueInformationResponse-r9 at 125 */ + { (ASN_TAG_CLASS_CONTEXT | (12 << 2)), 12, 0, 0 }, /* proximityIndication-r9 at 126 */ + { (ASN_TAG_CLASS_CONTEXT | (13 << 2)), 13, 0, 0 }, /* rnReconfigurationComplete-r10 at 127 */ + { (ASN_TAG_CLASS_CONTEXT | (14 << 2)), 14, 0, 0 }, /* mbmsCountingResponse-r10 at 128 */ + { (ASN_TAG_CLASS_CONTEXT | (15 << 2)), 15, 0, 0 } /* interFreqRSTDMeasurementIndication-r10 at 130 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_2 = { + sizeof(struct UL_DCCH_MessageType__c1), + offsetof(struct UL_DCCH_MessageType__c1, _asn_ctx), + offsetof(struct UL_DCCH_MessageType__c1, present), + sizeof(((struct UL_DCCH_MessageType__c1 *)0)->present), + asn_MAP_c1_tag2el_2, + 16, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_2 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_2, + asn_MBR_c1_2, + 16, /* Elements count */ + &asn_SPC_c1_specs_2 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_messageClassExtension_tags_19[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_messageClassExtension_specs_19 = { + sizeof(struct UL_DCCH_MessageType__messageClassExtension), + offsetof(struct UL_DCCH_MessageType__messageClassExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_messageClassExtension_19 = { + "messageClassExtension", + "messageClassExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_messageClassExtension_tags_19, + sizeof(asn_DEF_messageClassExtension_tags_19) + /sizeof(asn_DEF_messageClassExtension_tags_19[0]) - 1, /* 1 */ + asn_DEF_messageClassExtension_tags_19, /* Same as above */ + sizeof(asn_DEF_messageClassExtension_tags_19) + /sizeof(asn_DEF_messageClassExtension_tags_19[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_messageClassExtension_specs_19 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UL_DCCH_MessageType_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_DCCH_MessageType, choice.messageClassExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_messageClassExtension_19, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "messageClassExtension" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_UL_DCCH_MessageType_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 114 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* messageClassExtension at 131 */ +}; +static asn_CHOICE_specifics_t asn_SPC_UL_DCCH_MessageType_specs_1 = { + sizeof(struct UL_DCCH_MessageType), + offsetof(struct UL_DCCH_MessageType, _asn_ctx), + offsetof(struct UL_DCCH_MessageType, present), + sizeof(((struct UL_DCCH_MessageType *)0)->present), + asn_MAP_UL_DCCH_MessageType_tag2el_1, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_DCCH_MessageType = { + "UL-DCCH-MessageType", + "UL-DCCH-MessageType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_UL_DCCH_MessageType_constr_1, + asn_MBR_UL_DCCH_MessageType_1, + 2, /* Elements count */ + &asn_SPC_UL_DCCH_MessageType_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-DCCH-MessageType.h b/lte/rrc/asn/UL-DCCH-MessageType.h new file mode 100644 index 000000000..a4eabded4 --- /dev/null +++ b/lte/rrc/asn/UL-DCCH-MessageType.h @@ -0,0 +1,111 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_DCCH_MessageType_H_ +#define _UL_DCCH_MessageType_H_ + + +#include + +/* Including external dependencies */ +#include "CSFBParametersRequestCDMA2000.h" +#include "MeasurementReport.h" +#include "RRCConnectionReconfigurationComplete.h" +#include "RRCConnectionReestablishmentComplete.h" +#include "RRCConnectionSetupComplete.h" +#include "SecurityModeComplete.h" +#include "SecurityModeFailure.h" +#include "UECapabilityInformation.h" +#include "ULHandoverPreparationTransfer.h" +#include "ULInformationTransfer.h" +#include "CounterCheckResponse.h" +#include "UEInformationResponse-r9.h" +#include "ProximityIndication-r9.h" +#include "RNReconfigurationComplete-r10.h" +#include "MBMSCountingResponse-r10.h" +#include "InterFreqRSTDMeasurementIndication-r10.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UL_DCCH_MessageType_PR { + UL_DCCH_MessageType_PR_NOTHING, /* No components present */ + UL_DCCH_MessageType_PR_c1, + UL_DCCH_MessageType_PR_messageClassExtension +} UL_DCCH_MessageType_PR; +typedef enum UL_DCCH_MessageType__c1_PR { + UL_DCCH_MessageType__c1_PR_NOTHING, /* No components present */ + UL_DCCH_MessageType__c1_PR_csfbParametersRequestCDMA2000, + UL_DCCH_MessageType__c1_PR_measurementReport, + UL_DCCH_MessageType__c1_PR_rrcConnectionReconfigurationComplete, + UL_DCCH_MessageType__c1_PR_rrcConnectionReestablishmentComplete, + UL_DCCH_MessageType__c1_PR_rrcConnectionSetupComplete, + UL_DCCH_MessageType__c1_PR_securityModeComplete, + UL_DCCH_MessageType__c1_PR_securityModeFailure, + UL_DCCH_MessageType__c1_PR_ueCapabilityInformation, + UL_DCCH_MessageType__c1_PR_ulHandoverPreparationTransfer, + UL_DCCH_MessageType__c1_PR_ulInformationTransfer, + UL_DCCH_MessageType__c1_PR_counterCheckResponse, + UL_DCCH_MessageType__c1_PR_ueInformationResponse_r9, + UL_DCCH_MessageType__c1_PR_proximityIndication_r9, + UL_DCCH_MessageType__c1_PR_rnReconfigurationComplete_r10, + UL_DCCH_MessageType__c1_PR_mbmsCountingResponse_r10, + UL_DCCH_MessageType__c1_PR_interFreqRSTDMeasurementIndication_r10 +} UL_DCCH_MessageType__c1_PR; + +/* UL-DCCH-MessageType */ +typedef struct UL_DCCH_MessageType { + UL_DCCH_MessageType_PR present; + union UL_DCCH_MessageType_u { + struct UL_DCCH_MessageType__c1 { + UL_DCCH_MessageType__c1_PR present; + union UL_DCCH_MessageType__c1_u { + CSFBParametersRequestCDMA2000_t csfbParametersRequestCDMA2000; + MeasurementReport_t measurementReport; + RRCConnectionReconfigurationComplete_t rrcConnectionReconfigurationComplete; + RRCConnectionReestablishmentComplete_t rrcConnectionReestablishmentComplete; + RRCConnectionSetupComplete_t rrcConnectionSetupComplete; + SecurityModeComplete_t securityModeComplete; + SecurityModeFailure_t securityModeFailure; + UECapabilityInformation_t ueCapabilityInformation; + ULHandoverPreparationTransfer_t ulHandoverPreparationTransfer; + ULInformationTransfer_t ulInformationTransfer; + CounterCheckResponse_t counterCheckResponse; + UEInformationResponse_r9_t ueInformationResponse_r9; + ProximityIndication_r9_t proximityIndication_r9; + RNReconfigurationComplete_r10_t rnReconfigurationComplete_r10; + MBMSCountingResponse_r10_t mbmsCountingResponse_r10; + InterFreqRSTDMeasurementIndication_r10_t interFreqRSTDMeasurementIndication_r10; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct UL_DCCH_MessageType__messageClassExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } messageClassExtension; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_DCCH_MessageType_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_DCCH_MessageType; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_DCCH_MessageType_H_ */ +#include diff --git a/lte/rrc/asn/UL-ReferenceSignalsPUSCH.c b/lte/rrc/asn/UL-ReferenceSignalsPUSCH.c new file mode 100644 index 000000000..a55f443df --- /dev/null +++ b/lte/rrc/asn/UL-ReferenceSignalsPUSCH.c @@ -0,0 +1,150 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-ReferenceSignalsPUSCH.h" + +static int +memb_groupAssignmentPUSCH_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 29)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_cyclicShift_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_groupAssignmentPUSCH_constr_3 = { + { APC_CONSTRAINED, 5, 5, 0, 29 } /* (0..29) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_cyclicShift_constr_5 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_UL_ReferenceSignalsPUSCH_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_ReferenceSignalsPUSCH, groupHoppingEnabled), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "groupHoppingEnabled" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_ReferenceSignalsPUSCH, groupAssignmentPUSCH), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_groupAssignmentPUSCH_constraint_1, + &asn_PER_memb_groupAssignmentPUSCH_constr_3, + 0, + "groupAssignmentPUSCH" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_ReferenceSignalsPUSCH, sequenceHoppingEnabled), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sequenceHoppingEnabled" + }, + { ATF_NOFLAGS, 0, offsetof(struct UL_ReferenceSignalsPUSCH, cyclicShift), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_cyclicShift_constraint_1, + &asn_PER_memb_cyclicShift_constr_5, + 0, + "cyclicShift" + }, +}; +static ber_tlv_tag_t asn_DEF_UL_ReferenceSignalsPUSCH_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UL_ReferenceSignalsPUSCH_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* groupHoppingEnabled at 2307 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* groupAssignmentPUSCH at 2308 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* sequenceHoppingEnabled at 2309 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* cyclicShift at 2310 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UL_ReferenceSignalsPUSCH_specs_1 = { + sizeof(struct UL_ReferenceSignalsPUSCH), + offsetof(struct UL_ReferenceSignalsPUSCH, _asn_ctx), + asn_MAP_UL_ReferenceSignalsPUSCH_tag2el_1, + 4, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_ReferenceSignalsPUSCH = { + "UL-ReferenceSignalsPUSCH", + "UL-ReferenceSignalsPUSCH", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UL_ReferenceSignalsPUSCH_tags_1, + sizeof(asn_DEF_UL_ReferenceSignalsPUSCH_tags_1) + /sizeof(asn_DEF_UL_ReferenceSignalsPUSCH_tags_1[0]), /* 1 */ + asn_DEF_UL_ReferenceSignalsPUSCH_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_ReferenceSignalsPUSCH_tags_1) + /sizeof(asn_DEF_UL_ReferenceSignalsPUSCH_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UL_ReferenceSignalsPUSCH_1, + 4, /* Elements count */ + &asn_SPC_UL_ReferenceSignalsPUSCH_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-ReferenceSignalsPUSCH.h b/lte/rrc/asn/UL-ReferenceSignalsPUSCH.h new file mode 100644 index 000000000..0c47b86f1 --- /dev/null +++ b/lte/rrc/asn/UL-ReferenceSignalsPUSCH.h @@ -0,0 +1,42 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_ReferenceSignalsPUSCH_H_ +#define _UL_ReferenceSignalsPUSCH_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-ReferenceSignalsPUSCH */ +typedef struct UL_ReferenceSignalsPUSCH { + BOOLEAN_t groupHoppingEnabled; + long groupAssignmentPUSCH; + BOOLEAN_t sequenceHoppingEnabled; + long cyclicShift; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_ReferenceSignalsPUSCH_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_ReferenceSignalsPUSCH; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_ReferenceSignalsPUSCH_H_ */ +#include diff --git a/lte/rrc/asn/UL-UM-RLC.c b/lte/rrc/asn/UL-UM-RLC.c new file mode 100644 index 000000000..325bdc587 --- /dev/null +++ b/lte/rrc/asn/UL-UM-RLC.c @@ -0,0 +1,60 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UL-UM-RLC.h" + +static asn_TYPE_member_t asn_MBR_UL_UM_RLC_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UL_UM_RLC, sn_FieldLength), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SN_FieldLength, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "sn-FieldLength" + }, +}; +static ber_tlv_tag_t asn_DEF_UL_UM_RLC_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UL_UM_RLC_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* sn-FieldLength at 2544 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UL_UM_RLC_specs_1 = { + sizeof(struct UL_UM_RLC), + offsetof(struct UL_UM_RLC, _asn_ctx), + asn_MAP_UL_UM_RLC_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UL_UM_RLC = { + "UL-UM-RLC", + "UL-UM-RLC", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UL_UM_RLC_tags_1, + sizeof(asn_DEF_UL_UM_RLC_tags_1) + /sizeof(asn_DEF_UL_UM_RLC_tags_1[0]), /* 1 */ + asn_DEF_UL_UM_RLC_tags_1, /* Same as above */ + sizeof(asn_DEF_UL_UM_RLC_tags_1) + /sizeof(asn_DEF_UL_UM_RLC_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UL_UM_RLC_1, + 1, /* Elements count */ + &asn_SPC_UL_UM_RLC_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UL-UM-RLC.h b/lte/rrc/asn/UL-UM-RLC.h new file mode 100644 index 000000000..874509f61 --- /dev/null +++ b/lte/rrc/asn/UL-UM-RLC.h @@ -0,0 +1,38 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UL_UM_RLC_H_ +#define _UL_UM_RLC_H_ + + +#include + +/* Including external dependencies */ +#include "SN-FieldLength.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* UL-UM-RLC */ +typedef struct UL_UM_RLC { + SN_FieldLength_t sn_FieldLength; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UL_UM_RLC_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UL_UM_RLC; + +#ifdef __cplusplus +} +#endif + +#endif /* _UL_UM_RLC_H_ */ +#include diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.c b/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.c new file mode 100644 index 000000000..106136338 --- /dev/null +++ b/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.c @@ -0,0 +1,128 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ULHandoverPreparationTransfer-r8-IEs.h" + +static int +memb_meid_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; + size_t size; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + if(st->size > 0) { + /* Size in bits */ + size = 8 * st->size - (st->bits_unused & 0x07); + } else { + size = 0; + } + + if((size == 56)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_meid_constr_3 = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 0, 0, 56, 56 } /* (SIZE(56..56)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_ULHandoverPreparationTransfer_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer_r8_IEs, cdma2000_Type), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CDMA2000_Type, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cdma2000-Type" + }, + { ATF_POINTER, 1, offsetof(struct ULHandoverPreparationTransfer_r8_IEs, meid), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BIT_STRING, + memb_meid_constraint_1, + &asn_PER_memb_meid_constr_3, + 0, + "meid" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer_r8_IEs, dedicatedInfo), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfo" + }, + { ATF_POINTER, 1, offsetof(struct ULHandoverPreparationTransfer_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_ULHandoverPreparationTransfer_r8_IEs_oms_1[] = { 1, 3 }; +static ber_tlv_tag_t asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ULHandoverPreparationTransfer_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cdma2000-Type at 1428 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* meid at 1429 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* dedicatedInfo at 1430 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* nonCriticalExtension at 1431 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ULHandoverPreparationTransfer_r8_IEs_specs_1 = { + sizeof(struct ULHandoverPreparationTransfer_r8_IEs), + offsetof(struct ULHandoverPreparationTransfer_r8_IEs, _asn_ctx), + asn_MAP_ULHandoverPreparationTransfer_r8_IEs_tag2el_1, + 4, /* Count of tags in the map */ + asn_MAP_ULHandoverPreparationTransfer_r8_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ULHandoverPreparationTransfer_r8_IEs = { + "ULHandoverPreparationTransfer-r8-IEs", + "ULHandoverPreparationTransfer-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1, + sizeof(asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1) + /sizeof(asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1) + /sizeof(asn_DEF_ULHandoverPreparationTransfer_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ULHandoverPreparationTransfer_r8_IEs_1, + 4, /* Elements count */ + &asn_SPC_ULHandoverPreparationTransfer_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h b/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h new file mode 100644 index 000000000..060736bab --- /dev/null +++ b/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h @@ -0,0 +1,49 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ULHandoverPreparationTransfer_r8_IEs_H_ +#define _ULHandoverPreparationTransfer_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "CDMA2000-Type.h" +#include +#include "DedicatedInfoCDMA2000.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct ULHandoverPreparationTransfer_v8a0_IEs; + +/* ULHandoverPreparationTransfer-r8-IEs */ +typedef struct ULHandoverPreparationTransfer_r8_IEs { + CDMA2000_Type_t cdma2000_Type; + BIT_STRING_t *meid /* OPTIONAL */; + DedicatedInfoCDMA2000_t dedicatedInfo; + struct ULHandoverPreparationTransfer_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULHandoverPreparationTransfer_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULHandoverPreparationTransfer_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ULHandoverPreparationTransfer-v8a0-IEs.h" + +#endif /* _ULHandoverPreparationTransfer_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.c b/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.c new file mode 100644 index 000000000..bd3dc0428 --- /dev/null +++ b/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ULHandoverPreparationTransfer-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct ULHandoverPreparationTransfer_v8a0_IEs__nonCriticalExtension), + offsetof(struct ULHandoverPreparationTransfer_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ULHandoverPreparationTransfer_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct ULHandoverPreparationTransfer_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct ULHandoverPreparationTransfer_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_ULHandoverPreparationTransfer_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ULHandoverPreparationTransfer_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1435 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1436 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ULHandoverPreparationTransfer_v8a0_IEs_specs_1 = { + sizeof(struct ULHandoverPreparationTransfer_v8a0_IEs), + offsetof(struct ULHandoverPreparationTransfer_v8a0_IEs, _asn_ctx), + asn_MAP_ULHandoverPreparationTransfer_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ULHandoverPreparationTransfer_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs = { + "ULHandoverPreparationTransfer-v8a0-IEs", + "ULHandoverPreparationTransfer-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1, + sizeof(asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1) + /sizeof(asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1) + /sizeof(asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ULHandoverPreparationTransfer_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_ULHandoverPreparationTransfer_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h b/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h new file mode 100644 index 000000000..719b4f1d8 --- /dev/null +++ b/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ULHandoverPreparationTransfer_v8a0_IEs_H_ +#define _ULHandoverPreparationTransfer_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ULHandoverPreparationTransfer-v8a0-IEs */ +typedef struct ULHandoverPreparationTransfer_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct ULHandoverPreparationTransfer_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULHandoverPreparationTransfer_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULHandoverPreparationTransfer_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULHandoverPreparationTransfer_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer.c b/lte/rrc/asn/ULHandoverPreparationTransfer.c new file mode 100644 index 000000000..762d60fc8 --- /dev/null +++ b/lte/rrc/asn/ULHandoverPreparationTransfer.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ULHandoverPreparationTransfer.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__c1, choice.ulHandoverPreparationTransfer_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULHandoverPreparationTransfer_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ulHandoverPreparationTransfer-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ulHandoverPreparationTransfer-r8 at 1420 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1421 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1421 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1421 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct ULHandoverPreparationTransfer__criticalExtensions__c1), + offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__c1, _asn_ctx), + offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__c1, present), + sizeof(((struct ULHandoverPreparationTransfer__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct ULHandoverPreparationTransfer__criticalExtensions__criticalExtensionsFuture), + offsetof(struct ULHandoverPreparationTransfer__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1420 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1423 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct ULHandoverPreparationTransfer__criticalExtensions), + offsetof(struct ULHandoverPreparationTransfer__criticalExtensions, _asn_ctx), + offsetof(struct ULHandoverPreparationTransfer__criticalExtensions, present), + sizeof(((struct ULHandoverPreparationTransfer__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ULHandoverPreparationTransfer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULHandoverPreparationTransfer, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_ULHandoverPreparationTransfer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ULHandoverPreparationTransfer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 1422 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ULHandoverPreparationTransfer_specs_1 = { + sizeof(struct ULHandoverPreparationTransfer), + offsetof(struct ULHandoverPreparationTransfer, _asn_ctx), + asn_MAP_ULHandoverPreparationTransfer_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ULHandoverPreparationTransfer = { + "ULHandoverPreparationTransfer", + "ULHandoverPreparationTransfer", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ULHandoverPreparationTransfer_tags_1, + sizeof(asn_DEF_ULHandoverPreparationTransfer_tags_1) + /sizeof(asn_DEF_ULHandoverPreparationTransfer_tags_1[0]), /* 1 */ + asn_DEF_ULHandoverPreparationTransfer_tags_1, /* Same as above */ + sizeof(asn_DEF_ULHandoverPreparationTransfer_tags_1) + /sizeof(asn_DEF_ULHandoverPreparationTransfer_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ULHandoverPreparationTransfer_1, + 1, /* Elements count */ + &asn_SPC_ULHandoverPreparationTransfer_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer.h b/lte/rrc/asn/ULHandoverPreparationTransfer.h new file mode 100644 index 000000000..eaefb036d --- /dev/null +++ b/lte/rrc/asn/ULHandoverPreparationTransfer.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ULHandoverPreparationTransfer_H_ +#define _ULHandoverPreparationTransfer_H_ + + +#include + +/* Including external dependencies */ +#include "ULHandoverPreparationTransfer-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ULHandoverPreparationTransfer__criticalExtensions_PR { + ULHandoverPreparationTransfer__criticalExtensions_PR_NOTHING, /* No components present */ + ULHandoverPreparationTransfer__criticalExtensions_PR_c1, + ULHandoverPreparationTransfer__criticalExtensions_PR_criticalExtensionsFuture +} ULHandoverPreparationTransfer__criticalExtensions_PR; +typedef enum ULHandoverPreparationTransfer__criticalExtensions__c1_PR { + ULHandoverPreparationTransfer__criticalExtensions__c1_PR_NOTHING, /* No components present */ + ULHandoverPreparationTransfer__criticalExtensions__c1_PR_ulHandoverPreparationTransfer_r8, + ULHandoverPreparationTransfer__criticalExtensions__c1_PR_spare3, + ULHandoverPreparationTransfer__criticalExtensions__c1_PR_spare2, + ULHandoverPreparationTransfer__criticalExtensions__c1_PR_spare1 +} ULHandoverPreparationTransfer__criticalExtensions__c1_PR; + +/* ULHandoverPreparationTransfer */ +typedef struct ULHandoverPreparationTransfer { + struct ULHandoverPreparationTransfer__criticalExtensions { + ULHandoverPreparationTransfer__criticalExtensions_PR present; + union ULHandoverPreparationTransfer__criticalExtensions_u { + struct ULHandoverPreparationTransfer__criticalExtensions__c1 { + ULHandoverPreparationTransfer__criticalExtensions__c1_PR present; + union ULHandoverPreparationTransfer__criticalExtensions__c1_u { + ULHandoverPreparationTransfer_r8_IEs_t ulHandoverPreparationTransfer_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct ULHandoverPreparationTransfer__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULHandoverPreparationTransfer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULHandoverPreparationTransfer; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULHandoverPreparationTransfer_H_ */ +#include diff --git a/lte/rrc/asn/ULInformationTransfer-r8-IEs.c b/lte/rrc/asn/ULInformationTransfer-r8-IEs.c new file mode 100644 index 000000000..b09256bee --- /dev/null +++ b/lte/rrc/asn/ULInformationTransfer-r8-IEs.c @@ -0,0 +1,145 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ULInformationTransfer-r8-IEs.h" + +static asn_per_constraints_t asn_PER_type_dedicatedInfoType_constr_2 = { + { APC_CONSTRAINED, 2, 2, 0, 2 } /* (0..2) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_dedicatedInfoType_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer_r8_IEs__dedicatedInfoType, choice.dedicatedInfoNAS), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoNAS, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoNAS" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer_r8_IEs__dedicatedInfoType, choice.dedicatedInfoCDMA2000_1XRTT), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoCDMA2000-1XRTT" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer_r8_IEs__dedicatedInfoType, choice.dedicatedInfoCDMA2000_HRPD), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DedicatedInfoCDMA2000, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoCDMA2000-HRPD" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_dedicatedInfoType_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dedicatedInfoNAS at 1452 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* dedicatedInfoCDMA2000-1XRTT at 1453 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* dedicatedInfoCDMA2000-HRPD at 1455 */ +}; +static asn_CHOICE_specifics_t asn_SPC_dedicatedInfoType_specs_2 = { + sizeof(struct ULInformationTransfer_r8_IEs__dedicatedInfoType), + offsetof(struct ULInformationTransfer_r8_IEs__dedicatedInfoType, _asn_ctx), + offsetof(struct ULInformationTransfer_r8_IEs__dedicatedInfoType, present), + sizeof(((struct ULInformationTransfer_r8_IEs__dedicatedInfoType *)0)->present), + asn_MAP_dedicatedInfoType_tag2el_2, + 3, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_dedicatedInfoType_2 = { + "dedicatedInfoType", + "dedicatedInfoType", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_dedicatedInfoType_constr_2, + asn_MBR_dedicatedInfoType_2, + 3, /* Elements count */ + &asn_SPC_dedicatedInfoType_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ULInformationTransfer_r8_IEs_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer_r8_IEs, dedicatedInfoType), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_dedicatedInfoType_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "dedicatedInfoType" + }, + { ATF_POINTER, 1, offsetof(struct ULInformationTransfer_r8_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULInformationTransfer_v8a0_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_ULInformationTransfer_r8_IEs_oms_1[] = { 1 }; +static ber_tlv_tag_t asn_DEF_ULInformationTransfer_r8_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ULInformationTransfer_r8_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* dedicatedInfoType at 1452 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1456 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ULInformationTransfer_r8_IEs_specs_1 = { + sizeof(struct ULInformationTransfer_r8_IEs), + offsetof(struct ULInformationTransfer_r8_IEs, _asn_ctx), + asn_MAP_ULInformationTransfer_r8_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ULInformationTransfer_r8_IEs_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ULInformationTransfer_r8_IEs = { + "ULInformationTransfer-r8-IEs", + "ULInformationTransfer-r8-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ULInformationTransfer_r8_IEs_tags_1, + sizeof(asn_DEF_ULInformationTransfer_r8_IEs_tags_1) + /sizeof(asn_DEF_ULInformationTransfer_r8_IEs_tags_1[0]), /* 1 */ + asn_DEF_ULInformationTransfer_r8_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_ULInformationTransfer_r8_IEs_tags_1) + /sizeof(asn_DEF_ULInformationTransfer_r8_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ULInformationTransfer_r8_IEs_1, + 2, /* Elements count */ + &asn_SPC_ULInformationTransfer_r8_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ULInformationTransfer-r8-IEs.h b/lte/rrc/asn/ULInformationTransfer-r8-IEs.h new file mode 100644 index 000000000..b1a51b32e --- /dev/null +++ b/lte/rrc/asn/ULInformationTransfer-r8-IEs.h @@ -0,0 +1,65 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ULInformationTransfer_r8_IEs_H_ +#define _ULInformationTransfer_r8_IEs_H_ + + +#include + +/* Including external dependencies */ +#include "DedicatedInfoNAS.h" +#include "DedicatedInfoCDMA2000.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ULInformationTransfer_r8_IEs__dedicatedInfoType_PR { + ULInformationTransfer_r8_IEs__dedicatedInfoType_PR_NOTHING, /* No components present */ + ULInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoNAS, + ULInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoCDMA2000_1XRTT, + ULInformationTransfer_r8_IEs__dedicatedInfoType_PR_dedicatedInfoCDMA2000_HRPD +} ULInformationTransfer_r8_IEs__dedicatedInfoType_PR; + +/* Forward declarations */ +struct ULInformationTransfer_v8a0_IEs; + +/* ULInformationTransfer-r8-IEs */ +typedef struct ULInformationTransfer_r8_IEs { + struct ULInformationTransfer_r8_IEs__dedicatedInfoType { + ULInformationTransfer_r8_IEs__dedicatedInfoType_PR present; + union ULInformationTransfer_r8_IEs__dedicatedInfoType_u { + DedicatedInfoNAS_t dedicatedInfoNAS; + DedicatedInfoCDMA2000_t dedicatedInfoCDMA2000_1XRTT; + DedicatedInfoCDMA2000_t dedicatedInfoCDMA2000_HRPD; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } dedicatedInfoType; + struct ULInformationTransfer_v8a0_IEs *nonCriticalExtension /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULInformationTransfer_r8_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULInformationTransfer_r8_IEs; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "ULInformationTransfer-v8a0-IEs.h" + +#endif /* _ULInformationTransfer_r8_IEs_H_ */ +#include diff --git a/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c b/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c new file mode 100644 index 000000000..b831303a1 --- /dev/null +++ b/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c @@ -0,0 +1,110 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ULInformationTransfer-v8a0-IEs.h" + +static ber_tlv_tag_t asn_DEF_nonCriticalExtension_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_nonCriticalExtension_specs_3 = { + sizeof(struct ULInformationTransfer_v8a0_IEs__nonCriticalExtension), + offsetof(struct ULInformationTransfer_v8a0_IEs__nonCriticalExtension, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_nonCriticalExtension_3 = { + "nonCriticalExtension", + "nonCriticalExtension", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_nonCriticalExtension_tags_3, + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]) - 1, /* 1 */ + asn_DEF_nonCriticalExtension_tags_3, /* Same as above */ + sizeof(asn_DEF_nonCriticalExtension_tags_3) + /sizeof(asn_DEF_nonCriticalExtension_tags_3[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_nonCriticalExtension_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ULInformationTransfer_v8a0_IEs_1[] = { + { ATF_POINTER, 2, offsetof(struct ULInformationTransfer_v8a0_IEs, lateNonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_OCTET_STRING, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "lateNonCriticalExtension" + }, + { ATF_POINTER, 1, offsetof(struct ULInformationTransfer_v8a0_IEs, nonCriticalExtension), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_nonCriticalExtension_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "nonCriticalExtension" + }, +}; +static int asn_MAP_ULInformationTransfer_v8a0_IEs_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ULInformationTransfer_v8a0_IEs_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* lateNonCriticalExtension at 1460 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* nonCriticalExtension at 1461 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ULInformationTransfer_v8a0_IEs_specs_1 = { + sizeof(struct ULInformationTransfer_v8a0_IEs), + offsetof(struct ULInformationTransfer_v8a0_IEs, _asn_ctx), + asn_MAP_ULInformationTransfer_v8a0_IEs_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_ULInformationTransfer_v8a0_IEs_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ULInformationTransfer_v8a0_IEs = { + "ULInformationTransfer-v8a0-IEs", + "ULInformationTransfer-v8a0-IEs", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1, + sizeof(asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1) + /sizeof(asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1[0]), /* 1 */ + asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1, /* Same as above */ + sizeof(asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1) + /sizeof(asn_DEF_ULInformationTransfer_v8a0_IEs_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ULInformationTransfer_v8a0_IEs_1, + 2, /* Elements count */ + &asn_SPC_ULInformationTransfer_v8a0_IEs_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h b/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h new file mode 100644 index 000000000..8bb4750c4 --- /dev/null +++ b/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ULInformationTransfer_v8a0_IEs_H_ +#define _ULInformationTransfer_v8a0_IEs_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ULInformationTransfer-v8a0-IEs */ +typedef struct ULInformationTransfer_v8a0_IEs { + OCTET_STRING_t *lateNonCriticalExtension /* OPTIONAL */; + struct ULInformationTransfer_v8a0_IEs__nonCriticalExtension { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *nonCriticalExtension; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULInformationTransfer_v8a0_IEs_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULInformationTransfer_v8a0_IEs; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULInformationTransfer_v8a0_IEs_H_ */ +#include diff --git a/lte/rrc/asn/ULInformationTransfer.c b/lte/rrc/asn/ULInformationTransfer.c new file mode 100644 index 000000000..26b72f8b4 --- /dev/null +++ b/lte/rrc/asn/ULInformationTransfer.c @@ -0,0 +1,244 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "ULInformationTransfer.h" + +static asn_per_constraints_t asn_PER_type_c1_constr_3 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_criticalExtensions_constr_2 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_c1_3[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer__criticalExtensions__c1, choice.ulInformationTransfer_r8), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ULInformationTransfer_r8_IEs, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "ulInformationTransfer-r8" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer__criticalExtensions__c1, choice.spare3), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare3" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer__criticalExtensions__c1, choice.spare2), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare2" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer__criticalExtensions__c1, choice.spare1), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "spare1" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_c1_tag2el_3[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* ulInformationTransfer-r8 at 1443 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* spare3 at 1444 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* spare2 at 1444 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 } /* spare1 at 1444 */ +}; +static asn_CHOICE_specifics_t asn_SPC_c1_specs_3 = { + sizeof(struct ULInformationTransfer__criticalExtensions__c1), + offsetof(struct ULInformationTransfer__criticalExtensions__c1, _asn_ctx), + offsetof(struct ULInformationTransfer__criticalExtensions__c1, present), + sizeof(((struct ULInformationTransfer__criticalExtensions__c1 *)0)->present), + asn_MAP_c1_tag2el_3, + 4, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_c1_3 = { + "c1", + "c1", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_c1_constr_3, + asn_MBR_c1_3, + 4, /* Elements count */ + &asn_SPC_c1_specs_3 /* Additional specs */ +}; + +static ber_tlv_tag_t asn_DEF_criticalExtensionsFuture_tags_8[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SEQUENCE_specifics_t asn_SPC_criticalExtensionsFuture_specs_8 = { + sizeof(struct ULInformationTransfer__criticalExtensions__criticalExtensionsFuture), + offsetof(struct ULInformationTransfer__criticalExtensions__criticalExtensionsFuture, _asn_ctx), + 0, /* No top level tags */ + 0, /* No tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensionsFuture_8 = { + "criticalExtensionsFuture", + "criticalExtensionsFuture", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_criticalExtensionsFuture_tags_8, + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]) - 1, /* 1 */ + asn_DEF_criticalExtensionsFuture_tags_8, /* Same as above */ + sizeof(asn_DEF_criticalExtensionsFuture_tags_8) + /sizeof(asn_DEF_criticalExtensionsFuture_tags_8[0]), /* 2 */ + 0, /* No PER visible constraints */ + 0, 0, /* No members */ + &asn_SPC_criticalExtensionsFuture_specs_8 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_criticalExtensions_2[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer__criticalExtensions, choice.c1), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_c1_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c1" + }, + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer__criticalExtensions, choice.criticalExtensionsFuture), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_criticalExtensionsFuture_8, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensionsFuture" + }, +}; +static asn_TYPE_tag2member_t asn_MAP_criticalExtensions_tag2el_2[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* c1 at 1443 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* criticalExtensionsFuture at 1446 */ +}; +static asn_CHOICE_specifics_t asn_SPC_criticalExtensions_specs_2 = { + sizeof(struct ULInformationTransfer__criticalExtensions), + offsetof(struct ULInformationTransfer__criticalExtensions, _asn_ctx), + offsetof(struct ULInformationTransfer__criticalExtensions, present), + sizeof(((struct ULInformationTransfer__criticalExtensions *)0)->present), + asn_MAP_criticalExtensions_tag2el_2, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_criticalExtensions_2 = { + "criticalExtensions", + "criticalExtensions", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_criticalExtensions_constr_2, + asn_MBR_criticalExtensions_2, + 2, /* Elements count */ + &asn_SPC_criticalExtensions_specs_2 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_ULInformationTransfer_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct ULInformationTransfer, criticalExtensions), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_criticalExtensions_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "criticalExtensions" + }, +}; +static ber_tlv_tag_t asn_DEF_ULInformationTransfer_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_ULInformationTransfer_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 } /* criticalExtensions at 1445 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_ULInformationTransfer_specs_1 = { + sizeof(struct ULInformationTransfer), + offsetof(struct ULInformationTransfer, _asn_ctx), + asn_MAP_ULInformationTransfer_tag2el_1, + 1, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_ULInformationTransfer = { + "ULInformationTransfer", + "ULInformationTransfer", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_ULInformationTransfer_tags_1, + sizeof(asn_DEF_ULInformationTransfer_tags_1) + /sizeof(asn_DEF_ULInformationTransfer_tags_1[0]), /* 1 */ + asn_DEF_ULInformationTransfer_tags_1, /* Same as above */ + sizeof(asn_DEF_ULInformationTransfer_tags_1) + /sizeof(asn_DEF_ULInformationTransfer_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_ULInformationTransfer_1, + 1, /* Elements count */ + &asn_SPC_ULInformationTransfer_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/ULInformationTransfer.h b/lte/rrc/asn/ULInformationTransfer.h new file mode 100644 index 000000000..c731c55f1 --- /dev/null +++ b/lte/rrc/asn/ULInformationTransfer.h @@ -0,0 +1,78 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _ULInformationTransfer_H_ +#define _ULInformationTransfer_H_ + + +#include + +/* Including external dependencies */ +#include "ULInformationTransfer-r8-IEs.h" +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum ULInformationTransfer__criticalExtensions_PR { + ULInformationTransfer__criticalExtensions_PR_NOTHING, /* No components present */ + ULInformationTransfer__criticalExtensions_PR_c1, + ULInformationTransfer__criticalExtensions_PR_criticalExtensionsFuture +} ULInformationTransfer__criticalExtensions_PR; +typedef enum ULInformationTransfer__criticalExtensions__c1_PR { + ULInformationTransfer__criticalExtensions__c1_PR_NOTHING, /* No components present */ + ULInformationTransfer__criticalExtensions__c1_PR_ulInformationTransfer_r8, + ULInformationTransfer__criticalExtensions__c1_PR_spare3, + ULInformationTransfer__criticalExtensions__c1_PR_spare2, + ULInformationTransfer__criticalExtensions__c1_PR_spare1 +} ULInformationTransfer__criticalExtensions__c1_PR; + +/* ULInformationTransfer */ +typedef struct ULInformationTransfer { + struct ULInformationTransfer__criticalExtensions { + ULInformationTransfer__criticalExtensions_PR present; + union ULInformationTransfer__criticalExtensions_u { + struct ULInformationTransfer__criticalExtensions__c1 { + ULInformationTransfer__criticalExtensions__c1_PR present; + union ULInformationTransfer__criticalExtensions__c1_u { + ULInformationTransfer_r8_IEs_t ulInformationTransfer_r8; + NULL_t spare3; + NULL_t spare2; + NULL_t spare1; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } c1; + struct ULInformationTransfer__criticalExtensions__criticalExtensionsFuture { + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensionsFuture; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } criticalExtensions; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} ULInformationTransfer_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_ULInformationTransfer; + +#ifdef __cplusplus +} +#endif + +#endif /* _ULInformationTransfer_H_ */ +#include diff --git a/lte/rrc/asn/UplinkPowerControlCommon-v1020.c b/lte/rrc/asn/UplinkPowerControlCommon-v1020.c new file mode 100644 index 000000000..718ca7059 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlCommon-v1020.c @@ -0,0 +1,364 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UplinkPowerControlCommon-v1020.h" + +static int +deltaF_PUCCH_Format3_r10_2_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format3_r10_2_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format3_r10_2_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format3_r10_2_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format3_r10_2_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format3_r10_2_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format3_r10_2_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format3_r10_2_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format3_r10_2_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format3_r10_2_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +deltaF_PUCCH_Format1bCS_r10_11_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaF_PUCCH_Format1bCS_r10_11_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaF_PUCCH_Format1bCS_r10_11_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1bCS_r10_11_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1bCS_r10_11_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1bCS_r10_11_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1bCS_r10_11_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaF_PUCCH_Format1bCS_r10_11_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaF_PUCCH_Format1bCS_r10_11_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaF_PUCCH_Format1bCS_r10_11_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format3_r10_constr_2 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_deltaF_PUCCH_Format1bCS_r10_constr_11 = { + { APC_CONSTRAINED, 2, 2, 0, 3 } /* (0..3) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format3_r10_value2enum_2[] = { + { 0, 8, "deltaF-1" }, + { 1, 7, "deltaF0" }, + { 2, 7, "deltaF1" }, + { 3, 7, "deltaF2" }, + { 4, 7, "deltaF3" }, + { 5, 7, "deltaF4" }, + { 6, 7, "deltaF5" }, + { 7, 7, "deltaF6" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format3_r10_enum2value_2[] = { + 0, /* deltaF-1(0) */ + 1, /* deltaF0(1) */ + 2, /* deltaF1(2) */ + 3, /* deltaF2(3) */ + 4, /* deltaF3(4) */ + 5, /* deltaF4(5) */ + 6, /* deltaF5(6) */ + 7 /* deltaF6(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format3_r10_specs_2 = { + asn_MAP_deltaF_PUCCH_Format3_r10_value2enum_2, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format3_r10_enum2value_2, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format3_r10_tags_2[] = { + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format3_r10_2 = { + "deltaF-PUCCH-Format3-r10", + "deltaF-PUCCH-Format3-r10", + deltaF_PUCCH_Format3_r10_2_free, + deltaF_PUCCH_Format3_r10_2_print, + deltaF_PUCCH_Format3_r10_2_constraint, + deltaF_PUCCH_Format3_r10_2_decode_ber, + deltaF_PUCCH_Format3_r10_2_encode_der, + deltaF_PUCCH_Format3_r10_2_decode_xer, + deltaF_PUCCH_Format3_r10_2_encode_xer, + deltaF_PUCCH_Format3_r10_2_decode_uper, + deltaF_PUCCH_Format3_r10_2_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format3_r10_tags_2, + sizeof(asn_DEF_deltaF_PUCCH_Format3_r10_tags_2) + /sizeof(asn_DEF_deltaF_PUCCH_Format3_r10_tags_2[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format3_r10_tags_2, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format3_r10_tags_2) + /sizeof(asn_DEF_deltaF_PUCCH_Format3_r10_tags_2[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format3_r10_constr_2, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format3_r10_specs_2 /* Additional specs */ +}; + +static asn_INTEGER_enum_map_t asn_MAP_deltaF_PUCCH_Format1bCS_r10_value2enum_11[] = { + { 0, 7, "deltaF1" }, + { 1, 7, "deltaF2" }, + { 2, 6, "spare2" }, + { 3, 6, "spare1" } +}; +static unsigned int asn_MAP_deltaF_PUCCH_Format1bCS_r10_enum2value_11[] = { + 0, /* deltaF1(0) */ + 1, /* deltaF2(1) */ + 3, /* spare1(3) */ + 2 /* spare2(2) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaF_PUCCH_Format1bCS_r10_specs_11 = { + asn_MAP_deltaF_PUCCH_Format1bCS_r10_value2enum_11, /* "tag" => N; sorted by tag */ + asn_MAP_deltaF_PUCCH_Format1bCS_r10_enum2value_11, /* N => "tag"; sorted by N */ + 4, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format1bCS_r10_11 = { + "deltaF-PUCCH-Format1bCS-r10", + "deltaF-PUCCH-Format1bCS-r10", + deltaF_PUCCH_Format1bCS_r10_11_free, + deltaF_PUCCH_Format1bCS_r10_11_print, + deltaF_PUCCH_Format1bCS_r10_11_constraint, + deltaF_PUCCH_Format1bCS_r10_11_decode_ber, + deltaF_PUCCH_Format1bCS_r10_11_encode_der, + deltaF_PUCCH_Format1bCS_r10_11_decode_xer, + deltaF_PUCCH_Format1bCS_r10_11_encode_xer, + deltaF_PUCCH_Format1bCS_r10_11_decode_uper, + deltaF_PUCCH_Format1bCS_r10_11_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11, + sizeof(asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11) + /sizeof(asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11[0]) - 1, /* 1 */ + asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11, /* Same as above */ + sizeof(asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11) + /sizeof(asn_DEF_deltaF_PUCCH_Format1bCS_r10_tags_11[0]), /* 2 */ + &asn_PER_type_deltaF_PUCCH_Format1bCS_r10_constr_11, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaF_PUCCH_Format1bCS_r10_specs_11 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UplinkPowerControlCommon_v1020_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon_v1020, deltaF_PUCCH_Format3_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format3_r10_2, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format3-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon_v1020, deltaF_PUCCH_Format1bCS_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaF_PUCCH_Format1bCS_r10_11, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaF-PUCCH-Format1bCS-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_UplinkPowerControlCommon_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UplinkPowerControlCommon_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* deltaF-PUCCH-Format3-r10 at 2808 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* deltaF-PUCCH-Format1bCS-r10 at 2810 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UplinkPowerControlCommon_v1020_specs_1 = { + sizeof(struct UplinkPowerControlCommon_v1020), + offsetof(struct UplinkPowerControlCommon_v1020, _asn_ctx), + asn_MAP_UplinkPowerControlCommon_v1020_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlCommon_v1020 = { + "UplinkPowerControlCommon-v1020", + "UplinkPowerControlCommon-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UplinkPowerControlCommon_v1020_tags_1, + sizeof(asn_DEF_UplinkPowerControlCommon_v1020_tags_1) + /sizeof(asn_DEF_UplinkPowerControlCommon_v1020_tags_1[0]), /* 1 */ + asn_DEF_UplinkPowerControlCommon_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_UplinkPowerControlCommon_v1020_tags_1) + /sizeof(asn_DEF_UplinkPowerControlCommon_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UplinkPowerControlCommon_v1020_1, + 2, /* Elements count */ + &asn_SPC_UplinkPowerControlCommon_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UplinkPowerControlCommon-v1020.h b/lte/rrc/asn/UplinkPowerControlCommon-v1020.h new file mode 100644 index 000000000..42ebc19b4 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlCommon-v1020.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UplinkPowerControlCommon_v1020_H_ +#define _UplinkPowerControlCommon_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10 { + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF_1 = 0, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF0 = 1, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF1 = 2, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF2 = 3, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF3 = 4, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF4 = 5, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF5 = 6, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10_deltaF6 = 7 +} e_UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format3_r10; +typedef enum UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format1bCS_r10 { + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format1bCS_r10_deltaF1 = 0, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format1bCS_r10_deltaF2 = 1, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format1bCS_r10_spare2 = 2, + UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format1bCS_r10_spare1 = 3 +} e_UplinkPowerControlCommon_v1020__deltaF_PUCCH_Format1bCS_r10; + +/* UplinkPowerControlCommon-v1020 */ +typedef struct UplinkPowerControlCommon_v1020 { + long deltaF_PUCCH_Format3_r10; + long deltaF_PUCCH_Format1bCS_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UplinkPowerControlCommon_v1020_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format3_r10_2; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaF_PUCCH_Format1bCS_r10_11; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlCommon_v1020; + +#ifdef __cplusplus +} +#endif + +#endif /* _UplinkPowerControlCommon_v1020_H_ */ +#include diff --git a/lte/rrc/asn/UplinkPowerControlCommon.c b/lte/rrc/asn/UplinkPowerControlCommon.c new file mode 100644 index 000000000..b2f3379b1 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlCommon.c @@ -0,0 +1,341 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UplinkPowerControlCommon.h" + +static int +alpha_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +alpha_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +alpha_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + alpha_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +alpha_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + alpha_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +alpha_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + alpha_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +alpha_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + alpha_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +alpha_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + alpha_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +alpha_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + alpha_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +alpha_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + alpha_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +alpha_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + alpha_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_p0_NominalPUSCH_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -126 && value <= 24)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p0_NominalPUCCH_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -127 && value <= -96)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_deltaPreambleMsg3_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -1 && value <= 6)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_alpha_constr_3 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_NominalPUSCH_constr_2 = { + { APC_CONSTRAINED, 8, 8, -126, 24 } /* (-126..24) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_NominalPUCCH_constr_12 = { + { APC_CONSTRAINED, 5, 5, -127, -96 } /* (-127..-96) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_deltaPreambleMsg3_constr_14 = { + { APC_CONSTRAINED, 3, 3, -1, 6 } /* (-1..6) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_alpha_value2enum_3[] = { + { 0, 3, "al0" }, + { 1, 4, "al04" }, + { 2, 4, "al05" }, + { 3, 4, "al06" }, + { 4, 4, "al07" }, + { 5, 4, "al08" }, + { 6, 4, "al09" }, + { 7, 3, "al1" } +}; +static unsigned int asn_MAP_alpha_enum2value_3[] = { + 0, /* al0(0) */ + 1, /* al04(1) */ + 2, /* al05(2) */ + 3, /* al06(3) */ + 4, /* al07(4) */ + 5, /* al08(5) */ + 6, /* al09(6) */ + 7 /* al1(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_alpha_specs_3 = { + asn_MAP_alpha_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_alpha_enum2value_3, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_alpha_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_alpha_3 = { + "alpha", + "alpha", + alpha_3_free, + alpha_3_print, + alpha_3_constraint, + alpha_3_decode_ber, + alpha_3_encode_der, + alpha_3_decode_xer, + alpha_3_encode_xer, + alpha_3_decode_uper, + alpha_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_alpha_tags_3, + sizeof(asn_DEF_alpha_tags_3) + /sizeof(asn_DEF_alpha_tags_3[0]) - 1, /* 1 */ + asn_DEF_alpha_tags_3, /* Same as above */ + sizeof(asn_DEF_alpha_tags_3) + /sizeof(asn_DEF_alpha_tags_3[0]), /* 2 */ + &asn_PER_type_alpha_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_alpha_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UplinkPowerControlCommon_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon, p0_NominalPUSCH), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_NominalPUSCH_constraint_1, + &asn_PER_memb_p0_NominalPUSCH_constr_2, + 0, + "p0-NominalPUSCH" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon, alpha), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_alpha_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "alpha" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon, p0_NominalPUCCH), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_NominalPUCCH_constraint_1, + &asn_PER_memb_p0_NominalPUCCH_constr_12, + 0, + "p0-NominalPUCCH" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon, deltaFList_PUCCH), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DeltaFList_PUCCH, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaFList-PUCCH" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommon, deltaPreambleMsg3), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_deltaPreambleMsg3_constraint_1, + &asn_PER_memb_deltaPreambleMsg3_constr_14, + 0, + "deltaPreambleMsg3" + }, +}; +static ber_tlv_tag_t asn_DEF_UplinkPowerControlCommon_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UplinkPowerControlCommon_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* p0-NominalPUSCH at 2800 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* alpha at 2801 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* p0-NominalPUCCH at 2802 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* deltaFList-PUCCH at 2803 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 } /* deltaPreambleMsg3 at 2804 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UplinkPowerControlCommon_specs_1 = { + sizeof(struct UplinkPowerControlCommon), + offsetof(struct UplinkPowerControlCommon, _asn_ctx), + asn_MAP_UplinkPowerControlCommon_tag2el_1, + 5, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlCommon = { + "UplinkPowerControlCommon", + "UplinkPowerControlCommon", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UplinkPowerControlCommon_tags_1, + sizeof(asn_DEF_UplinkPowerControlCommon_tags_1) + /sizeof(asn_DEF_UplinkPowerControlCommon_tags_1[0]), /* 1 */ + asn_DEF_UplinkPowerControlCommon_tags_1, /* Same as above */ + sizeof(asn_DEF_UplinkPowerControlCommon_tags_1) + /sizeof(asn_DEF_UplinkPowerControlCommon_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UplinkPowerControlCommon_1, + 5, /* Elements count */ + &asn_SPC_UplinkPowerControlCommon_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UplinkPowerControlCommon.h b/lte/rrc/asn/UplinkPowerControlCommon.h new file mode 100644 index 000000000..175d9641a --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlCommon.h @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UplinkPowerControlCommon_H_ +#define _UplinkPowerControlCommon_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include "DeltaFList-PUCCH.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UplinkPowerControlCommon__alpha { + UplinkPowerControlCommon__alpha_al0 = 0, + UplinkPowerControlCommon__alpha_al04 = 1, + UplinkPowerControlCommon__alpha_al05 = 2, + UplinkPowerControlCommon__alpha_al06 = 3, + UplinkPowerControlCommon__alpha_al07 = 4, + UplinkPowerControlCommon__alpha_al08 = 5, + UplinkPowerControlCommon__alpha_al09 = 6, + UplinkPowerControlCommon__alpha_al1 = 7 +} e_UplinkPowerControlCommon__alpha; + +/* UplinkPowerControlCommon */ +typedef struct UplinkPowerControlCommon { + long p0_NominalPUSCH; + long alpha; + long p0_NominalPUCCH; + DeltaFList_PUCCH_t deltaFList_PUCCH; + long deltaPreambleMsg3; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UplinkPowerControlCommon_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_alpha_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlCommon; + +#ifdef __cplusplus +} +#endif + +#endif /* _UplinkPowerControlCommon_H_ */ +#include diff --git a/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.c b/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.c new file mode 100644 index 000000000..033f3611c --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.c @@ -0,0 +1,251 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UplinkPowerControlCommonSCell-r10.h" + +static int +alpha_r10_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +alpha_r10_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +alpha_r10_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + alpha_r10_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +alpha_r10_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +alpha_r10_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +alpha_r10_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +alpha_r10_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +alpha_r10_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +alpha_r10_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +alpha_r10_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + alpha_r10_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_p0_NominalPUSCH_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -126 && value <= 24)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_alpha_r10_constr_3 = { + { APC_CONSTRAINED, 3, 3, 0, 7 } /* (0..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_NominalPUSCH_r10_constr_2 = { + { APC_CONSTRAINED, 8, 8, -126, 24 } /* (-126..24) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_alpha_r10_value2enum_3[] = { + { 0, 3, "al0" }, + { 1, 4, "al04" }, + { 2, 4, "al05" }, + { 3, 4, "al06" }, + { 4, 4, "al07" }, + { 5, 4, "al08" }, + { 6, 4, "al09" }, + { 7, 3, "al1" } +}; +static unsigned int asn_MAP_alpha_r10_enum2value_3[] = { + 0, /* al0(0) */ + 1, /* al04(1) */ + 2, /* al05(2) */ + 3, /* al06(3) */ + 4, /* al07(4) */ + 5, /* al08(5) */ + 6, /* al09(6) */ + 7 /* al1(7) */ +}; +static asn_INTEGER_specifics_t asn_SPC_alpha_r10_specs_3 = { + asn_MAP_alpha_r10_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_alpha_r10_enum2value_3, /* N => "tag"; sorted by N */ + 8, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_alpha_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_alpha_r10_3 = { + "alpha-r10", + "alpha-r10", + alpha_r10_3_free, + alpha_r10_3_print, + alpha_r10_3_constraint, + alpha_r10_3_decode_ber, + alpha_r10_3_encode_der, + alpha_r10_3_decode_xer, + alpha_r10_3_encode_xer, + alpha_r10_3_decode_uper, + alpha_r10_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_alpha_r10_tags_3, + sizeof(asn_DEF_alpha_r10_tags_3) + /sizeof(asn_DEF_alpha_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_alpha_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_alpha_r10_tags_3) + /sizeof(asn_DEF_alpha_r10_tags_3[0]), /* 2 */ + &asn_PER_type_alpha_r10_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_alpha_r10_specs_3 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UplinkPowerControlCommonSCell_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommonSCell_r10, p0_NominalPUSCH_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_NominalPUSCH_r10_constraint_1, + &asn_PER_memb_p0_NominalPUSCH_r10_constr_2, + 0, + "p0-NominalPUSCH-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlCommonSCell_r10, alpha_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_alpha_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "alpha-r10" + }, +}; +static ber_tlv_tag_t asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UplinkPowerControlCommonSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* p0-NominalPUSCH-r10 at 2814 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* alpha-r10 at 2815 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UplinkPowerControlCommonSCell_r10_specs_1 = { + sizeof(struct UplinkPowerControlCommonSCell_r10), + offsetof(struct UplinkPowerControlCommonSCell_r10, _asn_ctx), + asn_MAP_UplinkPowerControlCommonSCell_r10_tag2el_1, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlCommonSCell_r10 = { + "UplinkPowerControlCommonSCell-r10", + "UplinkPowerControlCommonSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1, + sizeof(asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1) + /sizeof(asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1) + /sizeof(asn_DEF_UplinkPowerControlCommonSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UplinkPowerControlCommonSCell_r10_1, + 2, /* Elements count */ + &asn_SPC_UplinkPowerControlCommonSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.h b/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.h new file mode 100644 index 000000000..a012e6393 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UplinkPowerControlCommonSCell_r10_H_ +#define _UplinkPowerControlCommonSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UplinkPowerControlCommonSCell_r10__alpha_r10 { + UplinkPowerControlCommonSCell_r10__alpha_r10_al0 = 0, + UplinkPowerControlCommonSCell_r10__alpha_r10_al04 = 1, + UplinkPowerControlCommonSCell_r10__alpha_r10_al05 = 2, + UplinkPowerControlCommonSCell_r10__alpha_r10_al06 = 3, + UplinkPowerControlCommonSCell_r10__alpha_r10_al07 = 4, + UplinkPowerControlCommonSCell_r10__alpha_r10_al08 = 5, + UplinkPowerControlCommonSCell_r10__alpha_r10_al09 = 6, + UplinkPowerControlCommonSCell_r10__alpha_r10_al1 = 7 +} e_UplinkPowerControlCommonSCell_r10__alpha_r10; + +/* UplinkPowerControlCommonSCell-r10 */ +typedef struct UplinkPowerControlCommonSCell_r10 { + long p0_NominalPUSCH_r10; + long alpha_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UplinkPowerControlCommonSCell_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_alpha_r10_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlCommonSCell_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _UplinkPowerControlCommonSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/UplinkPowerControlDedicated-v1020.c b/lte/rrc/asn/UplinkPowerControlDedicated-v1020.c new file mode 100644 index 000000000..ae6cbced7 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlDedicated-v1020.c @@ -0,0 +1,102 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UplinkPowerControlDedicated-v1020.h" + +static int +memb_pSRS_OffsetAp_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_memb_pSRS_OffsetAp_r10_constr_3 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_UplinkPowerControlDedicated_v1020_1[] = { + { ATF_POINTER, 2, offsetof(struct UplinkPowerControlDedicated_v1020, deltaTxD_OffsetListPUCCH_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_DeltaTxD_OffsetListPUCCH_r10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaTxD-OffsetListPUCCH-r10" + }, + { ATF_POINTER, 1, offsetof(struct UplinkPowerControlDedicated_v1020, pSRS_OffsetAp_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pSRS_OffsetAp_r10_constraint_1, + &asn_PER_memb_pSRS_OffsetAp_r10_constr_3, + 0, + "pSRS-OffsetAp-r10" + }, +}; +static int asn_MAP_UplinkPowerControlDedicated_v1020_oms_1[] = { 0, 1 }; +static ber_tlv_tag_t asn_DEF_UplinkPowerControlDedicated_v1020_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UplinkPowerControlDedicated_v1020_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* deltaTxD-OffsetListPUCCH-r10 at 2828 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* pSRS-OffsetAp-r10 at 2829 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UplinkPowerControlDedicated_v1020_specs_1 = { + sizeof(struct UplinkPowerControlDedicated_v1020), + offsetof(struct UplinkPowerControlDedicated_v1020, _asn_ctx), + asn_MAP_UplinkPowerControlDedicated_v1020_tag2el_1, + 2, /* Count of tags in the map */ + asn_MAP_UplinkPowerControlDedicated_v1020_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlDedicated_v1020 = { + "UplinkPowerControlDedicated-v1020", + "UplinkPowerControlDedicated-v1020", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UplinkPowerControlDedicated_v1020_tags_1, + sizeof(asn_DEF_UplinkPowerControlDedicated_v1020_tags_1) + /sizeof(asn_DEF_UplinkPowerControlDedicated_v1020_tags_1[0]), /* 1 */ + asn_DEF_UplinkPowerControlDedicated_v1020_tags_1, /* Same as above */ + sizeof(asn_DEF_UplinkPowerControlDedicated_v1020_tags_1) + /sizeof(asn_DEF_UplinkPowerControlDedicated_v1020_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UplinkPowerControlDedicated_v1020_1, + 2, /* Elements count */ + &asn_SPC_UplinkPowerControlDedicated_v1020_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UplinkPowerControlDedicated-v1020.h b/lte/rrc/asn/UplinkPowerControlDedicated-v1020.h new file mode 100644 index 000000000..92ccd3714 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlDedicated-v1020.h @@ -0,0 +1,45 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UplinkPowerControlDedicated_v1020_H_ +#define _UplinkPowerControlDedicated_v1020_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct DeltaTxD_OffsetListPUCCH_r10; + +/* UplinkPowerControlDedicated-v1020 */ +typedef struct UplinkPowerControlDedicated_v1020 { + struct DeltaTxD_OffsetListPUCCH_r10 *deltaTxD_OffsetListPUCCH_r10 /* OPTIONAL */; + long *pSRS_OffsetAp_r10 /* OPTIONAL */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UplinkPowerControlDedicated_v1020_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlDedicated_v1020; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "DeltaTxD-OffsetListPUCCH-r10.h" + +#endif /* _UplinkPowerControlDedicated_v1020_H_ */ +#include diff --git a/lte/rrc/asn/UplinkPowerControlDedicated.c b/lte/rrc/asn/UplinkPowerControlDedicated.c new file mode 100644 index 000000000..3d6d3b706 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlDedicated.c @@ -0,0 +1,359 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UplinkPowerControlDedicated.h" + +static int +deltaMCS_Enabled_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaMCS_Enabled_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaMCS_Enabled_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaMCS_Enabled_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaMCS_Enabled_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaMCS_Enabled_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaMCS_Enabled_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaMCS_Enabled_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaMCS_Enabled_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaMCS_Enabled_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaMCS_Enabled_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_p0_UE_PUSCH_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -8 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_p0_UE_PUCCH_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -8 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pSRS_Offset_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_deltaMCS_Enabled_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_UE_PUSCH_constr_2 = { + { APC_CONSTRAINED, 4, 4, -8, 7 } /* (-8..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_UE_PUCCH_constr_7 = { + { APC_CONSTRAINED, 4, 4, -8, 7 } /* (-8..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pSRS_Offset_constr_8 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deltaMCS_Enabled_value2enum_3[] = { + { 0, 3, "en0" }, + { 1, 3, "en1" } +}; +static unsigned int asn_MAP_deltaMCS_Enabled_enum2value_3[] = { + 0, /* en0(0) */ + 1 /* en1(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaMCS_Enabled_specs_3 = { + asn_MAP_deltaMCS_Enabled_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_deltaMCS_Enabled_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaMCS_Enabled_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaMCS_Enabled_3 = { + "deltaMCS-Enabled", + "deltaMCS-Enabled", + deltaMCS_Enabled_3_free, + deltaMCS_Enabled_3_print, + deltaMCS_Enabled_3_constraint, + deltaMCS_Enabled_3_decode_ber, + deltaMCS_Enabled_3_encode_der, + deltaMCS_Enabled_3_decode_xer, + deltaMCS_Enabled_3_encode_xer, + deltaMCS_Enabled_3_decode_uper, + deltaMCS_Enabled_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaMCS_Enabled_tags_3, + sizeof(asn_DEF_deltaMCS_Enabled_tags_3) + /sizeof(asn_DEF_deltaMCS_Enabled_tags_3[0]) - 1, /* 1 */ + asn_DEF_deltaMCS_Enabled_tags_3, /* Same as above */ + sizeof(asn_DEF_deltaMCS_Enabled_tags_3) + /sizeof(asn_DEF_deltaMCS_Enabled_tags_3[0]), /* 2 */ + &asn_PER_type_deltaMCS_Enabled_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaMCS_Enabled_specs_3 /* Additional specs */ +}; + +static int asn_DFL_9_set_4(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static asn_TYPE_member_t asn_MBR_UplinkPowerControlDedicated_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicated, p0_UE_PUSCH), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_UE_PUSCH_constraint_1, + &asn_PER_memb_p0_UE_PUSCH_constr_2, + 0, + "p0-UE-PUSCH" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicated, deltaMCS_Enabled), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaMCS_Enabled_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaMCS-Enabled" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicated, accumulationEnabled), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "accumulationEnabled" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicated, p0_UE_PUCCH), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_UE_PUCCH_constraint_1, + &asn_PER_memb_p0_UE_PUCCH_constr_7, + 0, + "p0-UE-PUCCH" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicated, pSRS_Offset), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pSRS_Offset_constraint_1, + &asn_PER_memb_pSRS_Offset_constr_8, + 0, + "pSRS-Offset" + }, + { ATF_POINTER, 1, offsetof(struct UplinkPowerControlDedicated, filterCoefficient), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_9_set_4, /* DEFAULT 4 */ + "filterCoefficient" + }, +}; +static int asn_MAP_UplinkPowerControlDedicated_oms_1[] = { 5 }; +static ber_tlv_tag_t asn_DEF_UplinkPowerControlDedicated_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UplinkPowerControlDedicated_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* p0-UE-PUSCH at 2819 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* deltaMCS-Enabled at 2820 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* accumulationEnabled at 2821 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* p0-UE-PUCCH at 2822 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pSRS-Offset at 2823 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* filterCoefficient at 2824 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UplinkPowerControlDedicated_specs_1 = { + sizeof(struct UplinkPowerControlDedicated), + offsetof(struct UplinkPowerControlDedicated, _asn_ctx), + asn_MAP_UplinkPowerControlDedicated_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_UplinkPowerControlDedicated_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlDedicated = { + "UplinkPowerControlDedicated", + "UplinkPowerControlDedicated", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UplinkPowerControlDedicated_tags_1, + sizeof(asn_DEF_UplinkPowerControlDedicated_tags_1) + /sizeof(asn_DEF_UplinkPowerControlDedicated_tags_1[0]), /* 1 */ + asn_DEF_UplinkPowerControlDedicated_tags_1, /* Same as above */ + sizeof(asn_DEF_UplinkPowerControlDedicated_tags_1) + /sizeof(asn_DEF_UplinkPowerControlDedicated_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UplinkPowerControlDedicated_1, + 6, /* Elements count */ + &asn_SPC_UplinkPowerControlDedicated_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UplinkPowerControlDedicated.h b/lte/rrc/asn/UplinkPowerControlDedicated.h new file mode 100644 index 000000000..dab3d0b93 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlDedicated.h @@ -0,0 +1,53 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UplinkPowerControlDedicated_H_ +#define _UplinkPowerControlDedicated_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include "FilterCoefficient.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UplinkPowerControlDedicated__deltaMCS_Enabled { + UplinkPowerControlDedicated__deltaMCS_Enabled_en0 = 0, + UplinkPowerControlDedicated__deltaMCS_Enabled_en1 = 1 +} e_UplinkPowerControlDedicated__deltaMCS_Enabled; + +/* UplinkPowerControlDedicated */ +typedef struct UplinkPowerControlDedicated { + long p0_UE_PUSCH; + long deltaMCS_Enabled; + BOOLEAN_t accumulationEnabled; + long p0_UE_PUCCH; + long pSRS_Offset; + FilterCoefficient_t *filterCoefficient /* DEFAULT 4 */; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UplinkPowerControlDedicated_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaMCS_Enabled_3; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlDedicated; + +#ifdef __cplusplus +} +#endif + +#endif /* _UplinkPowerControlDedicated_H_ */ +#include diff --git a/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.c b/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.c new file mode 100644 index 000000000..48a281deb --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.c @@ -0,0 +1,508 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#include "UplinkPowerControlDedicatedSCell-r10.h" + +static int +deltaMCS_Enabled_r10_3_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +deltaMCS_Enabled_r10_3_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +deltaMCS_Enabled_r10_3_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +deltaMCS_Enabled_r10_3_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +deltaMCS_Enabled_r10_3_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +deltaMCS_Enabled_r10_3_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +deltaMCS_Enabled_r10_3_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +deltaMCS_Enabled_r10_3_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +deltaMCS_Enabled_r10_3_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + deltaMCS_Enabled_r10_3_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +pathlossReferenceLinking_r10_10_constraint(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + /* Replace with underlying type checker */ + td->check_constraints = asn_DEF_NativeEnumerated.check_constraints; + return td->check_constraints(td, sptr, ctfailcb, app_key); +} + +/* + * This type is implemented using NativeEnumerated, + * so here we adjust the DEF accordingly. + */ +static void +pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(asn_TYPE_descriptor_t *td) { + td->free_struct = asn_DEF_NativeEnumerated.free_struct; + td->print_struct = asn_DEF_NativeEnumerated.print_struct; + td->ber_decoder = asn_DEF_NativeEnumerated.ber_decoder; + td->der_encoder = asn_DEF_NativeEnumerated.der_encoder; + td->xer_decoder = asn_DEF_NativeEnumerated.xer_decoder; + td->xer_encoder = asn_DEF_NativeEnumerated.xer_encoder; + td->uper_decoder = asn_DEF_NativeEnumerated.uper_decoder; + td->uper_encoder = asn_DEF_NativeEnumerated.uper_encoder; + if(!td->per_constraints) + td->per_constraints = asn_DEF_NativeEnumerated.per_constraints; + td->elements = asn_DEF_NativeEnumerated.elements; + td->elements_count = asn_DEF_NativeEnumerated.elements_count; + /* td->specifics = asn_DEF_NativeEnumerated.specifics; // Defined explicitly */ +} + +static void +pathlossReferenceLinking_r10_10_free(asn_TYPE_descriptor_t *td, + void *struct_ptr, int contents_only) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + td->free_struct(td, struct_ptr, contents_only); +} + +static int +pathlossReferenceLinking_r10_10_print(asn_TYPE_descriptor_t *td, const void *struct_ptr, + int ilevel, asn_app_consume_bytes_f *cb, void *app_key) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->print_struct(td, struct_ptr, ilevel, cb, app_key); +} + +static asn_dec_rval_t +pathlossReferenceLinking_r10_10_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const void *bufptr, size_t size, int tag_mode) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->ber_decoder(opt_codec_ctx, td, structure, bufptr, size, tag_mode); +} + +static asn_enc_rval_t +pathlossReferenceLinking_r10_10_encode_der(asn_TYPE_descriptor_t *td, + void *structure, int tag_mode, ber_tlv_tag_t tag, + asn_app_consume_bytes_f *cb, void *app_key) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->der_encoder(td, structure, tag_mode, tag, cb, app_key); +} + +static asn_dec_rval_t +pathlossReferenceLinking_r10_10_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + void **structure, const char *opt_mname, const void *bufptr, size_t size) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->xer_decoder(opt_codec_ctx, td, structure, opt_mname, bufptr, size); +} + +static asn_enc_rval_t +pathlossReferenceLinking_r10_10_encode_xer(asn_TYPE_descriptor_t *td, void *structure, + int ilevel, enum xer_encoder_flags_e flags, + asn_app_consume_bytes_f *cb, void *app_key) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->xer_encoder(td, structure, ilevel, flags, cb, app_key); +} + +static asn_dec_rval_t +pathlossReferenceLinking_r10_10_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->uper_decoder(opt_codec_ctx, td, constraints, structure, per_data); +} + +static asn_enc_rval_t +pathlossReferenceLinking_r10_10_encode_uper(asn_TYPE_descriptor_t *td, + asn_per_constraints_t *constraints, + void *structure, asn_per_outp_t *per_out) { + pathlossReferenceLinking_r10_10_inherit_TYPE_descriptor(td); + return td->uper_encoder(td, constraints, structure, per_out); +} + +static int +memb_p0_UE_PUSCH_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= -8 && value <= 7)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pSRS_Offset_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static int +memb_pSRS_OffsetAp_r10_constraint_1(asn_TYPE_descriptor_t *td, const void *sptr, + asn_app_constraint_failed_f *ctfailcb, void *app_key) { + long value; + + if(!sptr) { + _ASN_CTFAIL(app_key, td, sptr, + "%s: value not given (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } + + value = *(const long *)sptr; + + if((value >= 0 && value <= 15)) { + /* Constraint check succeeded */ + return 0; + } else { + _ASN_CTFAIL(app_key, td, sptr, + "%s: constraint failed (%s:%d)", + td->name, __FILE__, __LINE__); + return -1; + } +} + +static asn_per_constraints_t asn_PER_type_deltaMCS_Enabled_r10_constr_3 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_type_pathlossReferenceLinking_r10_constr_10 = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_p0_UE_PUSCH_r10_constr_2 = { + { APC_CONSTRAINED, 4, 4, -8, 7 } /* (-8..7) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pSRS_Offset_r10_constr_7 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_per_constraints_t asn_PER_memb_pSRS_OffsetAp_r10_constr_8 = { + { APC_CONSTRAINED, 4, 4, 0, 15 } /* (0..15) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_INTEGER_enum_map_t asn_MAP_deltaMCS_Enabled_r10_value2enum_3[] = { + { 0, 3, "en0" }, + { 1, 3, "en1" } +}; +static unsigned int asn_MAP_deltaMCS_Enabled_r10_enum2value_3[] = { + 0, /* en0(0) */ + 1 /* en1(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_deltaMCS_Enabled_r10_specs_3 = { + asn_MAP_deltaMCS_Enabled_r10_value2enum_3, /* "tag" => N; sorted by tag */ + asn_MAP_deltaMCS_Enabled_r10_enum2value_3, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_deltaMCS_Enabled_r10_tags_3[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_deltaMCS_Enabled_r10_3 = { + "deltaMCS-Enabled-r10", + "deltaMCS-Enabled-r10", + deltaMCS_Enabled_r10_3_free, + deltaMCS_Enabled_r10_3_print, + deltaMCS_Enabled_r10_3_constraint, + deltaMCS_Enabled_r10_3_decode_ber, + deltaMCS_Enabled_r10_3_encode_der, + deltaMCS_Enabled_r10_3_decode_xer, + deltaMCS_Enabled_r10_3_encode_xer, + deltaMCS_Enabled_r10_3_decode_uper, + deltaMCS_Enabled_r10_3_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_deltaMCS_Enabled_r10_tags_3, + sizeof(asn_DEF_deltaMCS_Enabled_r10_tags_3) + /sizeof(asn_DEF_deltaMCS_Enabled_r10_tags_3[0]) - 1, /* 1 */ + asn_DEF_deltaMCS_Enabled_r10_tags_3, /* Same as above */ + sizeof(asn_DEF_deltaMCS_Enabled_r10_tags_3) + /sizeof(asn_DEF_deltaMCS_Enabled_r10_tags_3[0]), /* 2 */ + &asn_PER_type_deltaMCS_Enabled_r10_constr_3, + 0, 0, /* Defined elsewhere */ + &asn_SPC_deltaMCS_Enabled_r10_specs_3 /* Additional specs */ +}; + +static int asn_DFL_9_set_4(int set_value, void **sptr) { + FilterCoefficient_t *st = *sptr; + + if(!st) { + if(!set_value) return -1; /* Not a default value */ + st = (*sptr = CALLOC(1, sizeof(*st))); + if(!st) return -1; + } + + if(set_value) { + /* Install default value 4 */ + *st = 4; + return 0; + } else { + /* Test default value 4 */ + return (*st == 4); + } +} +static asn_INTEGER_enum_map_t asn_MAP_pathlossReferenceLinking_r10_value2enum_10[] = { + { 0, 5, "pCell" }, + { 1, 5, "sCell" } +}; +static unsigned int asn_MAP_pathlossReferenceLinking_r10_enum2value_10[] = { + 0, /* pCell(0) */ + 1 /* sCell(1) */ +}; +static asn_INTEGER_specifics_t asn_SPC_pathlossReferenceLinking_r10_specs_10 = { + asn_MAP_pathlossReferenceLinking_r10_value2enum_10, /* "tag" => N; sorted by tag */ + asn_MAP_pathlossReferenceLinking_r10_enum2value_10, /* N => "tag"; sorted by N */ + 2, /* Number of elements in the maps */ + 0, /* Enumeration is not extensible */ + 1, /* Strict enumeration */ + 0, /* Native long size */ + 0 +}; +static ber_tlv_tag_t asn_DEF_pathlossReferenceLinking_r10_tags_10[] = { + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)) +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_pathlossReferenceLinking_r10_10 = { + "pathlossReferenceLinking-r10", + "pathlossReferenceLinking-r10", + pathlossReferenceLinking_r10_10_free, + pathlossReferenceLinking_r10_10_print, + pathlossReferenceLinking_r10_10_constraint, + pathlossReferenceLinking_r10_10_decode_ber, + pathlossReferenceLinking_r10_10_encode_der, + pathlossReferenceLinking_r10_10_decode_xer, + pathlossReferenceLinking_r10_10_encode_xer, + pathlossReferenceLinking_r10_10_decode_uper, + pathlossReferenceLinking_r10_10_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_pathlossReferenceLinking_r10_tags_10, + sizeof(asn_DEF_pathlossReferenceLinking_r10_tags_10) + /sizeof(asn_DEF_pathlossReferenceLinking_r10_tags_10[0]) - 1, /* 1 */ + asn_DEF_pathlossReferenceLinking_r10_tags_10, /* Same as above */ + sizeof(asn_DEF_pathlossReferenceLinking_r10_tags_10) + /sizeof(asn_DEF_pathlossReferenceLinking_r10_tags_10[0]), /* 2 */ + &asn_PER_type_pathlossReferenceLinking_r10_constr_10, + 0, 0, /* Defined elsewhere */ + &asn_SPC_pathlossReferenceLinking_r10_specs_10 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_UplinkPowerControlDedicatedSCell_r10_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicatedSCell_r10, p0_UE_PUSCH_r10), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_p0_UE_PUSCH_r10_constraint_1, + &asn_PER_memb_p0_UE_PUSCH_r10_constr_2, + 0, + "p0-UE-PUSCH-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicatedSCell_r10, deltaMCS_Enabled_r10), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_deltaMCS_Enabled_r10_3, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "deltaMCS-Enabled-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicatedSCell_r10, accumulationEnabled_r10), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_BOOLEAN, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "accumulationEnabled-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicatedSCell_r10, pSRS_Offset_r10), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pSRS_Offset_r10_constraint_1, + &asn_PER_memb_pSRS_Offset_r10_constr_7, + 0, + "pSRS-Offset-r10" + }, + { ATF_POINTER, 2, offsetof(struct UplinkPowerControlDedicatedSCell_r10, pSRS_OffsetAp_r10), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + memb_pSRS_OffsetAp_r10_constraint_1, + &asn_PER_memb_pSRS_OffsetAp_r10_constr_8, + 0, + "pSRS-OffsetAp-r10" + }, + { ATF_POINTER, 1, offsetof(struct UplinkPowerControlDedicatedSCell_r10, filterCoefficient_r10), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_FilterCoefficient, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + asn_DFL_9_set_4, /* DEFAULT 4 */ + "filterCoefficient-r10" + }, + { ATF_NOFLAGS, 0, offsetof(struct UplinkPowerControlDedicatedSCell_r10, pathlossReferenceLinking_r10), + (ASN_TAG_CLASS_CONTEXT | (6 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_pathlossReferenceLinking_r10_10, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "pathlossReferenceLinking-r10" + }, +}; +static int asn_MAP_UplinkPowerControlDedicatedSCell_r10_oms_1[] = { 4, 5 }; +static ber_tlv_tag_t asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_TYPE_tag2member_t asn_MAP_UplinkPowerControlDedicatedSCell_r10_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* p0-UE-PUSCH-r10 at 2833 */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* deltaMCS-Enabled-r10 at 2834 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* accumulationEnabled-r10 at 2835 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* pSRS-Offset-r10 at 2836 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* pSRS-OffsetAp-r10 at 2837 */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 }, /* filterCoefficient-r10 at 2838 */ + { (ASN_TAG_CLASS_CONTEXT | (6 << 2)), 6, 0, 0 } /* pathlossReferenceLinking-r10 at 2839 */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_UplinkPowerControlDedicatedSCell_r10_specs_1 = { + sizeof(struct UplinkPowerControlDedicatedSCell_r10), + offsetof(struct UplinkPowerControlDedicatedSCell_r10, _asn_ctx), + asn_MAP_UplinkPowerControlDedicatedSCell_r10_tag2el_1, + 7, /* Count of tags in the map */ + asn_MAP_UplinkPowerControlDedicatedSCell_r10_oms_1, /* Optional members */ + 2, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlDedicatedSCell_r10 = { + "UplinkPowerControlDedicatedSCell-r10", + "UplinkPowerControlDedicatedSCell-r10", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1, + sizeof(asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1[0]), /* 1 */ + asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1, /* Same as above */ + sizeof(asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1) + /sizeof(asn_DEF_UplinkPowerControlDedicatedSCell_r10_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_UplinkPowerControlDedicatedSCell_r10_1, + 7, /* Elements count */ + &asn_SPC_UplinkPowerControlDedicatedSCell_r10_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h b/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h new file mode 100644 index 000000000..5a75fa2a7 --- /dev/null +++ b/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h @@ -0,0 +1,59 @@ +/* + * Generated by asn1c-0.9.22 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-RRC-Definitions" + * found in "./asn1c/ASN1_files/EUTRA-RRC-Definitions.asn" + * `asn1c -gen-PER -fcompound-names -fnative-types` + */ + +#ifndef _UplinkPowerControlDedicatedSCell_r10_H_ +#define _UplinkPowerControlDedicatedSCell_r10_H_ + + +#include + +/* Including external dependencies */ +#include +#include +#include +#include "FilterCoefficient.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum UplinkPowerControlDedicatedSCell_r10__deltaMCS_Enabled_r10 { + UplinkPowerControlDedicatedSCell_r10__deltaMCS_Enabled_r10_en0 = 0, + UplinkPowerControlDedicatedSCell_r10__deltaMCS_Enabled_r10_en1 = 1 +} e_UplinkPowerControlDedicatedSCell_r10__deltaMCS_Enabled_r10; +typedef enum UplinkPowerControlDedicatedSCell_r10__pathlossReferenceLinking_r10 { + UplinkPowerControlDedicatedSCell_r10__pathlossReferenceLinking_r10_pCell = 0, + UplinkPowerControlDedicatedSCell_r10__pathlossReferenceLinking_r10_sCell = 1 +} e_UplinkPowerControlDedicatedSCell_r10__pathlossReferenceLinking_r10; + +/* UplinkPowerControlDedicatedSCell-r10 */ +typedef struct UplinkPowerControlDedicatedSCell_r10 { + long p0_UE_PUSCH_r10; + long deltaMCS_Enabled_r10; + BOOLEAN_t accumulationEnabled_r10; + long pSRS_Offset_r10; + long *pSRS_OffsetAp_r10 /* OPTIONAL */; + FilterCoefficient_t *filterCoefficient_r10 /* DEFAULT 4 */; + long pathlossReferenceLinking_r10; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} UplinkPowerControlDedicatedSCell_r10_t; + +/* Implementation */ +/* extern asn_TYPE_descriptor_t asn_DEF_deltaMCS_Enabled_r10_3; // (Use -fall-defs-global to expose) */ +/* extern asn_TYPE_descriptor_t asn_DEF_pathlossReferenceLinking_r10_10; // (Use -fall-defs-global to expose) */ +extern asn_TYPE_descriptor_t asn_DEF_UplinkPowerControlDedicatedSCell_r10; + +#ifdef __cplusplus +} +#endif + +#endif /* _UplinkPowerControlDedicatedSCell_r10_H_ */ +#include diff --git a/lte/rrc/asn/VarMeasConfig.c b/lte/rrc/asn/VarMeasConfig.c new file mode 100644 index 000000000..bf42f7c56 --- /dev/null +++ b/lte/rrc/asn/VarMeasConfig.c @@ -0,0 +1,237 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#include "VarMeasConfig.h" + +static asn_per_constraints_t asn_PER_type_speedStatePars_constr_7 GCC_NOTUSED = { + { APC_CONSTRAINED, 1, 1, 0, 1 } /* (0..1) */, + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_setup_9[] = { + { ATF_NOFLAGS, 0, offsetof(struct setup, mobilityStateParameters), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MobilityStateParameters, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "mobilityStateParameters" + }, + { ATF_NOFLAGS, 0, offsetof(struct setup, timeToTrigger_SF), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_SpeedStateScaleFactors, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "timeToTrigger-SF" + }, +}; +static const ber_tlv_tag_t asn_DEF_setup_tags_9[] = { + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_setup_tag2el_9[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* mobilityStateParameters */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* timeToTrigger-SF */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_setup_specs_9 = { + sizeof(struct setup), + offsetof(struct setup, _asn_ctx), + asn_MAP_setup_tag2el_9, + 2, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_setup_9 = { + "setup", + "setup", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_setup_tags_9, + sizeof(asn_DEF_setup_tags_9) + /sizeof(asn_DEF_setup_tags_9[0]) - 1, /* 1 */ + asn_DEF_setup_tags_9, /* Same as above */ + sizeof(asn_DEF_setup_tags_9) + /sizeof(asn_DEF_setup_tags_9[0]), /* 2 */ + 0, /* No PER visible constraints */ + asn_MBR_setup_9, + 2, /* Elements count */ + &asn_SPC_setup_specs_9 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_speedStatePars_7[] = { + { ATF_NOFLAGS, 0, offsetof(struct speedStatePars, choice.release), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NULL, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "release" + }, + { ATF_NOFLAGS, 0, offsetof(struct speedStatePars, choice.setup), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + 0, + &asn_DEF_setup_9, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "setup" + }, +}; +static const asn_TYPE_tag2member_t asn_MAP_speedStatePars_tag2el_7[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* release */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 } /* setup */ +}; +static asn_CHOICE_specifics_t asn_SPC_speedStatePars_specs_7 = { + sizeof(struct speedStatePars), + offsetof(struct speedStatePars, _asn_ctx), + offsetof(struct speedStatePars, present), + sizeof(((struct speedStatePars *)0)->present), + asn_MAP_speedStatePars_tag2el_7, + 2, /* Count of tags in the map */ + 0, + -1 /* Extensions start */ +}; +static /* Use -fall-defs-global to expose */ +asn_TYPE_descriptor_t asn_DEF_speedStatePars_7 = { + "speedStatePars", + "speedStatePars", + CHOICE_free, + CHOICE_print, + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_decode_xer, + CHOICE_encode_xer, + CHOICE_decode_uper, + CHOICE_encode_uper, + CHOICE_outmost_tag, + 0, /* No effective tags (pointer) */ + 0, /* No effective tags (count) */ + 0, /* No tags (pointer) */ + 0, /* No tags (count) */ + &asn_PER_type_speedStatePars_constr_7, + asn_MBR_speedStatePars_7, + 2, /* Elements count */ + &asn_SPC_speedStatePars_specs_7 /* Additional specs */ +}; + +static asn_TYPE_member_t asn_MBR_VarMeasConfig_1[] = { + { ATF_POINTER, 6, offsetof(struct VarMeasConfig, measIdList), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasIdToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measIdList" + }, + { ATF_POINTER, 5, offsetof(struct VarMeasConfig, measObjectList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasObjectToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measObjectList" + }, + { ATF_POINTER, 4, offsetof(struct VarMeasConfig, reportConfigList), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_ReportConfigToAddModList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "reportConfigList" + }, + { ATF_POINTER, 3, offsetof(struct VarMeasConfig, quantityConfig), + (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_QuantityConfig, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "quantityConfig" + }, + { ATF_POINTER, 2, offsetof(struct VarMeasConfig, s_Measure), + (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_RSRP_Range, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "s-Measure" + }, + { ATF_POINTER, 1, offsetof(struct VarMeasConfig, speedStatePars), + (ASN_TAG_CLASS_CONTEXT | (5 << 2)), + +1, /* EXPLICIT tag at current level */ + &asn_DEF_speedStatePars_7, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "speedStatePars" + }, +}; +static const int asn_MAP_VarMeasConfig_oms_1[] = { 0, 1, 2, 3, 4, 5 }; +static const ber_tlv_tag_t asn_DEF_VarMeasConfig_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_VarMeasConfig_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measIdList */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* measObjectList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 }, /* reportConfigList */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 3, 0, 0 }, /* quantityConfig */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 4, 0, 0 }, /* s-Measure */ + { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 5, 0, 0 } /* speedStatePars */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_VarMeasConfig_specs_1 = { + sizeof(struct VarMeasConfig), + offsetof(struct VarMeasConfig, _asn_ctx), + asn_MAP_VarMeasConfig_tag2el_1, + 6, /* Count of tags in the map */ + asn_MAP_VarMeasConfig_oms_1, /* Optional members */ + 6, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_VarMeasConfig = { + "VarMeasConfig", + "VarMeasConfig", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_VarMeasConfig_tags_1, + sizeof(asn_DEF_VarMeasConfig_tags_1) + /sizeof(asn_DEF_VarMeasConfig_tags_1[0]), /* 1 */ + asn_DEF_VarMeasConfig_tags_1, /* Same as above */ + sizeof(asn_DEF_VarMeasConfig_tags_1) + /sizeof(asn_DEF_VarMeasConfig_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_VarMeasConfig_1, + 6, /* Elements count */ + &asn_SPC_VarMeasConfig_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/VarMeasConfig.h b/lte/rrc/asn/VarMeasConfig.h new file mode 100644 index 000000000..85c31965a --- /dev/null +++ b/lte/rrc/asn/VarMeasConfig.h @@ -0,0 +1,80 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#ifndef _VarMeasConfig_H_ +#define _VarMeasConfig_H_ + + +#include + +/* Including external dependencies */ +#include "RSRP-Range.h" +#include +#include "MobilityStateParameters.h" +#include "SpeedStateScaleFactors.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Dependencies */ +typedef enum speedStatePars_PR { + speedStatePars_PR_NOTHING, /* No components present */ + speedStatePars_PR_release, + speedStatePars_PR_setup +} speedStatePars_PR; + +/* Forward declarations */ +struct MeasIdToAddModList; +struct MeasObjectToAddModList; +struct ReportConfigToAddModList; +struct QuantityConfig; + +/* VarMeasConfig */ +typedef struct VarMeasConfig { + struct MeasIdToAddModList *measIdList /* OPTIONAL */; + struct MeasObjectToAddModList *measObjectList /* OPTIONAL */; + struct ReportConfigToAddModList *reportConfigList /* OPTIONAL */; + struct QuantityConfig *quantityConfig /* OPTIONAL */; + RSRP_Range_t *s_Measure /* OPTIONAL */; + struct speedStatePars { + speedStatePars_PR present; + union VarMeasConfig__speedStatePars_u { + NULL_t release; + struct setup { + MobilityStateParameters_t mobilityStateParameters; + SpeedStateScaleFactors_t timeToTrigger_SF; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } setup; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; + } *speedStatePars; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} VarMeasConfig_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_VarMeasConfig; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "MeasIdToAddModList.h" +#include "MeasObjectToAddModList.h" +#include "ReportConfigToAddModList.h" +#include "QuantityConfig.h" + +#endif /* _VarMeasConfig_H_ */ +#include diff --git a/lte/rrc/asn/VarMeasReport.c b/lte/rrc/asn/VarMeasReport.c new file mode 100644 index 000000000..ae5639d26 --- /dev/null +++ b/lte/rrc/asn/VarMeasReport.c @@ -0,0 +1,81 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#include "VarMeasReport.h" + +static asn_TYPE_member_t asn_MBR_VarMeasReport_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct VarMeasReport, measId), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_MeasId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "measId" + }, + { ATF_POINTER, 1, offsetof(struct VarMeasReport, cellsTriggeredList), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellsTriggeredList, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellsTriggeredList" + }, + { ATF_NOFLAGS, 0, offsetof(struct VarMeasReport, numberOfReportsSent), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_NativeInteger, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "numberOfReportsSent" + }, +}; +static const int asn_MAP_VarMeasReport_oms_1[] = { 1 }; +static const ber_tlv_tag_t asn_DEF_VarMeasReport_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_VarMeasReport_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* measId */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* cellsTriggeredList */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* numberOfReportsSent */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_VarMeasReport_specs_1 = { + sizeof(struct VarMeasReport), + offsetof(struct VarMeasReport, _asn_ctx), + asn_MAP_VarMeasReport_tag2el_1, + 3, /* Count of tags in the map */ + asn_MAP_VarMeasReport_oms_1, /* Optional members */ + 1, 0, /* Root/Additions */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_VarMeasReport = { + "VarMeasReport", + "VarMeasReport", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_VarMeasReport_tags_1, + sizeof(asn_DEF_VarMeasReport_tags_1) + /sizeof(asn_DEF_VarMeasReport_tags_1[0]), /* 1 */ + asn_DEF_VarMeasReport_tags_1, /* Same as above */ + sizeof(asn_DEF_VarMeasReport_tags_1) + /sizeof(asn_DEF_VarMeasReport_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_VarMeasReport_1, + 3, /* Elements count */ + &asn_SPC_VarMeasReport_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/VarMeasReport.h b/lte/rrc/asn/VarMeasReport.h new file mode 100644 index 000000000..ef5f8faf4 --- /dev/null +++ b/lte/rrc/asn/VarMeasReport.h @@ -0,0 +1,46 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#ifndef _VarMeasReport_H_ +#define _VarMeasReport_H_ + + +#include + +/* Including external dependencies */ +#include "MeasId.h" +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct CellsTriggeredList; + +/* VarMeasReport */ +typedef struct VarMeasReport { + MeasId_t measId; + struct CellsTriggeredList *cellsTriggeredList /* OPTIONAL */; + long numberOfReportsSent; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} VarMeasReport_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_VarMeasReport; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "CellsTriggeredList.h" + +#endif /* _VarMeasReport_H_ */ +#include diff --git a/lte/rrc/asn/VarMeasReportList.c b/lte/rrc/asn/VarMeasReportList.c new file mode 100644 index 000000000..9bee2fe69 --- /dev/null +++ b/lte/rrc/asn/VarMeasReportList.c @@ -0,0 +1,57 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#include "VarMeasReportList.h" + +static asn_per_constraints_t asn_PER_type_VarMeasReportList_constr_1 GCC_NOTUSED = { + { APC_UNCONSTRAINED, -1, -1, 0, 0 }, + { APC_CONSTRAINED, 5, 5, 1, 32 } /* (SIZE(1..32)) */, + 0, 0 /* No PER value map */ +}; +static asn_TYPE_member_t asn_MBR_VarMeasReportList_1[] = { + { ATF_POINTER, 0, 0, + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + 0, + &asn_DEF_VarMeasReport, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "" + }, +}; +static const ber_tlv_tag_t asn_DEF_VarMeasReportList_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn_SET_OF_specifics_t asn_SPC_VarMeasReportList_specs_1 = { + sizeof(struct VarMeasReportList), + offsetof(struct VarMeasReportList, _asn_ctx), + 0, /* XER encoding is XMLDelimitedItemList */ +}; +asn_TYPE_descriptor_t asn_DEF_VarMeasReportList = { + "VarMeasReportList", + "VarMeasReportList", + SEQUENCE_OF_free, + SEQUENCE_OF_print, + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_decode_xer, + SEQUENCE_OF_encode_xer, + SEQUENCE_OF_decode_uper, + SEQUENCE_OF_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_VarMeasReportList_tags_1, + sizeof(asn_DEF_VarMeasReportList_tags_1) + /sizeof(asn_DEF_VarMeasReportList_tags_1[0]), /* 1 */ + asn_DEF_VarMeasReportList_tags_1, /* Same as above */ + sizeof(asn_DEF_VarMeasReportList_tags_1) + /sizeof(asn_DEF_VarMeasReportList_tags_1[0]), /* 1 */ + &asn_PER_type_VarMeasReportList_constr_1, + asn_MBR_VarMeasReportList_1, + 1, /* Single element */ + &asn_SPC_VarMeasReportList_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/VarMeasReportList.h b/lte/rrc/asn/VarMeasReportList.h new file mode 100644 index 000000000..a8671f269 --- /dev/null +++ b/lte/rrc/asn/VarMeasReportList.h @@ -0,0 +1,43 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#ifndef _VarMeasReportList_H_ +#define _VarMeasReportList_H_ + + +#include + +/* Including external dependencies */ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Forward declarations */ +struct VarMeasReport; + +/* VarMeasReportList */ +typedef struct VarMeasReportList { + A_SEQUENCE_OF(struct VarMeasReport) list; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} VarMeasReportList_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_VarMeasReportList; + +#ifdef __cplusplus +} +#endif + +/* Referred external types */ +#include "VarMeasReport.h" + +#endif /* _VarMeasReportList_H_ */ +#include diff --git a/lte/rrc/asn/VarShortMAC-Input.c b/lte/rrc/asn/VarShortMAC-Input.c new file mode 100644 index 000000000..637111ee2 --- /dev/null +++ b/lte/rrc/asn/VarShortMAC-Input.c @@ -0,0 +1,79 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#include "VarShortMAC-Input.h" + +static asn_TYPE_member_t asn_MBR_VarShortMAC_Input_1[] = { + { ATF_NOFLAGS, 0, offsetof(struct VarShortMAC_Input, cellIdentity), + (ASN_TAG_CLASS_CONTEXT | (0 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_CellIdentity, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "cellIdentity" + }, + { ATF_NOFLAGS, 0, offsetof(struct VarShortMAC_Input, physCellId), + (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_PhysCellId, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "physCellId" + }, + { ATF_NOFLAGS, 0, offsetof(struct VarShortMAC_Input, c_RNTI), + (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + -1, /* IMPLICIT tag at current level */ + &asn_DEF_C_RNTI, + 0, /* Defer constraints checking to the member type */ + 0, /* No PER visible constraints */ + 0, + "c-RNTI" + }, +}; +static const ber_tlv_tag_t asn_DEF_VarShortMAC_Input_tags_1[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static const asn_TYPE_tag2member_t asn_MAP_VarShortMAC_Input_tag2el_1[] = { + { (ASN_TAG_CLASS_CONTEXT | (0 << 2)), 0, 0, 0 }, /* cellIdentity */ + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 1, 0, 0 }, /* physCellId */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 2, 0, 0 } /* c-RNTI */ +}; +static asn_SEQUENCE_specifics_t asn_SPC_VarShortMAC_Input_specs_1 = { + sizeof(struct VarShortMAC_Input), + offsetof(struct VarShortMAC_Input, _asn_ctx), + asn_MAP_VarShortMAC_Input_tag2el_1, + 3, /* Count of tags in the map */ + 0, 0, 0, /* Optional elements (not needed) */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn_TYPE_descriptor_t asn_DEF_VarShortMAC_Input = { + "VarShortMAC-Input", + "VarShortMAC-Input", + SEQUENCE_free, + SEQUENCE_print, + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_decode_xer, + SEQUENCE_encode_xer, + SEQUENCE_decode_uper, + SEQUENCE_encode_uper, + 0, /* Use generic outmost tag fetcher */ + asn_DEF_VarShortMAC_Input_tags_1, + sizeof(asn_DEF_VarShortMAC_Input_tags_1) + /sizeof(asn_DEF_VarShortMAC_Input_tags_1[0]), /* 1 */ + asn_DEF_VarShortMAC_Input_tags_1, /* Same as above */ + sizeof(asn_DEF_VarShortMAC_Input_tags_1) + /sizeof(asn_DEF_VarShortMAC_Input_tags_1[0]), /* 1 */ + 0, /* No PER visible constraints */ + asn_MBR_VarShortMAC_Input_1, + 3, /* Elements count */ + &asn_SPC_VarShortMAC_Input_specs_1 /* Additional specs */ +}; + diff --git a/lte/rrc/asn/VarShortMAC-Input.h b/lte/rrc/asn/VarShortMAC-Input.h new file mode 100644 index 000000000..1a634d23e --- /dev/null +++ b/lte/rrc/asn/VarShortMAC-Input.h @@ -0,0 +1,41 @@ +/* + * Generated by asn1c-0.9.28 (http://lionet.info/asn1c) + * From ASN.1 module "EUTRA-UE-Variables" + * found in "EUTRA-UE-Variables.asn" + */ + +#ifndef _VarShortMAC_Input_H_ +#define _VarShortMAC_Input_H_ + + +#include + +/* Including external dependencies */ +#include "CellIdentity.h" +#include "PhysCellId.h" +#include "C-RNTI.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* VarShortMAC-Input */ +typedef struct VarShortMAC_Input { + CellIdentity_t cellIdentity; + PhysCellId_t physCellId; + C_RNTI_t c_RNTI; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +} VarShortMAC_Input_t; + +/* Implementation */ +extern asn_TYPE_descriptor_t asn_DEF_VarShortMAC_Input; + +#ifdef __cplusplus +} +#endif + +#endif /* _VarShortMAC_Input_H_ */ +#include diff --git a/lte/rrc/asn/asn_SET_OF.c b/lte/rrc/asn/asn_SET_OF.c index 944f2cb8a..3d33f3e91 100644 --- a/lte/rrc/asn/asn_SET_OF.c +++ b/lte/rrc/asn/asn_SET_OF.c @@ -4,7 +4,6 @@ */ #include #include -#include /* * Add another element into the set. @@ -21,6 +20,8 @@ asn_set_add(void *asn_set_of_x, void *ptr) { /* * Make sure there's enough space to insert an element. */ + ASN_DEBUG("SET ADD: count %d, size %d",as->count,as->size); + if(as->count == as->size) { int _newsize = as->size ? (as->size << 1) : 4; void *_new_arr; diff --git a/lte/rrc/asn/asn_SET_OF.h b/lte/rrc/asn/asn_SET_OF.h index 19501a054..e79757a2b 100644 --- a/lte/rrc/asn/asn_SET_OF.h +++ b/lte/rrc/asn/asn_SET_OF.h @@ -39,7 +39,7 @@ LIBLTE_API int asn_set_add(void *asn_set_of_x, void *ptr); * If _do_free is given AND the (*free) is initialized, the element * will be freed using the custom (*free) function as well. */ -void asn_set_del(void *asn_set_of_x, int number, int _do_free); +LIBLTE_API void asn_set_del(void *asn_set_of_x, int number, int _do_free); /* * Empty the contents of the set. Will free the elements, if (*free) is given. diff --git a/lte/rrc/asn/asn_codecs.h b/lte/rrc/asn/asn_codecs.h index e5600142a..4a251d940 100644 --- a/lte/rrc/asn/asn_codecs.h +++ b/lte/rrc/asn/asn_codecs.h @@ -62,7 +62,7 @@ typedef struct asn_enc_rval_s { tmp_error.encoded = -1; \ tmp_error.failed_type = td; \ tmp_error.structure_ptr = sptr; \ - ASN_DEBUG("Failed to encode element %s", td ? td->name : ""); \ + ASN_DEBUG("Failed to encode element %s", td->name); \ return tmp_error; \ } while(0) #define _ASN_ENCODED_OK(rval) do { \ @@ -92,7 +92,7 @@ typedef struct asn_dec_rval_s { asn_dec_rval_t tmp_error; \ tmp_error.code = RC_FAIL; \ tmp_error.consumed = 0; \ - ASN_DEBUG("Failed to decode element %s", td ? td->name : ""); \ + ASN_DEBUG("Failed to decode element %s", td->name); \ return tmp_error; \ } while(0) #define _ASN_DECODE_STARVED do { \ diff --git a/lte/rrc/asn/asn_codecs_prim.c b/lte/rrc/asn/asn_codecs_prim.c index 8e604a492..ff698c078 100644 --- a/lte/rrc/asn/asn_codecs_prim.c +++ b/lte/rrc/asn/asn_codecs_prim.c @@ -4,7 +4,6 @@ */ #include #include -#include /* * Decode an always-primitive type. @@ -15,7 +14,7 @@ ber_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, void **sptr, const void *buf_ptr, size_t size, int tag_mode) { ASN__PRIMITIVE_TYPE_t *st = (ASN__PRIMITIVE_TYPE_t *)*sptr; asn_dec_rval_t rval; - ber_tlv_len_t length = 0; // =0 to avoid [incorrect] warning. + ber_tlv_len_t length; /* * If the structure is not there, allocate it. @@ -143,26 +142,20 @@ struct xdp_arg_s { int want_more; }; -/* - * Since some kinds of primitive values can be encoded using value-specific - * tags (, , etc), the primitive decoder must - * be supplied with such tags to parse them as needed. - */ + static int xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; - /* - * The chunk_buf is guaranteed to start at '<'. - */ - assert(chunk_size && ((const char *)chunk_buf)[0] == 0x3c); - - /* - * Decoding was performed once already. Prohibit doing it again. - */ - if(arg->decoded_something) + if(arg->decoded_something) { + if(xer_is_whitespace(chunk_buf, chunk_size)) + return 0; /* Skip it. */ + /* + * Decoding was done once already. Prohibit doing it again. + */ return -1; + } bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); @@ -183,20 +176,13 @@ xer_decode__unexpected_tag(void *key, const void *chunk_buf, size_t chunk_size) } static ssize_t -xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { +xer_decode__body(void *key, const void *chunk_buf, size_t chunk_size, int have_more) { struct xdp_arg_s *arg = (struct xdp_arg_s *)key; enum xer_pbd_rval bret; - size_t lead_wsp_size; if(arg->decoded_something) { - if(xer_whitespace_span(chunk_buf, chunk_size) == chunk_size) { - /* - * Example: - * "123 " - * ^- chunk_buf position. - */ + if(xer_is_whitespace(chunk_buf, chunk_size)) return chunk_size; - } /* * Decoding was done once already. Prohibit doing it again. */ @@ -216,10 +202,6 @@ xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, return -1; } - lead_wsp_size = xer_whitespace_span(chunk_buf, chunk_size); - chunk_buf = (const char *)chunk_buf + lead_wsp_size; - chunk_size -= lead_wsp_size; - bret = arg->prim_body_decoder(arg->type_descriptor, arg->struct_key, chunk_buf, chunk_size); switch(bret) { @@ -232,7 +214,7 @@ xer_decode__primitive_body(void *key, const void *chunk_buf, size_t chunk_size, arg->decoded_something = 1; /* Fall through */ case XPBD_NOT_BODY_IGNORE: /* Safe to proceed further */ - return lead_wsp_size + chunk_size; + return chunk_size; } return -1; @@ -270,7 +252,7 @@ xer_decode_primitive(asn_codec_ctx_t *opt_codec_ctx, rc = xer_decode_general(opt_codec_ctx, &s_ctx, &s_arg, xml_tag, buf_ptr, size, - xer_decode__unexpected_tag, xer_decode__primitive_body); + xer_decode__unexpected_tag, xer_decode__body); switch(rc.code) { case RC_OK: if(!s_arg.decoded_something) { diff --git a/lte/rrc/asn/asn_internal.h b/lte/rrc/asn/asn_internal.h index e29e4d5f7..677148bf5 100644 --- a/lte/rrc/asn/asn_internal.h +++ b/lte/rrc/asn/asn_internal.h @@ -9,6 +9,8 @@ #ifndef _ASN_INTERNAL_H_ #define _ASN_INTERNAL_H_ +#define EMIT_ASN_DEBUG 0 + #include "asn_application.h" /* Application-visible API */ #ifndef __NO_ASSERT_H__ /* Include assert.h only for internal use. */ @@ -20,7 +22,7 @@ extern "C" { #endif /* Environment version might be used to avoid running with the old library */ -#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ +#define ASN1C_ENVIRONMENT_VERSION 922 /* Compile-time version */ int get_asn1c_environment_version(void); /* Run-time version */ #define CALLOC(nmemb, size) calloc(nmemb, size) @@ -28,10 +30,6 @@ int get_asn1c_environment_version(void); /* Run-time version */ #define REALLOC(oldptr, size) realloc(oldptr, size) #define FREEMEM(ptr) free(ptr) -#define asn_debug_indent 0 -#define ASN_DEBUG_INDENT_ADD(i) do{}while(0) - -#define EMIT_ASN_DEBUG 1 /* * A macro for debugging the ASN.1 internals. @@ -41,13 +39,9 @@ int get_asn1c_environment_version(void); /* Run-time version */ #if EMIT_ASN_DEBUG == 1 /* And it was asked to emit this code... */ #ifdef __GNUC__ #ifdef ASN_THREAD_SAFE -/* Thread safety requires sacrifice in output indentation: - * Retain empty definition of ASN_DEBUG_INDENT_ADD. */ +#define asn_debug_indent 0 #else /* !ASN_THREAD_SAFE */ -#undef ASN_DEBUG_INDENT_ADD -#undef asn_debug_indent -int asn_debug_indent; -#define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) +extern int asn_debug_indent; #endif /* ASN_THREAD_SAFE */ #define ASN_DEBUG(fmt, args...) do { \ int adi = asn_debug_indent; \ diff --git a/lte/rrc/asn/asn_system.h b/lte/rrc/asn/asn_system.h index e420ad2da..f257e1790 100644 --- a/lte/rrc/asn/asn_system.h +++ b/lte/rrc/asn/asn_system.h @@ -9,19 +9,21 @@ #ifndef _ASN_SYSTEM_H_ #define _ASN_SYSTEM_H_ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif -#include /* For snprintf(3) */ -#include /* For *alloc(3) */ -#include /* For memcpy(3) */ -#include /* For size_t */ -#include /* For LONG_MAX */ -#include /* For va_start */ -#include /* for offsetof and ptrdiff_t */ +#include "liblte/config.h" -#ifdef _WIN32 +#define PDU MasterInformationBlock + +#include // For snprintf(3) +#include // For *alloc(3) +#include // For memcpy(3) +#include // For size_t +#include // For LONG_MAX +#include // For va_start +#include // for offsetof and ptrdiff_t +#include // For errno + +#ifdef WIN32 #include #define snprintf _snprintf @@ -29,9 +31,9 @@ /* To avoid linking with ws2_32.lib, here's the definition of ntohl() */ #define sys_ntohl(l) ((((l) << 24) & 0xff000000) \ - | (((l) << 8) & 0xff0000) \ - | (((l) >> 8) & 0xff00) \ - | ((l >> 24) & 0xff)) + | (((l) << 16) & 0xff0000) \ + | (((l) << 8) & 0xff00) \ + | ((l) & 0xff)) #ifdef _MSC_VER /* MSVS.Net */ #ifndef __cplusplus @@ -57,13 +59,14 @@ typedef unsigned int uint32_t; #include #endif /* _MSC_VER */ -#else /* !_WIN32 */ +#else /* !WIN32 */ #if defined(__vxworks) #include #else /* !defined(__vxworks) */ -#include /* C99 specifies this file */ +#include /*C99 specifies this file */ + /* * 1. Earlier FreeBSD version didn't have , * but was present. @@ -81,16 +84,16 @@ typedef unsigned int uint32_t; #define inline #endif /* __GNUC__ */ #else -#include /* SUSv2+ and C99 specify this file, for uintXX_t */ +#include /*SUSv2+ and C99 specify this file, for uintXX_t */ #endif /* defined(sun) */ #endif -#include /* for ntohl() */ +/*#include for ntohl() */ #define sys_ntohl(foo) ntohl(foo) #endif /* defined(__vxworks) */ -#endif /* _WIN32 */ +#endif /* WIN32 */ #if __GNUC__ >= 3 #ifndef GCC_PRINTFLIKE @@ -117,13 +120,6 @@ typedef unsigned int uint32_t; #define offsetof(s, m) ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0)) #endif /* offsetof */ -#ifndef MIN /* Suitable for comparing primitive types (integers) */ -#if defined(__GNUC__) -#define MIN(a,b) ({ __typeof a _a = a; __typeof b _b = b; \ - ((_a)<(_b)?(_a):(_b)); }) -#else /* !__GNUC__ */ #define MIN(a,b) ((a)<(b)?(a):(b)) /* Unsafe variant */ -#endif /* __GNUC__ */ -#endif /* MIN */ #endif /* _ASN_SYSTEM_H_ */ diff --git a/lte/rrc/asn/ber_decoder.c b/lte/rrc/asn/ber_decoder.c index 0f9940090..601f66c0b 100644 --- a/lte/rrc/asn/ber_decoder.c +++ b/lte/rrc/asn/ber_decoder.c @@ -206,7 +206,7 @@ ber_check_tags(asn_codec_ctx_t *opt_codec_ctx, */ len_len = ber_fetch_length(tlv_constr, (const char *)ptr + tag_len, size - tag_len, &tlv_len); - ASN_DEBUG("Fetching len = %ld", (long)len_len); + ASN_DEBUG("Fetchinig len = %ld", (long)len_len); switch(len_len) { case -1: RETURN(RC_FAIL); case 0: RETURN(RC_WMORE); diff --git a/lte/rrc/asn/ber_tlv_tag.c b/lte/rrc/asn/ber_tlv_tag.c index 42708760e..03e27cc3a 100644 --- a/lte/rrc/asn/ber_tlv_tag.c +++ b/lte/rrc/asn/ber_tlv_tag.c @@ -4,7 +4,6 @@ */ #include #include -#include ssize_t ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { @@ -57,7 +56,6 @@ ber_fetch_tag(const void *ptr, size_t size, ber_tlv_tag_t *tag_r) { return 0; /* Want more */ } - ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *f) { char buf[sizeof("[APPLICATION ]") + 32]; diff --git a/lte/rrc/asn/constr_CHOICE.c b/lte/rrc/asn/constr_CHOICE.c index f366f7540..a9eb71941 100644 --- a/lte/rrc/asn/constr_CHOICE.c +++ b/lte/rrc/asn/constr_CHOICE.c @@ -183,11 +183,11 @@ CHOICE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, } do { - const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; - t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + t2m = (asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _search4tag); if(t2m) { @@ -445,7 +445,7 @@ CHOICE_encode_der(asn_TYPE_descriptor_t *td, void *sptr, } ber_tlv_tag_t -CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { +CHOICE_outmost_tag(asn_TYPE_descriptor_t *td, const void *ptr, int tag_mode, ber_tlv_tag_t tag) { asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; int present; @@ -458,7 +458,7 @@ CHOICE_outmost_tag(const asn_TYPE_descriptor_t *td, const void *ptr, int tag_mod present = _fetch_present_idx(ptr, specs->pres_offset, specs->pres_size); if(present > 0 || present <= td->elements_count) { - const asn_TYPE_member_t *elm = &td->elements[present-1]; + asn_TYPE_member_t *elm = &td->elements[present-1]; const void *memb_ptr; if(elm->flags & ATF_POINTER) { @@ -535,7 +535,7 @@ CHOICE_constraint(asn_TYPE_descriptor_t *td, const void *sptr, #undef XER_ADVANCE #define XER_ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ - buf_ptr = (const void *)(((const char *)buf_ptr) + num); \ + buf_ptr = ((const char *)buf_ptr) + num;\ size -= num; \ consumed_myself += num; \ } while(0) @@ -913,7 +913,6 @@ CHOICE_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraint_t *ct; void *memb_ptr; int present; - int present_enc; if(!sptr) _ASN_ENCODE_FAILED; @@ -935,17 +934,15 @@ CHOICE_encode_uper(asn_TYPE_descriptor_t *td, else present--; - ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); - /* Adjust if canonical order is different from natural order */ if(specs->canonical_order) - present_enc = specs->canonical_order[present]; - else - present_enc = present; + present = specs->canonical_order[present]; + + ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); if(ct && ct->range_bits >= 0) { - if(present_enc < ct->lower_bound - || present_enc > ct->upper_bound) { + if(present < ct->lower_bound + || present > ct->upper_bound) { if(ct->flags & APC_EXTENSIBLE) { if(per_put_few_bits(po, 1, 1)) _ASN_ENCODE_FAILED; @@ -969,7 +966,7 @@ CHOICE_encode_uper(asn_TYPE_descriptor_t *td, } if(ct && ct->range_bits >= 0) { - if(per_put_few_bits(po, present_enc, ct->range_bits)) + if(per_put_few_bits(po, present, ct->range_bits)) _ASN_ENCODE_FAILED; return elm->type->uper_encoder(elm->type, elm->per_constraints, @@ -978,7 +975,7 @@ CHOICE_encode_uper(asn_TYPE_descriptor_t *td, asn_enc_rval_t rval; if(specs->ext_start == -1) _ASN_ENCODE_FAILED; - if(uper_put_nsnnwn(po, present_enc - specs->ext_start)) + if(uper_put_nsnnwn(po, present - specs->ext_start)) _ASN_ENCODE_FAILED; if(uper_open_type_put(elm->type, elm->per_constraints, memb_ptr, po)) diff --git a/lte/rrc/asn/constr_CHOICE.h b/lte/rrc/asn/constr_CHOICE.h index e824a2206..83404e6d4 100644 --- a/lte/rrc/asn/constr_CHOICE.h +++ b/lte/rrc/asn/constr_CHOICE.h @@ -12,7 +12,7 @@ extern "C" { #endif -typedef const struct asn_CHOICE_specifics_s { +typedef struct asn_CHOICE_specifics_s { /* * Target structure description. */ @@ -24,7 +24,7 @@ typedef const struct asn_CHOICE_specifics_s { /* * Tags to members mapping table. */ - const asn_TYPE_tag2member_t *tag2el; + asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* Canonical ordering of CHOICE elements, for PER */ diff --git a/lte/rrc/asn/constr_SEQUENCE.c b/lte/rrc/asn/constr_SEQUENCE.c index 07dcedfb6..db3c92581 100644 --- a/lte/rrc/asn/constr_SEQUENCE.c +++ b/lte/rrc/asn/constr_SEQUENCE.c @@ -34,7 +34,7 @@ #undef ADVANCE #define ADVANCE(num_bytes) do { \ size_t num = num_bytes; \ - ptr = ((const char *)ptr) + num; \ + ptr = ((const char *)ptr) + num;\ size -= num; \ if(ctx->left >= 0) \ ctx->left -= num; \ @@ -310,16 +310,16 @@ SEQUENCE_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, * Resort to a binary search over * sorted array of tags. */ - const asn_TYPE_tag2member_t *t2m; + asn_TYPE_tag2member_t *t2m; asn_TYPE_tag2member_t key; key.el_tag = tlv_tag; key.el_no = edx; - t2m = (const asn_TYPE_tag2member_t *)bsearch(&key, + t2m = (asn_TYPE_tag2member_t *)bsearch(&key, specs->tag2el, specs->tag2el_count, sizeof(specs->tag2el[0]), _t2e_cmp); if(t2m) { - const asn_TYPE_tag2member_t *best = 0; - const asn_TYPE_tag2member_t *t2m_f, *t2m_l; + asn_TYPE_tag2member_t *best = 0; + asn_TYPE_tag2member_t *t2m_f, *t2m_l; int edx_max = edx + elements[edx].optional; /* * Rewind to the first element with that tag, @@ -667,7 +667,8 @@ SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, if(elm->flags & ATF_POINTER) { /* Member is a pointer to another structure */ - memb_ptr2 = (void **)((char *)st + elm->memb_offset); + memb_ptr2 = (void **)((char *)st + + elm->memb_offset); } else { memb_ptr = (char *)st + elm->memb_offset; memb_ptr2 = &memb_ptr; @@ -1142,7 +1143,7 @@ SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, bmlength = uper_get_nslength(pd); if(bmlength < 0) _ASN_DECODE_STARVED; - ASN_DEBUG("Extensions %ld present in %s", (long)bmlength, td->name); + ASN_DEBUG("Extensions %d present in %s", bmlength, td->name); epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); if(!epres) _ASN_DECODE_STARVED; @@ -1154,8 +1155,8 @@ SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, memset(&epmd, 0, sizeof(epmd)); epmd.buffer = epres; epmd.nbits = bmlength; - ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", - td->name, (long)bmlength, *epres); + ASN_DEBUG("Read in extensions bitmap for %s of %d bits (%x..)", + td->name, bmlength, *epres); /* Go over extensions and read them in */ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { diff --git a/lte/rrc/asn/constr_SEQUENCE.h b/lte/rrc/asn/constr_SEQUENCE.h index c2aeb6676..5f589d5c1 100644 --- a/lte/rrc/asn/constr_SEQUENCE.h +++ b/lte/rrc/asn/constr_SEQUENCE.h @@ -11,7 +11,7 @@ extern "C" { #endif -typedef const struct asn_SEQUENCE_specifics_s { +typedef struct asn_SEQUENCE_specifics_s { /* * Target structure description. */ @@ -21,14 +21,14 @@ typedef const struct asn_SEQUENCE_specifics_s { /* * Tags to members mapping table (sorted). */ - const asn_TYPE_tag2member_t *tag2el; + asn_TYPE_tag2member_t *tag2el; int tag2el_count; /* * Optional members of the extensions root (roms) or additions (aoms). * Meaningful for PER. */ - const int *oms; /* Optional MemberS */ + int *oms; /* Optional MemberS */ int roms_count; /* Root optional members count */ int aoms_count; /* Additions optional members count */ diff --git a/lte/rrc/asn/constr_SET_OF.c b/lte/rrc/asn/constr_SET_OF.c index b68d7ca1b..11eac57a2 100644 --- a/lte/rrc/asn/constr_SET_OF.c +++ b/lte/rrc/asn/constr_SET_OF.c @@ -915,7 +915,7 @@ SET_OF_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, nelems = uper_get_length(pd, ct ? ct->effective_bits : -1, &repeat); ASN_DEBUG("Got to decode %d elements (eff %d)", - (int)nelems, (int)(ct ? ct->effective_bits : -1)); + (int)nelems, (int)ct ? ct->effective_bits : -1); if(nelems < 0) _ASN_DECODE_STARVED; } diff --git a/lte/rrc/asn/constr_SET_OF.h b/lte/rrc/asn/constr_SET_OF.h index 75e18cfa0..bcd096629 100644 --- a/lte/rrc/asn/constr_SET_OF.h +++ b/lte/rrc/asn/constr_SET_OF.h @@ -11,7 +11,7 @@ extern "C" { #endif -typedef const struct asn_SET_OF_specifics_s { +typedef struct asn_SET_OF_specifics_s { /* * Target structure description. */ diff --git a/lte/rrc/asn/constr_TYPE.c b/lte/rrc/asn/constr_TYPE.c index 322f68c86..45b893753 100644 --- a/lte/rrc/asn/constr_TYPE.c +++ b/lte/rrc/asn/constr_TYPE.c @@ -4,7 +4,6 @@ */ #include #include -#include /* * Version of the ASN.1 infrastructure shipped with compiler. @@ -17,7 +16,7 @@ static asn_app_consume_bytes_f _print2fp; * Return the outmost tag of the type. */ ber_tlv_tag_t -asn_TYPE_outmost_tag(const asn_TYPE_descriptor_t *type_descriptor, +asn_TYPE_outmost_tag(asn_TYPE_descriptor_t *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag) { if(tag_mode) @@ -75,3 +74,4 @@ void ASN_DEBUG_f(const char *fmt, ...) { fprintf(stderr, "\n"); va_end(ap); } + diff --git a/lte/rrc/asn/constr_TYPE.h b/lte/rrc/asn/constr_TYPE.h index 7739f63b7..f56a12bdc 100644 --- a/lte/rrc/asn/constr_TYPE.h +++ b/lte/rrc/asn/constr_TYPE.h @@ -12,8 +12,6 @@ #ifndef _CONSTR_TYPE_H_ #define _CONSTR_TYPE_H_ -#include "liblte/config.h" - #include #include @@ -75,7 +73,7 @@ typedef int (asn_struct_print_f)( * Do not use it in your application. */ typedef ber_tlv_tag_t (asn_outmost_tag_f)( - const struct asn_TYPE_descriptor_s *type_descriptor, + struct asn_TYPE_descriptor_s *type_descriptor, const void *struct_ptr, int tag_mode, ber_tlv_tag_t tag); /* The instance of the above function type; used internally. */ asn_outmost_tag_f asn_TYPE_outmost_tag; @@ -85,8 +83,8 @@ asn_outmost_tag_f asn_TYPE_outmost_tag; * The definitive description of the destination language's structure. */ typedef struct asn_TYPE_descriptor_s { - const char *name; /* A name of the ASN.1 type. "" in some cases. */ - const char *xml_tag; /* Name used in XML tag */ + char *name; /* A name of the ASN.1 type. "" in some cases. */ + char *xml_tag; /* Name used in XML tag */ /* * Generalized functions for dealing with the specific type. @@ -110,10 +108,10 @@ typedef struct asn_TYPE_descriptor_s { * Tags that are expected to occur. */ asn_outmost_tag_f *outmost_tag; /* */ - const ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ - int tags_count; /* Number of tags which are expected */ - const ber_tlv_tag_t *all_tags; /* Every tag for BER/containment */ - int all_tags_count; /* Number of tags */ + ber_tlv_tag_t *tags; /* Effective tags sequence for this type */ + int tags_count; /* Number of tags which are expected */ + ber_tlv_tag_t *all_tags;/* Every tag for BER/containment */ + int all_tags_count; /* Number of tags */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ @@ -127,7 +125,7 @@ typedef struct asn_TYPE_descriptor_s { * Additional information describing the type, used by appropriate * functions above. */ - const void *specifics; + void *specifics; } asn_TYPE_descriptor_t; /* @@ -149,7 +147,7 @@ typedef struct asn_TYPE_member_s { asn_constr_check_f *memb_constraints; /* Constraints validator */ asn_per_constraints_t *per_constraints; /* PER compiled constraints */ int (*default_value)(int setval, void **sptr); /* DEFAULT */ - const char *name; /* ASN.1 identifier of the element */ + char *name; /* ASN.1 identifier of the element */ } asn_TYPE_member_t; /* diff --git a/lte/rrc/asn/constraints.c b/lte/rrc/asn/constraints.c index 1bdda73e5..86a5a63d0 100644 --- a/lte/rrc/asn/constraints.c +++ b/lte/rrc/asn/constraints.c @@ -1,4 +1,4 @@ -#include "asn_internal.h" +#include #include "constraints.h" int diff --git a/lte/rrc/asn/converter-sample.c b/lte/rrc/asn/converter-sample.c new file mode 100644 index 000000000..0a682a275 --- /dev/null +++ b/lte/rrc/asn/converter-sample.c @@ -0,0 +1,834 @@ +/* + * Generic converter template for a selected ASN.1 type. + * Copyright (c) 2005, 2006, 2007 Lev Walkin . + * All rights reserved. + * + * To compile with your own ASN.1 type, please redefine the PDU as shown: + * + * cc -DPDU=MyCustomType -o myDecoder.o -c converter-sample.c + */ +#ifdef HAVE_CONFIG_H +#include +#endif +#include +#include +#include /* for atoi(3) */ +#include /* for getopt(3) */ +#include /* for strerror(3) */ +#include /* for EX_* exit codes */ +#include /* for errno */ + +#include +#include /* for _ASN_DEFAULT_STACK_MAX */ + +/* Convert "Type" defined by -DPDU into "asn_DEF_Type" */ +#define ASN_DEF_PDU(t) asn_DEF_ ## t +#define DEF_PDU_Type(t) ASN_DEF_PDU(t) +#define PDU_Type DEF_PDU_Type(PDU) + +extern asn_TYPE_descriptor_t PDU_Type; /* ASN.1 type to be decoded */ +#ifdef ASN_PDU_COLLECTION /* Generated by asn1c: -pdu=... */ +extern asn_TYPE_descriptor_t *asn_pdu_collection[]; +#endif + +/* + * Open file and parse its contens. + */ +static void *data_decode_from_file(asn_TYPE_descriptor_t *asnTypeOfPDU, + FILE *file, const char *name, ssize_t suggested_bufsize, int first_pdu); +static int write_out(const void *buffer, size_t size, void *key); +static FILE *argument_to_file(char *av[], int idx); +static char *argument_to_name(char *av[], int idx); + + int opt_debug; /* -d (or -dd) */ +static int opt_check; /* -c (constraints checking) */ +static int opt_stack; /* -s (maximum stack size) */ +static int opt_nopad; /* -per-nopad (PER input is not padded) */ +static int opt_onepdu; /* -1 (decode single PDU) */ + +/* Input data format selector */ +static enum input_format { + INP_BER, /* -iber: BER input */ + INP_XER, /* -ixer: XER input */ + INP_PER /* -iper: Unaligned PER input */ +} iform; /* -i */ + +/* Output data format selector */ +static enum output_format { + OUT_XER, /* -oxer: XER (XML) output */ + OUT_DER, /* -oder: DER (BER) output */ + OUT_PER, /* -oper: Unaligned PER output */ + OUT_TEXT, /* -otext: semi-structured text */ + OUT_NULL /* -onull: No pretty-printing */ +} oform; /* -o */ + +#ifdef JUNKTEST /* Enable -J */ +#define JUNKOPT "J:" +static double opt_jprob; /* Junk bit probability */ +static int junk_failures; +static void junk_bytes_with_probability(uint8_t *, size_t, double prob); +#else +#define JUNKOPT +#endif + +/* Debug output function */ +static inline void +DEBUG(const char *fmt, ...) { + va_list ap; + if(!opt_debug) return; + fprintf(stderr, "AD: "); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, "\n"); +} + +int +main(int ac, char *av[]) { + static asn_TYPE_descriptor_t *pduType = &PDU_Type; + ssize_t suggested_bufsize = 8192; /* close or equal to stdio buffer */ + int number_of_iterations = 1; + int num; + int ch; + + /* Figure out if Unaligned PER needs to be default */ + if(pduType->uper_decoder) + iform = INP_PER; + + /* + * Pocess the command-line argments. + */ + while((ch = getopt(ac, av, "i:o:1b:cdn:p:hs:" JUNKOPT)) != -1) + switch(ch) { + case 'i': + if(optarg[0] == 'b') { iform = INP_BER; break; } + if(optarg[0] == 'x') { iform = INP_XER; break; } + if(pduType->uper_decoder + && optarg[0] == 'p') { iform = INP_PER; break; } + fprintf(stderr, "-i: '%s': improper format selector\n", + optarg); + exit(EX_UNAVAILABLE); + case 'o': + if(optarg[0] == 'd') { oform = OUT_DER; break; } + if(pduType->uper_encoder + && optarg[0] == 'p') { oform = OUT_PER; break; } + if(optarg[0] == 'x') { oform = OUT_XER; break; } + if(optarg[0] == 't') { oform = OUT_TEXT; break; } + if(optarg[0] == 'n') { oform = OUT_NULL; break; } + fprintf(stderr, "-o: '%s': improper format selector\n", + optarg); + exit(EX_UNAVAILABLE); + case '1': + opt_onepdu = 1; + break; + case 'b': + suggested_bufsize = atoi(optarg); + if(suggested_bufsize < 1 + || suggested_bufsize > 16 * 1024 * 1024) { + fprintf(stderr, + "-b %s: Improper buffer size (1..16M)\n", + optarg); + exit(EX_UNAVAILABLE); + } + break; + case 'c': + opt_check = 1; + break; + case 'd': + opt_debug++; /* Double -dd means ASN.1 debug */ + break; + case 'n': + number_of_iterations = atoi(optarg); + if(number_of_iterations < 1) { + fprintf(stderr, + "-n %s: Improper iterations count\n", optarg); + exit(EX_UNAVAILABLE); + } + break; + case 'p': + if(strcmp(optarg, "er-nopad") == 0) { + opt_nopad = 1; + break; + } +#ifdef ASN_PDU_COLLECTION + if(strcmp(optarg, "list") == 0) { + asn_TYPE_descriptor_t **pdu = asn_pdu_collection; + fprintf(stderr, "Available PDU types:\n"); + for(; *pdu; pdu++) printf("%s\n", (*pdu)->name); + exit(0); + } else if(optarg[0] >= 'A' && optarg[0] <= 'Z') { + asn_TYPE_descriptor_t **pdu = asn_pdu_collection; + while(*pdu && strcmp((*pdu)->name, optarg)) pdu++; + if(*pdu) { pduType = *pdu; break; } + fprintf(stderr, "-p %s: Unrecognized PDU\n", optarg); + } +#endif /* ASN_PDU_COLLECTION */ + fprintf(stderr, "-p %s: Unrecognized option\n", optarg); + exit(EX_UNAVAILABLE); + case 's': + opt_stack = atoi(optarg); + if(opt_stack < 0) { + fprintf(stderr, + "-s %s: Non-negative value expected\n", + optarg); + exit(EX_UNAVAILABLE); + } + break; +#ifdef JUNKTEST + case 'J': + opt_jprob = strtod(optarg, 0); + if(opt_jprob <= 0.0 || opt_jprob > 1.0) { + fprintf(stderr, + "-J %s: Probability range 0..1 expected \n", + optarg); + exit(EX_UNAVAILABLE); + } + break; +#endif /* JUNKTEST */ + case 'h': + default: +#ifdef ASN_CONVERTER_TITLE +#define _AXS(x) #x +#define _ASX(x) _AXS(x) + fprintf(stderr, "%s\n", _ASX(ASN_CONVERTER_TITLE)); +#endif + fprintf(stderr, "Usage: %s [options] ...\n", av[0]); + fprintf(stderr, "Where options are:\n"); + if(pduType->uper_decoder) + fprintf(stderr, + " -iper Input is in Unaligned PER (Packed Encoding Rules) (DEFAULT)\n"); + fprintf(stderr, + " -iber Input is in BER (Basic Encoding Rules)%s\n", + iform == INP_PER ? "" : " (DEFAULT)"); + fprintf(stderr, + " -ixer Input is in XER (XML Encoding Rules)\n"); + if(pduType->uper_encoder) + fprintf(stderr, + " -oper Output in Unaligned PER (Packed Encoding Rules)\n"); + fprintf(stderr, + " -oder Output in DER (Distinguished Encoding Rules)\n" + " -oxer Output in XER (XML Encoding Rules) (DEFAULT)\n" + " -otext Output in plain semi-structured text (dump)\n" + " -onull Verify (decode) input, but do not output\n"); + if(pduType->uper_decoder) + fprintf(stderr, + " -per-nopad Assume PER PDUs are not padded (-iper)\n"); +#ifdef ASN_PDU_COLLECTION + fprintf(stderr, + " -p Specify PDU type to decode\n" + " -p list List available PDUs\n"); +#endif /* ASN_PDU_COLLECTION */ + fprintf(stderr, + " -1 Decode only the first PDU in file\n" + " -b Set the i/o buffer size (default is %ld)\n" + " -c Check ASN.1 constraints after decoding\n" + " -d Enable debugging (-dd is even better)\n" + " -n Process files times\n" + " -s Set the stack usage limit (default is %d)\n" +#ifdef JUNKTEST + " -J Set random junk test bit garbaging probability\n" +#endif + , (long)suggested_bufsize, _ASN_DEFAULT_STACK_MAX); + exit(EX_USAGE); + } + + ac -= optind; + av += optind; + + if(ac < 1) { + fprintf(stderr, "%s: No input files specified. " + "Try '-h' for more information\n", + av[-optind]); + exit(EX_USAGE); + } + + setvbuf(stdout, 0, _IOLBF, 0); + + for(num = 0; num < number_of_iterations; num++) { + int ac_i; + /* + * Process all files in turn. + */ + for(ac_i = 0; ac_i < ac; ac_i++) { + asn_enc_rval_t erv; + void *structure; /* Decoded structure */ + FILE *file = argument_to_file(av, ac_i); + char *name = argument_to_name(av, ac_i); + int first_pdu; + + for(first_pdu = 1; first_pdu || !opt_onepdu; first_pdu = 0) { + /* + * Decode the encoded structure from file. + */ + structure = data_decode_from_file(pduType, + file, name, suggested_bufsize, first_pdu); + if(!structure) { + if(errno) { + /* Error message is already printed */ + exit(EX_DATAERR); + } else { + /* EOF */ + break; + } + } + + /* Check ASN.1 constraints */ + if(opt_check) { + char errbuf[128]; + size_t errlen = sizeof(errbuf); + if(asn_check_constraints(pduType, structure, + errbuf, &errlen)) { + fprintf(stderr, "%s: ASN.1 constraint " + "check failed: %s\n", name, errbuf); + exit(EX_DATAERR); + } + } + + switch(oform) { + case OUT_NULL: +#ifdef JUNKTEST + if(opt_jprob == 0.0) +#endif + fprintf(stderr, "%s: decoded successfully\n", name); + break; + case OUT_TEXT: /* -otext */ + asn_fprint(stdout, pduType, structure); + break; + case OUT_XER: /* -oxer */ + if(xer_fprint(stdout, pduType, structure)) { + fprintf(stderr, + "%s: Cannot convert %s into XML\n", + name, pduType->name); + exit(EX_UNAVAILABLE); + } + break; + case OUT_DER: + erv = der_encode(pduType, structure, write_out, stdout); + if(erv.encoded < 0) { + fprintf(stderr, + "%s: Cannot convert %s into DER\n", + name, pduType->name); + exit(EX_UNAVAILABLE); + } + DEBUG("Encoded in %ld bytes of DER", (long)erv.encoded); + break; + case OUT_PER: + erv = uper_encode(pduType, structure, write_out, stdout); + if(erv.encoded < 0) { + fprintf(stderr, + "%s: Cannot convert %s into Unaligned PER\n", + name, pduType->name); + exit(EX_UNAVAILABLE); + } + DEBUG("Encoded in %ld bits of UPER", (long)erv.encoded); + break; + } + + ASN_STRUCT_FREE(*pduType, structure); + } + + if(file && file != stdin) + fclose(file); + } + } + +#ifdef JUNKTEST + if(opt_jprob > 0.0) { + fprintf(stderr, "Junked %f OK (%d/%d)\n", + opt_jprob, junk_failures, number_of_iterations); + } +#endif /* JUNKTEST */ + + return 0; +} + +static struct dynamic_buffer { + uint8_t *data; /* Pointer to the data bytes */ + size_t offset; /* Offset from the start */ + size_t length; /* Length of meaningful contents */ + size_t unbits; /* Unused bits in the last byte */ + size_t allocated; /* Allocated memory for data */ + int nreallocs; /* Number of data reallocations */ + off_t bytes_shifted; /* Number of bytes ever shifted */ +} DynamicBuffer; + +static void +buffer_dump() { + uint8_t *p = DynamicBuffer.data + DynamicBuffer.offset; + uint8_t *e = p + DynamicBuffer.length - (DynamicBuffer.unbits ? 1 : 0); + if(!opt_debug) return; + DEBUG("Buffer: { d=%p, o=%ld, l=%ld, u=%ld, a=%ld, s=%ld }", + DynamicBuffer.data, + (long)DynamicBuffer.offset, + (long)DynamicBuffer.length, + (long)DynamicBuffer.unbits, + (long)DynamicBuffer.allocated, + (long)DynamicBuffer.bytes_shifted); + for(; p < e; p++) { + fprintf(stderr, " %c%c%c%c%c%c%c%c", + ((*p >> 7) & 1) ? '1' : '0', + ((*p >> 6) & 1) ? '1' : '0', + ((*p >> 5) & 1) ? '1' : '0', + ((*p >> 4) & 1) ? '1' : '0', + ((*p >> 3) & 1) ? '1' : '0', + ((*p >> 2) & 1) ? '1' : '0', + ((*p >> 1) & 1) ? '1' : '0', + ((*p >> 0) & 1) ? '1' : '0'); + } + if(DynamicBuffer.unbits) { + unsigned int shift; + fprintf(stderr, " "); + for(shift = 7; shift >= DynamicBuffer.unbits; shift--) + fprintf(stderr, "%c", ((*p >> shift) & 1) ? '1' : '0'); + fprintf(stderr, " %ld:%ld\n", + (long)DynamicBuffer.length - 1, + (long)8 - DynamicBuffer.unbits); + } else { + fprintf(stderr, " %d\n", DynamicBuffer.length); + } +} + +/* + * Move the buffer content left N bits, possibly joining it with + * preceeding content. + */ +static void +buffer_shift_left(size_t offset, int bits) { + uint8_t *ptr = DynamicBuffer.data + DynamicBuffer.offset + offset; + uint8_t *end = DynamicBuffer.data + DynamicBuffer.offset + + DynamicBuffer.length - 1; + + if(!bits) return; + + DEBUG("Shifting left %d bits off %ld (o=%ld, u=%ld, l=%ld)", + bits, (long)offset, + (long)DynamicBuffer.offset, + (long)DynamicBuffer.unbits, + (long)DynamicBuffer.length); + + if(offset) { + int right; + right = ptr[0] >> (8 - bits); + + DEBUG("oleft: %c%c%c%c%c%c%c%c", + ((ptr[-1] >> 7) & 1) ? '1' : '0', + ((ptr[-1] >> 6) & 1) ? '1' : '0', + ((ptr[-1] >> 5) & 1) ? '1' : '0', + ((ptr[-1] >> 4) & 1) ? '1' : '0', + ((ptr[-1] >> 3) & 1) ? '1' : '0', + ((ptr[-1] >> 2) & 1) ? '1' : '0', + ((ptr[-1] >> 1) & 1) ? '1' : '0', + ((ptr[-1] >> 0) & 1) ? '1' : '0'); + + DEBUG("oriht: %c%c%c%c%c%c%c%c", + ((ptr[0] >> 7) & 1) ? '1' : '0', + ((ptr[0] >> 6) & 1) ? '1' : '0', + ((ptr[0] >> 5) & 1) ? '1' : '0', + ((ptr[0] >> 4) & 1) ? '1' : '0', + ((ptr[0] >> 3) & 1) ? '1' : '0', + ((ptr[0] >> 2) & 1) ? '1' : '0', + ((ptr[0] >> 1) & 1) ? '1' : '0', + ((ptr[0] >> 0) & 1) ? '1' : '0'); + + DEBUG("mriht: %c%c%c%c%c%c%c%c", + ((right >> 7) & 1) ? '1' : '0', + ((right >> 6) & 1) ? '1' : '0', + ((right >> 5) & 1) ? '1' : '0', + ((right >> 4) & 1) ? '1' : '0', + ((right >> 3) & 1) ? '1' : '0', + ((right >> 2) & 1) ? '1' : '0', + ((right >> 1) & 1) ? '1' : '0', + ((right >> 0) & 1) ? '1' : '0'); + + ptr[-1] = (ptr[-1] & (0xff << bits)) | right; + + DEBUG("after: %c%c%c%c%c%c%c%c", + ((ptr[-1] >> 7) & 1) ? '1' : '0', + ((ptr[-1] >> 6) & 1) ? '1' : '0', + ((ptr[-1] >> 5) & 1) ? '1' : '0', + ((ptr[-1] >> 4) & 1) ? '1' : '0', + ((ptr[-1] >> 3) & 1) ? '1' : '0', + ((ptr[-1] >> 2) & 1) ? '1' : '0', + ((ptr[-1] >> 1) & 1) ? '1' : '0', + ((ptr[-1] >> 0) & 1) ? '1' : '0'); + } + + buffer_dump(); + + for(; ptr < end; ptr++) { + int right = ptr[1] >> (8 - bits); + *ptr = (*ptr << bits) | right; + } + *ptr <<= bits; + + DEBUG("Unbits [%d=>", (int)DynamicBuffer.unbits); + if(DynamicBuffer.unbits == 0) { + DynamicBuffer.unbits += bits; + } else { + DynamicBuffer.unbits += bits; + if(DynamicBuffer.unbits > 7) { + DynamicBuffer.unbits -= 8; + DynamicBuffer.length--; + DynamicBuffer.bytes_shifted++; + } + } + DEBUG("Unbits =>%d]", (int)DynamicBuffer.unbits); + + buffer_dump(); + + DEBUG("Shifted. Now (o=%ld, u=%ld l=%ld)", + (long)DynamicBuffer.offset, + (long)DynamicBuffer.unbits, + (long)DynamicBuffer.length); + + +} + +/* + * Ensure that the buffer contains at least this amount of free space. + */ +static void add_bytes_to_buffer(const void *data2add, size_t bytes) { + + if(bytes == 0) return; + + DEBUG("=> add_bytes(%ld) { o=%ld l=%ld u=%ld, s=%ld }", + (long)bytes, + (long)DynamicBuffer.offset, + (long)DynamicBuffer.length, + (long)DynamicBuffer.unbits, + (long)DynamicBuffer.allocated); + + if(DynamicBuffer.allocated + >= (DynamicBuffer.offset + DynamicBuffer.length + bytes)) { + DEBUG("\tNo buffer reallocation is necessary"); + } else if(bytes <= DynamicBuffer.offset) { + DEBUG("\tContents shifted by %ld", DynamicBuffer.offset); + + /* Shift the buffer contents */ + memmove(DynamicBuffer.data, + DynamicBuffer.data + DynamicBuffer.offset, + DynamicBuffer.length); + DynamicBuffer.bytes_shifted += DynamicBuffer.offset; + DynamicBuffer.offset = 0; + } else { + size_t newsize = (DynamicBuffer.allocated << 2) + bytes; + void *p = MALLOC(newsize); + if(!p) { + perror("malloc()"); + exit(EX_OSERR); + } + memcpy(p, + DynamicBuffer.data + DynamicBuffer.offset, + DynamicBuffer.length); + FREEMEM(DynamicBuffer.data); + DynamicBuffer.data = (uint8_t *)p; + DynamicBuffer.offset = 0; + DynamicBuffer.allocated = newsize; + DynamicBuffer.nreallocs++; + DEBUG("\tBuffer reallocated to %ld (%d time)", + newsize, DynamicBuffer.nreallocs); + } + + memcpy(DynamicBuffer.data + + DynamicBuffer.offset + DynamicBuffer.length, + data2add, bytes); + DynamicBuffer.length += bytes; + if(DynamicBuffer.unbits) { + int bits = DynamicBuffer.unbits; + DynamicBuffer.unbits = 0; + buffer_shift_left(DynamicBuffer.length - bytes, bits); + } + + DEBUG("<= add_bytes(%ld) { o=%ld l=%ld u=%ld, s=%ld }", + (long)bytes, + (long)DynamicBuffer.offset, + (long)DynamicBuffer.length, + (long)DynamicBuffer.unbits, + (long)DynamicBuffer.allocated); +} + +static void * +data_decode_from_file(asn_TYPE_descriptor_t *pduType, FILE *file, const char *name, ssize_t suggested_bufsize, int on_first_pdu) { + static uint8_t *fbuf; + static ssize_t fbuf_size; + static asn_codec_ctx_t s_codec_ctx; + asn_codec_ctx_t *opt_codec_ctx = 0; + void *structure = 0; + asn_dec_rval_t rval; + size_t old_offset; + size_t new_offset; + int tolerate_eof; + size_t rd; + + if(!file) { + fprintf(stderr, "%s: %s\n", name, strerror(errno)); + errno = EINVAL; + return 0; + } + + if(opt_stack) { + s_codec_ctx.max_stack_size = opt_stack; + opt_codec_ctx = &s_codec_ctx; + } + + DEBUG("Processing %s", name); + + /* prepare the file buffer */ + if(fbuf_size != suggested_bufsize) { + fbuf = (uint8_t *)REALLOC(fbuf, suggested_bufsize); + if(!fbuf) { + perror("realloc()"); + exit(EX_OSERR); + } + fbuf_size = suggested_bufsize; + } + + if(on_first_pdu) { + DynamicBuffer.offset = 0; + DynamicBuffer.length = 0; + DynamicBuffer.unbits = 0; + DynamicBuffer.allocated = 0; + DynamicBuffer.bytes_shifted = 0; + DynamicBuffer.nreallocs = 0; + } + + old_offset = DynamicBuffer.bytes_shifted + DynamicBuffer.offset; + + /* Pretend immediate EOF */ + rval.code = RC_WMORE; + rval.consumed = 0; + + for(tolerate_eof = 1; /* Allow EOF first time buffer is non-empty */ + (rd = fread(fbuf, 1, fbuf_size, file)) + || feof(file) == 0 + || (tolerate_eof && DynamicBuffer.length) + ;) { + int ecbits = 0; /* Extra consumed bits in case of PER */ + uint8_t *i_bptr; + size_t i_size; + + /* + * Copy the data over, or use the original buffer. + */ + if(DynamicBuffer.allocated) { + /* Append new data into the existing dynamic buffer */ + add_bytes_to_buffer(fbuf, rd); + i_bptr = DynamicBuffer.data + DynamicBuffer.offset; + i_size = DynamicBuffer.length; + } else { + i_bptr = fbuf; + i_size = rd; + } + + DEBUG("Decoding %ld bytes", (long)i_size); + +#ifdef JUNKTEST + junk_bytes_with_probability(i_bptr, i_size, opt_jprob); +#endif + + switch(iform) { + case INP_BER: + rval = ber_decode(opt_codec_ctx, pduType, + (void **)&structure, i_bptr, i_size); + break; + case INP_XER: + rval = xer_decode(opt_codec_ctx, pduType, + (void **)&structure, i_bptr, i_size); + break; + case INP_PER: + if(opt_nopad) + rval = uper_decode(opt_codec_ctx, pduType, + (void **)&structure, i_bptr, i_size, 0, + DynamicBuffer.unbits); + else + rval = uper_decode_complete(opt_codec_ctx, pduType, + (void **)&structure, i_bptr, i_size); + switch(rval.code) { + case RC_OK: + /* Fall through */ + case RC_FAIL: + if(opt_nopad) { + /* uper_decode() returns bits! */ + /* Extra bits */ + ecbits = rval.consumed % 8; + /* Convert into bytes! */ + rval.consumed /= 8; + } + break; + case RC_WMORE: + /* PER does not support restartability */ + ASN_STRUCT_FREE(*pduType, structure); + structure = 0; + rval.consumed = 0; + /* Continue accumulating data */ + break; + } + break; + } + DEBUG("decode(%ld) consumed %ld+%db (%ld), code %d", + (long)DynamicBuffer.length, + (long)rval.consumed, ecbits, (long)i_size, + rval.code); + + if(DynamicBuffer.allocated == 0) { + /* + * Flush remainder into the intermediate buffer. + */ + if(rval.code != RC_FAIL && rval.consumed < rd) { + add_bytes_to_buffer(fbuf + rval.consumed, + rd - rval.consumed); + buffer_shift_left(0, ecbits); + DynamicBuffer.bytes_shifted = rval.consumed; + rval.consumed = 0; + ecbits = 0; + } + } + + /* + * Adjust position inside the source buffer. + */ + if(DynamicBuffer.allocated) { + DynamicBuffer.offset += rval.consumed; + DynamicBuffer.length -= rval.consumed; + } else { + DynamicBuffer.bytes_shifted += rval.consumed; + } + + switch(rval.code) { + case RC_OK: + if(ecbits) buffer_shift_left(0, ecbits); + DEBUG("RC_OK, finishing up with %ld+%d", + (long)rval.consumed, ecbits); + return structure; + case RC_WMORE: + DEBUG("RC_WMORE, continuing read=%ld, cons=%ld " + " with %ld..%ld-%ld..%ld", + (long)rd, + (long)rval.consumed, + (long)DynamicBuffer.offset, + (long)DynamicBuffer.length, + (long)DynamicBuffer.unbits, + (long)DynamicBuffer.allocated); + if(!rd) tolerate_eof--; + continue; + case RC_FAIL: + break; + } + break; + } + + DEBUG("Clean up partially decoded structure"); + ASN_STRUCT_FREE(*pduType, structure); + + new_offset = DynamicBuffer.bytes_shifted + DynamicBuffer.offset; + + /* + * Print a message and return failure only if not EOF, + * unless this is our first PDU (empty file). + */ + if(on_first_pdu + || DynamicBuffer.length + || new_offset - old_offset > ((iform == INP_XER)?sizeof("\r\n")-1:0) + ) { + +#ifdef JUNKTEST + /* + * Nothing's wrong with being unable to decode junk. + * Simulate EOF. + */ + if(opt_jprob != 0.0) { + junk_failures++; + errno = 0; + return 0; + } +#endif + + DEBUG("ofp %d, no=%ld, oo=%ld, dbl=%ld", + on_first_pdu, (long)new_offset, (long)old_offset, + (long)DynamicBuffer.length); + fprintf(stderr, "%s: " + "Decode failed past byte %ld: %s\n", + name, (long)new_offset, + (rval.code == RC_WMORE) + ? "Unexpected end of input" + : "Input processing error"); +#ifndef ENOMSG +#define ENOMSG EINVAL +#endif +#ifndef EBADMSG +#define EBADMSG EINVAL +#endif + errno = (rval.code == RC_WMORE) ? ENOMSG : EBADMSG; + } else { + /* Got EOF after a few successful PDUs */ + errno = 0; + } + + return 0; +} + +/* Dump the buffer out to the specified FILE */ +static int write_out(const void *buffer, size_t size, void *key) { + FILE *fp = (FILE *)key; + return (fwrite(buffer, 1, size, fp) == size) ? 0 : -1; +} + +static int argument_is_stdin(char *av[], int idx) { + if(strcmp(av[idx], "-")) { + return 0; /* Certainly not */ + } else { + /* This might be , unless `./program -- -` */ + if(strcmp(av[-1], "--")) + return 1; + else + return 0; + } +} + +static FILE *argument_to_file(char *av[], int idx) { + return argument_is_stdin(av, idx) + ? stdin + : fopen(av[idx], "r"); +} + +static char *argument_to_name(char *av[], int idx) { + return argument_is_stdin(av, idx) + ? "standard input" + : av[idx]; +} + +#ifdef JUNKTEST +/* + * Fill bytes with some garbage with specified probability (more or less). + */ +static void +junk_bytes_with_probability(uint8_t *buf, size_t size, double prob) { + static int junkmode; + uint8_t *ptr; + uint8_t *end; + if(opt_jprob <= 0.0) return; + for(ptr = buf, end = ptr + size; ptr < end; ptr++) { + int byte = *ptr; + if(junkmode++ & 1) { + if((((double)random() / RAND_MAX) < prob)) + byte = random() & 0xff; + } else { +#define BPROB(b) ((((double)random() / RAND_MAX) < prob) ? b : 0) + byte ^= BPROB(0x80); + byte ^= BPROB(0x40); + byte ^= BPROB(0x20); + byte ^= BPROB(0x10); + byte ^= BPROB(0x08); + byte ^= BPROB(0x04); + byte ^= BPROB(0x02); + byte ^= BPROB(0x01); + } + if(byte != *ptr) { + DEBUG("Junk buf[%d] %02x -> %02x", + ptr - buf, *ptr, byte); + *ptr = byte; + } + } +} +#endif /* JUNKTEST */ + diff --git a/lte/rrc/asn/der_encoder.c b/lte/rrc/asn/der_encoder.c index 1c014802a..72dbc922c 100644 --- a/lte/rrc/asn/der_encoder.c +++ b/lte/rrc/asn/der_encoder.c @@ -3,7 +3,6 @@ * Redistribution and modifications are permitted subject to BSD license. */ #include -#include static ssize_t der_write_TL(ber_tlv_tag_t tag, ber_tlv_len_t len, asn_app_consume_bytes_f *cb, void *app_key, int constructed); @@ -80,10 +79,12 @@ der_write_tags(asn_TYPE_descriptor_t *sd, ber_tlv_tag_t tag, /* EXPLICIT or IMPLICIT tag */ asn_app_consume_bytes_f *cb, void *app_key) { - const ber_tlv_tag_t *tags; /* Copy of tags stream */ - int tags_count; /* Number of tags */ + ber_tlv_tag_t *tags; /* Copy of tags stream */ + ber_tlv_tag_t tags_array[8]; + int tags_count; /* Number of tags */ size_t overall_length; ssize_t *lens; + ssize_t lens_array[8]; int i; ASN_DEBUG("Writing tags (%s, tm=%d, tc=%d, tag=%s, mtc=%d)", @@ -102,21 +103,28 @@ der_write_tags(asn_TYPE_descriptor_t *sd, * and initialize it appropriately. */ int stag_offset; - ber_tlv_tag_t *tags_buf; - tags_buf = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t)); - if(!tags_buf) { /* Can fail on !x86 */ - errno = ENOMEM; - return -1; + //tags = (ber_tlv_tag_t *)alloca((sd->tags_count + 1) * sizeof(ber_tlv_tag_t)); + tags = &(tags_array[0]); + if ((sd->tags_count + 1)>=8) { +#ifdef USER_MODE + printf("der_encoder.c: ERROR tags array too small. Increase size!\n"); + exit(-1); +#endif + errno = ENOMEM; + return -1; + } + if(!tags) { /* Can fail on !x86 */ + errno = ENOMEM; + return -1; } tags_count = sd->tags_count + 1 /* EXPLICIT or IMPLICIT tag is given */ - ((tag_mode == -1) && sd->tags_count); /* Copy tags over */ - tags_buf[0] = tag; + tags[0] = tag; stag_offset = -1 + ((tag_mode == -1) && sd->tags_count); for(i = 1; i < tags_count; i++) - tags_buf[i] = sd->tags[i + stag_offset]; - tags = tags_buf; + tags[i] = sd->tags[i + stag_offset]; } else { tags = sd->tags; tags_count = sd->tags_count; @@ -126,12 +134,19 @@ der_write_tags(asn_TYPE_descriptor_t *sd, if(tags_count == 0) return 0; - lens = (ssize_t *)alloca(tags_count * sizeof(lens[0])); - if(!lens) { - errno = ENOMEM; - return -1; + //lens = (ssize_t *)alloca(tags_count * sizeof(lens[0])); + lens = &(lens_array[0]); + if (tags_count>=8) { + printf("der_encoder.c: ERROR lens array too small. Increase size!\n"); + exit(-1); + errno = ENOMEM; + return -1; } - + if(!lens) { + errno = ENOMEM; + return -1; + } + /* * Array of tags is initialized. * Now, compute the size of the TLV pairs, from right to left. diff --git a/lte/rrc/asn/per_decoder.c b/lte/rrc/asn/per_decoder.c index 220d7f9f7..2b3d2e298 100644 --- a/lte/rrc/asn/per_decoder.c +++ b/lte/rrc/asn/per_decoder.c @@ -21,7 +21,7 @@ uper_decode_complete(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, rval.consumed >>= 3; } else if(rval.code == RC_OK) { if(size) { - if(((const uint8_t *)buffer)[0] == 0) { + if(((uint8_t *)buffer)[0] == 0) { rval.consumed = 1; /* 1 byte */ } else { ASN_DEBUG("Expecting single zeroed byte"); @@ -81,8 +81,8 @@ uper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sp /* Return the number of consumed bits */ rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) + pd.nboff - skip_bits; - ASN_DEBUG("PER decoding consumed %ld, counted %ld", - (long)rval.consumed, (long)pd.moved); + ASN_DEBUG("PER decoding consumed %d, counted %d", + rval.consumed, pd.moved); assert(rval.consumed == pd.moved); } else { /* PER codec is not a restartable */ diff --git a/lte/rrc/asn/per_decoder.h b/lte/rrc/asn/per_decoder.h index 253745426..bbf16168b 100644 --- a/lte/rrc/asn/per_decoder.h +++ b/lte/rrc/asn/per_decoder.h @@ -5,8 +5,6 @@ #ifndef _PER_DECODER_H_ #define _PER_DECODER_H_ -#include "liblte/config.h" - #include #include @@ -20,7 +18,7 @@ struct asn_TYPE_descriptor_s; /* Forward declaration */ * Unaligned PER decoder of a "complete encoding" as per X.691#10.1. * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. */ - LIBLTE_API asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, +asn_dec_rval_t uper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ void **struct_ptr, /* Pointer to a target structure's pointer */ const void *buffer, /* Data to be decoded */ diff --git a/lte/rrc/asn/per_encoder.c b/lte/rrc/asn/per_encoder.c index e76ef74a9..f4bace060 100644 --- a/lte/rrc/asn/per_encoder.c +++ b/lte/rrc/asn/per_encoder.c @@ -88,7 +88,7 @@ uper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *cons } default: *buffer_r = key.buffer; - ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); + ASN_DEBUG("Complete encoded in %d bits", er.encoded); return ((er.encoded + 7) >> 3); } } diff --git a/lte/rrc/asn/per_encoder.h b/lte/rrc/asn/per_encoder.h index 72cd6ba3e..cc5d1b1db 100644 --- a/lte/rrc/asn/per_encoder.h +++ b/lte/rrc/asn/per_encoder.h @@ -5,8 +5,6 @@ #ifndef _PER_ENCODER_H_ #define _PER_ENCODER_H_ -#include "liblte/config.h" - #include #include @@ -22,7 +20,7 @@ struct asn_TYPE_descriptor_s; /* Forward declaration */ * field of the return value. Use the following formula to convert to bytes: * bytes = ((.encoded + 7) / 8) */ -asn_enc_rval_t uper_encode(struct asn_TYPE_descriptor_s *type_descriptor, +LIBLTE_API asn_enc_rval_t uper_encode(struct asn_TYPE_descriptor_s *type_descriptor, void *struct_ptr, /* Structure to be encoded */ asn_app_consume_bytes_f *consume_bytes_cb, /* Data collector */ void *app_key /* Arbitrary callback argument */ diff --git a/lte/rrc/asn/per_opentype.c b/lte/rrc/asn/per_opentype.c index ec404cf9b..c749c8c6c 100644 --- a/lte/rrc/asn/per_opentype.c +++ b/lte/rrc/asn/per_opentype.c @@ -18,6 +18,8 @@ static int uper_ugot_refill(asn_per_data_t *pd); static int per_skip_bits(asn_per_data_t *pd, int skip_nbits); static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd); +int asn_debug_indent; + /* * Encode an "open type field". * #10.1, #10.2 @@ -36,8 +38,6 @@ uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints for(bptr = buf, toGo = size; toGo;) { ssize_t maySave = uper_put_length(po, toGo); - ASN_DEBUG("Prepending length %d to %s and allowing to save %d", - (int)size, td->name, (int)maySave); if(maySave < 0) break; if(per_put_many_bits(po, bptr, maySave * 8)) break; bptr = (char *)bptr + maySave; @@ -47,8 +47,8 @@ uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints FREEMEM(buf); if(toGo) return -1; - ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", - td->name, (long)size); + ASN_DEBUG("Open type put %s of length %d + overhead (1byte?)", + td->name, size); return 0; } @@ -92,31 +92,28 @@ uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, bufLen += chunk_bytes; } while(repeat); - ASN_DEBUG("Getting open type %s encoded in %ld bytes", td->name, - (long)bufLen); + ASN_DEBUG("Getting open type %s encoded in %d bytes", td->name, + bufLen); memset(&spd, 0, sizeof(spd)); spd.buffer = buf; spd.nbits = bufLen << 3; - ASN_DEBUG_INDENT_ADD(+4); + asn_debug_indent += 4; rv = td->uper_decoder(ctx, td, constraints, sptr, &spd); - ASN_DEBUG_INDENT_ADD(-4); + asn_debug_indent -= 4; if(rv.code == RC_OK) { /* Check padding validity */ padding = spd.nbits - spd.nboff; - if ((padding < 8 || - /* X.691#10.1.3 */ - (spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) && - per_get_few_bits(&spd, padding) == 0) { + if(padding < 8 && per_get_few_bits(&spd, padding) == 0) { /* Everything is cool */ FREEMEM(buf); return rv; } FREEMEM(buf); if(padding >= 8) { - ASN_DEBUG("Too large padding %d in open type", (int)padding); + ASN_DEBUG("Too large padding %d in open type", padding); _ASN_DECODE_FAILED; } else { ASN_DEBUG("Non-zero padding"); @@ -151,9 +148,9 @@ uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, pd->nbits = pd->nboff; /* 0 good bits at this point, will refill */ pd->moved = 0; /* This now counts the open type size in bits */ - ASN_DEBUG_INDENT_ADD(+4); + asn_debug_indent += 4; rv = td->uper_decoder(ctx, td, constraints, sptr, pd); - ASN_DEBUG_INDENT_ADD(-4); + asn_debug_indent -= 4; #define UPDRESTOREPD do { \ /* buffer and nboff are valid, preserve them. */ \ @@ -168,23 +165,24 @@ uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, return rv; } - ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d", td->name, + ASN_DEBUG("OpenType %s pd%s old%s unclaimed=%d, repeat=%d" + , td->name, per_data_string(pd), per_data_string(&arg.oldpd), - (int)arg.unclaimed, (int)arg.repeat); + arg.unclaimed, arg.repeat); padding = pd->moved % 8; if(padding) { int32_t pvalue; if(padding > 7) { ASN_DEBUG("Too large padding %d in open type", - (int)padding); + padding); rv.code = RC_FAIL; UPDRESTOREPD; return rv; } padding = 8 - padding; - ASN_DEBUG("Getting padding of %d bits", (int)padding); + ASN_DEBUG("Getting padding of %d bits", padding); pvalue = per_get_few_bits(pd, padding); switch(pvalue) { case -1: @@ -194,7 +192,7 @@ uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, case 0: break; default: ASN_DEBUG("Non-blank padding (%d bits 0x%02x)", - (int)padding, (int)pvalue); + padding, (int)pvalue); UPDRESTOREPD; _ASN_DECODE_FAILED; } @@ -214,14 +212,14 @@ uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, UPDRESTOREPD; /* Skip data not consumed by the decoder */ + if(arg.unclaimed) ASN_DEBUG("Getting unclaimed %d", arg.unclaimed); if(arg.unclaimed) { - ASN_DEBUG("Getting unclaimed %d", (int)arg.unclaimed); switch(per_skip_bits(pd, arg.unclaimed)) { case -1: - ASN_DEBUG("Claim of %d failed", (int)arg.unclaimed); + ASN_DEBUG("Claim of %d failed", arg.unclaimed); _ASN_DECODE_STARVED; case 0: - ASN_DEBUG("Got claim of %d", (int)arg.unclaimed); + ASN_DEBUG("Got claim of %d", arg.unclaimed); break; default: /* Padding must be blank */ @@ -245,7 +243,9 @@ asn_dec_rval_t uper_open_type_get(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { - return uper_open_type_get_simple(ctx, td, constraints, sptr, pd); + return uper_open_type_get_simple(ctx, td, constraints, + sptr, pd); + } int @@ -293,8 +293,8 @@ uper_ugot_refill(asn_per_data_t *pd) { asn_per_data_t *oldpd = &arg->oldpd; - ASN_DEBUG("REFILLING pd->moved=%ld, oldpd->moved=%ld", - (long)pd->moved, (long)oldpd->moved); + ASN_DEBUG("REFILLING pd->moved=%d, oldpd->moved=%d", + pd->moved, oldpd->moved); /* Advance our position to where pd is */ oldpd->buffer = pd->buffer; @@ -314,8 +314,7 @@ uper_ugot_refill(asn_per_data_t *pd) { pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff - 1; pd->nbits = oldpd->nbits; - ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%ld)", - (long)pd->moved); + ASN_DEBUG("UNCLAIMED <- return from (pd->moved=%d)", pd->moved); return 0; } @@ -325,8 +324,8 @@ uper_ugot_refill(asn_per_data_t *pd) { } next_chunk_bytes = uper_get_length(oldpd, -1, &arg->repeat); - ASN_DEBUG("Open type LENGTH %ld bytes at off %ld, repeat %ld", - (long)next_chunk_bytes, (long)oldpd->moved, (long)arg->repeat); + ASN_DEBUG("Open type LENGTH %d bytes at off %d, repeat %d", + next_chunk_bytes, oldpd->moved, arg->repeat); if(next_chunk_bytes < 0) return -1; if(next_chunk_bytes == 0) { pd->refill = 0; /* No more refills, naturally */ @@ -337,16 +336,14 @@ uper_ugot_refill(asn_per_data_t *pd) { if(avail >= next_chunk_bits) { pd->nbits = oldpd->nboff + next_chunk_bits; arg->unclaimed = 0; - ASN_DEBUG("!+Parent frame %ld bits, alloting %ld [%ld..%ld] (%ld)", - (long)next_chunk_bits, (long)oldpd->moved, - (long)oldpd->nboff, (long)oldpd->nbits, - (long)(oldpd->nbits - oldpd->nboff)); + ASN_DEBUG("!+Parent frame %d bits, alloting %d [%d..%d] (%d)", + next_chunk_bits, oldpd->moved, + oldpd->nboff, oldpd->nbits, + oldpd->nbits - oldpd->nboff); } else { pd->nbits = oldpd->nbits; arg->unclaimed = next_chunk_bits - avail; - ASN_DEBUG("!-Parent frame %ld, require %ld, will claim %ld", - (long)avail, (long)next_chunk_bits, - (long)arg->unclaimed); + ASN_DEBUG("!-Parent frame %d, require %d, will claim %d", avail, next_chunk_bits, arg->unclaimed); } pd->buffer = oldpd->buffer; pd->nboff = oldpd->nboff; @@ -360,9 +357,7 @@ per_skip_bits(asn_per_data_t *pd, int skip_nbits) { int hasNonZeroBits = 0; while(skip_nbits > 0) { int skip; - - /* per_get_few_bits() is more efficient when nbits <= 24 */ - if(skip_nbits < 24) + if(skip_nbits < skip) skip = skip_nbits; else skip = 24; diff --git a/lte/rrc/asn/per_support.c b/lte/rrc/asn/per_support.c index 9beee04e4..e8299c730 100644 --- a/lte/rrc/asn/per_support.c +++ b/lte/rrc/asn/per_support.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005-2014 Lev Walkin . + * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ @@ -13,11 +13,11 @@ per_data_string(asn_per_data_t *pd) { static int n; n = (n+1) % 2; snprintf(buf[n], sizeof(buf), - "{m=%ld span %+ld[%d..%d] (%d)}", - (long)pd->moved, - (((long)pd->buffer) & 0xf), - (int)pd->nboff, (int)pd->nbits, - (int)(pd->nbits - pd->nboff)); + "{m=%d span %+d[%d..%d] (%d)}", + pd->moved, + (((int)pd->buffer) & 0xf), + pd->nboff, pd->nbits, + pd->nbits - pd->nboff); return buf[n]; } @@ -49,8 +49,7 @@ per_get_few_bits(asn_per_data_t *pd, int nbits) { int32_t tailv, vhead; if(!pd->refill || nbits > 31) return -1; /* Accumulate unused bytes before refill */ - ASN_DEBUG("Obtain the rest %d bits (want %d)", - (int)nleft, (int)nbits); + ASN_DEBUG("Obtain the rest %d bits (want %d)", nleft, nbits); tailv = per_get_few_bits(pd, nleft); if(tailv < 0) return -1; /* Refill (replace pd contents with new data) */ @@ -104,13 +103,13 @@ per_get_few_bits(asn_per_data_t *pd, int nbits) { accum &= (((uint32_t)1 << nbits) - 1); - ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+ld[%d..%d]:%02x (%d) => 0x%x]", - (int)nbits, (int)nleft, - (int)pd->moved, - (((long)pd->buffer) & 0xf), - (int)pd->nboff, (int)pd->nbits, + ASN_DEBUG(" [PER got %2d<=%2d bits => span %d %+d[%d..%d]:%02x (%d) => 0x%x]", + nbits, nleft, + pd->moved, + (((int)pd->buffer) & 0xf), + pd->nboff, pd->nbits, pd->buffer[0], - (int)(pd->nbits - pd->nboff), + pd->nbits - pd->nboff, (int)accum); return accum; @@ -201,7 +200,7 @@ uper_get_nslength(asn_per_data_t *pd) { if(per_get_few_bits(pd, 1) == 0) { length = per_get_few_bits(pd, 6) + 1; if(length <= 0) return -1; - ASN_DEBUG("l=%d", (int)length); + ASN_DEBUG("l=%d", length); return length; } else { int repeat; @@ -238,8 +237,8 @@ uper_get_nsnnwn(asn_per_data_t *pd) { } /* - * X.691-11/2008, #11.6 - * Encoding of a normally small non-negative whole number + * Put the normally small non-negative whole number. + * X.691, #10.6 */ int uper_put_nsnnwn(asn_per_outp_t *po, int n) { @@ -264,58 +263,6 @@ uper_put_nsnnwn(asn_per_outp_t *po, int n) { } -/* X.691-2008/11, #11.5.6 -> #11.3 */ -int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *out_value, int nbits) { - unsigned long lhalf; /* Lower half of the number*/ - long half; - - if(nbits <= 31) { - half = per_get_few_bits(pd, nbits); - if(half < 0) return -1; - *out_value = half; - return 0; - } - - if((size_t)nbits > 8 * sizeof(*out_value)) - return -1; /* RANGE */ - - half = per_get_few_bits(pd, 31); - if(half < 0) return -1; - - if(uper_get_constrained_whole_number(pd, &lhalf, nbits - 31)) - return -1; - - *out_value = ((unsigned long)half << (nbits - 31)) | lhalf; - return 0; -} - - -/* X.691-2008/11, #11.5.6 -> #11.3 */ -int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits) { - /* - * Assume signed number can be safely coerced into - * unsigned of the same range. - * The following testing code will likely be optimized out - * by compiler if it is true. - */ - unsigned long uvalue1 = ULONG_MAX; - long svalue = uvalue1; - unsigned long uvalue2 = svalue; - assert(uvalue1 == uvalue2); - return uper_put_constrained_whole_number_u(po, v, nbits); -} - -int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits) { - if(nbits <= 31) { - return per_put_few_bits(po, v, nbits); - } else { - /* Put higher portion first, followed by lower 31-bit */ - if(uper_put_constrained_whole_number_u(po, v >> 31, nbits - 31)) - return -1; - return per_put_few_bits(po, v, 31); - } -} - /* * Put a small number of bits (<= 31). */ @@ -328,7 +275,7 @@ per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { if(obits <= 0 || obits >= 32) return obits ? -1 : 0; ASN_DEBUG("[PER put %d bits %x to %p+%d bits]", - obits, (int)bits, po->buffer, (int)po->nboff); + obits, (int)bits, po->buffer, po->nboff); /* * Normalize position indicator. @@ -344,8 +291,8 @@ per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { */ if(po->nboff + obits > po->nbits) { int complete_bytes = (po->buffer - po->tmpspace); - ASN_DEBUG("[PER output %ld complete + %ld]", - (long)complete_bytes, (long)po->flushed_bytes); + ASN_DEBUG("[PER output %d complete + %d]", + complete_bytes, po->flushed_bytes); if(po->outper(po->tmpspace, complete_bytes, po->op_key) < 0) return -1; if(po->nboff) @@ -360,47 +307,42 @@ per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) { */ buf = po->buffer; omsk = ~((1 << (8 - po->nboff)) - 1); - off = (po->nboff + obits); + off = (po->nboff += obits); /* Clear data of debris before meaningful bits */ bits &= (((uint32_t)1 << obits) - 1); ASN_DEBUG("[PER out %d %u/%x (t=%d,o=%d) %x&%x=%x]", obits, (int)bits, (int)bits, - (int)po->nboff, (int)off, - buf[0], (int)(omsk&0xff), - (int)(buf[0] & omsk)); + po->nboff - obits, off, buf[0], omsk&0xff, buf[0] & omsk); if(off <= 8) /* Completely within 1 byte */ - po->nboff = off, bits <<= (8 - off), buf[0] = (buf[0] & omsk) | bits; else if(off <= 16) - po->nboff = off, bits <<= (16 - off), buf[0] = (buf[0] & omsk) | (bits >> 8), buf[1] = bits; else if(off <= 24) - po->nboff = off, bits <<= (24 - off), buf[0] = (buf[0] & omsk) | (bits >> 16), buf[1] = bits >> 8, buf[2] = bits; else if(off <= 31) - po->nboff = off, bits <<= (32 - off), buf[0] = (buf[0] & omsk) | (bits >> 24), buf[1] = bits >> 16, buf[2] = bits >> 8, buf[3] = bits; else { - per_put_few_bits(po, bits >> (obits - 24), 24); + ASN_DEBUG("->[PER out split %d]", obits); + per_put_few_bits(po, bits >> 8, 24); per_put_few_bits(po, bits, obits - 24); + ASN_DEBUG("<-[PER out split %d]", obits); } - ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]", - (int)bits, (int)bits, buf[0], - (long)(po->buffer - po->tmpspace)); + ASN_DEBUG("[PER out %u/%x => %02x buf+%d]", + (int)bits, (int)bits, buf[0], po->buffer - po->tmpspace); return 0; } diff --git a/lte/rrc/asn/per_support.h b/lte/rrc/asn/per_support.h index a75ac94fc..7cb1a0ca3 100644 --- a/lte/rrc/asn/per_support.h +++ b/lte/rrc/asn/per_support.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005-2014 Lev Walkin . + * Copyright (c) 2005, 2006, 2007 Lev Walkin . * All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ @@ -15,7 +15,7 @@ extern "C" { /* * Pre-computed PER constraints. */ -typedef const struct asn_per_constraint_s { +typedef struct asn_per_constraint_s { enum asn_per_constraint_flags { APC_UNCONSTRAINED = 0x0, /* No PER visible constraints */ APC_SEMI_CONSTRAINED = 0x1, /* Constrained at "lb" */ @@ -27,9 +27,9 @@ typedef const struct asn_per_constraint_s { long lower_bound; /* "lb" value */ long upper_bound; /* "ub" value */ } asn_per_constraint_t; -typedef const struct asn_per_constraints_s { - struct asn_per_constraint_s value; - struct asn_per_constraint_s size; +typedef struct asn_per_constraints_s { + asn_per_constraint_t value; + asn_per_constraint_t size; int (*value2code)(unsigned int value); int (*code2value)(unsigned int code); } asn_per_constraints_t; @@ -81,9 +81,6 @@ ssize_t uper_get_nslength(asn_per_data_t *pd); */ ssize_t uper_get_nsnnwn(asn_per_data_t *pd); -/* X.691-2008/11, #11.5.6 */ -int uper_get_constrained_whole_number(asn_per_data_t *pd, unsigned long *v, int nbits); - /* Non-thread-safe debugging function, don't use it */ char *per_data_string(asn_per_data_t *pd); @@ -106,10 +103,6 @@ int per_put_few_bits(asn_per_outp_t *per_data, uint32_t bits, int obits); /* Output a large number of bits */ int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int put_nbits); -/* X.691-2008/11, #11.5 */ -int uper_put_constrained_whole_number_s(asn_per_outp_t *po, long v, int nbits); -int uper_put_constrained_whole_number_u(asn_per_outp_t *po, unsigned long v, int nbits); - /* * Put the length "n" to the Unaligned PER stream. * This function returns the number of units which may be flushed diff --git a/lte/rrc/asn/rrc_asn.h b/lte/rrc/asn/rrc_asn.h index 766d8da61..1f7073a9d 100644 --- a/lte/rrc/asn/rrc_asn.h +++ b/lte/rrc/asn/rrc_asn.h @@ -25,8 +25,8 @@ * */ -#define EMIT_ASN_DEBUG 1 - +#include "BCCH-BCH-Message.h" +#include "BCCH-DL-SCH-Message.h" #include "MasterInformationBlock.h" #include "SystemInformationBlockType1.h" #include "per_encoder.h" diff --git a/lte/rrc/asn/xer_decoder.c b/lte/rrc/asn/xer_decoder.c index a714ee463..161dc78ce 100644 --- a/lte/rrc/asn/xer_decoder.c +++ b/lte/rrc/asn/xer_decoder.c @@ -109,8 +109,7 @@ xer_check_tag(const void *buf_ptr, int size, const char *need_tag) { if(size < 2 || buf[0] != LANGLE || buf[size-1] != RANGLE) { if(size >= 2) - ASN_DEBUG("Broken XML tag: \"%c...%c\"", - buf[0], buf[size - 1]); + ASN_DEBUG("Broken XML tag: \"%c...%c\"", buf[0], buf[size - 1]); return XCT_BROKEN; } @@ -222,7 +221,7 @@ xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, */ if(ctx->phase > 1) RETURN(RC_FAIL); for(;;) { - pxer_chunk_type_e ch_type=0; /* XER chunk type */ + pxer_chunk_type_e ch_type; /* XER chunk type */ ssize_t ch_size; /* Chunk size */ xer_check_tag_e tcv; /* Tag check value */ @@ -316,8 +315,8 @@ xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, } -size_t -xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { +int +xer_is_whitespace(const void *chunk_buf, size_t chunk_size) { const char *p = (const char *)chunk_buf; const char *pend = p + chunk_size; @@ -330,13 +329,12 @@ xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { * SPACE (32) */ case 0x09: case 0x0a: case 0x0d: case 0x20: - continue; - default: break; + default: + return 0; } - break; } - return (p - (const char *)chunk_buf); + return 1; /* All whitespace */ } /* diff --git a/lte/rrc/asn/xer_decoder.h b/lte/rrc/asn/xer_decoder.h index 6988648e8..cf0d846fe 100644 --- a/lte/rrc/asn/xer_decoder.h +++ b/lte/rrc/asn/xer_decoder.h @@ -87,11 +87,12 @@ xer_check_tag_e xer_check_tag(const void *buf_ptr, int size, const char *need_tag); /* - * Get the number of bytes consisting entirely of XER whitespace characters. + * Check whether this buffer consists of entirely XER whitespace characters. * RETURN VALUES: - * >=0: Number of whitespace characters in the string. + * 1: Whitespace or empty string + * 0: Non-whitespace */ -size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size); +int xer_is_whitespace(const void *chunk_buf, size_t chunk_size); /* * Skip the series of anticipated extensions. diff --git a/lte/rrc/asn/xer_encoder.c b/lte/rrc/asn/xer_encoder.c index aa7cf040a..963696f1f 100644 --- a/lte/rrc/asn/xer_encoder.c +++ b/lte/rrc/asn/xer_encoder.c @@ -3,8 +3,8 @@ * Redistribution and modifications are permitted subject to BSD license. */ #include -#include -#include +//#include +//#include /* * The XER encoder of any type. May be invoked by the application. diff --git a/lte/rrc/asn/xer_support.c b/lte/rrc/asn/xer_support.c index 36b4bfbfc..9e34e6923 100644 --- a/lte/rrc/asn/xer_support.c +++ b/lte/rrc/asn/xer_support.c @@ -22,7 +22,16 @@ typedef enum { ST_COMMENT_CLO_RT /* "-->"[1] */ } pstate_e; -static const int +static pxml_chunk_type_e final_chunk_type[] = { + PXML_TEXT, + PXML_TAG_END, + PXML_COMMENT_END, + PXML_TAG_END, + PXML_COMMENT_END, +}; + + +static int _charclass[256] = { 0,0,0,0,0,0,0,0, 0,1,1,0,1,1,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, @@ -70,11 +79,8 @@ _charclass[256] = { #define TOKEN_CB(_type, _ns, _current_too) \ TOKEN_CB_CALL(_type, _ns, _current_too, 0) -#define PXML_TAG_FINAL_CHUNK_TYPE PXML_TAG_END -#define PXML_COMMENT_FINAL_CHUNK_TYPE PXML_COMMENT_END - #define TOKEN_CB_FINAL(_type, _ns, _current_too) \ - TOKEN_CB_CALL( _type ## _FINAL_CHUNK_TYPE , _ns, _current_too, 1) + TOKEN_CB_CALL(final_chunk_type[_type], _ns, _current_too, 1) /* * Parser itself diff --git a/lte/rrc/lib/rrc_msg/src/sib.h b/lte/rrc/include/liblte/rrc/common/rrc_common.h similarity index 67% rename from lte/rrc/lib/rrc_msg/src/sib.h rename to lte/rrc/include/liblte/rrc/common/rrc_common.h index 2c13d983a..d78075bf4 100644 --- a/lte/rrc/lib/rrc_msg/src/sib.h +++ b/lte/rrc/include/liblte/rrc/common/rrc_common.h @@ -24,18 +24,25 @@ * and at http://www.gnu.org/licenses/. * */ + + +#ifndef RRC_COMMON_ +#define RRC_COMMON_ -#include -#include +#include +#include -#include "liblte/rrc/rrc_msg/bcch.h" -#include "liblte/phy/utils/bit.h" -#include "rrc_asn.h" +typedef struct { + uint32_t mcc; // 3 digits in Decimal value + uint32_t mnc; // 2 digits +} plmn_identity_t; +typedef struct { + plmn_identity_t plmn; + uint32_t tracking_area_code; // 8 bits + uint32_t cell_id; // 24 bits + bool cellBarred; + bool intraFreqReselection; +} cell_access_info_t; -void sib1_create_default(SystemInformationBlockType1_t *sib1, - MCC_MNC_Digit_t mcc_val[3], - MCC_MNC_Digit_t mnc_val[2], - uint8_t tac_val[2], - uint8_t cid_val[4], - int freq_band); +#endif diff --git a/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h b/lte/rrc/include/liblte/rrc/messages/bcch.h similarity index 56% rename from lte/rrc/include/liblte/rrc/rrc_msg/bcch.h rename to lte/rrc/include/liblte/rrc/messages/bcch.h index 339333074..de660688e 100644 --- a/lte/rrc/include/liblte/rrc/rrc_msg/bcch.h +++ b/lte/rrc/include/liblte/rrc/messages/bcch.h @@ -35,19 +35,45 @@ #include -LIBLTE_API int bcch_bch_mib_pack(lte_cell_t *cell, +#define SI_PERIODS 10 +#define SI_X_PERIOD 10 + +typedef enum {BCCH_DLSCH_SIB1, BCCH_DLSCH_SIB2, BCCH_DLSCH_SIB3, BCCH_DLSCH_SIB6, BCCH_DLSCH_UNKNOWN} bcch_dlsch_sib_type_t; + +typedef struct { + bcch_dlsch_sib_type_t type[SI_X_PERIOD]; + uint32_t period; +} bcch_si_scheduling_info_t; + +typedef struct { + uint32_t window_length_ms; + uint32_t nof_periods; + bcch_si_scheduling_info_t si_period_list[SI_PERIODS]; +} bcch_si_scheduling_t; + + +LIBLTE_API int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buffer_size_bytes); -LIBLTE_API int bcch_bch_mib_unpack(uint8_t *buffer, +LIBLTE_API int bcch_bch_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, uint32_t *sfn); -LIBLTE_API int bcch_dlsch_sib1_pack(uint8_t *buffer, - uint32_t buffer_size_bytes); +LIBLTE_API int bcch_dlsch_pack(void *bcch_dlsch_msg, + uint8_t *buffer, + uint32_t buffer_size_bytes); -LIBLTE_API int bcch_dlsch_sib1_unpack(uint8_t *buffer, - uint32_t msg_nof_bits); -#endif // AGC_ +LIBLTE_API void* bcch_dlsch_unpack(uint8_t *buffer, + uint32_t msg_nof_bits); + +LIBLTE_API bcch_dlsch_sib_type_t bcch_dlsch_get_type(void *bcch_dlsch_msg); + +LIBLTE_API void bcch_dlsch_fprint(void *bcch_dlsch_msg, + FILE *stream); + +LIBLTE_API void bcch_dlsch_free(void *bcch_dlsch_msg); + +#endif // BCCH_ diff --git a/lte/rrc/include/liblte/rrc/messages/sib1.h b/lte/rrc/include/liblte/rrc/messages/sib1.h new file mode 100644 index 000000000..ec014525e --- /dev/null +++ b/lte/rrc/include/liblte/rrc/messages/sib1.h @@ -0,0 +1,57 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + +#ifndef SIB1_ +#define SIB1_ + + +#include +#include + +#include "liblte/rrc/common/rrc_common.h" +#include "liblte/rrc/messages/bcch.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + +LIBLTE_API uint32_t bcch_dlsch_sib1_get_freq_num(void *bcch_dlsch_msg); + +LIBLTE_API void bcch_dlsch_sib1_get_plmns(void *bcch_dlsch_msg, + plmn_identity_t *plmns, + uint32_t max_plmn_identities); + +LIBLTE_API void bcch_dlsch_sib1_get_cell_access_info(void *bcch_dlsch_msg, + cell_access_info_t *info); + +void bcch_dlsch_sib1(BCCH_DL_SCH_Message_t *sib1, + MCC_MNC_Digit_t mcc_val[3], + MCC_MNC_Digit_t mnc_val[2], + uint8_t tac_val[2], + uint8_t cid_val[4], + int freq_band); + +#endif \ No newline at end of file diff --git a/lte/rrc/include/liblte/rrc/rrc.h b/lte/rrc/include/liblte/rrc/rrc.h index 05c84936f..248e76812 100644 --- a/lte/rrc/include/liblte/rrc/rrc.h +++ b/lte/rrc/include/liblte/rrc/rrc.h @@ -38,8 +38,10 @@ #include "liblte/config.h" -#include "liblte/rrc/rrc_msg/bcch.h" - +#include "liblte/rrc/messages/bcch.h" +#include "liblte/rrc/messages/sib1.h" +#include "liblte/rrc/common/rrc_common.h" + #ifdef __cplusplus } #endif diff --git a/lte/rrc/lib/messages/src/bcch.c b/lte/rrc/lib/messages/src/bcch.c new file mode 100644 index 000000000..856729e81 --- /dev/null +++ b/lte/rrc/lib/messages/src/bcch.c @@ -0,0 +1,233 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include + +#include "liblte/rrc/messages/sib1.h" +#include "liblte/rrc/messages/bcch.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + + + + +int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buffer_size_bytes) { + + MasterInformationBlock_t req; + + switch (cell->nof_prb) { + case 6: + req.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n6; + break; + case 15: + req.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n15; + break; + case 25: + req.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n25; + break; + case 50: + req.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n50; + break; + case 75: + req.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n75; + break; + case 100: + req.dl_Bandwidth = MasterInformationBlock__dl_Bandwidth_n100; + break; + default: + fprintf(stderr, "Invalid bandwidth %d PRB\n", cell->nof_prb); + return LIBLTE_ERROR; + } + if (cell->phich_length == PHICH_NORM) { + req.phich_Config.phich_Duration = PHICH_Config__phich_Duration_normal; + } else { + req.phich_Config.phich_Duration = PHICH_Config__phich_Duration_extended; + } + switch(cell->phich_resources) { + case R_1: + req.phich_Config.phich_Resource = PHICH_Config__phich_Resource_one; + break; + case R_1_2: + req.phich_Config.phich_Resource = PHICH_Config__phich_Resource_half; + break; + case R_1_6: + req.phich_Config.phich_Resource = PHICH_Config__phich_Resource_oneSixth; + break; + case R_2: + req.phich_Config.phich_Resource = PHICH_Config__phich_Resource_two; + break; + } + sfn=(sfn>>2); + req.systemFrameNumber.buf = (uint8_t*) &sfn; + req.systemFrameNumber.size = 1; + int spare = 0; + req.spare.buf = (uint8_t*) &spare; + req.spare.size = 2; + req.spare.bits_unused = 6; + + asn_enc_rval_t n = uper_encode_to_buffer(&asn_DEF_MasterInformationBlock, (void*) &req, buffer, buffer_size_bytes); + if (n.encoded == -1) { + printf("Encoding failed.\n"); + printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); + return LIBLTE_ERROR; + } + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); + return LIBLTE_SUCCESS; +} + +int bcch_bch_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, uint32_t *sfn) { + asn_codec_ctx_t *opt_codec_ctx = NULL; + MasterInformationBlock_t *req = calloc(1, sizeof(MasterInformationBlock_t)); + if (!req) { + perror("calloc"); + return LIBLTE_ERROR; + } + asn_dec_rval_t n = uper_decode(opt_codec_ctx, &asn_DEF_MasterInformationBlock, + (void**) &req, buffer, msg_nof_bits/8,0,msg_nof_bits%8); + if (n.consumed == -1) { + printf("Decoding failed.\n"); + return LIBLTE_ERROR; + } + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); + + switch(req->dl_Bandwidth) { + case MasterInformationBlock__dl_Bandwidth_n6: + cell->nof_prb = 6; + break; + case MasterInformationBlock__dl_Bandwidth_n15: + cell->nof_prb = 15; + break; + case MasterInformationBlock__dl_Bandwidth_n25: + cell->nof_prb = 25; + break; + case MasterInformationBlock__dl_Bandwidth_n50: + cell->nof_prb = 50; + break; + case MasterInformationBlock__dl_Bandwidth_n75: + cell->nof_prb = 75; + break; + } + if (req->phich_Config.phich_Duration == PHICH_Config__phich_Duration_normal) { + cell->phich_length = PHICH_NORM; + } else { + cell->phich_length = PHICH_EXT; + } + switch(req->phich_Config.phich_Resource) { + case PHICH_Config__phich_Resource_one: + cell->phich_resources = R_1; + break; + case PHICH_Config__phich_Resource_half: + cell->phich_resources = R_1_2; + break; + case PHICH_Config__phich_Resource_oneSixth: + cell->phich_resources = R_1_6; + break; + case PHICH_Config__phich_Resource_two: + cell->phich_resources = R_2; + break; + } + int sfn_i=0;; + memcpy(&sfn_i, req->systemFrameNumber.buf, req->systemFrameNumber.size); + if (sfn) { + *sfn=(sfn_i<<2); + } + return LIBLTE_SUCCESS; +} + + +int bcch_dlsch_pack(void *bcch_dlsch_msg, uint8_t *buffer, uint32_t buffer_size_bytes) { + BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; + if (!msg) { + msg = calloc(1, sizeof(BCCH_DL_SCH_Message_t)); + } + int ret; + + MCC_MNC_Digit_t mcc[3] = {2,1,4}; + MCC_MNC_Digit_t mnc[2] = {0,1}; + uint8_t tac_val[2] = {0x2,0x0b}; + uint8_t cid_val[4] = {0x14,0x4a,0x30,0x10}; + + bcch_dlsch_sib1(msg, mcc, mnc, tac_val, cid_val, 3); + asn_enc_rval_t n = uper_encode_to_buffer(&asn_DEF_BCCH_DL_SCH_Message, + (void*) msg, buffer, + buffer_size_bytes); + if (n.encoded == -1) { + fprintf(stderr, "Encoding failed. Element %s\n", n.failed_type ? n.failed_type->name : ""); + return LIBLTE_ERROR; + } else { + return n.encoded; + } + + bcch_dlsch_fprint(&msg, stdout); + bcch_dlsch_free(&msg); + + return ret; +} + +void* bcch_dlsch_unpack(uint8_t *buffer, uint32_t msg_nof_bits) { + BCCH_DL_SCH_Message_t *msg = calloc(1, sizeof(BCCH_DL_SCH_Message_t)); + asn_dec_rval_t n = uper_decode(NULL, &asn_DEF_BCCH_DL_SCH_Message, + (void**) &msg, buffer, msg_nof_bits/8,0,msg_nof_bits%8); + if (n.consumed == -1) { + fprintf(stderr, "Decoding failed.\n"); + return NULL; + } else { + bcch_dlsch_fprint(msg, stdout); + return msg; + } +} + +bcch_dlsch_sib_type_t bcch_dlsch_get_type(void *bcch_dlsch_msg) { + BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; + switch(msg->message.present) { + case BCCH_DL_SCH_MessageType_PR_c1: + switch (msg->message.choice.c1.present) { + case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: + return BCCH_DLSCH_SIB1; + break; + default: + fprintf(stderr, "Message type not supported\n"); + bcch_dlsch_fprint(bcch_dlsch_msg, stderr); + break; + } + default: + fprintf(stderr, "Message type not supported\n"); + bcch_dlsch_fprint(bcch_dlsch_msg, stderr); + break; + } + return BCCH_DLSCH_UNKNOWN; +} + +void bcch_dlsch_fprint(void *bcch_dlsch_msg, FILE *stream) { + xer_fprint(stdout, &asn_DEF_BCCH_DL_SCH_Message, (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg); +} + +void bcch_dlsch_free(void *bcch_dlsch_msg) { + asn_DEF_BCCH_DL_SCH_Message.free_struct(&asn_DEF_BCCH_DL_SCH_Message, + (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg, 0); +} \ No newline at end of file diff --git a/lte/rrc/lib/messages/src/sib1.c b/lte/rrc/lib/messages/src/sib1.c new file mode 100644 index 000000000..ed015fa43 --- /dev/null +++ b/lte/rrc/lib/messages/src/sib1.c @@ -0,0 +1,198 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include + +#include "liblte/rrc/common/rrc_common.h" +#include "liblte/rrc/messages/bcch.h" +#include "liblte/rrc/messages/sib1.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + +void read_plmn(PLMN_IdentityInfo_t *msg, plmn_identity_t *plmn) { + MCC_t *mcc = msg->plmn_Identity.mcc; + plmn->mcc = *((int*) mcc->list.array[0])*100+*((int*)mcc->list.array[1])*10+*((int*)mcc->list.array[2]); + plmn->mnc = *((int*) msg->plmn_Identity.mnc.list.array[0])*10+*((int*) msg->plmn_Identity.mnc.list.array[1]); +} + +uint32_t bcch_dlsch_sib1_get_freq_num(void *bcch_dlsch_msg) { + BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; + SystemInformationBlockType1_t *sib1 = &(msg->message.choice.c1.choice.systemInformationBlockType1); + return (uint32_t) sib1->freqBandIndicator; +} + +void bcch_dlsch_sib1_get_plmns(void *bcch_dlsch_msg, plmn_identity_t *plmns, uint32_t max_plmn_identities) { + int i; + BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; + SystemInformationBlockType1_t *sib1 = &(msg->message.choice.c1.choice.systemInformationBlockType1); + for (i=0;icellAccessRelatedInfo.plmn_IdentityList.list.count);i++) { + read_plmn(sib1->cellAccessRelatedInfo.plmn_IdentityList.list.array[i], &plmns[i]); + } +} + +void bcch_dlsch_sib1_get_cell_access_info(void *bcch_dlsch_msg, cell_access_info_t *info) { + BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; + SystemInformationBlockType1_t *sib1 = &(msg->message.choice.c1.choice.systemInformationBlockType1); + info->tracking_area_code = sib1->cellAccessRelatedInfo.trackingAreaCode.buf[0]<<8| + sib1->cellAccessRelatedInfo.trackingAreaCode.buf[1]; + info->cell_id = (sib1->cellAccessRelatedInfo.cellIdentity.buf[0]<<24)| + (sib1->cellAccessRelatedInfo.cellIdentity.buf[1]<<16)| + (sib1->cellAccessRelatedInfo.cellIdentity.buf[2]<<8)| + (sib1->cellAccessRelatedInfo.cellIdentity.buf[3]&0xF0); + info->cell_id >>= 4; + info->cellBarred = + sib1->cellAccessRelatedInfo.cellBarred == + SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_barred; + info->intraFreqReselection = + sib1->cellAccessRelatedInfo.intraFreqReselection == + SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed; +} + +uint32_t get_si_period(long int period) { + return 8<message.choice.c1.choice.systemInformationBlockType1); + + si_sched->nof_periods = MIN(SI_PERIODS, sib1->schedulingInfoList.list.count); + for (int i=0;inof_periods;i++) { + SchedulingInfo_t *s = sib1->schedulingInfoList.list.array[0]; + si_sched->si_period_list[i].period = get_si_period(s->si_Periodicity); + int jmax = MIN(SI_X_PERIOD, s->sib_MappingInfo.list.count); + for (int j=0;jsi_period_list[i].type[j] = get_si_type(s->sib_MappingInfo.list.array[j]); + } + } + si_sched->window_length_ms = get_window(sib1->si_WindowLength); +} + +MCC_MNC_Digit_t *dup_digit(MCC_MNC_Digit_t value) { + MCC_MNC_Digit_t *x = calloc(1, sizeof(MCC_MNC_Digit_t)); + *x = value; + return x; +} +void bcch_dlsch_sib1(BCCH_DL_SCH_Message_t *msg, + MCC_MNC_Digit_t mcc_val[3], + MCC_MNC_Digit_t mnc_val[2], + uint8_t tac_val[2], + uint8_t cid_val[4], + int freq_band) +{ + + bzero(msg, sizeof(BCCH_DL_SCH_Message_t)); + + msg->message.present = BCCH_DL_SCH_MessageType_PR_c1; + msg->message.choice.c1.present = BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1; + SystemInformationBlockType1_t *sib1 = &(msg->message.choice.c1.choice.systemInformationBlockType1); + + PLMN_IdentityInfo_t *PLMN_identity_info = calloc(1, sizeof(PLMN_IdentityInfo_t)); + MCC_t *mcc = calloc(1, sizeof(MCC_t)); + PLMN_identity_info->plmn_Identity.mcc = mcc; + asn_set_empty(&mcc->list); + for (int i=0;i<3;i++) { + ASN_SEQUENCE_ADD(&mcc->list,dup_digit(mcc_val[i])); + } + asn_set_empty(&PLMN_identity_info->plmn_Identity.mnc.list); + for (int i=0;i<2;i++) { + ASN_SEQUENCE_ADD(&PLMN_identity_info->plmn_Identity.mnc.list,dup_digit(mnc_val[i])); + } + PLMN_identity_info->cellReservedForOperatorUse=PLMN_IdentityInfo__cellReservedForOperatorUse_notReserved; + + ASN_SEQUENCE_ADD(&sib1->cellAccessRelatedInfo.plmn_IdentityList.list,PLMN_identity_info); + + sib1->cellAccessRelatedInfo.trackingAreaCode.buf=malloc(2); + for (int i=0;i<2;i++) { + sib1->cellAccessRelatedInfo.trackingAreaCode.buf[i] = tac_val[i]; + } + sib1->cellAccessRelatedInfo.trackingAreaCode.size=2; + sib1->cellAccessRelatedInfo.trackingAreaCode.bits_unused=0; + + sib1->cellAccessRelatedInfo.cellIdentity.buf=malloc(4); + for (int i=0;i<4;i++) { + sib1->cellAccessRelatedInfo.cellIdentity.buf[i] = cid_val[i]; + } + sib1->cellAccessRelatedInfo.cellIdentity.size=4; + sib1->cellAccessRelatedInfo.cellIdentity.bits_unused=4; + + sib1->cellAccessRelatedInfo.cellBarred=SystemInformationBlockType1__cellAccessRelatedInfo__cellBarred_barred; + + sib1->cellAccessRelatedInfo.intraFreqReselection=SystemInformationBlockType1__cellAccessRelatedInfo__intraFreqReselection_allowed; + sib1->cellAccessRelatedInfo.csg_Indication=0; + + sib1->cellSelectionInfo.q_RxLevMin=-60; + sib1->cellSelectionInfo.q_RxLevMinOffset=NULL; + + sib1->freqBandIndicator = (long int) freq_band; + + + SchedulingInfo_t *schedulingInfo_3 = calloc(2, sizeof(SchedulingInfo_t)); + SchedulingInfo_t *schedulingInfo_6 = calloc(2, sizeof(SchedulingInfo_t)); + SIB_Type_t *sib_type_3 = calloc(1, sizeof(SIB_Type_t)); + SIB_Type_t *sib_type_6 = calloc(1, sizeof(SIB_Type_t)); + + schedulingInfo_3->si_Periodicity=SchedulingInfo__si_Periodicity_rf16; + *sib_type_3=SIB_Type_sibType3; + ASN_SEQUENCE_ADD(&schedulingInfo_3->sib_MappingInfo.list,sib_type_3); + ASN_SEQUENCE_ADD(&sib1->schedulingInfoList.list,schedulingInfo_3); + + schedulingInfo_6->si_Periodicity=SchedulingInfo__si_Periodicity_rf64; + *sib_type_6=SIB_Type_sibType6; + ASN_SEQUENCE_ADD(&schedulingInfo_6->sib_MappingInfo.list,sib_type_6); + ASN_SEQUENCE_ADD(&sib1->schedulingInfoList.list,schedulingInfo_6); + + sib1->si_WindowLength=SystemInformationBlockType1__si_WindowLength_ms40; + sib1->systemInfoValueTag=8; +} + + + + + diff --git a/lte/rrc/lib/rrc_msg/test/CMakeLists.txt b/lte/rrc/lib/messages/test/CMakeLists.txt similarity index 91% rename from lte/rrc/lib/rrc_msg/test/CMakeLists.txt rename to lte/rrc/lib/messages/test/CMakeLists.txt index 6f0c6a3ed..cfc5e936c 100644 --- a/lte/rrc/lib/rrc_msg/test/CMakeLists.txt +++ b/lte/rrc/lib/messages/test/CMakeLists.txt @@ -24,11 +24,11 @@ ######################################################################## ADD_EXECUTABLE(bcch_bch_test bcch_bch_test.c) -TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc rrc_asn ) +TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc rrc_asn) ADD_TEST(bcch_bch_test_1 bcch_bch_test) ADD_EXECUTABLE(bcch_dlsch_test bcch_dlsch_test.c) -TARGET_LINK_LIBRARIES(bcch_dlsch_test lte_rrc rrc_asn ) +TARGET_LINK_LIBRARIES(bcch_dlsch_test lte_rrc rrc_asn lte_phy) ADD_TEST(bcch_dlsch_test_1 bcch_dlsch_test) diff --git a/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c b/lte/rrc/lib/messages/test/bcch_bch_test.c similarity index 96% rename from lte/rrc/lib/rrc_msg/test/bcch_bch_test.c rename to lte/rrc/lib/messages/test/bcch_bch_test.c index be5d6e6af..3a35cb504 100644 --- a/lte/rrc/lib/rrc_msg/test/bcch_bch_test.c +++ b/lte/rrc/lib/messages/test/bcch_bch_test.c @@ -46,6 +46,6 @@ int main(int argc, char **argv) { cell.nof_prb = 25; cell.phich_length = PHICH_NORM; cell.phich_resources = 1; - bcch_bch_mib_pack(&cell, 123, buffer, 1024); + bcch_bch_pack(&cell, 123, buffer, 1024); } diff --git a/lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c b/lte/rrc/lib/messages/test/bcch_dlsch_test.c similarity index 64% rename from lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c rename to lte/rrc/lib/messages/test/bcch_dlsch_test.c index 50447a973..aea46d9f6 100644 --- a/lte/rrc/lib/rrc_msg/test/bcch_dlsch_test.c +++ b/lte/rrc/lib/messages/test/bcch_dlsch_test.c @@ -1,4 +1,4 @@ -/** + /** * * \section COPYRIGHT * @@ -34,16 +34,25 @@ #include #include +#include "liblte/phy/utils/vector.h" #include "liblte/rrc/rrc.h" #include "rrc_asn.h" int main(int argc, char **argv) { - //uint8_t buffer[18] = {0x40, 0x48, 0x50, 0x3, 0x2, 0xb, 0x14, 0x4a, 0x30, 0x18, 0x28, 0x20, 0x90, 0x81, 0x84, 0x79, 0x0, 0x0}; - -// bzero(buffer, 18); - uint8_t buffer[200]; - bcch_dlsch_sib1_pack(buffer, 144); - - //bcch_dlsch_sib1_unpack(buffer, 144); + uint8_t buffer[18] = {0x40, 0x48, 0x50, 0x3, 0x2, 0xb, 0x14, 0x4a, 0x30, 0x18, 0x28, 0x20, 0x90, 0x81, 0x84, 0x79, 0x0, 0x0}; + + void *ptr = bcch_dlsch_unpack(buffer, 144); + if (ptr) { + plmn_identity_t plmn; + bcch_dlsch_sib1_get_plmns(ptr, &plmn, 1); + printf("MCC: %d, MNC: %d\n", plmn.mcc, plmn.mnc); + cell_access_info_t cellinfo; + bcch_dlsch_sib1_get_cell_access_info(ptr, &cellinfo); + printf("Cell ID: 0x%x.\n", cellinfo.cell_id); + printf("TAC: 0x%x\n", cellinfo.tracking_area_code); + bcch_dlsch_free(ptr); + } else { + printf("Unpacking error\n"); + } } diff --git a/lte/rrc/lib/rrc_msg/src/bcch.c b/lte/rrc/lib/rrc_msg/src/bcch.c deleted file mode 100644 index aefa3665a..000000000 --- a/lte/rrc/lib/rrc_msg/src/bcch.c +++ /dev/null @@ -1,198 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include - -#include "liblte/rrc/rrc_msg/bcch.h" -#include "liblte/phy/utils/bit.h" -#include "rrc_asn.h" -#include "sib.h" - - -int bcch_bch_mib_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buffer_size_bytes) { - - MasterInformationBlock_t req; - - switch (cell->nof_prb) { - case 6: - req.dl_Bandwidth = dl_Bandwidth_n6; - break; - case 15: - req.dl_Bandwidth = dl_Bandwidth_n15; - break; - case 25: - req.dl_Bandwidth = dl_Bandwidth_n25; - break; - case 50: - req.dl_Bandwidth = dl_Bandwidth_n50; - break; - case 75: - req.dl_Bandwidth = dl_Bandwidth_n75; - break; - case 100: - req.dl_Bandwidth = dl_Bandwidth_n100; - break; - default: - fprintf(stderr, "Invalid bandwidth %d PRB\n", cell->nof_prb); - return LIBLTE_ERROR; - } - if (cell->phich_length == PHICH_NORM) { - req.phich_Config.phich_Duration = phich_Duration_normal; - } else { - req.phich_Config.phich_Duration = phich_Duration_extended; - } - switch(cell->phich_resources) { - case R_1: - req.phich_Config.phich_Resource = phich_Resource_one; - break; - case R_1_2: - req.phich_Config.phich_Resource = phich_Resource_half; - break; - case R_1_6: - req.phich_Config.phich_Resource = phich_Resource_oneSixth; - break; - case R_2: - req.phich_Config.phich_Resource = phich_Resource_two; - break; - } - sfn=(sfn>>2); - req.systemFrameNumber.buf = (uint8_t*) &sfn; - req.systemFrameNumber.size = 1; - int spare = 0; - req.spare.buf = (uint8_t*) &spare; - req.spare.size = 2; - req.spare.bits_unused = 6; - - asn_enc_rval_t n = uper_encode_to_buffer(&asn_DEF_MasterInformationBlock, (void*) &req, buffer, buffer_size_bytes); - if (n.encoded == -1) { - printf("Encoding failed.\n"); - printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); - return LIBLTE_ERROR; - } - asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); - return LIBLTE_SUCCESS; -} - -int bcch_bch_mib_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, uint32_t *sfn) { - asn_codec_ctx_t *opt_codec_ctx = NULL; - MasterInformationBlock_t *req = calloc(1, sizeof(MasterInformationBlock_t)); - if (!req) { - perror("calloc"); - return LIBLTE_ERROR; - } - asn_dec_rval_t n = uper_decode(opt_codec_ctx, &asn_DEF_MasterInformationBlock, - (void**) &req, buffer, msg_nof_bits/8,0,msg_nof_bits%8); - if (n.consumed == -1) { - printf("Decoding failed.\n"); - return LIBLTE_ERROR; - } - asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); - - switch(req->dl_Bandwidth) { - case dl_Bandwidth_n6: - cell->nof_prb = 6; - break; - case dl_Bandwidth_n15: - cell->nof_prb = 15; - break; - case dl_Bandwidth_n25: - cell->nof_prb = 25; - break; - case dl_Bandwidth_n50: - cell->nof_prb = 50; - break; - case dl_Bandwidth_n75: - cell->nof_prb = 75; - break; - } - if (req->phich_Config.phich_Duration == phich_Duration_normal) { - cell->phich_length = PHICH_NORM; - } else { - cell->phich_length = PHICH_EXT; - } - switch(req->phich_Config.phich_Resource) { - case phich_Resource_one: - cell->phich_resources = R_1; - break; - case phich_Resource_half: - cell->phich_resources = R_1_2; - break; - case phich_Resource_oneSixth: - cell->phich_resources = R_1_6; - break; - case phich_Resource_two: - cell->phich_resources = R_2; - break; - } - int sfn_i=0;; - memcpy(&sfn_i, req->systemFrameNumber.buf, req->systemFrameNumber.size); - if (sfn) { - *sfn=(sfn_i<<2); - } - return LIBLTE_SUCCESS; -} - - -int bcch_dlsch_sib1_pack(uint8_t *buffer, uint32_t buffer_size_bytes) { - SystemInformationBlockType1_t req; - - MCC_MNC_Digit_t mcc[3] = {1,0,1}; - MCC_MNC_Digit_t mnc[2] = {2,3}; - uint8_t tac_val[2] = {0x10,0x20}; - uint8_t cid_val[4] = {0x3,0x4,0x5,0x6}; - printf("calling create\n"); - sib1_create_default(&req, mcc, mnc, tac_val, cid_val, 6); - printf("calling encode\n"); - asn_enc_rval_t n = uper_encode_to_buffer(&asn_DEF_SystemInformationBlockType1, (void*) &req, buffer, 200); - if (n.encoded == -1) { - printf("Encoding failed.\n"); - printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); - return LIBLTE_ERROR; - } - asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); - return LIBLTE_SUCCESS; -} - -int bcch_dlsch_sib1_unpack(uint8_t *buffer, uint32_t msg_nof_bits) { - SystemInformationBlockType1_t *req = calloc(1, sizeof(SystemInformationBlockType1_t)); - if (!req) { - perror("calloc"); - return LIBLTE_ERROR; - } - asn_dec_rval_t n = uper_decode(NULL, &asn_DEF_SystemInformationBlockType1, - (void**) &req, buffer, msg_nof_bits/8,0,msg_nof_bits%8); - if (n.consumed == -1) { - printf("Decoding failed.\n"); - return LIBLTE_ERROR; - } else { - printf("Decoding OK consumed: %d bits\n", n.consumed); - } - asn_fprint(stdout, &asn_DEF_SystemInformationBlockType1, req); - - return LIBLTE_SUCCESS; -} diff --git a/lte/rrc/lib/rrc_msg/src/sib.c b/lte/rrc/lib/rrc_msg/src/sib.c deleted file mode 100644 index f42b64491..000000000 --- a/lte/rrc/lib/rrc_msg/src/sib.c +++ /dev/null @@ -1,102 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include - -#include "liblte/rrc/rrc_msg/bcch.h" -#include "liblte/phy/utils/bit.h" -#include "rrc_asn.h" - - -void sib1_create_default(SystemInformationBlockType1_t *sib1, - MCC_MNC_Digit_t mcc_val[3], - MCC_MNC_Digit_t mnc_val[2], - uint8_t tac_val[2], - uint8_t cid_val[4], - int freq_band) -{ - - - PLMN_IdentityInfo_t PLMN_identity_info; - asn_enc_rval_t enc_rval; - SchedulingInfo_t schedulingInfo; - SIB_Type_t sib_type; - struct MCC mcc; - - bzero(sib1, sizeof(SystemInformationBlockType1_t)); - bzero(&PLMN_identity_info, sizeof(PLMN_IdentityInfo_t)); - bzero(&schedulingInfo, sizeof(SchedulingInfo_t)); - bzero(&sib_type, sizeof(SIB_Type_t)); - bzero(&mcc, sizeof(struct MCC)); - - PLMN_identity_info.plmn_Identity.mcc = &mcc; - asn_set_empty(&mcc); - for (int i=0;i<3;i++) { - ASN_SEQUENCE_ADD(&mcc.list,&mcc_val[i]); - } - printf("MCC set len: %d\n", mcc.list.count); - for (int i=0;i<2;i++) { - ASN_SEQUENCE_ADD(&PLMN_identity_info.plmn_Identity.mnc.list,&mnc_val[i]); - } - PLMN_identity_info.cellReservedForOperatorUse=cellReservedForOperatorUse_reserved; - - ASN_SEQUENCE_ADD(&sib1->cellAccessRelatedInfo.plmn_IdentityList.list,&PLMN_identity_info); - - sib1->cellAccessRelatedInfo.trackingAreaCode.buf=tac_val; - sib1->cellAccessRelatedInfo.trackingAreaCode.size=2; - sib1->cellAccessRelatedInfo.trackingAreaCode.bits_unused=0; - - sib1->cellAccessRelatedInfo.cellIdentity.buf=cid_val; - sib1->cellAccessRelatedInfo.cellIdentity.size=4; - sib1->cellAccessRelatedInfo.cellIdentity.bits_unused=4; - - sib1->cellAccessRelatedInfo.cellBarred=cellBarred_notBarred; - - sib1->cellAccessRelatedInfo.intraFreqReselection=intraFreqReselection_allowed; - sib1->cellAccessRelatedInfo.csg_Indication=0; - - sib1->cellSelectionInfo.q_RxLevMin=-70; - sib1->cellSelectionInfo.q_RxLevMinOffset=NULL; - - sib1->freqBandIndicator = (long int) freq_band; - - schedulingInfo.si_Periodicity=si_Periodicity_rf8; - - // assign_enum(&sib_type,SIB_Type_sibType3); - sib_type=SIB_Type_sibType3; - - ASN_SEQUENCE_ADD(&schedulingInfo.sib_MappingInfo.list,&sib_type); - ASN_SEQUENCE_ADD(&sib1->schedulingInfoList.list,&schedulingInfo); - - sib1->tdd_Config = NULL; - - sib1->si_WindowLength=si_WindowLength_ms10; - sib1->systemInfoValueTag=0; - - asn_fprint(stdout, &asn_DEF_SystemInformationBlockType1, (void*)sib1); -} \ No newline at end of file From 19628904d4cdc9b049141b6933292cf440f2b912 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 21 Oct 2014 18:18:00 +0100 Subject: [PATCH 12/55] Hide ASN compilation warnings --- lte/rrc/asn/CMakeLists.txt | 1 + lte/rrc/asn/SystemInformation-r8-IEs.h | 50 +++++++++++++------------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/lte/rrc/asn/CMakeLists.txt b/lte/rrc/asn/CMakeLists.txt index 5b93ec7a4..4d8152362 100755 --- a/lte/rrc/asn/CMakeLists.txt +++ b/lte/rrc/asn/CMakeLists.txt @@ -23,5 +23,6 @@ FILE(GLOB RRC_ASN_SOURCES *.c) INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../include/liblte/rrc/asn/") ADD_LIBRARY(rrc_asn SHARED ${RRC_ASN_SOURCES}) +SET(CMAKE_C_FLAGS "-std=c99 -D_GNU_SOURCE -w") INSTALL(TARGETS rrc_asn DESTINATION ${LIBRARY_DIR}) LIBLTE_SET_PIC(rrc_asn) \ No newline at end of file diff --git a/lte/rrc/asn/SystemInformation-r8-IEs.h b/lte/rrc/asn/SystemInformation-r8-IEs.h index efe1e5a8d..d76f6c783 100644 --- a/lte/rrc/asn/SystemInformation-r8-IEs.h +++ b/lte/rrc/asn/SystemInformation-r8-IEs.h @@ -54,33 +54,35 @@ typedef enum SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR { /* Forward declarations */ struct SystemInformation_v8a0_IEs; +struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member { + SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR present; + union SystemInformation_r8_IEs__sib_TypeAndInfo__Member_u { + SystemInformationBlockType2_t sib2; + SystemInformationBlockType3_t sib3; + SystemInformationBlockType4_t sib4; + SystemInformationBlockType5_t sib5; + SystemInformationBlockType6_t sib6; + SystemInformationBlockType7_t sib7; + SystemInformationBlockType8_t sib8; + SystemInformationBlockType9_t sib9; + SystemInformationBlockType10_t sib10; + SystemInformationBlockType11_t sib11; + /* + * This type is extensible, + * possible extensions are below. + */ + SystemInformationBlockType12_r9_t sib12_v920; + SystemInformationBlockType13_r9_t sib13_v920; + } choice; + + /* Context for parsing across buffer boundaries */ + asn_struct_ctx_t _asn_ctx; +}; + /* SystemInformation-r8-IEs */ typedef struct SystemInformation_r8_IEs { struct SystemInformation_r8_IEs__sib_TypeAndInfo { - A_SEQUENCE_OF(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member { - SystemInformation_r8_IEs__sib_TypeAndInfo__Member_PR present; - union SystemInformation_r8_IEs__sib_TypeAndInfo__Member_u { - SystemInformationBlockType2_t sib2; - SystemInformationBlockType3_t sib3; - SystemInformationBlockType4_t sib4; - SystemInformationBlockType5_t sib5; - SystemInformationBlockType6_t sib6; - SystemInformationBlockType7_t sib7; - SystemInformationBlockType8_t sib8; - SystemInformationBlockType9_t sib9; - SystemInformationBlockType10_t sib10; - SystemInformationBlockType11_t sib11; - /* - * This type is extensible, - * possible extensions are below. - */ - SystemInformationBlockType12_r9_t sib12_v920; - SystemInformationBlockType13_r9_t sib13_v920; - } choice; - - /* Context for parsing across buffer boundaries */ - asn_struct_ctx_t _asn_ctx; - } ) list; + A_SEQUENCE_OF(struct SystemInformation_r8_IEs__sib_TypeAndInfo__Member) list; /* Context for parsing across buffer boundaries */ asn_struct_ctx_t _asn_ctx; From bb98b588bd485ef587f3369c6c46e7374c55ff87 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 21 Oct 2014 18:56:21 +0100 Subject: [PATCH 13/55] Removed ue_celldetect test (already in example). Simplified ue_celldetect API --- lte/examples/cell_search_utils.c | 5 +- lte/phy/include/liblte/phy/ue/ue_celldetect.h | 10 +- lte/phy/lib/ue/src/ue_celldetect.c | 21 +- lte/phy/lib/ue/test/CMakeLists.txt | 3 - lte/phy/lib/ue/test/ue_celldetect_mib_test.c | 266 ------------------ 5 files changed, 20 insertions(+), 285 deletions(-) delete mode 100644 lte/phy/lib/ue/test/ue_celldetect_mib_test.c diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 083e33117..873e17ede 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -137,6 +137,8 @@ int find_cell(void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) uint32_t flen = 4800; int n; + ue_celldetect_set_N_id_2(&cd, N_id_2); + do { if (cuhd_recv(uhd, buffer, flen, 1)<0) { fprintf(stderr, "Error receiving from USRP\n"); @@ -145,7 +147,7 @@ int find_cell(void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) DEBUG("Scanning cell at N_id_2=%d\n",N_id_2); - n = ue_celldetect_scan(&cd, buffer, flen, found_cell, N_id_2); + n = ue_celldetect_scan(&cd, buffer, flen); switch(n) { case CS_FRAME_UNALIGNED: printf("Realigning frame\n"); @@ -157,6 +159,7 @@ int find_cell(void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) ret = -1; goto free_and_exit; case CS_CELL_DETECTED: + ue_celldetect_get_cell(&cd, found_cell); if (found_cell->peak > 0) { printf("\n\tCELL ID: %d, CP: %s, Peak: %.2f, Mode: %d/%d\n", found_cell->cell_id, diff --git a/lte/phy/include/liblte/phy/ue/ue_celldetect.h b/lte/phy/include/liblte/phy/ue/ue_celldetect.h index 46984274d..7ce2f86c9 100644 --- a/lte/phy/include/liblte/phy/ue/ue_celldetect.h +++ b/lte/phy/include/liblte/phy/ue/ue_celldetect.h @@ -106,9 +106,13 @@ LIBLTE_API void ue_celldetect_reset(ue_celldetect_t *q); LIBLTE_API int ue_celldetect_scan(ue_celldetect_t *q, cf_t *signal, - uint32_t nsamples, - ue_celldetect_result_t *found_cell, - uint32_t N_id_2); + uint32_t nsamples); + +LIBLTE_API int ue_celldetect_set_N_id_2(ue_celldetect_t *q, + uint32_t N_id_2); + +LIBLTE_API void ue_celldetect_get_cell(ue_celldetect_t * q, + ue_celldetect_result_t *found_cell); LIBLTE_API int ue_celldetect_set_nof_frames_total(ue_celldetect_t *q, uint32_t nof_frames); diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index 909dd3f69..48711fbaa 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -137,7 +137,7 @@ int ue_celldetect_set_nof_frames_detected(ue_celldetect_t * q, uint32_t nof_fram } /* Decide the most likely cell based on the mode */ -void decide_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_cell) +void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_cell) { uint32_t i, j; @@ -183,13 +183,16 @@ void decide_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_cell) found_cell->cp = CPEXT; } found_cell->mode = q->mode_ntimes[mode_pos]; + q->current_nof_detected = q->current_nof_total = 0; +} + +int ue_celldetect_set_N_id_2(ue_celldetect_t *q, uint32_t N_id_2) { + return sync_set_N_id_2(&q->sfind, N_id_2); } int ue_celldetect_scan(ue_celldetect_t * q, cf_t *signal, - uint32_t nsamples, - ue_celldetect_result_t *found_cell, - uint32_t N_id_2) + uint32_t nsamples) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t peak_idx; @@ -198,8 +201,7 @@ int ue_celldetect_scan(ue_celldetect_t * q, if (q != NULL && signal != NULL && - nsamples >= 4800 && - lte_N_id_2_isvalid(N_id_2)) + nsamples >= 4800) { ret = LIBLTE_SUCCESS; @@ -210,12 +212,9 @@ int ue_celldetect_scan(ue_celldetect_t * q, nof_input_frames = nsamples/4800; for (uint32_t nf=0;nfsfind, N_id_2)) { - return LIBLTE_ERROR; - } INFO("[%3d/%3d]: Searching cells with N_id_2=%d. %d frames\n", - q->current_nof_detected, q->current_nof_total, N_id_2, nof_input_frames); + q->current_nof_detected, q->current_nof_total, q->sfind.N_id_2, nof_input_frames); /* Find peak and cell id */ ret = sync_find(&q->sfind, &signal[nf*4800], 0, &peak_idx); @@ -251,8 +250,6 @@ int ue_celldetect_scan(ue_celldetect_t * q, /* Decide cell ID and CP if we detected up to nof_frames_detected */ if (q->current_nof_detected == q->nof_frames_detected) { - decide_cell(q, found_cell); - q->current_nof_detected = q->current_nof_total = 0; ret = CS_CELL_DETECTED; } else if (q->current_nof_total == q->nof_frames_total) { q->current_nof_detected = q->current_nof_total = 0; diff --git a/lte/phy/lib/ue/test/CMakeLists.txt b/lte/phy/lib/ue/test/CMakeLists.txt index dc376a5de..614ac207f 100644 --- a/lte/phy/lib/ue/test/CMakeLists.txt +++ b/lte/phy/lib/ue/test/CMakeLists.txt @@ -28,9 +28,6 @@ LIST(FIND OPTIONAL_LIBS graphics GRAPHICS_FIND) IF(${CUHD_FIND} GREATER -1) ADD_EXECUTABLE(ue_sync_usrp ue_sync_usrp.c) TARGET_LINK_LIBRARIES(ue_sync_usrp lte_phy cuhd) - - ADD_EXECUTABLE(ue_celldetect_mib_test ue_celldetect_mib_test.c) - TARGET_LINK_LIBRARIES(ue_celldetect_mib_test lte_phy cuhd) ENDIF(${CUHD_FIND} GREATER -1) IF(${GRAPHICS_FIND} EQUAL -1) diff --git a/lte/phy/lib/ue/test/ue_celldetect_mib_test.c b/lte/phy/lib/ue/test/ue_celldetect_mib_test.c deleted file mode 100644 index 040f60baf..000000000 --- a/lte/phy/lib/ue/test/ue_celldetect_mib_test.c +++ /dev/null @@ -1,266 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "liblte/phy/phy.h" - -#include "liblte/cuhd/cuhd.h" - -int nof_frames_total = CS_DEFAULT_NOFFRAMES_TOTAL; -int nof_frames_detected = CS_DEFAULT_NOFFRAMES_DETECTED; -float threshold = -1; - -float uhd_freq = 0.0, uhd_gain = 20.0; -char *uhd_args = ""; - -void usage(char *prog) { - printf("Usage: %s [agntdv] -f uhd_freq\n", prog); - printf("\t-a UHD args [Default %s]\n", uhd_args); - printf("\t-g UHD RX gain [Default %.2f dB]\n", uhd_gain); - printf("\t-n nof_frames_total [Default 100]\n"); - printf("\t-d nof_frames_detected [Default 10]\n"); - printf("\t-t threshold [Default %.2f]\n",threshold); - printf("\t-v [set verbose to debug, default none]\n"); -} - -void parse_args(int argc, char **argv) { - int opt; - while ((opt = getopt(argc, argv, "agndtvf")) != -1) { - switch (opt) { - case 'n': - nof_frames_total = atoi(argv[optind]); - break; - case 'd': - nof_frames_detected = atoi(argv[optind]); - break; - case 'a': - uhd_args = argv[optind]; - break; - case 'g': - uhd_gain = atof(argv[optind]); - break; - case 'f': - uhd_freq = atof(argv[optind]); - break; - case 't': - threshold = atof(argv[optind]); - break; - case 'v': - verbose++; - break; - default: - usage(argv[0]); - exit(-1); - } - } - if (uhd_freq == 0.0) { - usage(argv[0]); - exit(-1); - } -} - -int decode_pbch(void *uhd, cf_t *buffer, ue_celldetect_result_t *found_cell) -{ - ue_mib_t uemib; - uint8_t bch_payload[BCH_PAYLOAD_LEN]; - int n; - uint32_t nof_tx_ports; - - uint32_t nof_frames = 0; - uint32_t flen = MIB_FRAME_SIZE; - - if (ue_mib_init(&uemib, found_cell->cell_id, found_cell->cp)) { - fprintf(stderr, "Error initiating PBCH decoder\n"); - return LIBLTE_ERROR; - } - - INFO("Setting sampling frequency 1.92 MHz for PBCH decoding\n", 0); - cuhd_set_rx_srate(uhd, 1920000.0); - INFO("Starting receiver...\n", 0); - cuhd_start_rx_stream(uhd); - - do { - if (cuhd_recv(uhd, buffer, flen, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - return LIBLTE_ERROR; - } - - INFO("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - - n = ue_mib_decode(&uemib, buffer, flen, bch_payload, &nof_tx_ports, NULL); - if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { - fprintf(stderr, "Error calling ue_mib_decode()\n"); - return LIBLTE_ERROR; - } - if (n == MIB_FRAME_UNALIGNED) { - printf("Realigning frame\n"); - if (cuhd_recv(uhd, buffer, flen/2, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - return LIBLTE_ERROR; - } - } - nof_frames++; - } while (n != MIB_FOUND && nof_frames < nof_frames_total); - if (n == MIB_FOUND) { - printf("\n\nMIB decoded in %d ms (%d half frames). %d TX ports\n", nof_frames*5, nof_frames, nof_tx_ports); - vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); - } else { - printf("\nCould not decode MIB\n"); - } - - cuhd_stop_rx_stream(uhd); - cuhd_flush_buffer(uhd); - - ue_mib_free(&uemib); - - return LIBLTE_SUCCESS; -} - -int find_cell(void *uhd, ue_celldetect_t *s, cf_t *buffer, ue_celldetect_result_t *found_cell) -{ - int n; - - INFO("Setting sampling frequency 960 KHz for PSS search\n", 0); - cuhd_set_rx_srate(uhd, 960000.0); - INFO("Starting receiver...\n", 0); - cuhd_start_rx_stream(uhd); - - uint32_t nof_scanned_cells = 0; - uint32_t flen = 4800; - - do { - - if (cuhd_recv(uhd, buffer, flen, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - return LIBLTE_ERROR; - } - - n = ue_celldetect_scan(s, buffer, flen, found_cell, nof_scanned_cells); - switch(n) { - case CS_FRAME_UNALIGNED: - printf("Realigning frame\n"); - if (cuhd_recv(uhd, buffer, flen/2, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - return LIBLTE_ERROR; - } - return LIBLTE_ERROR; - case CS_CELL_DETECTED: - if (found_cell->peak > 0) { - printf("\tCELL ID: %d, CP: %s, Peak: %.2f, Mode: %d/%d\n", - found_cell->cell_id, lte_cp_string(found_cell->cp), - found_cell->peak, found_cell->mode, s->nof_frames_detected); - } - nof_scanned_cells++; - break; - case CS_CELL_NOT_DETECTED: - nof_scanned_cells++; - break; - case LIBLTE_ERROR: - case LIBLTE_ERROR_INVALID_INPUTS: - fprintf(stderr, "Error calling cellsearch_scan()\n"); - return LIBLTE_ERROR; - } - } while(nof_scanned_cells < 3 && n != CS_CELL_DETECTED); - - INFO("Stopping receiver...\n", 0); - cuhd_stop_rx_stream(uhd); - cuhd_flush_buffer(uhd); - - return n; -} - -int main(int argc, char **argv) { - int n; - void *uhd; - ue_celldetect_t s; - ue_celldetect_result_t found_cell; - cf_t *buffer; - - parse_args(argc, argv); - - printf("Opening UHD device...\n"); - if (cuhd_open(uhd_args, &uhd)) { - fprintf(stderr, "Error opening uhd\n"); - exit(-1); - } - cuhd_set_rx_gain(uhd, uhd_gain); - - /* set uhd_freq */ - cuhd_set_rx_freq(uhd, (double) uhd_freq); - cuhd_rx_wait_lo_locked(uhd); - DEBUG("Set uhd_freq to %.3f MHz\n", (double ) uhd_freq/1000000); - - buffer = vec_malloc(sizeof(cf_t) * 96000); - if (!buffer) { - perror("malloc"); - return LIBLTE_ERROR; - } - - if (ue_celldetect_init(&s)) { - fprintf(stderr, "Error initiating UE sync module\n"); - exit(-1); - } - if (threshold > 0) { - ue_celldetect_set_threshold(&s, threshold); - } - - if (nof_frames_total > 0) { - ue_celldetect_set_nof_frames_total(&s, nof_frames_total); - } - if (nof_frames_detected > 0) { - ue_celldetect_set_nof_frames_detected(&s, nof_frames_detected); - } - - n = find_cell(uhd, &s, buffer, &found_cell); - if (n < 0) { - fprintf(stderr, "Error searching cell\n"); - exit(-1); - } - if (n == CS_CELL_DETECTED) { - if (decode_pbch(uhd, buffer, &found_cell)) { - fprintf(stderr, "Error decoding PBCH\n"); - exit(-1); - } - } - - ue_celldetect_free(&s); - cuhd_close(uhd); - exit(0); -} - - From b2c009e1fa99dd962ad68053cea677b079921235 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 21 Oct 2014 19:03:05 +0100 Subject: [PATCH 14/55] Simplified ue_mib API --- lte/examples/cell_search_utils.c | 3 ++- lte/phy/include/liblte/phy/ue/ue_mib.h | 16 +++++++++++----- lte/phy/lib/ue/src/ue_mib.c | 26 ++++++++++++++++++-------- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 873e17ede..9619d5764 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -75,7 +75,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram DEBUG("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - n = ue_mib_decode(&uemib, buffer, flen, bch_payload, nof_tx_ports, sfn_offset); + n = ue_mib_decode(&uemib, buffer, flen); if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling ue_mib_decode()\n"); goto free_and_exit; @@ -93,6 +93,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram if (n == MIB_FOUND) { printf("\n\nMIB decoded in %d ms (%d half frames)\n", nof_frames*5, nof_frames); + ue_mib_get_payload(&uemib, bch_payload, nof_tx_ports, sfn_offset); ret = LIBLTE_SUCCESS; } else { ret = LIBLTE_ERROR; diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index 272c56b37..ef1f664ff 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -73,7 +73,11 @@ typedef struct LIBLTE_API { lte_fft_t fft; chest_t chest; - pbch_t pbch; + pbch_t pbch; + + uint8_t bch_payload[BCH_PAYLOAD_LEN]; + uint32_t nof_tx_ports; + uint32_t sfn_offset; uint32_t frame_cnt; uint32_t last_frame_trial; @@ -90,10 +94,12 @@ LIBLTE_API void ue_mib_reset(ue_mib_t *q); LIBLTE_API int ue_mib_decode(ue_mib_t *q, cf_t *signal, - uint32_t nsamples, - uint8_t bch_payload[BCH_PAYLOAD_LEN], - uint32_t *nof_tx_ports, - uint32_t *sfn_offset); + uint32_t nsamples); + +LIBLTE_API void ue_mib_get_payload(ue_mib_t *q, + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); LIBLTE_API void ue_mib_set_threshold(ue_mib_t *q, float threshold); diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 82d16046a..95c15103b 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -139,8 +139,7 @@ void ue_mib_set_threshold(ue_mib_t * q, float threshold) sync_set_threshold(&q->sfind, threshold); } -static int mib_decoder_run(ue_mib_t * q, cf_t *input, - uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) +static int mib_decoder_run(ue_mib_t * q, cf_t *input) { int ret = LIBLTE_SUCCESS; @@ -163,7 +162,7 @@ static int mib_decoder_run(ue_mib_t * q, cf_t *input, } /* Decode PBCH */ - ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, bch_payload, nof_tx_ports, sfn_offset); + ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); if (ret < 0) { fprintf(stderr, "Error decoding PBCH\n"); } else if (ret == 1) { @@ -179,12 +178,23 @@ static int mib_decoder_run(ue_mib_t * q, cf_t *input, } int counter1=0,counter2=0,counter3=0,counter4=0; +void ue_mib_get_payload(ue_mib_t *q, + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset) +{ + memcpy(bch_payload, q->bch_payload, sizeof(uint8_t) * BCH_PAYLOAD_LEN); + if (nof_tx_ports) { + *nof_tx_ports = q->nof_tx_ports; + } + if (sfn_offset) { + *sfn_offset = q->sfn_offset; + } +} + int ue_mib_decode(ue_mib_t * q, cf_t *signal, - uint32_t nsamples, - uint8_t bch_payload[BCH_PAYLOAD_LEN], - uint32_t *nof_tx_ports, - uint32_t *sfn_offset) + uint32_t nsamples) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t peak_idx=0; @@ -229,7 +239,7 @@ int ue_mib_decode(ue_mib_t * q, sync_get_sf_idx(&q->sfind) == 0) { INFO("Trying to decode MIB\n",0); - ret = mib_decoder_run(q, &signal[nf*MIB_FRAME_SIZE+peak_idx], bch_payload, nof_tx_ports, sfn_offset); + ret = mib_decoder_run(q, &signal[nf*MIB_FRAME_SIZE+peak_idx]); counter3++; } else if ((ret == LIBLTE_SUCCESS && peak_idx != 0) || (ret == 1 && nf*MIB_FRAME_SIZE + peak_idx + 960 > nsamples)) From 17dd2920891ebd9a3fde7cba259b23728861007a Mon Sep 17 00:00:00 2001 From: ismagom Date: Fri, 24 Oct 2014 11:06:04 +0100 Subject: [PATCH 15/55] Fixed issues with cell_measurement --- lte/examples/cell_measurement.c | 110 +++++++--- lte/examples/cell_search_utils.c | 4 +- lte/examples/pdsch_ue.c | 10 +- .../include/liblte/phy/common/phy_common.h | 7 + lte/phy/include/liblte/phy/ue/ue_dl.h | 5 +- lte/phy/include/liblte/phy/ue/ue_mib.h | 26 ++- lte/phy/include/liblte/phy/ue/ue_sync.h | 2 + lte/phy/lib/ch_estimation/src/chest.c | 2 +- lte/phy/lib/common/src/phy_common.c | 4 + lte/phy/lib/mimo/src/precoding.c | 4 +- lte/phy/lib/phch/src/pbch.c | 88 ++++---- lte/phy/lib/phch/src/regs.c | 6 +- lte/phy/lib/sync/src/sync.c | 2 + lte/phy/lib/ue/src/ue_dl.c | 192 ++++++++---------- lte/phy/lib/ue/src/ue_mib.c | 91 +++++---- lte/phy/lib/ue/src/ue_sync.c | 6 +- 16 files changed, 308 insertions(+), 251 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index ab40f11d8..a26c68579 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -113,6 +113,9 @@ int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { return cuhd_recv(h, data, nsamples, 1); } +extern float mean_exec_time; + +enum receiver_state { DECODE_MIB, DECODE_SIB, MEASURE} state; int main(int argc, char **argv) { int ret; @@ -121,8 +124,18 @@ int main(int argc, char **argv) { lte_cell_t cell; int64_t sf_cnt; ue_sync_t ue_sync; + ue_mib_t ue_mib; void *uhd; ue_dl_t ue_dl; + lte_fft_t fft; + chest_t chest; + uint32_t nframes=0; + uint32_t nof_trials = 0; + uint32_t sfn = 0; // system frame number + int n; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; + uint32_t sfn_offset; + float rssi=0, rsrp=0, rsrq=0; parse_args(&prog_args, argc, argv); @@ -154,14 +167,15 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } + if (ue_mib_init_known_cell(&ue_mib, cell, false)) { + fprintf(stderr, "Error initaiting UE MIB decoder\n"); + exit(-1); + } pdsch_set_rnti(&ue_dl.pdsch, SIRNTI); /* Initialize subframe counter */ sf_cnt = 0; - lte_fft_t fft; - chest_t chest; - if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { fprintf(stderr, "Error initiating FFT\n"); return -1; @@ -172,12 +186,9 @@ int main(int argc, char **argv) { } int sf_re = SF_LEN_RE(cell.nof_prb, cell.cp); + printf("%d RE allocated\n", sf_re); cf_t *sf_symbols = vec_malloc(sf_re * sizeof(cf_t)); - uint32_t nframes=0; - - bool sib1_decoded = false; - int n; - + /* Main loop */ while (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1) { @@ -185,31 +196,59 @@ int main(int argc, char **argv) { if (ret < 0) { fprintf(stderr, "Error calling ue_sync_work()\n"); } - - float rssi=0, rsrp=0, rsrq=0; - + /* iodev_receive returns 1 if successfully read 1 aligned subframe */ if (ret == 1) { - - if (!sib1_decoded) { - n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), SIRNTI); - if (n < 0) { - fprintf(stderr, "\nError running receiver\n");fflush(stdout); - exit(-1); - } else if (n > 0) { - printf("\n\nDecoded SIB1 Message Len %d: ",n); - bit_unpack_vector(data, data_unpacked, n); - void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); - if (dlsch_msg) { - printf("\n");fflush(stdout); - sib1_decoded = true; - cell_access_info_t cell_info; - bcch_dlsch_sib1_get_cell_access_info(dlsch_msg, &cell_info); - printf("Cell ID: 0x%x\n", cell_info.cell_id); + switch (state) { + case DECODE_MIB: + if (ue_sync_get_sfidx(&ue_sync) == 0) { + pbch_decode_reset(&ue_mib.pbch); + n = ue_mib_decode_aligned_frame(&ue_mib, &sf_buffer[ue_sync_sf_len(&ue_sync)/2], bch_payload_unpacked, NULL, &sfn_offset); + if (n < 0) { + fprintf(stderr, "Error decoding UE MIB\n"); + exit(-1); + } else if (n == MIB_FOUND) { + bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); + bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); + printf("MIB found SFN: %d, offset: %d\n", sfn, sfn_offset); + sfn = (sfn<<2) + sfn_offset; + state = DECODE_SIB; + } } - } - } else { - /* Run FFT for all subframe data */ + break; + case DECODE_SIB: + sfn=0; + /* If we are looking for SI Blocks, search only in appropiate places */ + if ((sfn % 2) == 0 && (ue_sync_get_sfidx(&ue_sync) == 5)) { + n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, SIRNTI); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + exit(-1); + } else if (n == 0) { + // Printf +// if (!(sf_cnt%20)) { + printf("CFO: %+6.4f KHz, SFO: %+6.4f Khz, ExecTime: %5.1f us, NOI: %.2f, Nof Trials: %4d, Nof Error: %4d\r", + ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, + mean_exec_time, pdsch_average_noi(&ue_dl.pdsch), + (int) nof_trials, (int) ue_dl.pkt_errors); + // } + nof_trials++; + } else { + printf("\n\nDecoded SIB1 Message Len %d: ",n); + bit_unpack_vector(data, data_unpacked, n); + void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); + if (dlsch_msg) { + printf("\n");fflush(stdout); + cell_access_info_t cell_info; + bcch_dlsch_sib1_get_cell_access_info(dlsch_msg, &cell_info); + printf("Cell ID: 0x%x\n", cell_info.cell_id); + } + state = MEASURE; + } + } + break; + case MEASURE: + /* Run FFT for all subframe data */ lte_fft_run_sf(&fft, sf_buffer, sf_symbols); chest_measure_sf(&chest, sf_symbols, ue_sync_get_sfidx(&ue_sync)); @@ -226,12 +265,21 @@ int main(int argc, char **argv) { 10*log10(rsrp*1000)-prog_args.uhd_gain, 10*log10(rsrq)); } - } + break; + } + if (ue_sync_get_sfidx(&ue_sync) == 0) { + sfn++; + if (sfn == 1024) { + sfn = 0; + } + } } else if (ret == 0) { printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", sync_get_peak_value(&ue_sync.sfind), ue_sync.frame_total_cnt, ue_sync.state); } + + sf_cnt++; } // Main loop diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 9619d5764..e9576276c 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -49,7 +49,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram int ret = LIBLTE_ERROR; uint32_t nof_frames = 0; - uint32_t flen = MIB_FRAME_SIZE; + uint32_t flen = MIB_FRAME_SIZE_SEARCH; cf_t *buffer = vec_malloc(sizeof(cf_t) * flen); if (!buffer) { @@ -75,7 +75,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram DEBUG("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - n = ue_mib_decode(&uemib, buffer, flen); + n = ue_mib_sync_and_decode(&uemib, buffer, flen); if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling ue_mib_decode()\n"); goto free_and_exit; diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 3095ec8e7..499e33519 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -204,9 +204,12 @@ int main(int argc, char **argv) { break; } + fprintf(stderr, "Change in ue_dl API\n"); + exit(-1); + /* iodev_receive returns 1 if successfully read 1 aligned subframe */ if (ret == 1) { - rlen = ue_dl_decode(&ue_dl, sf_buffer, data, iodev_get_sfidx(&iodev), prog_args.rnti); + rlen = ue_dl_decode(&ue_dl, sf_buffer, data, iodev_get_sfidx(&iodev), 0, prog_args.rnti); if (rlen < 0) { fprintf(stderr, "\nError running receiver\n");fflush(stdout); exit(-1); @@ -220,11 +223,10 @@ int main(int argc, char **argv) { // Plot and Printf if (!(sf_cnt % 10)) { - printf("CFO: %+.4f KHz, SFO: %+.4f Khz, NOI: %.2f Errors: %4d/%4d/%4d, BLER: %.1e, Texec: %.2f\r", + printf("CFO: %+.4f KHz, SFO: %+.4f Khz, NOI: %.2f Errors: %4d/%4d, BLER: %.1e, Texec: %.2f\r", ue_sync_get_cfo(&iodev.sframe)/1000, ue_sync_get_sfo(&iodev.sframe)/1000, pdsch_average_noi(&ue_dl.pdsch), - (int) ue_dl.pkt_errors, (int) ue_dl.pkts_total, (int) ue_dl.nof_trials, - (float) ue_dl.pkt_errors / ue_dl.pkts_total, + (int) ue_dl.pkt_errors, (int) ue_dl.pkts_total, (float) ue_dl.pkt_errors / ue_dl.pkts_total, mean_exec_time); } diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index 7ae251baf..5a4b80419 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -29,6 +29,7 @@ #ifndef _LTEBASE_ #define _LTEBASE_ +#include #include #include #include "liblte/config.h" @@ -86,6 +87,9 @@ typedef enum {CPNORM, CPEXT} lte_cp_t; #define SF_LEN(symbol_sz) (2*SLOT_LEN(symbol_sz)) #define SF_LEN_MAX (SF_LEN(SYMBOL_SZ_MAX)) +#define SLOT_LEN_PRB(nof_prb) (SLOT_LEN(lte_symbol_sz(nof_prb))) +#define SF_LEN_PRB(nof_prb) (SF_LEN(lte_symbol_sz(nof_prb))) + #define SLOT_LEN_RE(nof_prb, cp) (nof_prb*RE_X_RB*CP_NSYMB(cp)) #define SF_LEN_RE(nof_prb, cp) (2*SLOT_LEN_RE(nof_prb, cp)) @@ -139,6 +143,9 @@ LIBLTE_API enum band_geographical_area { LIBLTE_API bool lte_cell_isvalid(lte_cell_t *cell); +LIBLTE_API void lte_cell_fprint(FILE *stream, + lte_cell_t *cell); + LIBLTE_API bool lte_N_id_2_isvalid(uint32_t N_id_2); LIBLTE_API bool lte_N_id_1_isvalid(uint32_t N_id_1); diff --git a/lte/phy/include/liblte/phy/ue/ue_dl.h b/lte/phy/include/liblte/phy/ue/ue_dl.h index 8a8ad8630..17a144a1b 100644 --- a/lte/phy/include/liblte/phy/ue/ue_dl.h +++ b/lte/phy/include/liblte/phy/ue/ue_dl.h @@ -73,11 +73,7 @@ typedef struct LIBLTE_API { uint64_t pkt_errors; uint64_t pkts_total; - uint64_t nof_trials; - uint32_t sfn; - bool pbch_decoded; - uint16_t user_rnti; }ue_dl_t; @@ -92,6 +88,7 @@ LIBLTE_API int ue_dl_decode(ue_dl_t *q, cf_t *sf_buffer, uint8_t *data, uint32_t sf_idx, + uint32_t sfn, uint16_t rnti); #endif \ No newline at end of file diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index ef1f664ff..3e3f2cb98 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -56,8 +56,8 @@ #include "liblte/phy/common/fft.h" -#define MIB_NOF_PORTS 2 -#define MIB_FRAME_SIZE 9600 +#define MIB_MAX_PORTS 4 +#define MIB_FRAME_SIZE_SEARCH 9600 #define MIB_FRAME_UNALIGNED -3 #define MIB_FOUND 1 @@ -65,11 +65,9 @@ typedef struct LIBLTE_API { sync_t sfind; - - uint32_t cell_id; - + cf_t *slot1_symbols; - cf_t *ce[MIB_NOF_PORTS]; + cf_t *ce[MIB_MAX_PORTS]; lte_fft_t fft; chest_t chest; @@ -88,13 +86,23 @@ LIBLTE_API int ue_mib_init(ue_mib_t *q, uint32_t cell_id, lte_cp_t cp); +LIBLTE_API int ue_mib_init_known_cell(ue_mib_t *q, + lte_cell_t cell, + bool do_sync); + LIBLTE_API void ue_mib_free(ue_mib_t *q); LIBLTE_API void ue_mib_reset(ue_mib_t *q); -LIBLTE_API int ue_mib_decode(ue_mib_t *q, - cf_t *signal, - uint32_t nsamples); +LIBLTE_API int ue_mib_sync_and_decode(ue_mib_t *q, + cf_t *signal, + uint32_t nsamples); + +LIBLTE_API int ue_mib_decode_aligned_frame(ue_mib_t * q, + cf_t *input, + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); LIBLTE_API void ue_mib_get_payload(ue_mib_t *q, uint8_t bch_payload[BCH_PAYLOAD_LEN], diff --git a/lte/phy/include/liblte/phy/ue/ue_sync.h b/lte/phy/include/liblte/phy/ue/ue_sync.h index 1e608ebbf..d1a02d72f 100644 --- a/lte/phy/include/liblte/phy/ue/ue_sync.h +++ b/lte/phy/include/liblte/phy/ue/ue_sync.h @@ -99,6 +99,8 @@ LIBLTE_API int ue_sync_init(ue_sync_t *q, LIBLTE_API void ue_sync_free(ue_sync_t *q); +LIBLTE_API uint32_t ue_sync_sf_len(ue_sync_t *q); + LIBLTE_API int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols); diff --git a/lte/phy/lib/ch_estimation/src/chest.c b/lte/phy/lib/ch_estimation/src/chest.c index 417695899..b34471122 100644 --- a/lte/phy/lib/ch_estimation/src/chest.c +++ b/lte/phy/lib/ch_estimation/src/chest.c @@ -38,7 +38,7 @@ #define SLOT_SZ(q) (q->nof_symbols * q->symbol_sz) #define SF_SZ(q) (2 * SLOT_SZ(q)) -#define VOLK_INTERP +//#define VOLK_INTERP void chest_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { chest_ref_fprint(q, stream, nslot, port_id); diff --git a/lte/phy/lib/common/src/phy_common.c b/lte/phy/lib/common/src/phy_common.c index 6b16215a6..942240f12 100644 --- a/lte/phy/lib/common/src/phy_common.c +++ b/lte/phy/lib/common/src/phy_common.c @@ -65,6 +65,10 @@ bool lte_cell_isvalid(lte_cell_t *cell) { } } +void lte_cell_fprint(FILE *stream, lte_cell_t *cell) { + fprintf(stream, "PCI: %d, CP: %s, PRB: %d, Ports: %d\n", cell->id, lte_cp_string(cell->cp), cell->nof_prb, cell->nof_ports); +} + bool lte_N_id_2_isvalid(uint32_t N_id_2) { if (N_id_2 < 3) { return true; diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index 6c21ff21e..5599ea46f 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -77,7 +77,7 @@ int precoding_diversity(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_ports, } return 4 * i; } else { - fprintf(stderr, "Number of ports must be 2 or 4 for transmit diversity\n"); + fprintf(stderr, "Number of ports must be 2 or 4 for transmit diversity (nof_ports=%d)\n", nof_ports); return -1; } } @@ -180,7 +180,7 @@ int predecoding_diversity_zf(cf_t *y, cf_t *ce[MAX_PORTS], cf_t *x[MAX_LAYERS], } return i; } else { - fprintf(stderr, "Number of ports must be 2 or 4 for transmit diversity\n"); + fprintf(stderr, "Number of ports must be 2 or 4 for transmit diversity (nof_ports=%d)\n", nof_ports); return -1; } } diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index b2171b831..d753a6dc2 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -269,6 +269,8 @@ uint32_t pbch_crc_check(pbch_t *q, uint8_t *bits, uint32_t nof_ports) { int pbch_decode_frame(pbch_t *q, uint32_t src, uint32_t dst, uint32_t n, uint32_t nof_bits, uint32_t nof_ports) { int j; + + INFO("Trying to decode PBCH %d bits, %d ports, src: %d, dst: %d, n=%d\n", nof_bits, nof_ports, src, dst, n); memcpy(&q->temp[dst * nof_bits], &q->pbch_llr[src * nof_bits], n * nof_bits * sizeof(float)); @@ -290,6 +292,7 @@ int pbch_decode_frame(pbch_t *q, uint32_t src, uint32_t dst, uint32_t n, /* FIXME: If channel estimates are zero, received LLR are NaN. Check and return error */ for (j = 0; j < BCH_ENCODED_LEN; j++) { if (isnan(q->pbch_rm_f[j]) || isinf(q->pbch_rm_f[j])) { + printf("Some CE are NaN or Inf!\n"); return LIBLTE_ERROR; } } @@ -316,8 +319,7 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { uint32_t src, dst, nb; - uint32_t nant_[3] = { 1, 2, 4 }; - uint32_t na, nant; + uint32_t nant; int i; int nof_bits; cf_t *x[MAX_LAYERS]; @@ -360,38 +362,50 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], ret = 0; /* Try decoding for 1 to cell.nof_ports antennas */ - for (na = 0; na < q->cell.nof_ports && !ret; na++) { - nant = nant_[na]; + for (nant = 1; nant <= q->cell.nof_ports && !ret; nant++) { + if (nant != 3) { + DEBUG("Trying %d TX antennas with %d frames\n", nant, q->frame_idx); - DEBUG("Trying %d TX antennas with %d frames\n", nant, q->frame_idx); + /* in conctrol channels, only diversity is supported */ + if (nant == 1) { + /* no need for layer demapping */ + predecoding_single_zf(q->pbch_symbols[0], q->ce[0], q->pbch_d, + q->nof_symbols); + } else { + predecoding_diversity_zf(q->pbch_symbols[0], q->ce, x, nant, + q->nof_symbols); + layerdemap_diversity(x, q->pbch_d, nant, q->nof_symbols / nant); + } - /* in conctrol channels, only diversity is supported */ - if (nant == 1) { - /* no need for layer demapping */ - predecoding_single_zf(q->pbch_symbols[0], q->ce[0], q->pbch_d, - q->nof_symbols); - } else { - predecoding_diversity_zf(q->pbch_symbols[0], q->ce, x, nant, - q->nof_symbols); - layerdemap_diversity(x, q->pbch_d, nant, q->nof_symbols / nant); - } + /* demodulate symbols */ + demod_soft_sigma_set(&q->demod, 1.0); + demod_soft_demodulate(&q->demod, q->pbch_d, + &q->pbch_llr[nof_bits * (q->frame_idx - 1)], q->nof_symbols); - /* demodulate symbols */ - demod_soft_sigma_set(&q->demod, 1.0); - demod_soft_demodulate(&q->demod, q->pbch_d, - &q->pbch_llr[nof_bits * (q->frame_idx - 1)], q->nof_symbols); - - /* We don't know where the 40 ms begin, so we try all combinations. E.g. if we received - * 4 frames, try 1,2,3,4 individually, 12, 23, 34 in pairs, 123, 234 and finally 1234. - * We know they are ordered. - * - * FIXME: There are unnecessary checks because 2,3,4 have already been processed in the previous - * calls. - */ - for (nb = 0; nb < q->frame_idx && !ret; nb++) { - for (dst = 0; (dst < 4 - nb) && !ret; dst++) { - for (src = 0; src < q->frame_idx - nb && !ret; src++) { - ret = pbch_decode_frame(q, src, dst, nb + 1, nof_bits, nant); + /* We don't know where the 40 ms begin, so we try all combinations. E.g. if we received + * 4 frames, try 1,2,3,4 individually, 12, 23, 34 in pairs, 123, 234 and finally 1234. + * We know they are ordered. + * + * FIXME: There are unnecessary checks because 2,3,4 have already been processed in the previous + * calls. + */ + for (nb = 0; nb < q->frame_idx && !ret; nb++) { + for (dst = 0; (dst < 4 - nb) && !ret; dst++) { + for (src = 0; src < q->frame_idx - nb && !ret; src++) { + ret = pbch_decode_frame(q, src, dst, nb + 1, nof_bits, nant); + if (ret == 1) { + if (sfn_offset) { + *sfn_offset = dst - src; + } + if (nof_tx_ports) { + *nof_tx_ports = nant; + } + if (bch_payload) { + memcpy(bch_payload, q->data, sizeof(uint8_t) * BCH_PAYLOAD_LEN); + vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); + } + } + } } } } @@ -403,18 +417,6 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], q->frame_idx = 3; } } - if (ret == 1) { - if (sfn_offset) { - *sfn_offset = dst - src; - } - if (nof_tx_ports) { - *nof_tx_ports = nant; - } - if (bch_payload) { - memcpy(bch_payload, q->data, sizeof(uint8_t) * BCH_PAYLOAD_LEN); - vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); - } - } return ret; } diff --git a/lte/phy/lib/phch/src/regs.c b/lte/phy/lib/phch/src/regs.c index 902ef2375..d34c1d898 100644 --- a/lte/phy/lib/phch/src/regs.c +++ b/lte/phy/lib/phch/src/regs.c @@ -573,6 +573,7 @@ int regs_num_x_symbol(uint32_t symbol, uint32_t nof_port, lte_cp_t cp) { case 4: return 2; default: + fprintf(stderr, "Invalid number of ports %d\n", nof_port); return LIBLTE_ERROR; } break; @@ -585,6 +586,7 @@ int regs_num_x_symbol(uint32_t symbol, uint32_t nof_port, lte_cp_t cp) { return 2; } default: + fprintf(stderr, "Invalid symbol %d\n", symbol); return LIBLTE_ERROR; } } @@ -697,7 +699,7 @@ int regs_init(regs_t *h, lte_cell_t cell) { for (i = 0; i < max_ctrl_symbols; i++) { n[i] = regs_num_x_symbol(i, h->cell.nof_ports, h->cell.cp); if (n[i] == -1) { - return -1; + goto clean_and_exit; } h->nof_regs += h->cell.nof_prb * n[i]; } @@ -752,7 +754,7 @@ int regs_init(regs_t *h, lte_cell_t cell) { ret = LIBLTE_SUCCESS; } clean_and_exit: - if (ret == LIBLTE_ERROR) { + if (ret != LIBLTE_SUCCESS) { regs_free(h); } return ret; diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index cd99cf496..4cadf4ce2 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -232,6 +232,8 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit { int peak_pos; + ret = LIBLTE_ERROR; + if (peak_position) { *peak_position = 0; } diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 52de7cafc..143dc04dc 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -48,13 +48,12 @@ int ue_dl_init(ue_dl_t *q, { ret = LIBLTE_ERROR; + bzero(q, sizeof(ue_dl_t)); + q->cell = cell; q->user_rnti = user_rnti; q->pkt_errors = 0; - q->pkts_total = 0; - q->nof_trials = 0; - q->sfn = 0; - q->pbch_decoded = false; + q->pkts_total = 0; if (lte_fft_init(&q->fft, q->cell.cp, q->cell.nof_prb)) { fprintf(stderr, "Error initiating FFT\n"); @@ -144,7 +143,7 @@ void ue_dl_free(ue_dl_t *q) { LIBLTE_API float mean_exec_time=0; int frame_cnt=0; -int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16_t rnti) +int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32_t sfn, uint16_t rnti) { uint32_t cfi, cfi_distance, i; ra_pdsch_t ra_dl; @@ -154,7 +153,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16 uint16_t crc_rem; dci_format_t format; int ret = LIBLTE_ERROR; - cf_t *ce_slot1[MAX_PORTS]; struct timeval t[3]; /* Run FFT for all subframe data */ @@ -164,134 +162,108 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16 /* Get channel estimates for each port */ chest_ce_sf(&q->chest, q->sf_symbols, q->ce, sf_idx); - + gettimeofday(&t[2], NULL); get_time_interval(t); mean_exec_time = (float) VEC_CMA((float) t[0].tv_usec, mean_exec_time, frame_cnt); + frame_cnt++; - for (int i=0;ice[i][SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp)]; + + /* First decode PCFICH and obtain CFI */ + if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, sf_idx, &cfi, &cfi_distance)<0) { + fprintf(stderr, "Error decoding PCFICH\n"); + return LIBLTE_ERROR; } - /* Decode PBCH if not yet decoded to obtain the System Frame Number (SFN) */ - if (sf_idx == 0) { - // FIXME: There is no need to do this every frame! - pbch_decode_reset(&q->pbch); - if (pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp)], ce_slot1, NULL, NULL, &q->sfn) == 1) { - q->pbch_decoded = true; - INFO("Decoded SFN: %d\n", q->sfn); - } else { - INFO("Not decoded MIB (SFN: %d)\n", q->sfn); - q->sfn++; - if (q->sfn == 4) { - q->sfn = 0; - } - } + INFO("Decoded CFI=%d with distance %d\n", cfi, cfi_distance); + + if (regs_set_cfi(&q->regs, cfi)) { + fprintf(stderr, "Error setting CFI\n"); + return LIBLTE_ERROR; + } + + /* Generate PDCCH candidates */ + if (rnti == SIRNTI) { + nof_locations = pdcch_common_locations(&q->pdcch, locations, 10, cfi); + format = Format1A; + } else { + nof_locations = pdcch_ue_locations(&q->pdcch, locations, 10, sf_idx, cfi, q->user_rnti); + format = Format1; + } + + crc_rem = 0; + for (i=0;ipdcch, q->sf_symbols, q->ce, locations[i], sf_idx, cfi)) { + fprintf(stderr, "Error extracting LLRs\n"); + return LIBLTE_ERROR; + } + if (pdcch_decode_msg(&q->pdcch, &dci_msg, format, &crc_rem)) { + fprintf(stderr, "Error decoding DCI msg\n"); + return LIBLTE_ERROR; + } + INFO("Decoded DCI message RNTI: 0x%x\n", crc_rem); } - /* If we are looking for SI Blocks, search only in appropiate places */ - if (((rnti == SIRNTI && (q->sfn % 2) == 0 && sf_idx == 5) || - rnti != SIRNTI)) - { - /* First decode PCFICH and obtain CFI */ - if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, sf_idx, &cfi, &cfi_distance)<0) { - fprintf(stderr, "Error decoding PCFICH\n"); + if (crc_rem == rnti) { + printf("Hem trobat\n"); + if (dci_msg_to_ra_dl(&dci_msg, rnti, q->user_rnti, q->cell, cfi, &ra_dl)) { + fprintf(stderr, "Error unpacking PDSCH scheduling DCI message\n"); return LIBLTE_ERROR; } - INFO("Decoded CFI=%d with distance %d\n", cfi, cfi_distance); - - if (regs_set_cfi(&q->regs, cfi)) { - fprintf(stderr, "Error setting CFI\n"); - return LIBLTE_ERROR; - } - - /* Generate PDCCH candidates */ + uint32_t rvidx; if (rnti == SIRNTI) { - nof_locations = pdcch_common_locations(&q->pdcch, locations, 10, cfi); - format = Format1A; + switch((sfn%8)/2) { + case 0: + rvidx = 0; + break; + case 1: + rvidx = 2; + break; + case 2: + rvidx = 3; + break; + case 3: + rvidx = 1; + break; + } } else { - nof_locations = pdcch_ue_locations(&q->pdcch, locations, 10, sf_idx, cfi, q->user_rnti); - format = Format1; + rvidx = ra_dl.rv_idx; } - - - crc_rem = 0; - for (i=0;ipdcch, q->sf_symbols, q->ce, locations[i], sf_idx, cfi)) { - fprintf(stderr, "Error extracting LLRs\n"); + + if (rvidx == 0) { + if (pdsch_harq_setup(&q->harq_process[0], ra_dl.mcs, &ra_dl.prb_alloc)) { + fprintf(stderr, "Error configuring HARQ process\n"); return LIBLTE_ERROR; } - if (pdcch_decode_msg(&q->pdcch, &dci_msg, format, &crc_rem)) { - fprintf(stderr, "Error decoding DCI msg\n"); - return LIBLTE_ERROR; - } - INFO("Decoded DCI message RNTI: 0x%x\n", crc_rem); } - - if (crc_rem == rnti) { - if (dci_msg_to_ra_dl(&dci_msg, rnti, q->user_rnti, q->cell, cfi, &ra_dl)) { - fprintf(stderr, "Error unpacking PDSCH scheduling DCI message\n"); - return LIBLTE_ERROR; - } - - uint32_t rvidx; - if (rnti == SIRNTI) { - switch((q->sfn%8)/2) { - case 0: - rvidx = 0; - break; - case 1: - rvidx = 2; - break; - case 2: - rvidx = 3; - break; - case 3: - rvidx = 1; - break; - } - } else { - rvidx = ra_dl.rv_idx; - } - - if (rvidx == 0) { - if (pdsch_harq_setup(&q->harq_process[0], ra_dl.mcs, &ra_dl.prb_alloc)) { - fprintf(stderr, "Error configuring HARQ process\n"); - return LIBLTE_ERROR; - } - } - if (q->harq_process[0].mcs.mod > 0) { - ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, data, sf_idx, - &q->harq_process[0], rvidx); - if (ret == LIBLTE_ERROR) { - if (rnti == SIRNTI && rvidx == 1) { - q->pkt_errors++; - } else if (rnti != SIRNTI) { - q->pkt_errors++; - } - } else if (ret == LIBLTE_ERROR_INVALID_INPUTS) { - fprintf(stderr, "Error calling pdsch_decode()\n"); - return LIBLTE_ERROR; - } else if (ret == LIBLTE_SUCCESS) { - if (VERBOSE_ISINFO()) { - INFO("Decoded Message: ", 0); - vec_fprint_hex(stdout, data, ra_dl.mcs.tbs); - } - } + if (q->harq_process[0].mcs.mod > 0) { + ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, data, sf_idx, + &q->harq_process[0], rvidx); + if (ret == LIBLTE_ERROR) { if (rnti == SIRNTI && rvidx == 1) { - q->pkts_total++; + q->pkt_errors++; } else if (rnti != SIRNTI) { - q->pkts_total++; + q->pkt_errors++; + } + } else if (ret == LIBLTE_ERROR_INVALID_INPUTS) { + fprintf(stderr, "Error calling pdsch_decode()\n"); + return LIBLTE_ERROR; + } else if (ret == LIBLTE_SUCCESS) { + if (VERBOSE_ISINFO()) { + INFO("Decoded Message: ", 0); + vec_fprint_hex(stdout, data, ra_dl.mcs.tbs); } } - } - if (rnti == SIRNTI && (q->sfn%8) == 0) { - q->nof_trials++; + if (rnti == SIRNTI && rvidx == 1) { + q->pkts_total++; + } else if (rnti != SIRNTI) { + q->pkts_total++; + } } } - + if (crc_rem == rnti && ret == LIBLTE_SUCCESS) { return ra_dl.mcs.tbs; } else { diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 95c15103b..9530d48ba 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -36,56 +36,61 @@ #include "liblte/phy/utils/debug.h" #include "liblte/phy/utils/vector.h" -#define FIND_FFTSIZE 128 -#define FIND_SFLEN 5*SF_LEN(FIND_FFTSIZE) - #define MIB_FIND_THRESHOLD 0.0 int ue_mib_init(ue_mib_t * q, uint32_t cell_id, lte_cp_t cp) +{ + lte_cell_t cell; + cell.nof_ports = MIB_MAX_PORTS; + cell.nof_prb = 6; + cell.id = cell_id; + cell.cp = cp; + return ue_mib_init_known_cell(q, cell, true); +} + + int ue_mib_init_known_cell(ue_mib_t * q, + lte_cell_t cell, + bool do_sync) { int ret = LIBLTE_ERROR_INVALID_INPUTS; - if (q != NULL) { + if (q != NULL && + cell.nof_ports <= MIB_MAX_PORTS) + { ret = LIBLTE_ERROR; - - lte_cell_t cell; - cell.nof_ports = MIB_NOF_PORTS; - cell.nof_prb = 6; - cell.id = cell_id; - cell.cp = cp; - - q->cell_id = cell_id; bzero(q, sizeof(ue_mib_t)); - q->slot1_symbols = malloc(SLOT_LEN_RE(6, cp) * sizeof(cf_t)); + q->slot1_symbols = vec_malloc(SLOT_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); if (!q->slot1_symbols) { perror("malloc"); goto clean_exit; } - for (int i=0;ice[i] = malloc(SLOT_LEN_RE(6, cp) * sizeof(cf_t)); + for (int i=0;ice[i] = vec_malloc(SLOT_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); if (!q->ce[i]) { perror("malloc"); goto clean_exit; } } - if (sync_init(&q->sfind, FIND_SFLEN, FIND_FFTSIZE)) { - goto clean_exit; + if (do_sync) { + if (sync_init(&q->sfind, 5*SF_LEN_PRB(cell.nof_prb), lte_symbol_sz(cell.nof_prb))) { + goto clean_exit; + } + + sync_set_threshold(&q->sfind, MIB_FIND_THRESHOLD); + sync_sss_en(&q->sfind, true); + sync_set_N_id_2(&q->sfind, cell.id % 3); + sync_cp_en(&q->sfind, false); + sync_set_cp(&q->sfind, cell.cp); } - sync_set_threshold(&q->sfind, MIB_FIND_THRESHOLD); - sync_sss_en(&q->sfind, true); - sync_set_N_id_2(&q->sfind, cell_id % 3); - sync_cp_en(&q->sfind, false); - sync_set_cp(&q->sfind, cp); - - if (lte_fft_init(&q->fft, cp, cell.nof_prb)) { + if (lte_fft_init(&q->fft, cell.cp, cell.nof_prb)) { fprintf(stderr, "Error initializing FFT\n"); goto clean_exit; } @@ -114,7 +119,7 @@ void ue_mib_free(ue_mib_t * q) if (q->slot1_symbols) { free(q->slot1_symbols); } - for (int i=0;ice[i]) { free(q->ce[i]); } @@ -139,13 +144,14 @@ void ue_mib_set_threshold(ue_mib_t * q, float threshold) sync_set_threshold(&q->sfind, threshold); } -static int mib_decoder_run(ue_mib_t * q, cf_t *input) +int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, + uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { int ret = LIBLTE_SUCCESS; /* Run FFT for the slot symbols */ lte_fft_run_slot(&q->fft, input, q->slot1_symbols); - + /* Get channel estimates of slot #1 for each port */ ret = chest_ce_slot(&q->chest, q->slot1_symbols, q->ce, 1); if (ret < 0) { @@ -162,9 +168,9 @@ static int mib_decoder_run(ue_mib_t * q, cf_t *input) } /* Decode PBCH */ - ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); + ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, bch_payload, nof_tx_ports, sfn_offset); if (ret < 0) { - fprintf(stderr, "Error decoding PBCH\n"); + fprintf(stderr, "Error decoding PBCH (%d)\n", ret); } else if (ret == 1) { INFO("MIB decoded: %u\n", q->frame_cnt/2); ue_mib_reset(q); @@ -176,6 +182,7 @@ static int mib_decoder_run(ue_mib_t * q, cf_t *input) } return ret; } + int counter1=0,counter2=0,counter3=0,counter4=0; void ue_mib_get_payload(ue_mib_t *q, @@ -192,9 +199,9 @@ void ue_mib_get_payload(ue_mib_t *q, } } -int ue_mib_decode(ue_mib_t * q, - cf_t *signal, - uint32_t nsamples) +int ue_mib_sync_and_decode(ue_mib_t * q, + cf_t *signal, + uint32_t nsamples) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t peak_idx=0; @@ -204,23 +211,23 @@ int ue_mib_decode(ue_mib_t * q, if (q != NULL && signal != NULL) { - if (nsamples < MIB_FRAME_SIZE) { - fprintf(stderr, "Error: nsamples must be greater than %d\n", MIB_FRAME_SIZE); + if (nsamples < MIB_FRAME_SIZE_SEARCH) { + fprintf(stderr, "Error: nsamples must be greater than %d\n", MIB_FRAME_SIZE_SEARCH); return LIBLTE_ERROR; } ret = LIBLTE_SUCCESS; - if (nsamples % MIB_FRAME_SIZE) { - printf("Warning: nsamples must be a multiple of %d. Some samples will be ignored\n", MIB_FRAME_SIZE); - nsamples = (nsamples/MIB_FRAME_SIZE) * MIB_FRAME_SIZE; + if (nsamples % MIB_FRAME_SIZE_SEARCH) { + printf("Warning: nsamples must be a multiple of %d. Some samples will be ignored\n", MIB_FRAME_SIZE_SEARCH); + nsamples = (nsamples/MIB_FRAME_SIZE_SEARCH) * MIB_FRAME_SIZE_SEARCH; } - nof_input_frames = nsamples/MIB_FRAME_SIZE; + nof_input_frames = nsamples/MIB_FRAME_SIZE_SEARCH; for (uint32_t nf=0;nfsfind, signal, nf*MIB_FRAME_SIZE, &peak_idx); + ret = sync_find(&q->sfind, signal, nf*MIB_FRAME_SIZE_SEARCH, &peak_idx); if (ret < 0) { fprintf(stderr, "Error finding correlation peak (%d)\n", ret); return -1; @@ -234,15 +241,15 @@ int ue_mib_decode(ue_mib_t * q, /* Check if we have space for reading the MIB and we are in Subframe #0 */ if (ret == 1 && - nf*MIB_FRAME_SIZE + peak_idx + 960 <= nsamples && + nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 <= nsamples && sync_sss_detected(&q->sfind) && sync_get_sf_idx(&q->sfind) == 0) { INFO("Trying to decode MIB\n",0); - ret = mib_decoder_run(q, &signal[nf*MIB_FRAME_SIZE+peak_idx]); + ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx], q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); counter3++; } else if ((ret == LIBLTE_SUCCESS && peak_idx != 0) || - (ret == 1 && nf*MIB_FRAME_SIZE + peak_idx + 960 > nsamples)) + (ret == 1 && nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 > nsamples)) { printf("Not enough space for PBCH\n",0); ret = MIB_FRAME_UNALIGNED; diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index f2e03bc00..176ba6c26 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -68,7 +68,7 @@ int ue_sync_init(ue_sync_t *q, ue_sync_reset(q); - q->decode_sss_on_track = false; + q->decode_sss_on_track = true; q->stream = stream_handler; q->recv_callback = recv_callback; q->cell = cell; @@ -113,6 +113,10 @@ clean_exit: return ret; } +uint32_t ue_sync_sf_len(ue_sync_t *q) { + return CURRENT_SFLEN; +} + void ue_sync_free(ue_sync_t *q) { if (q->input_buffer) { free(q->input_buffer); From 61ebfaf3b21c9bec7e6a46a217b591f96bce6fee Mon Sep 17 00:00:00 2001 From: ismagom Date: Wed, 5 Nov 2014 13:19:35 +0000 Subject: [PATCH 16/55] Testing CH est --- CMakeLists.txt | 2 +- cmake/modules/BuildMex.cmake | 65 + cmake/modules/CheckFunctionExists.c | 8 +- cmake/modules/FindMATLAB.cmake | 212 +++ cmake/modules/FindOCTAVE.cmake | 138 ++ cmake/modules/FindVolk.cmake | 1 + .../liblte/phy/ch_estimation/chest_dl.h | 105 ++ .../liblte/phy/ch_estimation/refsignal.h | 2 +- .../liblte/phy/ch_estimation/refsignal_dl.h | 87 ++ .../include/liblte/phy/common/phy_common.h | 8 + lte/phy/include/liblte/phy/common/sequence.h | 3 + lte/phy/include/liblte/phy/filter/filter2d.h | 43 +- lte/phy/include/liblte/phy/phy.h | 2 + .../include/liblte/phy/resampling/interp.h | 4 + lte/phy/include/liblte/phy/utils/vector.h | 6 +- lte/phy/lib/ch_estimation/src/chest.c | 2 +- lte/phy/lib/ch_estimation/src/chest_dl.c | 317 +++++ lte/phy/lib/ch_estimation/src/refsignal_dl.c | 246 ++++ lte/phy/lib/ch_estimation/test/CMakeLists.txt | 13 + .../lib/ch_estimation/test/chest_test_dl.c | 38 +- .../ch_estimation/test/chest_test_dl_mex.c | 180 +++ .../test/chest_test_dl_mex.mexa64 | Bin 0 -> 12713 bytes lte/phy/lib/common/src/phy_common.c | 40 +- lte/phy/lib/common/src/sequence.c | 5 +- lte/phy/lib/filter/src/filter2d.c | 99 +- lte/phy/lib/mimo/src/precoding.c | 5 +- lte/phy/lib/resampling/src/interp.c | 24 +- lte/phy/lib/utils/src/vector.c | 25 +- matlab/tests/equalizer_test.m | 213 +++ matlab/tests/lteDLChannelEstimate2.m | 1202 ++++++++++++++++ matlab/tests/lteDLChannelEstimate3.m | 1204 +++++++++++++++++ 31 files changed, 4215 insertions(+), 84 deletions(-) create mode 100644 cmake/modules/BuildMex.cmake create mode 100644 cmake/modules/FindMATLAB.cmake create mode 100644 cmake/modules/FindOCTAVE.cmake create mode 100644 lte/phy/include/liblte/phy/ch_estimation/chest_dl.h create mode 100644 lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h create mode 100644 lte/phy/lib/ch_estimation/src/chest_dl.c create mode 100644 lte/phy/lib/ch_estimation/src/refsignal_dl.c create mode 100644 lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c create mode 100755 lte/phy/lib/ch_estimation/test/chest_test_dl_mex.mexa64 create mode 100644 matlab/tests/equalizer_test.m create mode 100644 matlab/tests/lteDLChannelEstimate2.m create mode 100644 matlab/tests/lteDLChannelEstimate3.m diff --git a/CMakeLists.txt b/CMakeLists.txt index 58d95f281..9c166e60e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,7 @@ PROJECT (LIBLTE) LIST(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules") INCLUDE(libLTEPackage) #setup cpack +INCLUDE(BuildMex) include(CTest) set( CTEST_MEMORYCHECK_COMMAND valgrind ) @@ -140,7 +141,6 @@ MACRO (APPEND_INTERNAL_LIST LIST_NAME VALUE) ENDIF (${LIST_NAME}) ENDMACRO (APPEND_INTERNAL_LIST) - ######################################################################## # Print summary ######################################################################## diff --git a/cmake/modules/BuildMex.cmake b/cmake/modules/BuildMex.cmake new file mode 100644 index 000000000..124e149a8 --- /dev/null +++ b/cmake/modules/BuildMex.cmake @@ -0,0 +1,65 @@ +# BuildMex.cmake +# Author: Kent Williams norman-k-williams at uiowa.edu +# Modified by Ismael Gomez, 2014 + +include(CMakeParseArguments) + +if(NOT MATLAB_FOUND) + find_package(MATLAB) +endif() + +if(NOT OCTAVE_FOUND) + find_package(OCTAVE) +endif() + +# CMake 2.8.12 & earlier apparently don't define the +# Mex script path, so find it. +if(NOT MATLAB_MEX_PATH) + find_program( MATLAB_MEX_PATH mex + HINTS ${MATLAB_ROOT}/bin + PATHS ${MATLAB_ROOT}/bin + DOC "The mex program path" + ) +endif() + +IF (MATLAB_FOUND) + message(STATUS "Found MATLAB in ${MATLAB_ROOT}") +ELSE(MATLAB_FOUND) + message(STATUS "Could NOT find MATLAB. MEX files won't be compiled") +ENDIF(MATLAB_FOUND) + +# +# BuildMex -- arguments +# MEXNAME = root of mex library name +# SOURCE = list of source files +# LIBRARIES = libraries needed to link mex library +FUNCTION(BuildMex) + set(oneValueArgs MEXNAME) + set(multiValueArgs SOURCES LIBRARIES) + cmake_parse_arguments(BuildMex "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (MATLAB_FOUND) + add_library(${BuildMex_MEXNAME}-mat SHARED ${BuildMex_SOURCES}) + target_include_directories(${BuildMex_MEXNAME}-mat PUBLIC ${MATLAB_INCLUDE_DIR}) + set_target_properties(${BuildMex_MEXNAME}-mat PROPERTIES + SUFFIX "${MATLAB_MEX_EXTENSION}" + PREFIX "liblte_" + OUTPUT_NAME "${BuildMex_MEXNAME}" + COMPILE_FLAGS "-fvisibility=default ${MATLAB_MEX_CFLAGS}" + ) + target_link_libraries(${BuildMex_MEXNAME}-mat ${BuildMex_LIBRARIES} ${MATLAB_MEX_LIBRARY}) + install(TARGETS ${BuildMex_MEXNAME}-mat DESTINATION mex) + endif(MATLAB_FOUND) + if (OCTAVE_FOUND) + add_library(${BuildMex_MEXNAME}-oct SHARED ${BuildMex_SOURCES}) + target_include_directories(${BuildMex_MEXNAME}-oct PUBLIC ${OCTAVE_INCLUDE_DIR}) + set_target_properties(${BuildMex_MEXNAME}-oct PROPERTIES + SUFFIX ".${OCTAVE_MEXFILE_EXT}" + PREFIX "liblte_" + OUTPUT_NAME "${BuildMex_MEXNAME}" + COMPILE_FLAGS "-fvisibility=default ${OCTAVE_MEX_CFLAGS} -DUNDEF_BOOL" + ) + target_link_libraries(${BuildMex_MEXNAME}-oct ${BuildMex_LIBRARIES} ${OCTAVE_LIBRARIES}) + install(TARGETS ${BuildMex_MEXNAME}-oct DESTINATION mex) + endif (OCTAVE_FOUND) +ENDFUNCTION(BuildMex) + diff --git a/cmake/modules/CheckFunctionExists.c b/cmake/modules/CheckFunctionExists.c index 1fbdf9c53..314263dbf 100644 --- a/cmake/modules/CheckFunctionExists.c +++ b/cmake/modules/CheckFunctionExists.c @@ -1,13 +1,13 @@ #ifdef CHECK_FUNCTION_EXISTS -uint8_t CHECK_FUNCTION_EXISTS(); +char CHECK_FUNCTION_EXISTS(); #ifdef __CLASSIC_C__ int main(){ int ac; - uint8_t*av[]; + char*av[]; #else -int main(int ac, uint8_t*av[]){ - +int main(int ac, char*av[]){ + #endif float ac2 = sqrtf(rand()); CHECK_FUNCTION_EXISTS(); diff --git a/cmake/modules/FindMATLAB.cmake b/cmake/modules/FindMATLAB.cmake new file mode 100644 index 000000000..a8218f8ba --- /dev/null +++ b/cmake/modules/FindMATLAB.cmake @@ -0,0 +1,212 @@ +# - this module looks for Matlab +# Defines: +# MATLAB_INCLUDE_DIR: include path for mex.h, engine.h +# MATLAB_LIBRARIES: required libraries: libmex, etc +# MATLAB_MEX_LIBRARY: path to libmex.lib +# MATLAB_MX_LIBRARY: path to libmx.lib +# MATLAB_MAT_LIBRARY: path to libmat.lib # added +# MATLAB_ENG_LIBRARY: path to libeng.lib +# MATLAB_ROOT: path to Matlab's root directory + +# This file is part of Gerardus +# +# This is a derivative work of file FindMatlab.cmake released with +# CMake v2.8, because the original seems to be a bit outdated and +# doesn't work with my Windows XP and Visual Studio 10 install +# +# (Note that the original file does work for Ubuntu Natty) +# +# Author: Ramon Casero , Tom Doel +# Version: 0.2.3 +# $Rev$ +# $Date$ +# +# The original file was copied from an Ubuntu Linux install +# /usr/share/cmake-2.8/Modules/FindMatlab.cmake + +set(MATLAB_FOUND 0) +if(WIN32) + # Search for a version of Matlab available, starting from the most modern one to older versions + foreach(MATVER "7.14" "7.11" "7.10" "7.9" "7.8" "7.7" "7.6" "7.5" "7.4") + if((NOT DEFINED MATLAB_ROOT) + OR ("${MATLAB_ROOT}" STREQUAL "") + OR ("${MATLAB_ROOT}" STREQUAL "/registry")) + get_filename_component(MATLAB_ROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${MATVER};MATLABROOT]" + ABSOLUTE) + set(MATLAB_VERSION ${MATVER}) + endif() + endforeach() + + # Directory name depending on whether the Windows architecture is 32 + # bit or 64 bit + set(CMAKE_SIZEOF_VOID_P 8) # Note: For some wierd reason this variable is undefined in my system... + if(CMAKE_SIZEOF_VOID_P MATCHES "4") + set(WINDIR "win32") + elseif(CMAKE_SIZEOF_VOID_P MATCHES "8") + set(WINDIR "win64") + else() + message(FATAL_ERROR "CMAKE_SIZEOF_VOID_P (${CMAKE_SIZEOF_VOID_P}) doesn't indicate a valid platform") + endif() + + # Folder where the MEX libraries are, depending of the Windows compiler + if(${CMAKE_GENERATOR} MATCHES "Visual Studio 6") + set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc60") + elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio 7") + # Assume people are generally using Visual Studio 7.1, + # if using 7.0 need to link to: ../extern/lib/${WINDIR}/microsoft/msvc70 + set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc71") + # set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/msvc70") + elseif(${CMAKE_GENERATOR} MATCHES "Borland") + # Assume people are generally using Borland 5.4, + # if using 7.0 need to link to ../extern/lib/${WINDIR}/microsoft/msvc70 + set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc54") + # set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc50") + # set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/bcc51") + elseif(${CMAKE_GENERATOR} MATCHES "Visual Studio*") + # If the compiler is Visual Studio, but not any of the specific + # versions above, we try our luck with the microsoft directory + set(MATLAB_LIBRARIES_DIR "${MATLAB_ROOT}/extern/lib/${WINDIR}/microsoft/") + else() + message(FATAL_ERROR "Generator not compatible: ${CMAKE_GENERATOR}") + endif() + + # Get paths to the Matlab MEX libraries + find_library(MATLAB_MEX_LIBRARY libmex ${MATLAB_LIBRARIES_DIR} ) + find_library(MATLAB_MX_LIBRARY libm ${MATLAB_LIBRARIES_DIR} ) + find_library(MATLAB_MAT_LIBRARY libmat ${MATLAB_LIBRARIES_DIR} ) + find_library(MATLAB_ENG_LIBRARY libeng ${MATLAB_LIBRARIES_DIR} ) + + # Get path to the include directory + find_path(MATLAB_INCLUDE_DIR "mex.h" "${MATLAB_ROOT}/extern/include" ) + +else() + + if((NOT DEFINED MATLAB_ROOT) + OR ("${MATLAB_ROOT}" STREQUAL "")) + # get path to the Matlab root directory + execute_process( + COMMAND which matlab + COMMAND xargs readlink + COMMAND xargs dirname + COMMAND xargs dirname + COMMAND xargs echo -n + OUTPUT_VARIABLE MATLAB_ROOT + ) + endif() + + # Check if this is a Mac + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + + set(LIBRARY_EXTENSION .dylib) + + # If this is a Mac and the attempts to find MATLAB_ROOT have so far failed, + # we look in the applications folder + if((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL "")) + + # Search for a version of Matlab available, starting from the most modern one to older versions + foreach(MATVER "R2013b" "R2013a" "R2012b" "R2012a" "R2011b" "R2011a" "R2010b" "R2010a" "R2009b" "R2009a" "R2008b") + if((NOT DEFINED MATLAB_ROOT) OR ("${MATLAB_ROOT}" STREQUAL "")) + if(EXISTS /Applications/MATLAB_${MATVER}.app) + set(MATLAB_ROOT /Applications/MATLAB_${MATVER}.app) + endif() + endif() + endforeach() + endif() + + else() + set(LIBRARY_EXTENSION .so) + endif() + + # Get path to the MEX libraries + execute_process( + #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmex${LIBRARY_EXTENSION} # Peter + COMMAND find "${MATLAB_ROOT}/bin" -name libmex${LIBRARY_EXTENSION} # standard + COMMAND xargs echo -n + OUTPUT_VARIABLE MATLAB_MEX_LIBRARY + ) + execute_process( + #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmx${LIBRARY_EXTENSION} # Peter + COMMAND find "${MATLAB_ROOT}/bin" -name libmx${LIBRARY_EXTENSION} # Standard + COMMAND xargs echo -n + OUTPUT_VARIABLE MATLAB_MX_LIBRARY + ) + execute_process( + #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libmat${LIBRARY_EXTENSION} # Peter + COMMAND find "${MATLAB_ROOT}/bin" -name libmat${LIBRARY_EXTENSION} # Standard + COMMAND xargs echo -n + OUTPUT_VARIABLE MATLAB_MAT_LIBRARY + ) + execute_process( + #COMMAND find "${MATLAB_ROOT}/extern/lib" -name libeng${LIBRARY_EXTENSION} # Peter + COMMAND find "${MATLAB_ROOT}/bin" -name libeng${LIBRARY_EXTENSION} # Standard + COMMAND xargs echo -n + OUTPUT_VARIABLE MATLAB_ENG_LIBRARY + ) + + # Get path to the include directory + find_path(MATLAB_INCLUDE_DIR + "mex.h" + PATHS "${MATLAB_ROOT}/extern/include" + ) + + find_program( MATLAB_MEX_PATH mex + HINTS ${MATLAB_ROOT}/bin + PATHS ${MATLAB_ROOT}/bin + DOC "The mex program path" + ) + + find_program( MATLAB_MEXEXT_PATH mexext + HINTS ${MATLAB_ROOT}/bin + PATHS ${MATLAB_ROOT}/bin + DOC "The mexext program path" + ) + + execute_process( + COMMAND ${MATLAB_MEXEXT_PATH} + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE MATLAB_MEX_EXT + ) + +endif() + +# This is common to UNIX and Win32: +set(MATLAB_LIBRARIES + ${MATLAB_MEX_LIBRARY} + ${MATLAB_MX_LIBRARY} + ${MATLAB_ENG_LIBRARY} +) + +if(MATLAB_INCLUDE_DIR AND MATLAB_LIBRARIES) + set(MATLAB_FOUND 1) +endif() + +# 32-bit or 64-bit mex +if(WIN32) + if (CMAKE_CL_64) + SET(MATLAB_MEX_EXTENSION .mexw64) + else(CMAKE_CL_64) + SET(MATLAB_MEX_EXTENSION .mexw32) + endif(CMAKE_CL_64) +else(WIN32) + if (CMAKE_SIZEOF_VOID_P MATCHES "8") + SET(MATLAB_MEX_EXTENSION .mexa64) + else(CMAKE_SIZEOF_VOID_P MATCHES "8") + SET(MATLAB_MEX_EXTENSION .mexglx) + endif (CMAKE_SIZEOF_VOID_P MATCHES "8") +endif(WIN32) + +SET(MATLAB_MEX_CFLAGS "-DMATLAB_MEX_FILE -DMX_COMPAT_32") + +mark_as_advanced( + MATLAB_LIBRARIES + MATLAB_MEX_LIBRARY + MATLAB_MX_LIBRARY + MATLAB_ENG_LIBRARY + MATLAB_INCLUDE_DIR + MATLAB_FOUND + MATLAB_ROOT + MATLAB_MEX_PATH + MATLAB_MEXEXT_PATH + MATLAB_MEX_EXT +) + diff --git a/cmake/modules/FindOCTAVE.cmake b/cmake/modules/FindOCTAVE.cmake new file mode 100644 index 000000000..63a43d740 --- /dev/null +++ b/cmake/modules/FindOCTAVE.cmake @@ -0,0 +1,138 @@ +# - Try to find a version of Octave and headers/library required by the +# used compiler. It determines the right MEX-File extension and add +# a macro to help the build of MEX-functions. +# +# This module defines: +# OCTAVE_INCLUDE_DIR: include path for mex.h, mexproto.h +# OCTAVE_OCTINTERP_LIBRARY: path to the library octinterp +# OCTAVE_OCTAVE_LIBRARY: path to the library octave +# OCTAVE_CRUFT_LIBRARY: path to the library cruft +# OCTAVE_LIBRARIES: required libraries: octinterp, octave, cruft +# OCTAVE_CREATE_MEX: macro to build a MEX-file +# +# The macro OCTAVE_CREATE_MEX requires in this order: +# - function's name which will be called in Octave; +# - C/C++ source files; +# - third libraries required. + +# Copyright (c) 2009-2013 Arnaud Barré +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +IF(OCTAVE_ROOT AND OCTAVE_INCLUDE_DIR AND OCTAVE_LIBRARIES) + STRING(COMPARE NOTEQUAL "${OCTAVE_ROOT}" "${OCTAVE_ROOT_LAST}" OCTAVE_CHANGED) + IF(OCTAVE_CHANGED) + SET(OCTAVE_USE_MINGW32 OCTAVE_USE_MINGW32-NOTFOUND CACHE INTERNAL "") + SET(OCTAVE_OCTAVE_LIBRARY OCTAVE_OCTAVE_LIBRARY-NOTFOUND CACHE INTERNAL "") + SET(OCTAVE_INCLUDE_DIR OCTAVE_INCLUDE_DIR-NOTFOUND CACHE INTERNAL "") + ELSE(OCTAVE_CHANGED) + # in cache already + SET(Octave_FIND_QUIETLY TRUE) + ENDIF(OCTAVE_CHANGED) +ENDIF(OCTAVE_ROOT AND OCTAVE_INCLUDE_DIR AND OCTAVE_LIBRARIES) + +SET(OCTAVE_MEXFILE_EXT mex) + +IF(WIN32) + SET(OCTAVE_PATHS_L1 ) + SET(OCTAVE_PATHS_L2 ) + # Level 0 + FILE(GLOB OCTAVE_PATHS_L0 "c:/Octave*") + # Level 1 + FOREACH(_file_ ${OCTAVE_PATHS_L0}) + FILE(GLOB OCTAVE_PATHS_TEMP "${_file_}/*") + SET(OCTAVE_PATHS_L1 ${OCTAVE_PATHS_L1};${OCTAVE_PATHS_TEMP}) + ENDFOREACH(_file_ OCTAVE_PATHS_L0) + # Level 2 + FOREACH(_file_ ${OCTAVE_PATHS_L1}) + FILE(GLOB OCTAVE_PATHS_TEMP "${_file_}/*") + SET(OCTAVE_PATHS_L2 ${OCTAVE_PATHS_L2};${OCTAVE_PATHS_TEMP}) + ENDFOREACH(_file_ OCTAVE_PATHS_L1) + # Merge levels + SET(OCTAVE_PATHS ${OCTAVE_PATHS_L0} ${OCTAVE_PATHS_L1} ${OCTAVE_PATHS_L2}) + + FIND_PATH(OCTAVE_ROOT "bin/octave.exe" ${OCTAVE_PATHS}) + FIND_PATH(OCTAVE_USE_MINGW32 "bin/mingw32-make.exe" "${OCTAVE_ROOT}/mingw32") + + IF(MSVC AND OCTAVE_USE_MINGW32) + MESSAGE(FATAL_ERROR + "You must use the generator \"MinGW Makefiles\" as the " + "version of Octave installed on your computer was compiled " + "with MinGW. You should also specify the native compiler " + "(GCC, G++ and GFortan) and add the path of MinGW in the " + "environment variable PATH. Contact the developers of the " + "project for more details") + ENDIF(MSVC AND OCTAVE_USE_MINGW32) + + FILE(GLOB OCTAVE_INCLUDE_PATHS "${OCTAVE_ROOT}/include/octave-*/octave") + FILE(GLOB OCTAVE_LIBRARIES_PATHS "${OCTAVE_ROOT}/lib/octave-*") + IF (NOT OCTAVE_LIBRARIES_PATHS) + FILE(GLOB OCTAVE_LIBRARIES_PATHS "${OCTAVE_ROOT}/lib/octave/*") + ENDIF (NOT OCTAVE_LIBRARIES_PATHS) + + # LIBOCTINTERP, LIBOCTAVE, LIBCRUFT names + SET(LIBOCTAVE "liboctave") + +ELSE(WIN32) + IF(APPLE) + FILE(GLOB OCTAVE_PATHS "/Applications/Octave*") + FIND_PATH(OCTAVE_ROOT "Contents/Resources/bin/octave" ${OCTAVE_PATHS}) + + FILE(GLOB OCTAVE_INCLUDE_PATHS "${OCTAVE_ROOT}/Contents/Resources/include/octave-*/octave") + FILE(GLOB OCTAVE_LIBRARIES_PATHS "${OCTAVE_ROOT}/Contents/Resources/lib/octave-*") + + SET(LIBOCTAVE "liboctave.dylib") + ELSE(APPLE) + FILE(GLOB OCTAVE_LOCAL_PATHS "/usr/local/lib/octave-*") + FILE(GLOB OCTAVE_USR_PATHS "/usr/lib/octave-*") + FILE(GLOB OCTAVE_INCLUDE_PATHS "/usr/include/octave-*") + + SET (OCTAVE_INCLUDE_PATHS + "/usr/local/include" + "/usr/local/include/octave" + "/usr/include" + "${OCTAVE_INCLUDE_PATHS}" + "${OCTAVE_INCLUDE_PATHS}/octave") + SET (OCTAVE_LIBRARIES_PATHS + "/usr/local/lib" + "/usr/local/lib/octave" + ${OCTAVE_LOCAL_PATHS} + "/usr/lib" + "/usr/lib/octave" + ${OCTAVE_USR_PATHS}) + + SET (LIBOCTAVE "octave") + ENDIF(APPLE) +ENDIF(WIN32) + +FIND_LIBRARY(OCTAVE_OCTAVE_LIBRARY + ${LIBOCTAVE} + ${OCTAVE_LIBRARIES_PATHS} + ) +FIND_PATH(OCTAVE_INCLUDE_DIR + "mex.h" + ${OCTAVE_INCLUDE_PATHS} + ) + +SET(OCTAVE_ROOT_LAST "${OCTAVE_ROOT}" CACHE INTERNAL "" FORCE) + +# This is common to UNIX and Win32: +SET(OCTAVE_LIBRARIES + ${OCTAVE_OCTAVE_LIBRARY} + CACHE INTERNAL "Octave libraries" FORCE +) + +INCLUDE(FindPackageHandleStandardArgs) + +# The variable OCTAVE_ROOT is only relevant for WIN32 +IF(WIN32) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Octave DEFAULT_MSG OCTAVE_ROOT OCTAVE_INCLUDE_DIR OCTAVE_OCTAVE_LIBRARY ) +ELSE(WIN32) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(Octave DEFAULT_MSG OCTAVE_INCLUDE_DIR OCTAVE_OCTAVE_LIBRARY ) +ENDIF(WIN32) + +MARK_AS_ADVANCED( + OCTAVE_OCTAVE_LIBRARY + OCTAVE_LIBRARIES + OCTAVE_INCLUDE_DIR +) \ No newline at end of file diff --git a/cmake/modules/FindVolk.cmake b/cmake/modules/FindVolk.cmake index 5861f1232..eff504408 100644 --- a/cmake/modules/FindVolk.cmake +++ b/cmake/modules/FindVolk.cmake @@ -35,6 +35,7 @@ CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_multiply_conjugate_32fc HAVE_VOLK_MULT2_ CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_multiply_32fc HAVE_VOLK_MULT_REAL_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_multiply_32f HAVE_VOLK_MULT_FLOAT_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_32f HAVE_VOLK_MAG_FUNCTION) +CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_square_32f HAVE_VOLK_MAG_SQUARE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_divide_32f HAVE_VOLK_DIVIDE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_dot_prod_32fc HAVE_VOLK_DOTPROD_FC_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_conjugate_dot_prod_32fc HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION) diff --git a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h new file mode 100644 index 000000000..c1f3d23ca --- /dev/null +++ b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h @@ -0,0 +1,105 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + + +#ifndef CHEST_DL_ +#define CHEST_DL_ + +#include + +#include "liblte/config.h" + +#include "liblte/phy/resampling/interp.h" +#include "liblte/phy/filter/filter2d.h" +#include "liblte/phy/ch_estimation/refsignal_dl.h" +#include "liblte/phy/common/phy_common.h" + +#define CHEST_RS_AVERAGE_TIME 0 +#define CHEST_RS_AVERAGE_FREQ 3 + + + +/** 3GPP LTE Downlink channel estimator and equalizer. + * Estimates the channel in the resource elements transmitting references and interpolates for the rest + * of the resource grid. + * + * The equalizer uses the channel estimates to produce an estimation of the transmitted symbol. + * + * This object depends on the refsignal_t object for creating the LTE CSR signal. +*/ + +typedef struct { + lte_cell_t cell; + refsignal_cs_t csr_signal; + cf_t *pilot_estimates[MAX_PORTS]; + cf_t *pilot_recv_signal[MAX_PORTS]; + cf_t *pilot_symbol_avg; + + interp_t interp_time[MAX_PORTS]; + interp_t interp_freq[MAX_PORTS]; + + float rssi; + float rsrq; + float rsrp; +} chest_dl_t; + + +LIBLTE_API int chest_dl_init(chest_dl_t *q, + lte_cell_t cell); + +LIBLTE_API void chest_dl_free(chest_dl_t *q); + +LIBLTE_API int chest_dl_estimate(chest_dl_t *q, + cf_t *input, + cf_t *ce[MAX_PORTS], + uint32_t sf_idx); + +LIBLTE_API int chest_dl_estimate_port(chest_dl_t *q, + cf_t *input, + cf_t *ce, + uint32_t sf_idx, + uint32_t port_id); + +LIBLTE_API int chest_dl_equalize_zf(chest_dl_t *q, + cf_t *input, + cf_t *ce[MAX_PORTS], + cf_t *output); + +LIBLTE_API int chest_dl_equalize_mmse(chest_dl_t *q, + cf_t *input, + cf_t *ce[MAX_PORTS], + float *noise_estimate, + cf_t *output); + +LIBLTE_API float chest_dl_get_rssi(chest_dl_t *q); + +LIBLTE_API float chest_dl_get_rsrq(chest_dl_t *q); + +LIBLTE_API float chest_dl_get_rsrp(chest_dl_t *q); + +#endif \ No newline at end of file diff --git a/lte/phy/include/liblte/phy/ch_estimation/refsignal.h b/lte/phy/include/liblte/phy/ch_estimation/refsignal.h index e237c021a..6efb85fa9 100644 --- a/lte/phy/include/liblte/phy/ch_estimation/refsignal.h +++ b/lte/phy/include/liblte/phy/ch_estimation/refsignal.h @@ -87,6 +87,6 @@ LIBLTE_API int refsignal_init_LTEUL_drms_pusch(refsignal_t *q, LIBLTE_API void refsignal_free(refsignal_t *q); LIBLTE_API int refsignal_put(refsignal_t *q, - cf_t *slot_symbols); + cf_t *slot_symbols); #endif diff --git a/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h b/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h new file mode 100644 index 000000000..6b8374572 --- /dev/null +++ b/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h @@ -0,0 +1,87 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#ifndef REFSIGNAL_DL_ +#define REFSIGNAL_DL_ + +/* Object to manage Downlink reference signals for channel estimation. + * + */ + +#include "liblte/config.h" +#include "liblte/phy/common/phy_common.h" + +typedef _Complex float cf_t; + +// Number of references in a subframe: there are 2 symbols for port_id=0,1 x 2 slots x 2 refs per prb +#define REFSIGNAL_NUM_SF(nof_prb, port_id) (((port_id)<2?8:4)*(nof_prb)) +#define REFSIGNAL_MAX_NUM_SF(nof_prb) REFSIGNAL_NUM_SF(nof_prb, 0) + +#define REFSIGNAL_PILOT_IDX(i,l,ns,cell) (2*cell.nof_prb*((l)+2*((ns)%2))+(i)) + + +/** Cell-Specific Reference Signal */ +typedef struct LIBLTE_API { + lte_cell_t cell; + cf_t *pilots[NSUBFRAMES_X_FRAME]; // save 2 reference symbols per slot +} refsignal_cs_t; + + +LIBLTE_API int refsignal_cs_generate(refsignal_cs_t *q, + lte_cell_t cell); + +LIBLTE_API void refsignal_cs_free(refsignal_cs_t *q); + +LIBLTE_API int refsignal_cs_put_sf(lte_cell_t cell, + uint32_t port_id, + uint32_t sf_idx, + cf_t *pilots, + cf_t *sf_symbols); + +LIBLTE_API int refsignal_cs_get_sf(lte_cell_t cell, + uint32_t port_id, + uint32_t sf_idx, + cf_t *sf_symbols, + cf_t *pilots); + +LIBLTE_API uint32_t refsignal_fidx(lte_cell_t cell, + uint32_t ns, + uint32_t l, + uint32_t port_id, + uint32_t m); + +LIBLTE_API uint32_t refsignal_nsymbol(lte_cell_t cell, + uint32_t ns, + uint32_t l); + +LIBLTE_API uint32_t refsignal_cs_v(uint32_t port_id, + uint32_t ns, + uint32_t symbol_id); + +LIBLTE_API uint32_t refsignal_cs_nof_symbols(uint32_t port_id); + +#endif diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index 5a4b80419..a1d7e6dd8 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -146,6 +146,14 @@ LIBLTE_API bool lte_cell_isvalid(lte_cell_t *cell); LIBLTE_API void lte_cell_fprint(FILE *stream, lte_cell_t *cell); +LIBLTE_API bool lte_cellid_isvalid(uint32_t cell_id); + +LIBLTE_API bool lte_nofprb_isvalid(uint32_t nof_prb); + +LIBLTE_API bool lte_sfidx_isvalid(uint32_t sf_idx); + +LIBLTE_API bool lte_portid_isvalid(uint32_t port_id); + LIBLTE_API bool lte_N_id_2_isvalid(uint32_t N_id_2); LIBLTE_API bool lte_N_id_1_isvalid(uint32_t N_id_1); diff --git a/lte/phy/include/liblte/phy/common/sequence.h b/lte/phy/include/liblte/phy/common/sequence.h index 183d5cddc..a220b230a 100644 --- a/lte/phy/include/liblte/phy/common/sequence.h +++ b/lte/phy/include/liblte/phy/common/sequence.h @@ -44,6 +44,9 @@ LIBLTE_API int sequence_LTE_pr(sequence_t *q, uint32_t len, uint32_t seed); +LIBLTE_API void sequence_set_LTE_pr(sequence_t *q, + uint32_t seed); + LIBLTE_API int sequence_pbch(sequence_t *seq, lte_cp_t cp, uint32_t cell_id); diff --git a/lte/phy/include/liblte/phy/filter/filter2d.h b/lte/phy/include/liblte/phy/filter/filter2d.h index afbd3b6f1..a3978145f 100644 --- a/lte/phy/include/liblte/phy/filter/filter2d.h +++ b/lte/phy/include/liblte/phy/filter/filter2d.h @@ -31,6 +31,7 @@ #define FILTER2D_ #include "liblte/config.h" +#include /* 2-D real filter of complex input * @@ -38,18 +39,42 @@ typedef _Complex float cf_t; typedef struct LIBLTE_API{ - int sztime; // Output signal size in the time domain - int szfreq; // Output signal size in the freq domain - int ntime; // 2-D Filter size in time domain - int nfreq; // 2-D Filter size in frequency domain + uint32_t sztime; // Output signal size in the time domain + uint32_t szfreq; // Output signal size in the freq domain + uint32_t ntime; // 2-D Filter size in time domain + uint32_t nfreq; // 2-D Filter size in frequency domain float **taps; // 2-D filter coefficients + float norm; //normalization factor cf_t *output; // Output signal } filter2d_t; -LIBLTE_API int filter2d_init (filter2d_t* q, float **taps, int ntime, int nfreq, int sztime, int szfreq); -LIBLTE_API int filter2d_init_default (filter2d_t* q, int ntime, int nfreq, int sztime, int szfreq); -LIBLTE_API void filter2d_free(filter2d_t *q); -LIBLTE_API void filter2d_reset(filter2d_t *q); -LIBLTE_API void filter2d_add(filter2d_t *q, cf_t h, int time_idx, int freq_idx); +LIBLTE_API int filter2d_init (filter2d_t* q, + float **taps, + uint32_t ntime, + uint32_t nfreq, + uint32_t sztime, + uint32_t szfreq); +LIBLTE_API int filter2d_init_ones (filter2d_t* q, + uint32_t ntime, + uint32_t nfreq, + uint32_t sztime, + uint32_t szfreq); + +LIBLTE_API void filter2d_free(filter2d_t *q); + +LIBLTE_API void filter2d_step(filter2d_t *q); + +LIBLTE_API void filter2d_reset(filter2d_t *q); + +LIBLTE_API void filter2d_add(filter2d_t *q, + cf_t h, + uint32_t time_idx, + uint32_t freq_idx); + +LIBLTE_API void filter2d_add_out(filter2d_t *q, cf_t x, int time_idx, int freq_idx); + +LIBLTE_API void filter2d_get_symbol(filter2d_t *q, + uint32_t nsymbol, + cf_t *output); #endif // FILTER2D_ diff --git a/lte/phy/include/liblte/phy/phy.h b/lte/phy/include/liblte/phy/phy.h index eef9eccc1..ed8152bd5 100644 --- a/lte/phy/include/liblte/phy/phy.h +++ b/lte/phy/include/liblte/phy/phy.h @@ -52,7 +52,9 @@ #include "liblte/phy/common/fft.h" #include "liblte/phy/ch_estimation/chest.h" +#include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/ch_estimation/refsignal.h" +#include "liblte/phy/ch_estimation/refsignal_dl.h" #include "liblte/phy/resampling/interp.h" #include "liblte/phy/resampling/decim.h" diff --git a/lte/phy/include/liblte/phy/resampling/interp.h b/lte/phy/include/liblte/phy/resampling/interp.h index c39c83602..e2028b22b 100644 --- a/lte/phy/include/liblte/phy/resampling/interp.h +++ b/lte/phy/include/liblte/phy/resampling/interp.h @@ -78,6 +78,10 @@ LIBLTE_API void interp_run_offset(interp_t *q, uint32_t off_st, uint32_t off_end); +LIBLTE_API cf_t interp_linear_onesample(cf_t *input); + +LIBLTE_API cf_t interp_linear_onesample2(cf_t *input); + LIBLTE_API void interp_linear_offset(cf_t *input, cf_t *output, uint32_t M, diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index ee59bfad8..27f3fcc19 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -96,7 +96,10 @@ LIBLTE_API cf_t vec_dot_prod_conj_ccc(cf_t *x, cf_t *y, uint32_t len); LIBLTE_API float vec_dot_prod_fff(float *x, float *y, uint32_t len); /* z=x/y vector division (element-wise) */ -LIBLTE_API void vec_div_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); +LIBLTE_API void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, uint32_t len); + +/* z=x/y vector division with mod(y)=1 (element-wise) */ +LIBLTE_API void vec_div_ccc_mod1(cf_t *x, cf_t *y, cf_t *z, uint32_t len); /* conjugate */ LIBLTE_API void vec_conj_cc(cf_t *x, cf_t *y, uint32_t len); @@ -113,6 +116,7 @@ LIBLTE_API void vec_quant_fuc(float *in, uint8_t *out, float gain, float offset, /* magnitude of each vector element */ LIBLTE_API void vec_abs_cf(cf_t *x, float *abs, uint32_t len); +LIBLTE_API void vec_abs_square_cf(cf_t *x, float *abs_square, uint32_t len); /* argument of each vector element */ LIBLTE_API void vec_arg_cf(cf_t *x, float *arg, uint32_t len); diff --git a/lte/phy/lib/ch_estimation/src/chest.c b/lte/phy/lib/ch_estimation/src/chest.c index b34471122..417695899 100644 --- a/lte/phy/lib/ch_estimation/src/chest.c +++ b/lte/phy/lib/ch_estimation/src/chest.c @@ -38,7 +38,7 @@ #define SLOT_SZ(q) (q->nof_symbols * q->symbol_sz) #define SF_SZ(q) (2 * SLOT_SZ(q)) -//#define VOLK_INTERP +#define VOLK_INTERP void chest_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { chest_ref_fprint(q, stream, nslot, port_id); diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c new file mode 100644 index 000000000..d515fc413 --- /dev/null +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -0,0 +1,317 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + + +#include +#include +#include +#include +#include + +#include "liblte/config.h" + +#include "liblte/phy/ch_estimation/chest_dl.h" +#include "liblte/phy/utils/vector.h" + +//#define VOLK_INTERP + +/** 3GPP LTE Downlink channel estimator and equalizer. + * Estimates the channel in the resource elements transmitting references and interpolates for the rest + * of the resource grid. + * + * The equalizer uses the channel estimates to produce an estimation of the transmitted symbol. + * + * This object depends on the refsignal_t object for creating the LTE CSR signal. +*/ + +int chest_dl_init(chest_dl_t *q, lte_cell_t cell) +{ + int ret = LIBLTE_ERROR_INVALID_INPUTS; + if (q != NULL && + lte_cell_isvalid(&cell)) + { + bzero(q, sizeof(chest_dl_t)); + + ret = refsignal_cs_generate(&q->csr_signal, cell); + if (ret != LIBLTE_SUCCESS) { + fprintf(stderr, "Error initializing CSR signal (%d)\n",ret); + goto clean_exit; + } + + q->pilot_symbol_avg = vec_malloc(sizeof(cf_t) * 2*cell.nof_prb); + if (!q->pilot_symbol_avg) { + perror("malloc"); + goto clean_exit; + } + + for (int i=0;ipilot_estimates[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + if (!q->pilot_estimates[i]) { + perror("malloc"); + goto clean_exit; + } + q->pilot_recv_signal[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + if (!q->pilot_recv_signal[i]) { + perror("malloc"); + goto clean_exit; + } + #ifdef VOLK_INTERP + ret = interp_init(&q->interp_freq[i], LINEAR, 2*cell.nof_prb, RE_X_RB/2); + if (ret == LIBLTE_SUCCESS) { + ret = interp_init(&q->interp_time[i], LINEAR, 2, CP_NSYMB(cell.cp) - 3); + } + #endif + + } + + /* Init buffer for holding CE estimates averages */ + + q->cell = cell; + } + + ret = LIBLTE_SUCCESS; + +clean_exit: + if (ret != LIBLTE_SUCCESS) { + chest_dl_free(q); + } + return ret; +} + +void chest_dl_free(chest_dl_t *q) +{ + refsignal_cs_free(&q->csr_signal); + + if (q->pilot_symbol_avg) { + free(q->pilot_symbol_avg); + } + + for (int i=0;ipilot_estimates[i]) { + free(q->pilot_estimates[i]); + } + if (q->pilot_recv_signal[i]) { + free(q->pilot_recv_signal[i]); + } + #ifdef VOLK_INTERP + interp_free(&q->interp_freq[i]); + interp_free(&q->interp_time[i]); + #endif + } +} + +#define pilot_est(idx) q->pilot_estimates[port_id][REFSIGNAL_PILOT_IDX(idx,l,ns,q->cell)] + +#if CHEST_RS_AVERAGE_TIME > 1 +cf_t timeavg[CHEST_RS_AVERAGE_TIME-1][12]; +int nof_timeavg=0; +#endif + +static void average_pilots(chest_dl_t *q, uint32_t sf_idx, uint32_t port_id) +{ + uint32_t ns, l; + int i; + /* For each symbol with pilots in a slot */ + for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { + for (l=0;lpilot_symbol_avg, 2*q->cell.nof_prb); + + /** Frequency average */ +#if CHEST_RS_AVERAGE_FREQ > 1 + const uint32_t M = CHEST_RS_AVERAGE_FREQ; + cf_t xint[CHEST_RS_AVERAGE_FREQ]; + int j, k; + /* Extrapolate first M/2 samples */ + for (i=M/2-1;i>=0;i--) { + k=0; + for (j=i+M/2;j>=0;j--) { + xint[k]=pilot_est(j); + k++; + } + for (;j>=i-M/2;j--) { + if (k>=2) { + xint[k] = interp_linear_onesample(&xint[k-2]); + k++; + } + } + q->pilot_symbol_avg[i] = vec_acc_cc(xint,M)/M; + //q->pilot_symbol_avg[i] = (pilot_est(0)+pilot_est(1))/2; + } + + for (i=M/2;i<2*q->cell.nof_prb-M/2;i++) { + q->pilot_symbol_avg[i] = vec_acc_cc(&pilot_est(i-M/2),M)/M; + } + + /* Extrapolate last M/2 samples */ + for (;i<2*q->cell.nof_prb;i++) { + k=0; + for (j=i-M/2;j<2*q->cell.nof_prb;j++) { + xint[k]=pilot_est(j); + k++; + } + for (;k=2) { + xint[k] = interp_linear_onesample(&xint[k-2]); + } + } + q->pilot_symbol_avg[i] = vec_acc_cc(xint,M)/M; + //q->pilot_symbol_avg[i] = (pilot_est(i)+pilot_est(i+1))/2; + + } +#else + memcpy(q->pilot_symbol_avg, &pilot_est(0), 2*q->cell.nof_prb*sizeof(cf_t)); +#endif + + /* Time average last symbols */ +#if CHEST_RS_AVERAGE_TIME > 1 + if (nof_timeavgpilot_symbol_avg, 2*q->cell.nof_prb * sizeof(cf_t)); + nof_timeavg++; + } else { + bzero(&pilot_est(0),2*q->cell.nof_prb*sizeof(cf_t)); + for (i=0;icell.nof_prb); + } + vec_sum_ccc(q->pilot_symbol_avg,&pilot_est(0),&pilot_est(0),2*q->cell.nof_prb); + vec_sc_prod_cfc(&pilot_est(0), 1.0/CHEST_RS_AVERAGE_TIME, &pilot_est(0), 2*q->cell.nof_prb); + for (i=0;icell.nof_prb*sizeof(cf_t)); + } + memcpy(timeavg[i],q->pilot_symbol_avg,2*q->cell.nof_prb*sizeof(cf_t)); + } +#else + memcpy(&pilot_est(0), q->pilot_symbol_avg, 2*q->cell.nof_prb * sizeof(cf_t)); +#endif + + } + } + +} + +static void interpolate_pilots(chest_dl_t *q, cf_t *ce, uint32_t sf_idx, uint32_t port_id) +{ + /* interpolate the symbols with references in the freq domain */ + uint32_t ns, l, i,j; + cf_t x[2], y[MAX_NSYMB]; + + for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { + for (l=0;lcell, ns, l, port_id, 0); +#ifdef VOLK_INTERP + interp_run_offset(&q->interp_freq[port_id], + &q->pilot_estimates[port_id][((ns%2)*2+l)*2*q->cell.nof_prb], + &ce[refsignal_nsymbol(q->cell,ns,l) * q->cell.nof_prb * RE_X_RB], + fidx_offset, RE_X_RB/2-fidx_offset); +#else + interp_linear_offset(&q->pilot_estimates[port_id][((ns%2)*2+l)*2*q->cell.nof_prb], + &ce[refsignal_nsymbol(q->cell,ns,l) * q->cell.nof_prb * RE_X_RB], RE_X_RB/2, + 2*q->cell.nof_prb, fidx_offset, RE_X_RB/2-fidx_offset); +#endif + } + } + /* now interpolate in the time domain */ + for (i=0;icell.nof_prb; i++) { + if (refsignal_cs_nof_symbols(port_id) > 1) { + for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { + j=0; + for (l=0;lcell,ns,l) * q->cell.nof_prb * RE_X_RB + i]; + j++; + } + #ifdef VOLK_INTERP + interp_run_offset(&q->interp_time[port_id], x, y, + 0, CP_NSYMB(q->cell.cp) - 4); + #else + interp_linear_offset(x, y, CP_NSYMB(q->cell.cp) - 3, + 2, 0, CP_NSYMB(q->cell.cp) - 4); + #endif + for (j=0;jcell.cp);j++) { + ce[(j+((ns%2)*CP_NSYMB(q->cell.cp))) * q->cell.nof_prb*RE_X_RB + i] = y[j]; + } + } + } else { + fprintf(stderr, "3/4 Ports interpolator not implemented\n"); + exit(-1); + } + } +} + +int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx, uint32_t port_id) +{ + //filter2d_reset(&q->filter); + + /* Get references from the input signal */ + refsignal_cs_get_sf(q->cell, port_id, sf_idx, input, q->pilot_recv_signal[port_id]); + + /* Use the known CSR signal to compute Least-squares estimates */ + vec_div_ccc_mod1(q->pilot_recv_signal[port_id], q->csr_signal.pilots[sf_idx], + q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); + + /* Average pilot estimates */ + average_pilots(q, sf_idx, port_id); + + /* Interpolate to create channel estimates for all resource grid */ + interpolate_pilots(q, ce, sf_idx, port_id); + + return 0; +} + +int chest_dl_estimate(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], uint32_t sf_idx) +{ + uint32_t port_id; + + for (port_id=0;port_idcell.nof_ports;port_id++) { + chest_dl_estimate_port(q, input, ce[port_id], sf_idx, port_id); + } + return LIBLTE_SUCCESS; +} + +int chest_dl_equalize_zf(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], cf_t *output) +{ + fprintf(stderr, "Not implemented\n"); + return -1; +} + +int chest_dl_equalize_mmse(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], float *noise_estimate, cf_t *output) +{ + fprintf(stderr, "Not implemented\n"); + return -1; +} + +float chest_dl_get_rssi(chest_dl_t *q) { + return q->rssi; +} + +float chest_dl_get_rsrq(chest_dl_t *q) { + return q->rsrq; +} + +float chest_dl_get_rsrp(chest_dl_t *q) { + return q->rsrp; +} + diff --git a/lte/phy/lib/ch_estimation/src/refsignal_dl.c b/lte/phy/lib/ch_estimation/src/refsignal_dl.c new file mode 100644 index 000000000..e9d927bc6 --- /dev/null +++ b/lte/phy/lib/ch_estimation/src/refsignal_dl.c @@ -0,0 +1,246 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + +#include +#include +#include +#include +#include + +#include "liblte/phy/common/phy_common.h" +#include "liblte/phy/ch_estimation/refsignal_dl.h" +#include "liblte/phy/utils/vector.h" +#include "liblte/phy/utils/debug.h" +#include "liblte/phy/common/sequence.h" + +uint32_t refsignal_cs_v(uint32_t port_id, uint32_t ns, uint32_t symbol_id) +{ + uint32_t v = 0; + switch (port_id) { + case 0: + if (symbol_id == 0) { + v = 0; + } else { + v = 3; + } + break; + case 1: + if (symbol_id == 0) { + v = 3; + } else { + v = 0; + } + break; + case 2: + v = 3 * (ns % 2); + break; + case 3: + v = 3 + 3 * (ns % 2); + break; + } + return v; +} + +uint32_t refsignal_cs_nof_symbols(uint32_t port_id) +{ + if (port_id < 2) { + return 2; + } else { + return 1; + } +} + +static uint32_t lp(uint32_t l, lte_cp_t cp) { + if (l == 1) { + return CP_NSYMB(cp) - 3; + } else { + return 0; + } +} + +/** Allocates and precomputes the Cell-Specific Reference (CSR) signal for + * the 20 slots in a subframe + */ +int refsignal_cs_generate(refsignal_cs_t * q, lte_cell_t cell) +{ + + uint32_t c_init; + uint32_t i, ns, l; + uint32_t N_cp, mp; + sequence_t seq; + int ret = LIBLTE_ERROR_INVALID_INPUTS; + + if (q != NULL && + lte_cell_isvalid(&cell)) + { + ret = LIBLTE_ERROR; + + bzero(q, sizeof(refsignal_cs_t)); + bzero(&seq, sizeof(sequence_t)); + if (sequence_init(&seq, 2 * 2 * MAX_PRB)) { + goto free_and_exit; + } + + if (CP_ISNORM(cell.cp)) { + N_cp = 1; + } else { + N_cp = 0; + } + + q->cell = cell; + + for (i=0;ipilots[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(q->cell.nof_prb)); + if (!q->pilots[i]) { + perror("malloc"); + goto free_and_exit; + } + } + + for (ns=0;nscell.nof_prb; i++) { + mp = i + MAX_PRB - cell.nof_prb; + /* save signal */ + q->pilots[ns/2][REFSIGNAL_PILOT_IDX(i,l,ns,q->cell)] = + (1 - 2 * (float) seq.c[2 * mp]) / sqrt(2) + + _Complex_I * (1 - 2 * (float) seq.c[2 * mp + 1]) / sqrt(2); + } + } + } + sequence_free(&seq); + ret = LIBLTE_SUCCESS; + } +free_and_exit: + if (ret == LIBLTE_ERROR) { + sequence_free(&seq); + refsignal_cs_free(q); + } + return ret; +} + +/** Deallocates a refsignal_cs_t object allocated with refsignal_cs_init */ +void refsignal_cs_free(refsignal_cs_t * q) +{ + int i; + + for (i=0;ipilots[i]) { + free(q->pilots[i]); + } + } + bzero(q, sizeof(refsignal_cs_t)); +} + + +inline uint32_t refsignal_fidx(lte_cell_t cell, uint32_t ns, uint32_t l, uint32_t port_id, uint32_t m) { + return 6*m + ((refsignal_cs_v(port_id, ns, lp(l,cell.cp)) + (cell.id % 6)) % 6); +} + +inline uint32_t refsignal_nsymbol(lte_cell_t cell, uint32_t ns, uint32_t l) { + return (ns%2)*CP_NSYMB(cell.cp)+lp(l,cell.cp); +} + +/* Maps a reference signal initialized with refsignal_cs_init() into an array of subframe symbols */ +int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, uint32_t sf_idx, + cf_t *pilots, cf_t *sf_symbols) +{ + uint32_t i, l, ns; + uint32_t fidx; + + if (lte_cell_isvalid(&cell) && + lte_sfidx_isvalid(sf_idx) && + lte_portid_isvalid(port_id) && + pilots != NULL && + sf_symbols != NULL) + { + + for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { + for (l=0;l. + * This file is part of ALOE++ (http://flexnets.upc.edu/) + * + * ALOE++ is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ALOE++ is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with ALOE++. If not, see . + */ + +#include +#include "liblte/phy/phy.h" +#ifdef UNDEF_BOOL +#undef bool +#endif +#include "mex.h" + + +/** MEX function to be called from MATLAB to test the channel estimator + * + * [estChannel] = liblte_chest(cell_id, nof_ports, inputSignal, (optional) sf_idx) + * + * Returns a matrix of size equal to the inputSignal matrix with the channel estimates + * for each resource element in inputSignal. The inputSignal matrix is the received Grid + * of size nof_resource_elements x nof_ofdm_symbols_in_subframe. + * + * The sf_idx is the subframe index only used if inputSignal is 1 subframe length. + * + */ + +#define CELLID prhs[0] +#define PORTS prhs[1] +#define INPUT prhs[2] +#define NOF_INPUTS 3 +#define SFIDX prhs[3] + +void help() +{ + mexErrMsgTxt + ("[estChannel] = liblte_chest(cell_id, nof_ports, inputSignal,[sf_idx])\n\n" + " Returns a matrix of size equal to the inputSignal matrix with the channel estimates\n " + "for each resource element in inputSignal. The inputSignal matrix is the received Grid\n" + "of size nof_resource_elements x nof_ofdm_symbols.\n" + "The sf_idx is the subframe index only used if inputSignal is 1 subframe length.\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + int i; + lte_cell_t cell; + chest_dl_t chest; + cf_t *input_signal; + cf_t *ce[MAX_PORTS]; + double *outr0, *outi0, *outr1, *outi1; + + if (nrhs < NOF_INPUTS) { + help(); + return; + } + + if (!mxIsDouble(CELLID) && mxGetN(CELLID) != 1 && + !mxIsDouble(PORTS) && mxGetN(PORTS) != 1 && + mxGetM(CELLID) != 1) { + help(); + return; + } + + cell.id = (uint32_t) *((double*) mxGetPr(CELLID)); + cell.nof_prb = mxGetM(INPUT)/RE_X_RB; + cell.nof_ports = (uint32_t) *((double*) mxGetPr(PORTS)); + if ((mxGetN(INPUT)%14) == 0) { + cell.cp = CPNORM; + } else if ((mxGetN(INPUT)%12)!=0) { + cell.cp = CPEXT; + } else { + help(); + return; + } + + if (chest_dl_init(&chest, cell)) { + mexErrMsgTxt("Error initiating channel estimator\n"); + return; + } + + int nsubframes; + if (cell.cp == CPNORM) { + nsubframes = mxGetN(INPUT)/14; + } else { + nsubframes = mxGetN(INPUT)/12; + } + + uint32_t sf_idx=0; + if (nsubframes == 1) { + if (nrhs != NOF_INPUTS+1) { + help(); + return; + } + sf_idx = (uint32_t) *((double*) mxGetPr(SFIDX)); + } + + double *inr=(double *)mxGetPr(INPUT); + double *ini=(double *)mxGetPi(INPUT); + + /** Allocate input buffers */ + int nof_re = 2*CP_NSYMB(cell.cp)*cell.nof_prb*RE_X_RB; + for (i=0;i= 1) { + plhs[0] = mxCreateDoubleMatrix(1,nof_re * nsubframes, mxCOMPLEX); + outr0 = mxGetPr(plhs[0]); + outi0 = mxGetPi(plhs[0]); + } + if (nlhs == 2) { + plhs[1] = mxCreateDoubleMatrix(REFSIGNAL_MAX_NUM_SF(cell.nof_prb)*nsubframes, cell.nof_ports, mxCOMPLEX); + outr1 = mxGetPr(plhs[1]); + outi1 = mxGetPi(plhs[1]); + } + + for (int sf=0;sf= 1) { + for (i=0;iFW@tO@WYQMW&Xk5sX$=Vp{rDr$mS$4gx*3v6d~{N08eCdX-`m?~ zug(&~^pEn7R-=3Se(z)V-rnur?Y;Zky4uTJE=I-8KFyGuscG5`4ae3{JqVQw9ejcEumTpw;TjBazVci2LvJ(UPr(PVI0U$l8w9boR`|ED z^-xTMlk&kou=YCE-F6%6=<3|qqOI|*@m=p6i~_tH?noRGm-xN@vvP*_@ul!@f-%K{ zqzsOGZ(&@97>+jr#V+ z%ky%hgvEzNO38%3}!LWqO zaZ|_Ms#JGZythnY>iDEpkqLsbI(E475O+6w$X#DntFYYV<#6<@Y=#>05tL`Aa!@XR z7hFVK$RFeUH1c=}WG6ZQ2J$#G+5Mb9i98NT_DRm4Kpux8yNC0yAdf?k9p(J5kjKzx zhdBQN@)+{$cFrF}9z&h&;rx%0#}H?mIlm8iyu`8%oc}iR80xG7ygE^_7XWpl>1#mx z)T?IH^eJ_0rg~>t{~-v_?=G?fG~J(@!t)3Hdu;u?CH?1T+-mv-_4zk8sIFt`%QGo% zeBsmF_!VoqUris$okaW5rqy7_Qdg>DOkyq=-Ut0J0~mbej`e461qYs$qo|+#4Ake$_h56N zych-~Gx|QXa|jXtt^Te4K7a2P^?|oux{$HX^gC+$*JJOxt)*i*m*qKtt}>J0D*GcC zT6OpO%-Q#HxrZkAq&kq<3Z5WnE^D2-`@YJ|AGj>FiZeHoYz1n*1|qI0e8$jcKlgc` zH&bovR;N5*>doYA<*JlW-hj#twsK{r29&2g-iB#U%}?sz0Jq@&J+PQoJ*!xHT;&jW ziK3T--`{5!^_`P2PVV&M%^*KI-U>&&czJt|+U-?)9-s6)GnpRm0%6z0ceexSo`}^c zTxlODO?>J_9+A&Oy)#{2*9kXH_qw-If94vyB#k?{#u0Vmxl!<|K-C<)d#&v=Rdg5^mi8!aO^tnuUuFr2mPcv6wpT9t1ZA1_0!`$0z z|IXzOV!&I|r_)C>i@9i_3e}CgdZcsrhRjh=>P#OMC$t()2-`agCsa4(+4lN0bh7TW zgvO@IJ=@+!c-7zJuIJDXbp7Y*1BdalzQcc~zu$kCUxQm4=Raw>y8{;MmPjCx&}02d zlOh&>{sd7U)MGI%8d{}96GJI$OLPz(XRcbbNZG7gDI;Mj0VU2K8NG2uB!(eFtG zVv3bitcWffk>1Xz72&d=-J$}GN5O|~D&eG|=z(BFF?2JTGJ@dDezE~SvMZm`TiAEh z`aGOQq;42R;HIT9a8#>_TByRLl|{h;qL{X{Q22m z?R~hcW$}V;a0EC$Z-?Mt26Fz)OY)va-H(({RD5y4*h2ST%WP%PE0t0NN)aeUpcH{p z1WFMoMW7UcQUpp7C`F(Yfl>rM$_UVYJ?+m^UvP^BOPQz;?{)AOJNS<~c>H#Nh4!ZD zyB_UH9~Xj)ZME6&w3i4T-?gzUw+W-~3iy7Gh2;NyKbJ)QjA)Pc=4WuD01EBN*TOy) z7TQA(3w`>AP-~0lz6B@>M}!$`6#BHkKzsVjgx!;(A;PCbN2s5ZLXYwhOvd z(6FF81btZ0uL$}*L7x%yh@h_uO5c|{T3T*Y>iY`i;s=WFz>xn}jc6lYgoWdn@) zVEf7n3;?wZn?|UXNLspYFp=^Nq@uCVHPH~`TqIydm@hPv085)%hAr8l8zz2+sllPw#3;MTEH*@ zBen(A?+$_*cn`#*LFh>m9KylJTd_S3m?rZDlX3j`=^Uf~g~$6AuYJ01o%s;B|0b7m znSr_w{^#J@C40J`iPj5!x~|1A&w6Qu8s5ufPxm{~DRIMKyQo9`zf*$l&%AELw3Y}*yhkfz2Cb6KqyXqC;u|&;P_Gd`$ZnY{ts#YD%j$+NA|RSQ9hU=28QBB?bCJe z7f1V)*Km9#2%yy4WcEn*L|+Gq+<&Ghwyq$fHaB}DJECucM7F2(Z&a~ONRJ#i`LiHE zjLv_TXn&VtTR8QxExF79gII$MLY?fL*B{vv#T)}_TXyjS#pYb3D1;7{w@vqsY=5TS z=C+H81)m?+z@N^C<{!L23$@?#N!$K*hjVB9wpQVz8+u3Up{#*9I<&s!<8DUlRz6JqI+L%zfYJJqk1u4jF685tv-5sFejcNFJRhH*uZMCs&hQjq$-oV715*X@ z#f;`jNge!DGn)VManEeNWIpa?G+*W8HM8#*`S_CA_lkV{0!H&kKE4$4Llqg~bvL_^ z(fuw9-RvSZdml>zH(Lg&k&1-aRTy=+Ukc&$mNaLA*I#*oygXbsTx@>-(L-5*_~UaI z;$FuBd-*C)=Gu0rF;15(TOC<^yThYEo^$F~M> z7kssLURTQj$G9C6<3hQdE4lvsetv@E^RG8Q_cQ-K?EpN#hjvecfKyx4cch6T`29uj zhl}8k0ItZ6Mg5ya^!EW?DF5^+u0KEj6mvuh_5Zg;@DqR+>d)Vc=)YS8uYmQTke`)+ z7wXTIMeruTFDnoq7Bno=N5Qu3ZD`}WoAT`Y34R9!?TYAX1cHIqYz;gj5%)^b^ZYHqw42-8x3u+Yz5b0|ZO{yVyZ)ebWGQjD za0W1?5J#c8yd>wmTx87E&Cf?Jk|->)lM5v`+wI$l#!_N3?>&ueUMe;BRW!F*%S)$j JZkAJt{|hd+x{Lq- literal 0 HcmV?d00001 diff --git a/lte/phy/lib/common/src/phy_common.c b/lte/phy/lib/common/src/phy_common.c index 942240f12..b82580ec3 100644 --- a/lte/phy/lib/common/src/phy_common.c +++ b/lte/phy/lib/common/src/phy_common.c @@ -52,23 +52,49 @@ const int tc_cb_sizes[NOF_TC_CB_SIZES] = { 40, 48, 56, 64, 72, 80, 88, 96, 104, /* Returns true if the structure pointed by cell has valid parameters */ -bool lte_cell_isvalid(lte_cell_t *cell) { - if (cell->id < 504 && - cell->nof_ports > 0 && - cell->nof_ports < MAX_PORTS+1 && - cell->nof_prb > 5 && - cell->nof_prb < MAX_PRB+1 - ) { + +bool lte_cellid_isvalid(uint32_t cell_id) { + if (cell_id < 504) { return true; } else { return false; } } +bool lte_nofprb_isvalid(uint32_t nof_prb) { + if (nof_prb >= 6 && nof_prb <= MAX_PRB) { + return true; + } else { + return false; + } +} + +bool lte_cell_isvalid(lte_cell_t *cell) { + return lte_cellid_isvalid(cell->id) && + lte_portid_isvalid(cell->nof_ports) && + lte_nofprb_isvalid(cell->nof_prb); +} + void lte_cell_fprint(FILE *stream, lte_cell_t *cell) { fprintf(stream, "PCI: %d, CP: %s, PRB: %d, Ports: %d\n", cell->id, lte_cp_string(cell->cp), cell->nof_prb, cell->nof_ports); } +bool lte_sfidx_isvalid(uint32_t sf_idx) { + if (sf_idx <= NSUBFRAMES_X_FRAME) { + return true; + } else { + return false; + } +} + +bool lte_portid_isvalid(uint32_t port_id) { + if (port_id <= MAX_PORTS) { + return true; + } else { + return false; + } +} + bool lte_N_id_2_isvalid(uint32_t N_id_2) { if (N_id_2 < 3) { return true; diff --git a/lte/phy/lib/common/src/sequence.c b/lte/phy/lib/common/src/sequence.c index 2367a3e9b..4eac18a74 100644 --- a/lte/phy/lib/common/src/sequence.c +++ b/lte/phy/lib/common/src/sequence.c @@ -40,7 +40,7 @@ * It follows the 3GPP Release 8 (LTE) 36.211 * Section 7.2 */ -void generate_prs_c(sequence_t *q, uint32_t seed) { +void sequence_set_LTE_pr(sequence_t *q, uint32_t seed) { int n; uint32_t *x1, *x2; @@ -79,7 +79,7 @@ int sequence_LTE_pr(sequence_t *q, uint32_t len, uint32_t seed) { return LIBLTE_ERROR; } q->len = len; - generate_prs_c(q, seed); + sequence_set_LTE_pr(q, seed); return LIBLTE_SUCCESS; } @@ -92,6 +92,7 @@ int sequence_init(sequence_t *q, uint32_t len) { if (!q->c) { return LIBLTE_ERROR; } + q->len = len; } return LIBLTE_SUCCESS; } diff --git a/lte/phy/lib/filter/src/filter2d.c b/lte/phy/lib/filter/src/filter2d.c index 26e1af259..3d5428bda 100644 --- a/lte/phy/lib/filter/src/filter2d.c +++ b/lte/phy/lib/filter/src/filter2d.c @@ -32,6 +32,7 @@ #include "liblte/phy/utils/debug.h" +#include "liblte/phy/resampling/interp.h" #include "liblte/phy/filter/filter2d.h" #include "liblte/phy/utils/matrix.h" #include "liblte/phy/utils/vector.h" @@ -40,10 +41,10 @@ /* Useful macros */ #define intceil(X, Y) ((X-1)/Y+1) -#define idx(a, b) ((a)*(q->szfreq)+b) +#define idx(a, b) ((a)*(q->szfreq+q->nfreq)+b) -int filter2d_init(filter2d_t* q, float **taps, int ntime, int nfreq, int sztime, - int szfreq) { +int filter2d_init(filter2d_t* q, float **taps, uint32_t ntime, uint32_t nfreq, uint32_t sztime, + uint32_t szfreq) { int ret = -1; bzero(q, sizeof(filter2d_t)); @@ -54,18 +55,24 @@ int filter2d_init(filter2d_t* q, float **taps, int ntime, int nfreq, int sztime, matrix_copy((void**) q->taps, (void**) taps, ntime, nfreq, sizeof(float)); - q->output = vec_malloc((ntime+sztime)*(szfreq)*sizeof(cf_t)); + q->output = vec_malloc((ntime+sztime)*(szfreq+nfreq)*sizeof(cf_t)); if (!q->output) { goto free_and_exit; } - bzero(q->output, (ntime+sztime)*(szfreq)*sizeof(cf_t)); + bzero(q->output, (ntime+sztime)*(szfreq+nfreq)*sizeof(cf_t)); q->nfreq = nfreq; q->ntime = ntime; q->szfreq = szfreq; q->sztime = sztime; - + + q->norm = 0.0; + for (int i = 0; i < ntime; i++) { + for (int j = 0; j < nfreq; j++) { + q->norm += q->taps[i][j]; + } + } ret = 0; free_and_exit: if (ret == -1) { @@ -83,33 +90,26 @@ void filter2d_free(filter2d_t *q) { bzero(q, sizeof(filter2d_t)); } -int filter2d_init_default(filter2d_t* q, int ntime, int nfreq, int sztime, - int szfreq) { +int filter2d_init_ones(filter2d_t* q, uint32_t ntime, uint32_t nfreq, uint32_t sztime, + uint32_t szfreq) +{ int i, j; - int ret = -1; float **taps; + int ret = -1; if (matrix_init((void***) &taps, ntime, nfreq, sizeof(float))) { goto free_and_exit; } - /* Compute the default 2-D interpolation mesh */ for (i = 0; i < ntime; i++) { for (j = 0; j < nfreq; j++) { - if (j < nfreq / 2) - taps[i][j] = (j + 1.0) / (2.0 * intceil(nfreq, 2)); - - else if (j == nfreq / 2) - taps[i][j] = 0.5; - - else if (j > nfreq / 2) - taps[i][j] = (nfreq - j) / (2.0 * intceil(nfreq, 2)); + taps[i][j] = 1.0/(i+1); } } - INFO("Using default interpolation matrix of size %dx%d\n", ntime, nfreq); - if (verbose >= VERBOSE_DEBUG) { + INFO("Using all-ones interpolation matrix of size %dx%d\n", ntime, nfreq); + if (verbose >= VERBOSE_INFO) { matrix_fprintf_f(stdout, taps, ntime, nfreq); } @@ -126,30 +126,69 @@ free_and_exit: /* Moves the last ntime symbols to the start and clears the remaining of the output. * Should be called, for instance, before filtering each OFDM frame. */ -void filter2d_reset(filter2d_t *q) { +void filter2d_step(filter2d_t *q) { int i; for (i = 0; i < q->ntime; i++) { memcpy(&q->output[idx(i,0)], &q->output[idx(q->sztime + i,0)], - sizeof(cf_t) * (q->szfreq)); + sizeof(cf_t) * (q->szfreq+q->nfreq)); } + for (; i < q->ntime + q->sztime; i++) { - memset(&q->output[idx(i,0)], 0, sizeof(cf_t) * (q->szfreq)); + memset(&q->output[idx(i,0)], 0, sizeof(cf_t) * (q->szfreq+q->nfreq)); } } +void filter2d_reset(filter2d_t *q) { + bzero(q->output, (q->ntime+q->sztime)*(q->szfreq+q->nfreq)*sizeof(cf_t)); +} + /** Adds samples x to the from the given time/freq indexes to the filter * and computes the output. */ -void filter2d_add(filter2d_t *q, cf_t x, int time_idx, int freq_idx) { +void filter2d_add(filter2d_t *q, cf_t x, uint32_t time_idx, uint32_t freq_idx) { int i, j; - int ntime = q->ntime; - int nfreq = q->nfreq; + uint32_t ntime = q->ntime; + uint32_t nfreq = q->nfreq; + + if (freq_idx < q->szfreq && time_idx < q->sztime) { + DEBUG("Adding %f+%fi to %d:%d\n",__real__ x,__imag__ x,time_idx,freq_idx); - for (i = 0; i < ntime; i++) { - for (j = 0; j < nfreq; j++) { - q->output[idx(i+time_idx, j+freq_idx - nfreq/2)] += x * (cf_t)(q->taps[i][j]); - } + for (i = 0; i < ntime; i++) { + for (j = 0; j < nfreq; j++) { + q->output[idx(i+time_idx, j+freq_idx)] += x * (cf_t)(q->taps[i][j])/q->norm; + } + } } } + +void filter2d_add_out(filter2d_t *q, cf_t x, int time_idx, int freq_idx) { + int i, j; + + uint32_t ntime = q->ntime; + uint32_t nfreq = q->nfreq; + float norm=0; + for (i = 0; i < ntime; i++) { + for (j = 0; j < nfreq; j++) { + if (i+time_idx >= 0 && j+freq_idx >= 0 && + i+time_idx < q->ntime+q->sztime && j+freq_idx < q->nfreq + q->szfreq) + { + norm += q->taps[i][j]; + } + } + } + for (i = 0; i < ntime; i++) { + for (j = 0; j < nfreq; j++) { + if (i+time_idx >= 0 && j+freq_idx >= 0 && + i+time_idx < q->ntime+q->sztime && j+freq_idx < q->nfreq + q->szfreq) + { + q->output[idx(i+time_idx, j+freq_idx)] += x * (cf_t)(q->taps[i][j])/q->norm; + } + } + } +} + +void filter2d_get_symbol(filter2d_t *q, uint32_t nsymbol, cf_t *output) { + memcpy(output, &q->output[idx(nsymbol,q->nfreq/2)], sizeof(cf_t) * (q->szfreq)); +} diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index 5599ea46f..6b2d52481 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -122,6 +122,9 @@ int precoding_type(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, return 0; } + +float y_mod[110*12*14]; + /* ZF detector */ int predecoding_single_zf(cf_t *y, cf_t *ce, cf_t *x, int nof_symbols) { for (int i=0;i 0 && M > 0) { ret = LIBLTE_ERROR; q->in_arg = vec_malloc(len * sizeof(float)); @@ -191,6 +191,28 @@ void interp_run(interp_t *q, cf_t *input, cf_t *output) { interp_run_offset(q, input, output, 0, 1); } +cf_t interp_linear_onesample(cf_t *input) { + float mag0=0, mag1=0, arg0=0, arg1=0, mag=0, arg=0; + mag0 = cabsf(input[0]); + mag1 = cabsf(input[1]); + arg0 = cargf(input[0]); + arg1 = cargf(input[1]); + mag = 2*mag1 -mag0; + arg = 2*arg1-arg0; + return mag * cexpf(I * arg); +} + +cf_t interp_linear_onesample2(cf_t *input) { + float re0=0, im0=0, re1=0, im1=0, re=0, im=0; + re0 = crealf(input[0]); + im0 = cimagf(input[1]); + re1 = crealf(input[0]); + im1 = cimagf(input[1]); + re = 2*re1-re0; + im = 2*im1-im0; + return (re+im*_Complex_I); +} + /* Performs 1st order linear interpolation with out-of-bound interpolation */ void interp_linear_offset(cf_t *input, cf_t *output, uint32_t M, uint32_t len, uint32_t off_st, uint32_t off_end) { uint32_t i, j; diff --git a/lte/phy/lib/utils/src/vector.c b/lte/phy/lib/utils/src/vector.c index 11b2c41ea..845743174 100644 --- a/lte/phy/lib/utils/src/vector.c +++ b/lte/phy/lib/utils/src/vector.c @@ -327,13 +327,21 @@ void vec_prod_conj_ccc(cf_t *x,cf_t *y, cf_t *z, uint32_t len) { #endif } -void vec_div_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len) { +/* Complex division is conjugate multiplication + real division */ +void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, uint32_t len) { + vec_prod_conj_ccc(x,y,z,len); + vec_abs_square_cf(y,y_mod,len); int i; for (i=0;igriddata for types) +% InterpWindow - Interpolation window type: ('Causal','Non-causal', +% 'Centred','Centered'). Note: 'Centred' and 'Centered' +% are equivalent +% InterpWinSize - Interpolation window size: +% 'Causal','Non-causal' - any number >=1 +% 'Centred','Centered' - odd numbers >=1 +% +% The 'TestEVM' pilot averaging will ignore other structure fields in +% CEC, and the method follows that described in TS36.104/TS36.141 Annex +% E/F for the purposes of transmitter EVM testing. +% +% The 'UserDefined' pilot averaging uses a rectangular kernel of size +% CEC.FreqWindow-by-CEC.TimeWindow and performs a 2D filtering operation +% upon the pilots. Note that pilots near the edge of the resource grid +% will be averaged less as they have no neighbors outside of the grid, +% or a limited number of neighbors outside of the grid obtained by the +% creation of virtual pilots. +% +% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CHS, CEC, RXGRID) returns +% the estimated channel given cell-wide settings structure ENB, PDSCH +% transmission configuration CHS and channel estimator configuration CEC. +% CHS must include the following fields: +% TxScheme - Transmission scheme, one of: +% 'Port0' - Single-antenna port, Port 0 +% 'TxDiversity' - Transmit diversity scheme +% 'CDD' - Large delay CDD scheme +% 'SpatialMux' - Closed-loop spatial multiplexing scheme +% 'MultiUser' - Multi-user MIMO scheme +% 'Port5' - Single-antenna port, Port 5 +% 'Port7-8' - Single-antenna port, port 7 (when +% NLayers=1); Dual layer transmission, port 7 +% and 8 (when NLayers=2) +% 'Port8' - Single-antenna port, Port 8 +% 'Port7-14' - Up to 8 layer transmission, ports 7-14 +% PRBSet - A 1- or 2-column matrix, containing the 0-based Physical +% Resource Block indices (PRBs) corresponding to the resource +% allocations for this PDSCH. +% RNTI - Radio Network Temporary Identifier (16-bit) +% +% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission +% schemes, the channel estimator configuration structure CEC contains the +% following additional field: +% Reference - Optional. Specifies point of reference (signals to +% internally generate) for channel estimation. +% ('DMRS'(default), 'CSIRS') +% +% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission +% schemes, with Reference='DMRS', the channel estimation is performed +% using UE-specific reference signals and the returned channel estimate +% will be of size M-by-N-by-NRxAnts-by-NLayers. Alternatively, with +% Reference='CSIRS' the channel estimation is performed using the CSI +% reference signals (CSI) and the returned channel estimate will be of +% size M-by-N-by-NRxAnts-by-CSIRefP. For other transmission schemes the +% channel estimation is performed using cell-specific reference signals +% and the channel estimate will be of size M-by-N-by-NRxAnts-by-CellRefP. +% Note that CSI-RS based channel estimation and hence Reference='CSIRS' +% is strictly only valid within the standard for the 'Port7-14' +% transmission scheme. The optional CSIRSPeriod parameter controls the +% downlink subframes in which CSI-RS will be present, either always 'On' +% or 'Off', or defined by the scalar subframe configuration index Icsi-rs +% (0...154) or the explicit subframe periodicity and offset pair [Tcsi-rs +% Dcsi-rs] (TS 36.211 Section 6.10.5.3). +% +% For the 'Port7-8' and 'Port7-14' transmission schemes with +% 'UserDefined' pilot averaging, if CEC.TimeWindow = 2 or 4 and +% CEC.FreqWindow=1 the estimator will enter a special case where an +% averaging window of 2 or 4 pilots in time will be used to average the +% pilot estimates; the averaging is always applied across 2 or 4 pilots, +% regardless of their separation in OFDM symbols. This operation ensures +% that averaging is always done on 2 or 4 pilots. This provides the +% appropriate "despreading" operation required for the case of UE RS +% ports / CSI-RS ports which occupy the same time/frequency locations but +% use different orthogonal covers to allow them to be differentiated at +% the receiver. For the CSI-RS and any number of configured CSI-RS ports +% (given by ENB.CSIRefP), the pilot REs occur in pairs, one pair per +% subframe, that require averaging with CEC.TimeWindow=2 and will result +% in a single estimate per subframe. For the UE RS with between 1 and 4 +% layers (given by CHS.NLayers), the pilot REs occur in pairs, repeated +% in each slot, that require averaging with CEC.TimeWindow=2 and will +% result in two estimates per subframe, one for each slot; for between 5 +% and 8 layers, the pairs are distinct between the slots of the subframe +% and the required averaging is CEC.TimeWindow=4, resulting in one +% estimate per subframe. +% +% Example: +% Transmit RMC R.12 (4-antenna transmit diversity), model the propagation +% channel by combining all transmit antennas onto one receive antenna, +% OFDM demodulate and finally channel estimate. +% +% enb = lteRMCDL('R.12'); +% cec = struct('FreqWindow',1,'TimeWindow',1,'InterpType','cubic',... +% 'PilotAverage','UserDefined','InterpWinSize',3,... +% 'InterpWindow','Causal'); +% txWaveform = lteRMCDLTool(enb,[1;0;0;1]); +% rxWaveform = sum(txWaveform,2); +% rxGrid = lteOFDMDemodulate(enb,rxWaveform); +% hest = lteDLChannelEstimate(enb,cec,rxGrid); +% +% See also lteOFDMDemodulate, lteEqualizeMMSE, lteEqualizeZF, +% lteDLPerfectChannelEstimate, griddata. + +% Copyright 2009-2013 The MathWorks, Inc. + +function [H_EST, NoisePowerEst, AvgEstimates, Estimates] = lteDLChannelEstimate2(varargin) + + if(isstruct(varargin{2})) + if(isstruct(varargin{3})) + PDSCH = varargin{2}; + CEC = varargin{3}; + RXGRID = varargin{4}; + else + PDSCH = []; + CEC = varargin{2}; + RXGRID = varargin{3}; + end + else + % If no configuration structure then use the TestEVM method + PDSCH = []; + CEC.PilotAverage = 'TestEVM'; + RXGRID = varargin{2}; + end + + ENB = varargin{1}; + % Get dimensions of resource grid + Dims = lteDLResourceGridSize(ENB); + K = Dims(1); + Lsf = Dims(2); + + % Determine number of subframes + nsfs = size(RXGRID,2)/Dims(2); + + % Determine number of Tx- and RxAntennas + NRxAnts = size(RXGRID,3); + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) + if (~isfield(CEC,'Reference')) + CEC.Reference='DMRS'; + end + if (strcmpi(CEC.Reference,'DMRS')==1) + NTx = PDSCH.NLayers; + elseif (strcmpi(CEC.Reference,'CSIRS')==1) + NTx = ENB.CSIRefP; + else + error('lte:error','Reference must be "DMRS" or "CSIRS", see help for details.'); + end + else + if (~isfield(CEC,'Reference')) + CEC.Reference='CellRS'; + end + NTx = ENB.CellRefP; + end + + % Initialize size of estimated channel grid + H_EST = zeros([size(RXGRID,1) size(RXGRID,2) size(RXGRID,3) NTx]); + + % Preallocate noise power estimate vector for speed + noiseVec = zeros(size(NRxAnts,NTx)); + + if (NTx == 4) + nn=3; + else + nn=NTx; + end + RefEstimates=zeros(nn,2*2*2*ENB.NDLRB*10); + + for rxANT = 1:NRxAnts + for nTxAntLayer = 1:NTx + + % Extract pilot symbols from received grid and calculate least + % squares estimate + [ls_estimates,specialvec,DwPTS]= GetPilotEstimates(ENB,nTxAntLayer-1,RXGRID(:,:,rxANT),PDSCH,CEC); + + Estimates(nTxAntLayer,1:length(ls_estimates(3,:))) = ls_estimates(3,:); + + % Average the pilots as defined by CEC.PilotAverage, this can + % be 'UserDefined' or 'TestEVM'. + % Note: Setting the window size to 1x1 is equivalent to no + % averaging. It is recommended that no averaging should be + % carried out when a high SNR is present, as this would have an + % adverse effect on the least squares estimates + if strcmpi(CEC.PilotAverage,'UserDefined')&&(CEC.FreqWindow==1)&&(CEC.TimeWindow==1) + P_EST = ls_estimates; + ScalingVec = 0; + else + [P_EST, ScalingVec]= PilotAverage(PDSCH,CEC,H_EST,ls_estimates); + end + + AvgEstimates(nTxAntLayer,1:length(P_EST(3,:))) = P_EST(3,:); + + if strcmpi(CEC.PilotAverage,'TestEVM') + % Channel estimation as defined in TS36.141 Annex F.3.4 is + % performed, the pilots are averaged in time and frequency + % and the resulting vector is linearly interpolated. + %---------------------- + % Interpolate eq coefficients extrapolating to account for + % missing pilots at the edges + interpEqCoeff = interp1(find(P_EST~=0),P_EST(P_EST~=0),(1:length(P_EST)).','linear','extrap'); + % --------------------- + % The DC carrier needs to be accounted for during + % interpolation + % Get pilot symbol index values + ind = lteCellRSIndices(ENB,0); + % Using initial index value calculate position of pilot + % symbols within interpolated coefficients + if ind(1)-3>0 + vec = (ind(1)-3):3:K; + else + vec = ind(1):3:K; + end + % Determine the index values of the pilots either side of + % the DC carrier + preDC = vec(length(vec)/2); + postDC = vec(1+length(vec)/2); + % Interpolate the section using the DC carrier and insert + % this into the interpolated vector containing the + % coefficients + interpEqCoeffTemp = interp1(1:4:5,[interpEqCoeff(preDC) interpEqCoeff(postDC)],1:5,'linear'); + interpEqCoeff(preDC:K/2) = interpEqCoeffTemp(1:length(interpEqCoeff(preDC:K/2))); + interpEqCoeff(1+K/2:postDC) = interpEqCoeffTemp(2+length(interpEqCoeff(preDC:K/2)):end); + %---------------------- + % Generate grid by replicating estimated equalizer channel + % coefficients + H_EST(:,:,rxANT,nTxAntLayer) = repmat(interpEqCoeff,1,Lsf*nsfs); + % The value of the noise averaged pilot symbols are placed + % into P_EST(3,:) matrix and these are used to determine + % the noise power present on the pilot symbol estimates of + % the channel. + P_EST = ls_estimates; + tempGrid = squeeze(H_EST(:,:,rxANT,nTxAntLayer)); + P_EST(3,:) = tempGrid(sub2ind(size(H_EST),P_EST(1,:),P_EST(2,:))); + + else + % Channel estimation is performed by analyzing up to + % 'CEC.InterpWinSize' subframes together and estimating + % virtual pilots outwith the bounds of the subframe. + % Averaging window can be set to Causal, Non-causal or + % Centred, Centered. + + % Using the desired subframeAveraging type the initial + % position of the window is determined + if(CEC.InterpWinSize>=1) + if strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered') + % For Centered averaging the window size must be odd + if ~mod(CEC.InterpWinSize,2) + error('lte:error','Window size must be odd for centered window type'); + end + % For Centered windowing both current,future and past + % data are used to estimate current channel coefficients + x = floor(CEC.InterpWinSize/2); + y = floor(CEC.InterpWinSize/2); + elseif strcmpi(CEC.InterpWindow,'Causal') + % For causal windowing current and past data are used + % to estimate current subframe channel coefficients + x = 0; + y = CEC.InterpWinSize-1; + elseif strcmpi(CEC.InterpWindow,'Non-causal') + % For non-causal windowing current and future data are + % used to estimate current subframe channel + % coefficients + x = CEC.InterpWinSize-1; + y = 0; + else + error('lte:error','Channel estimation structure field InterpWindow must be one of the following: Causal,Non-causal,Centred,Centered'); + end + else + error('lte:error','InterpWinSize cannot be less than 1'); + end + + % Interpolate using averaged pilot estimates and defined + % interpolation settings + for sf = 0:nsfs-1 + if specialvec(sf+1)=='U' + H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = NaN; + else + % Extract the pilots from required subframes + p_use = P_EST; + p_use(:,p_use(4,:)>(sf+1)+x)=[]; + p_use(:,p_use(4,:)<(sf+1)-y)=[]; + + % Account for DC offset + p_use(1,(p_use(1,:)>K/2)) = p_use(1,(p_use(1,:)>K/2))+1; + + if strcmpi(CEC.InterpType,'Cubic')||strcmpi(CEC.InterpType,'Linear') + % VPVEC is used to determine if virtual pilots are + % needed at the beginning or end of the + % interpolation window, if the current subframe,sf, + % is located at beginning or end of the window then + % virtual pilots are created accordingly + vpvec = unique(p_use(4,:)); + + if (strcmp(CEC.Reference,'CellRS')==1) + % Create virtual pilots and append to vector + % containing pilots using cell-specific RS + % methodology. + vps = createVirtualPilots(ENB,p_use(1:3,:),1,1,(sf+1==min(vpvec)),(sf+1==max(vpvec))); + p_use = [p_use(1:3,:) vps]; + else + % Create edge virtual pilots suitable for + % UE RS which can have partial bandwidth, + % or CSI-RS. + if (~isempty(p_use)) + vps = createEdgeVirtualPilots(ENB,p_use(1:3,:)); + p_use = [p_use(1:3,:) vps]; + end + end + end + % Perform 2D interpolation + % Interpolation is carried out on a (K+1)-by-L + % matrix to account for DC offset being added in + if (~isempty(p_use)) + Htemp = griddata(p_use(2,:)-Lsf*sf,p_use(1,:),p_use(3,:),1:Lsf,(1:K+1)',CEC.InterpType); %#ok + % Remove DC offset + Htemp(1+(K/2),:) = []; + + if specialvec(sf+1)=='S' + Htemp(:,DwPTS+1:Lsf) = NaN; + end + H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = Htemp; + + if isnan(H_EST) + error('lte:error','H_EST NaN'); + end + end + end + end + end + if nTxAntLayer<3 || (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'}))) + % The noise level present can be determined using the noisy + % least squares estimates of the channel at pilot symbol + % locations and the noise averaged pilot symbol estimates of the + % channel + noise = ls_estimates(3,~isnan(ls_estimates(3,:))) - P_EST(3,~isnan(P_EST(3,:))); + if strcmpi(CEC.PilotAverage,'UserDefined') + noise = sqrt(ScalingVec./(ScalingVec+1)).*noise; + end + + % Additional averaging for noise estimation in LTE-A case, + % to suppress interference from orthogonal sequences on + % other antennas in same time-frequency locations. + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... + (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) + if (~isempty(ls_estimates)) + if (strcmpi(CEC.Reference,'DMRS')==1) + temp=[]; + pilotSC = unique(ls_estimates(1,:)); + for i = pilotSC + x=find(ls_estimates(1,:)==i); + x=[x(1) x(end)]; + temp=[temp mean(noise(x))*2]; %#ok + end + noise=temp; + end + end + end + + % Taking the variance of the noise present on the pilot symbols + % results in a value of the noise power for each transmit and + % receive antenna pair + if (isempty(noise)) + noiseVec(rxANT,nTxAntLayer)=NaN; + else + noiseVec(rxANT,nTxAntLayer) = mean(noise.*conj(noise)); + end + end + end + end + + % The mean of the noise power across all the transmit/receive antenna + % pairs is used as the estimate of the noise power + NoisePowerEst = mean(mean(noiseVec)); + +end + +% GetPilotEstimates Obtain the least squares estimates of the reference +% signals +% [ls_estimates] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID) Extracts the +% reference signals for a specific transmit/receive antenna pair and +% calculates their least squares estimate. The results are placed in a +% 3xNp matrix containing the subcarrier and OFDM symbol location, row and +% column subscripts, and value. Np is the number of cell specific +% reference (pilot) symbols per resource grid +% +% RXGRID is an MxN array where M is the number of subcarriers, +% N is the number of OFDM symbols. Dimension M must be +% 12*NDLRB where NDLRB must be {6,15,25,50,75,100}. +% Dimension N must be a multiple of number of symbols in a subframe L, +% where L=14 for normal cyclic prefix and L=12 for extended cyclic +% prefix. +% +% nTxAntLayer defines which transmit antennas' or layers' pilot symbols to extract +% +% ENB is a structure and must contain the following fields: +% NDLRB - Number of downlink resource blocks +% NCellID - Physical layer cell identity +% CellRefP - Number of transmit antenna ports {1,2,4} +% CyclicPrefix - Optional. Cyclic prefix length{'Normal'(default),'Extended'} +% +% +% Example +% Return the least squares estimate of the pilots symbols in a 3xNp array +% where the first row is the subcarrier index,k the second row is the OFDM +% symbol,l and the third row defines the least squares estimate of the +% pilot located at that position. +% +% enb=struct('NDLRB',6,'CellRefP',1,'NCellID',0,'CyclicPrefix','Normal'); +% rxGrid=ones(lteDLResourceGridSize(enb)); +% nTxAntLayer=0; +% ls_estimates = GetPilotEstimates(enb,nTxAntLayer,rxGrid).' +% ans = +% 1.0000 1.0000 -0.7071 - 0.7071i +% 7.0000 1.0000 -0.7071 - 0.7071i +% 13.0000 1.0000 -0.7071 - 0.7071i +% . . . +% . . . +% . . . +% 58.0000 12.0000 -0.7071 + 0.7071i +% 64.0000 12.0000 0.7071 - 0.7071i +% 70.0000 12.0000 0.7071 - 0.7071i + +% Copyright 2009-2010 The MathWorks, Inc. +function [ls_estimates,specialvec,DwPTS] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID,PDSCH,CEC) + +% Get dimensions of resource grid +Dims = lteDLResourceGridSize(ENB); +nsfs = size(RXGRID,2)/Dims(2); +K = Dims(1); +L = Dims(2); + +if (rem(nsfs,1)~=0) + error('lte:error','The received grid input must contain a whole number of subframes.'); +end + +if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) + if (strcmp(CEC.Reference,'DMRS')==1) + % create UE RS indices + PDSCH.NTxAnts=0; + PDSCH.W=[]; + linearIndSF = lteDMRSIndices(ENB,PDSCH,'mat'); + else + % create CSI-RS indices and symbols and deal with zero removal + linearIndSF = lteCSIRSIndices(ENB,'mat'); + CsiRS = lteCSIRS(ENB,'mat'); + CsiRS = CsiRS(:,nTxAntLayer+1); + linearIndSF(CsiRS==0,:)=[]; + CsiRS(CsiRS==0)=[]; + end + % If more than one TxAntenna is used we need to adjust indices values so that + % they start in first antenna plane + linearIndSF = linearIndSF(:,nTxAntLayer+1) - (K*L*nTxAntLayer); +else + % Extract linear indices of reference signals for particular TxAntenna + dumENB = ENB; + dumENB.NSubframe = 0; + linearIndSF = lteCellRSIndices(dumENB,nTxAntLayer); + % If more than one TxAntenna is used we need to adjust indices values so that + % they start in first antenna plane + linearIndSF = linearIndSF - (K*L*nTxAntLayer); +end + +% Create grid for pilot symbols +linearIndGrid = zeros(size(linearIndSF,1),nsfs); +idealPilotGrid = zeros(size(linearIndSF,1),nsfs); +offset = double(ENB.NSubframe); +specialvec = char(zeros(1,0)); +DwPTS = 0; +for sf = ENB.NSubframe:ENB.NSubframe+nsfs-1 + ENB.NSubframe = mod(sf,10); + linearIndGrid(:,sf-offset+1) = (linearIndSF+(sf*K*L)); + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) + if (strcmp(CEC.Reference,'DMRS')==1) + % create UE RS symbols + DMRS = lteDMRS(ENB,PDSCH,'mat'); + idealPilotGrid(1:length(DMRS),sf-offset+1) = DMRS(:,nTxAntLayer+1); + else + % use CSI-RS symbols created earlier + idealPilotGrid(1:length(CsiRS),sf-offset+1) = CsiRS; + end + else + CellRS = lteCellRS(ENB, nTxAntLayer); + idealPilotGrid(1:length(CellRS),sf-offset+1) = CellRS; + end + dupinfo = lteDuplexingInfo(ENB); + if strcmpi(dupinfo.SubframeType,'Special') + specialvec = [specialvec 'S']; %#ok + DwPTS = dupinfo.NSymbolsDL; + elseif strcmpi(dupinfo.SubframeType,'Uplink') + specialvec = [specialvec 'U']; %#ok + elseif strcmpi(dupinfo.SubframeType,'Downlink') + specialvec = [specialvec 'D']; %#ok + else + error('lte:error','Invalid SubframeType, in structure dupinfo'); + end +end + +if (~isempty(idealPilotGrid)) + ulvec = find(idealPilotGrid(size(idealPilotGrid,1),:)==0); + linearIndGrid(:,ulvec) = []; + idealPilotGrid(:,ulvec) = []; +else + ulvec = []; +end + +linearIndGrid = linearIndGrid - (offset*K*L); +% Extract the row and column subscripts of the pilot symbols for entire +% grid +[p_estSC, p_estSym] = ind2sub(size(RXGRID),linearIndGrid); + +% Calculate least squares channel estimates at pilot locations +p_est = RXGRID(linearIndGrid)./idealPilotGrid; + +% Create a vector - [k;l;p_est] +sfref = repmat((1:nsfs),length(linearIndSF),1); +sfref(:,ulvec) = []; +ls_estimates = [double(p_estSC(:).') ; double(p_estSym(:).') ; p_est(:).';double(sfref(:)).']; + +end + +%PilotAverage Average reference signals +% [P_EST] = PilotAverage(PDSCH,CEC,H_EST,LS_EST) performs a moving average of pilot +% symbols +% +% LS_EST is a 3xNp matrix containing the least square estimates of the +% pilots symbols and their column and row indices within the received +% grid. +% LS_EST = [k;l;p_est] +% H_EST is an MxN matrix and defines the size of the grid that the +% averaging will be performed on +% +% CEC is a structure which defines the type of channel estimation +% performed. CEC must contain a set of the following fields: +% PilotAverage - Type of pilot averaging {'TestEVM', 'UserDefined'} +% FreqWindow - Size of window used to average in frequency in +% resource elements. +% TimeWindow - Size of window used to average in time in resource +% elements +% InterpType - Type of 2D interpolation used(see griddata for types) +% +% The dimensions of the averaging window are defined in structure CEC. +% The window is defined in terms of Resource Elements, and depending on +% the size of the averaging window, averaging will be performed in either +% the time or frequency direction only, or a combination of both creating +% a square/rectangular window. The pilot to be averaged will always be +% placed at the center of the window, therefore the window size must be +% an odd number. +% +% Frequency Direction: 9x1 Time Direction: 1x9 +% +% x +% x +% x +% x +% P x x x x P x x x x +% x +% x +% x +% x +% +% +% Square window: 9x9 +% x x x x x x x x x +% P x x x x x x P x +% x x x x x x x x x +% x x x x x x x x x +% x x x x P x x x x +% x x x x x x x x x +% x x x x x x x x x +% P x x x x x x P x +% x x x x x x x x x +% +% Performing EVM compliance testing as per TS36.141 AnnexF.3.4, requires +% time averaging be done over 10 subframes(i.e. 1 Frame) across each +% pilot symbol carrying subcarrier creating a TotalNumberPilotsx1 vector. +% This is then frequency averaged using a moving window average with a window +% size of 19. This type of averaging can be performed by setting the +% PilotAverage type in structure CEC to 'TestEVM'. + +% Copyright 2009-2013 The MathWorks, Inc. + +function [P_EST, scalingVec] = PilotAverage(PDSCH,CEC,H_EST,P_EST) + + switch lower(CEC.PilotAverage) + + case 'userdefined' + if(CEC.FreqWindow<1)||(CEC.TimeWindow<1) + error('lte:error','Frequency and time averaging window size cannot be less than 1'); + end + + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... + (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) + + % Perform averaging in time direction using a moving window + % of size N = CEC.TimeWindow + N = CEC.TimeWindow; + + if (~isempty(P_EST)) + % Average only subcarriers which contain RS symbols. Extract RS + % symbols on a per subcarrier basis and use window to average. + for subcarrier = unique(P_EST(1,:)) + + % Store DRS symbols from relevant slot in vector for easy access + symbVec = (P_EST(3,P_EST(1,:)==subcarrier)).'; + + % Define temporary vector to store the averaged values + avgVec = zeros(size(symbVec)); + + % Check length of input at least equal to size of window; + % if not, reduce window size. Despreading will be incomplete + % here + if (length(symbVec) < N) + N = length(symbVec); + end + + % Determines position of window w.r.t element being averaged, + % and performs the averaging + for symbNo = 1:length(symbVec) + if (symbNo-(N/2+1)<=0) + avgVec(symbNo)= sum(symbVec(1:N))/N; + else + avgVec(symbNo) = sum(symbVec(end-(N-1):end))/N; + end + end + + % Update P_EST with averaged values + P_EST(3,P_EST(1,:)==subcarrier)= avgVec; + end + + end + + % This vector is used to scale the noise by the number of averaging + % elements in the window + scalingVec = ones(size(P_EST(3,:)))*N; + + else + + if (strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered')) + if (~mod(CEC.FreqWindow,2)||~mod(CEC.TimeWindow,2)) + error('lte:error','Window size must be odd in time and frequency for centred/centered window type'); + end + end + + % Define number of subcarriers + K = size(H_EST,1); + + % Define an empty resource grid with the DC offset subcarrier + % inserted + grid = zeros(size(H_EST,1)+1,size(H_EST,2)); + + % Account for DC offset + P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))+1; + + % Place the pilot symbols back into the received grid with the + % DC offset subcarrier in place + grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = P_EST(3,:); + + % Define convolution window + kernel = ones(CEC.FreqWindow,CEC.TimeWindow); + + % Perform convolution + grid2=grid; + grid = conv2(grid,kernel,'same'); + + % Extract only pilot symbol location values and set the rest of + % the grid to zero + tempGrid = zeros(size(grid)); + tempGrid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))); + grid = tempGrid; + + % Normalize pilot symbol values after convolution + [grid, scalingVec] = normalisePilotAverage(CEC,P_EST,grid); + + % Place averaged values back into pilot symbol matrix + P_EST(3,:) = grid(sub2ind(size(tempGrid),P_EST(1,:),P_EST(2,:))); + + % Remove DC offset + P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))-1; + + end + + + case 'testevm' + % As defined in TS36.141 Annex F.3.4 pilots are averaged in + % time across all pilot carrying subcarriers. The resulting + % vector is averaged in frequency direction with a moving + % averaging window of 19. + + % Get phase (theta) and magnitude(radius) of complex estimates + [theta,radius] = cart2pol(real(P_EST(3,:)),imag(P_EST(3,:))); + + % Declare vector to temporarily store averaged phase and + % magnitude + phasemagVec = zeros(size(H_EST,1),2); + + % Perform averaging in time and frequency for phase and + % magnitude separately and recombine at end + for phaseOrMag = 1:2 + % Define temporary P_EST vector and set estimates row to + % phase then magnitude + P_EST_temp = P_EST; + if phaseOrMag==1 + P_EST_temp(3,:) = theta; + elseif phaseOrMag==2 + P_EST_temp (3,:) = radius; + end + + % Declare averaging vector + avgVec = zeros(size(H_EST,1),1); + vec = []; + + % Average across pilot symbol carrying subcarriers in time, + % unwrapping performed on a subcarrier basis + for i = 1:size(H_EST,1) + if ~isempty(P_EST(3,(P_EST(1,:)==i))) + if phaseOrMag==1 + avgVec(i) = mean(unwrap(P_EST_temp(3,(P_EST(1,:)==i)))); + + elseif phaseOrMag==2 + avgVec(i) = mean(P_EST_temp(3,(P_EST(1,:)==i))); + end + vec = [vec i]; %#ok + end + end + + % Remove subcarriers which contained no pilot symbols, then + % perform frequency averaging + avgVec = avgVec(vec); + + % Perform averaging in frequency direction using a moving + % window of size N, N = 19 in TS36.141 Annex F.3.4 + % Performs a moving average of window size N. At the edges, where less than + % N samples are span the window size is reduce to span 1, 3, 5, 7 ... + % samples. + N = 19; + + % avgVec must be a column vector + if (size(avgVec,2) > 1) + error('lte:error','Input to moving average function must be a column vector.') + end + + % N max window size 19 as defined in Annex F.3.4 + if ~mod(N,2) + error('lte:error','Window size N must be odd'); + end + + if (length(avgVec) < N) + % sprintf ('Input signal must have at least %d elements',N); + error('lte:error','Input signal must have at least %d elements',N); + end + + % Use filter to perform part of the averaging (not normalized) + zeroPad = zeros(N-1,1); + data = [avgVec; zeroPad]; + weights = ones(N,1); + freqAvg = filter(weights,1,data); + + % Remove unwanted elements + removeIdx = [ 2:2:N ( length(data)-(2:2:N)+1 )]; + freqAvg(removeIdx) = []; + + % Normalization factor + normFactor = [1:2:N-2 N*ones(1,length(freqAvg)-(N-1)) N-2:-2:1]'; + freqAvg = freqAvg./normFactor; + + % Place frequency averaged pilots into temporary storage + % vector + phasemagVec(vec,phaseOrMag) = freqAvg; + + end + % Convert averaged symbols back to Cartesian coordinates + [X,Y] = pol2cart(phasemagVec(:,1),phasemagVec(:,2)); + P_EST = complex(X,Y); + scalingVec = []; + + otherwise + error('lte:error','Channel estimation structure field PilotAverage must be one of the following: "UserDefined" or "TestEVM"'); + + end +end + +function [avgGrid, scalingVec] = normalisePilotAverage(CEC,p_est,grid) + + % Determine total number of pilots within half a subframe + nPilots = length(p_est); + + avgGrid = zeros(size(grid)); + scalingVec = zeros(1,size(p_est,2)); + + for n = 1:nPilots + % Determine in which subcarrier and OFDM symbol pilot is located + sc = p_est(1,n); + sym = p_est(2,n); + % Determine number of REs to look at either side of pilot + % symbol in time and frequency + half_freq_window = floor(CEC.FreqWindow/2); + half_time_window = floor(CEC.TimeWindow/2); + % Set the location of the window at the back of the pilot + % to be averaged in frequency direction + upperSC = sc-half_freq_window; + % If this location is outwith the grid dimensions set it to + % lowest subcarrier value + if upperSC<1 + upperSC = 1; + end + % Set the location of the window in front of the pilot to + % be averaged in frequency direction + lowerSC = sc+half_freq_window; + % If this location is outwith the grid dimensions set it to + % highest subcarrier value + if lowerSC>size(grid,1) + lowerSC = size(grid,1); + end + % Set the location of the window in front of the pilot to + % be averaged in time direction + leftSYM = sym-half_time_window; + % If this location is outwith the grid dimensions set it to + % lowest OFDM symbol value + if leftSYM<1 + leftSYM = 1; + end + % Set the location of the window at the back of the pilot + % to be averaged in time direction + rightSYM = sym+half_time_window; + % If this location is outwith the grid dimensions set it to + % highest OFDM symbol value + if rightSYM>size(grid,2) + rightSYM = size(grid,2); + end + + % Define the window to average using the determined + % subcarrier and OFDM symbol values + avgVec = grid(upperSC:lowerSC,leftSYM:rightSYM); + + % Remove the zero values from the window so that the average is + % calculated using only valid pilots + avgVec = avgVec(avgVec~=0); + % Average the desired pilot using all pilots within + % averaging window + if isempty(avgVec) + avgVec = 0; + end + + avgGrid(sc,sym) = grid(sc,sym)/numel(avgVec); + scalingVec(n) = numel(avgVec); + end +end + +%createVirtualPilots Create virtual pilots. +% [VP] = createVirtualPilots(..) returns a 3xNvp matrix which contains +% the time/frequency and least squares estimate of virtual pilots. +% Nvp is the number of virtual pilots. +% +% The inputs are: +% +% ENB structure which must contain the following fields: +% NDLRB - Number of downlink resource blocks +% CyclicPrefix - Optional. Cyclic prefix length {'Normal'(default),'Extended'} +% +% P_EST - A matrix containing the pilots within the grid. The matrix must +% have three rows. Each column contains the information for each pilot: +% [subcarrier_indices symbol_indices pilot_channel_estimate] +% +% ANTENNA - The current antenna port +% CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END - a value {0 or 1} +% indicating whether to return virtual pilots in each position. A 1 +% indicates virtual pilots should be returned, a 0 indicates they should +% not be returned. +% +% Example: +% +% Create virtual pilots on the top of a grid of pilots (estimates) +% VP_TOP = createVirtualPilots(ENB,estimates,0,1,0,0,0); +% +% Add virtual pilots to current pilot estimates for interpolation +% estimates = [estimates VP_TOP]; + +% Copyright 2009-2010 The MathWorks, Inc. +function VP = createVirtualPilots(ENB,P_EST,CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END) + + % Initialize outputs + VP = zeros(3,0); + + % Get resource grid dimensions + dims = lteDLResourceGridSize(ENB); + K = dims(1); + + % Virtual pilot cut-off values - indices in time or frequency at which + % the virtual pilot shall be discarded. As the symbol indices of the + % pilots passed in may be positive and negative the start and end of + % the effective grid varies therefore affecting the front and end pilot + % cut-off values + coTop = -6; % + coBottom = K+6; % + coFront = min(P_EST(2,:))-7; % floor(min(P_EST(2,:))/L)*L-5; % + coEnd = max(P_EST(2,:))+7; % ceil(max(P_EST(2,:))/L)*L+5; + + % Number of pilots in a subcarrier is dependent upon antenna +% noPilotinSC = (2-floor(ANTENNA/2))*nSF; + noPilotinSC = numel(P_EST(P_EST(1,:)==P_EST(1,1))); + + % Number of pilots in a symbol + noPilotinSym = K/6; + + % Sort by subcarrier + [~, indices] = sortrows(P_EST(1,:).'); + p_est_sorted_sc = P_EST(:,indices).'; + + if CREATE_TOP + % Repeat first and second SC containing pilots + p_est_rep_above = p_est_sorted_sc(1+noPilotinSC:noPilotinSC*2,:); + p_est_rep_above = [p_est_rep_above.' p_est_sorted_sc(1:noPilotinSC,:).'].'; + + % Subtract six to normalize subcarrier indices + p_est_rep_above(:,1) = p_est_rep_above(:,1) - 6; + + % Remove virtual pilots which are too far + p_est_rep_above(p_est_rep_above(:,1) < coTop,:) = []; + + % Initialize vp vector + VP_TOP = zeros(size(p_est_rep_above)); + + % Create virtual pilots on top + for p = 1:size(p_est_rep_above) + VP_TOP(p,:) = calculatePilot(p_est_rep_above(p,:), p_est_sorted_sc); + end + + % Transpose to make suitable for output + VP = [VP VP_TOP.']; + end + + if CREATE_BOTTOM + % Repeat last and second last SC containing pilots + p_est_rep_below = p_est_sorted_sc(end-noPilotinSC*2+1:end-noPilotinSC,:); + p_est_rep_below = [p_est_rep_below.' p_est_sorted_sc(end-noPilotinSC+1:end,:).'].'; + + % Add six to normalize subcarrier indices + p_est_rep_below(:,1) = p_est_rep_below(:,1) + 6; + + % Remove virtual pilots which are too far + p_est_rep_below(p_est_rep_below(:,1) > coBottom,:) = []; + + % Initialize vp vector + VP_BOTTOM = zeros(size(p_est_rep_below)); + + % Create virtual pilots on bottom + for p = 1:size(p_est_rep_below) + VP_BOTTOM(p,:) = calculatePilot(p_est_rep_below(p,:), p_est_sorted_sc); + end + + % Transpose to make suitable for output + VP = [VP VP_BOTTOM.']; + end + + % Sort by symbol + [~, indices] = sortrows(P_EST(2,:).'); + p_est_sorted_sym = P_EST(:,indices).'; + + if CREATE_FRONT + % Repeat first symbol containing pilots + p_est_rep_front = p_est_sorted_sym(noPilotinSym+1:(noPilotinSym*2),:); + + % Add subcarrier above and below + p_est_rep_front = addSCs(p_est_rep_front,noPilotinSym); + + % Repeat second symbol containing pilots + p_est_rep_front_second = p_est_sorted_sym(1:noPilotinSym,:); + + % Add subcarrier above and below + p_est_rep_front_second = addSCs(p_est_rep_front_second,noPilotinSym); + + % Concatenate to create virtual pilots + p_est_rep_front = [p_est_rep_front.' p_est_rep_front_second.'].'; + + % Subtract seven to normalize symbol indices + p_est_rep_front(:,2) = p_est_rep_front(:,2) - 7; + + % Remove virtual pilots which are too far + p_est_rep_front = removeTooFar(p_est_rep_front,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); + + % Initialize vp vector + VP_FRONT = zeros(size(p_est_rep_front)); + + % Create virtual pilots on front + for p = 1:length(p_est_rep_front) + VP_FRONT(p,:) = calculatePilot(p_est_rep_front(p,:), p_est_sorted_sc); + end + + % Transpose for output + VP = [VP VP_FRONT.']; + end + + if CREATE_END + % Repeat last symbol containing pilots + p_est_rep_end = p_est_sorted_sym(end-(noPilotinSym*2)+1:end-noPilotinSym,:); + + % Add subcarrier above and below + p_est_rep_end = addSCs(p_est_rep_end,noPilotinSym); + + % Repeat second symbol containing pilots + p_est_rep_end_second = p_est_sorted_sym(end-noPilotinSym+1:end,:); + + % Add subcarrier above and below + p_est_rep_end_second = addSCs(p_est_rep_end_second,noPilotinSym); + + % Concatenate to create virtual pilots + p_est_rep_end = [p_est_rep_end.' p_est_rep_end_second.'].'; + + % Add seven to normalize symbol indices, mod controls case when + % only 2 pilots per subcarrier + p_est_rep_end(:,2) = p_est_rep_end(:,2) + 7; + + % Remove virtual pilots which are too far + p_est_rep_end = removeTooFar(p_est_rep_end,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); + + % Initialize vp vector + VP_END = zeros(size(p_est_rep_end)); + + % Create virtual pilots on front + for p = 1:length(p_est_rep_end) + VP_END(p,:) = calculatePilot(p_est_rep_end(p,:), p_est_sorted_sc); + end + + % Transpose for output + VP = [VP VP_END.']; + end +end + +function vp = calculatePilot(p_est_rep, p_est_sorted) + % Calculate Euclidean distance between virtual pilot and other + % pilots + ind = sqrt((p_est_rep(1)-p_est_sorted(:,1)).^2+ (p_est_rep(2)-p_est_sorted(:,2)).^2); + % ind = (abs(p_est_rep(1)-p_est_sorted(:,1))+ abs(p_est_rep(2)-p_est_sorted(:,2))); + + % Sort from shortest to longest distance + [~, ind] = sortrows(ind); + + % Take three closest pilots + ind = ind(1:10); + pilots_use = p_est_sorted(ind,:); + + % If first 3 pilots used are in the same subcarrier or symbol then use 4th instead of 3rd + while ((pilots_use(3,1) == pilots_use(2,1)) && (pilots_use(2,1) == pilots_use(1,1)) || (pilots_use(3,2) == pilots_use(2,2)) && (pilots_use(2,2) == pilots_use(1,2))) + pilots_use(3,:) = []; + end + + % Calculate virtual pilot value + vp = calculateVirtualValue(pilots_use(3,:),pilots_use(1,:),pilots_use(2,:),p_est_rep(1),p_est_rep(2)); +end + +function new = calculateVirtualValue(a,b,c,xnew,ynew) + % Calculate vectors + AB = b-a; + AC = c-a; + + % Perform cross product + cro = cross(AB,AC); + + % Break out X, Y and Z plane coeffs + x = cro(1); + y = cro(2); + z = cro(3); + + % Calculate normal in equation + c = sum(cro.*a); + + % Calculate new z value + znew = (c - xnew*x - ynew*y)/z; + + % Return new point + new = [xnew ynew znew]; +end + +function pilots = addSCs(pilots, noPilotinSym) + % Add on extra subcarrier above + pilots(end+1,:) = pilots(1,:); + pilots(end,1) = pilots(end,1) - 6; + + % Add on extra subcarrier below + pilots(end+1,:) = pilots(noPilotinSym,:); + pilots(end,1) = pilots(end,1) + 6; +end + +function pilots = removeTooFar(pilots,p_est_sorted_sym,coTop,coBottom,coFront,coEnd) + pilots((pilots(:,2) < coFront) | (pilots(:,1) < coTop) | (pilots(:,2)> coEnd) | (pilots(:,1) > coBottom),:) = []; + + % Remove virtual pilots which fall within resource grid + removeInd = []; + for i = 1:size(pilots) + if (find(p_est_sorted_sym(:,2) == pilots(i,2))) + removeInd = [removeInd i]; %#ok + end + end + pilots(removeInd,:) = []; +end + +%CreateEdgeVirtualPilots +% Creates virtual pilots on the edges of the resource grid to improve +% interpolation results. Also adds virtual pilots around the current pilot +% estimates. +function vps = createEdgeVirtualPilots(enb,p_est) + + % Determine dimensions of current subframe + dims=lteDLResourceGridSize(enb); + K=dims(1); + L=dims(2); + + % Calculate virtual pilots beyond upper and lower bandwidth edge based + % on pilots present on subcarriers. Also create virtual pilots 1/2 RB + % above and below extent of current pilots. + vps=createDimensionVirtualPilots(p_est,2,unique([-6 min(p_est(1,:)-6) max(p_est(1,:)+6) K+6])); + + % Combine these frequency-direction VPs with original pilots. + temp = [p_est vps]; + + % Calculate virtual pilots beyond start and end of subframe based on + % pilots and frequency-direction VPs present in symbols. Also create + % virtual 1 OFDM symbol before and after extent of current pilots. + vps = [vps createDimensionVirtualPilots(temp,1,unique([-1 min(p_est(2,:)-1) max(p_est(2,:)+1) L+1]))]; + +end + +% dim=1 adds VPs in time +% dim=2 adds VPs in frequency +function vps = createDimensionVirtualPilots(p_est,dim,points) + + vps=[]; + + pilots = unique(p_est(dim,:)); + for i = pilots + x=find(p_est(dim,:)==i); + rep=1+double(length(x)==1); + adj=(1:rep)-rep; + pil = interp1(p_est(3-dim,x)+adj,repmat(p_est(3,x),1,rep),points,'linear','extrap'); + for j=1:length(points) + vps = [ vps [i;points(j);pil(j)] ]; %#ok + end + end + + if (dim==2) + vps = vps([2 1 3],:); + end + +end + diff --git a/matlab/tests/lteDLChannelEstimate3.m b/matlab/tests/lteDLChannelEstimate3.m new file mode 100644 index 000000000..7b0618002 --- /dev/null +++ b/matlab/tests/lteDLChannelEstimate3.m @@ -0,0 +1,1204 @@ +%lteDLChannelEstimate Downlink channel estimation +% [HEST NOISEEST] = lteDLChannelEstimate(...) returns HEST, the estimated +% channel between each transmit and receive antenna and NOISEEST, an +% estimate of the noise power spectral density on the reference signal +% subcarriers. +% +% HEST is an M-by-N-by-NRxAnts-by-CellRefP (optionally +% M-by-N-by-NRxAnts-by-NLayers for UE-specific beamforming transmission +% schemes) array where M is the number of subcarriers, N is the number of +% OFDM symbols, NRxAnts is the number of receive antennas, CellRefP is +% the number of cell-specific reference signal antenna ports and NLayers +% is the number of transmission layers. Using the reference signals, an +% estimate of the power spectral density of the noise present on the +% estimated channel response coefficients is returned. +% +% [HEST NOISEEST] = lteDLChannelEstimate(ENB, RXGRID) returns the +% estimated channel coefficients using the method described in +% TS36.104/TS36.141 Annex E/F for the purposes of transmitter EVM +% testing. +% +% ENB is a structure and must contain the following fields: +% NDLRB - Number of downlink resource blocks +% CellRefP - Number of cell-specific reference signal antenna ports +% (1,2,4) +% NCellID - Physical layer cell identity +% NSubframe - Subframe number +% CyclicPrefix - Optional. Cyclic prefix length +% ('Normal'(default),'Extended') +% DuplexMode - Optional. Duplex mode ('FDD'(default),'TDD') +% Only required for 'TDD' duplex mode: +% TDDConfig - Optional. Uplink/Downlink Configuration (0...6) +% (default 0) +% SSC - Optional. Special Subframe Configuration (0...9) +% (default 0) +% Only required for CEC.Reference='CSIRS' below: +% CSIRefP - Number of CSI-RS antenna ports (1,2,4,8) +% CSIRSConfig - CSI-RS configuration index (TS 36.211 Table +% 6.10.5.2-1) +% CSIRSPeriod - Optional. CSI-RS subframe configuration: +% ('On'(default),'Off',Icsi-rs,[Tcsi-rs Dcsi-rs]) +% +% RXGRID is a 3-dimensional M-by-N-by-NRxAnts array of resource elements. +% The second dimension of RXGRID can contain any whole number of +% subframes worth of OFDM symbols i.e. for normal cyclic prefix each +% subframe contains 14 OFDM symbols, therefore N is a multiple of 14. +% Note: to adhere to the estimation method defined in TS36.104/TS36.141, +% RXGRID must contain 10 subframes. +% +% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CEC, RXGRID) returns the +% estimated channel using the method and parameters defined by the +% configuration structure CEC. +% +% CEC is a structure which defines the type of channel estimation +% performed. CEC must contain a set of the following fields: +% PilotAverage - Type of pilot averaging ('TestEVM', 'UserDefined') +% FreqWindow - Size of window in resource elements used to average +% over frequency. +% TimeWindow - Size of window in resource elements used to average +% over time +% InterpType - Type of 2D interpolation used(see griddata for types) +% InterpWindow - Interpolation window type: ('Causal','Non-causal', +% 'Centred','Centered'). Note: 'Centred' and 'Centered' +% are equivalent +% InterpWinSize - Interpolation window size: +% 'Causal','Non-causal' - any number >=1 +% 'Centred','Centered' - odd numbers >=1 +% +% The 'TestEVM' pilot averaging will ignore other structure fields in +% CEC, and the method follows that described in TS36.104/TS36.141 Annex +% E/F for the purposes of transmitter EVM testing. +% +% The 'UserDefined' pilot averaging uses a rectangular kernel of size +% CEC.FreqWindow-by-CEC.TimeWindow and performs a 2D filtering operation +% upon the pilots. Note that pilots near the edge of the resource grid +% will be averaged less as they have no neighbors outside of the grid, +% or a limited number of neighbors outside of the grid obtained by the +% creation of virtual pilots. +% +% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CHS, CEC, RXGRID) returns +% the estimated channel given cell-wide settings structure ENB, PDSCH +% transmission configuration CHS and channel estimator configuration CEC. +% CHS must include the following fields: +% TxScheme - Transmission scheme, one of: +% 'Port0' - Single-antenna port, Port 0 +% 'TxDiversity' - Transmit diversity scheme +% 'CDD' - Large delay CDD scheme +% 'SpatialMux' - Closed-loop spatial multiplexing scheme +% 'MultiUser' - Multi-user MIMO scheme +% 'Port5' - Single-antenna port, Port 5 +% 'Port7-8' - Single-antenna port, port 7 (when +% NLayers=1); Dual layer transmission, port 7 +% and 8 (when NLayers=2) +% 'Port8' - Single-antenna port, Port 8 +% 'Port7-14' - Up to 8 layer transmission, ports 7-14 +% PRBSet - A 1- or 2-column matrix, containing the 0-based Physical +% Resource Block indices (PRBs) corresponding to the resource +% allocations for this PDSCH. +% RNTI - Radio Network Temporary Identifier (16-bit) +% +% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission +% schemes, the channel estimator configuration structure CEC contains the +% following additional field: +% Reference - Optional. Specifies point of reference (signals to +% internally generate) for channel estimation. +% ('DMRS'(default), 'CSIRS') +% +% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission +% schemes, with Reference='DMRS', the channel estimation is performed +% using UE-specific reference signals and the returned channel estimate +% will be of size M-by-N-by-NRxAnts-by-NLayers. Alternatively, with +% Reference='CSIRS' the channel estimation is performed using the CSI +% reference signals (CSI) and the returned channel estimate will be of +% size M-by-N-by-NRxAnts-by-CSIRefP. For other transmission schemes the +% channel estimation is performed using cell-specific reference signals +% and the channel estimate will be of size M-by-N-by-NRxAnts-by-CellRefP. +% Note that CSI-RS based channel estimation and hence Reference='CSIRS' +% is strictly only valid within the standard for the 'Port7-14' +% transmission scheme. The optional CSIRSPeriod parameter controls the +% downlink subframes in which CSI-RS will be present, either always 'On' +% or 'Off', or defined by the scalar subframe configuration index Icsi-rs +% (0...154) or the explicit subframe periodicity and offset pair [Tcsi-rs +% Dcsi-rs] (TS 36.211 Section 6.10.5.3). +% +% For the 'Port7-8' and 'Port7-14' transmission schemes with +% 'UserDefined' pilot averaging, if CEC.TimeWindow = 2 or 4 and +% CEC.FreqWindow=1 the estimator will enter a special case where an +% averaging window of 2 or 4 pilots in time will be used to average the +% pilot estimates; the averaging is always applied across 2 or 4 pilots, +% regardless of their separation in OFDM symbols. This operation ensures +% that averaging is always done on 2 or 4 pilots. This provides the +% appropriate "despreading" operation required for the case of UE RS +% ports / CSI-RS ports which occupy the same time/frequency locations but +% use different orthogonal covers to allow them to be differentiated at +% the receiver. For the CSI-RS and any number of configured CSI-RS ports +% (given by ENB.CSIRefP), the pilot REs occur in pairs, one pair per +% subframe, that require averaging with CEC.TimeWindow=2 and will result +% in a single estimate per subframe. For the UE RS with between 1 and 4 +% layers (given by CHS.NLayers), the pilot REs occur in pairs, repeated +% in each slot, that require averaging with CEC.TimeWindow=2 and will +% result in two estimates per subframe, one for each slot; for between 5 +% and 8 layers, the pairs are distinct between the slots of the subframe +% and the required averaging is CEC.TimeWindow=4, resulting in one +% estimate per subframe. +% +% Example: +% Transmit RMC R.12 (4-antenna transmit diversity), model the propagation +% channel by combining all transmit antennas onto one receive antenna, +% OFDM demodulate and finally channel estimate. +% +% enb = lteRMCDL('R.12'); +% cec = struct('FreqWindow',1,'TimeWindow',1,'InterpType','cubic',... +% 'PilotAverage','UserDefined','InterpWinSize',3,... +% 'InterpWindow','Causal'); +% txWaveform = lteRMCDLTool(enb,[1;0;0;1]); +% rxWaveform = sum(txWaveform,2); +% rxGrid = lteOFDMDemodulate(enb,rxWaveform); +% hest = lteDLChannelEstimate(enb,cec,rxGrid); +% +% See also lteOFDMDemodulate, lteEqualizeMMSE, lteEqualizeZF, +% lteDLPerfectChannelEstimate, griddata. + +% Copyright 2009-2013 The MathWorks, Inc. + +function [H_EST, NoisePowerEst, AvgEstimates, Estimates] = lteDLChannelEstimate2(varargin) + + if(isstruct(varargin{2})) + if(isstruct(varargin{3})) + PDSCH = varargin{2}; + CEC = varargin{3}; + RXGRID = varargin{4}; + else + PDSCH = []; + CEC = varargin{2}; + RXGRID = varargin{3}; + avgrefs = varargin{4}; + end + else + % If no configuration structure then use the TestEVM method + PDSCH = []; + CEC.PilotAverage = 'TestEVM'; + RXGRID = varargin{2}; + end + + ENB = varargin{1}; + % Get dimensions of resource grid + Dims = lteDLResourceGridSize(ENB); + K = Dims(1); + Lsf = Dims(2); + + % Determine number of subframes + nsfs = size(RXGRID,2)/Dims(2); + + % Determine number of Tx- and RxAntennas + NRxAnts = size(RXGRID,3); + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) + if (~isfield(CEC,'Reference')) + CEC.Reference='DMRS'; + end + if (strcmpi(CEC.Reference,'DMRS')==1) + NTx = PDSCH.NLayers; + elseif (strcmpi(CEC.Reference,'CSIRS')==1) + NTx = ENB.CSIRefP; + else + error('lte:error','Reference must be "DMRS" or "CSIRS", see help for details.'); + end + else + if (~isfield(CEC,'Reference')) + CEC.Reference='CellRS'; + end + NTx = ENB.CellRefP; + end + + % Initialize size of estimated channel grid + H_EST = zeros([size(RXGRID,1) size(RXGRID,2) size(RXGRID,3) NTx]); + + % Preallocate noise power estimate vector for speed + noiseVec = zeros(size(NRxAnts,NTx)); + + if (NTx == 4) + nn=3; + else + nn=NTx; + end + RefEstimates=zeros(nn,2*2*2*ENB.NDLRB*10); + + for rxANT = 1:NRxAnts + for nTxAntLayer = 1:NTx + + % Extract pilot symbols from received grid and calculate least + % squares estimate + [ls_estimates,specialvec,DwPTS]= GetPilotEstimates(ENB,nTxAntLayer-1,RXGRID(:,:,rxANT),PDSCH,CEC); + + Estimates(nTxAntLayer,1:length(ls_estimates(3,:))) = ls_estimates(3,:); + + % Average the pilots as defined by CEC.PilotAverage, this can + % be 'UserDefined' or 'TestEVM'. + % Note: Setting the window size to 1x1 is equivalent to no + % averaging. It is recommended that no averaging should be + % carried out when a high SNR is present, as this would have an + % adverse effect on the least squares estimates + if strcmpi(CEC.PilotAverage,'UserDefined')&&(CEC.FreqWindow==1)&&(CEC.TimeWindow==1) + P_EST = ls_estimates; + ScalingVec = 0; + else + [P_EST, ScalingVec]= PilotAverage(PDSCH,CEC,H_EST,ls_estimates); + end + + %AvgEstimates(nTxAntLayer,1:length(P_EST(3,:))) = P_EST(3,:); + + P_EST(3,:)=avgrefs; + + if strcmpi(CEC.PilotAverage,'TestEVM') + % Channel estimation as defined in TS36.141 Annex F.3.4 is + % performed, the pilots are averaged in time and frequency + % and the resulting vector is linearly interpolated. + %---------------------- + % Interpolate eq coefficients extrapolating to account for + % missing pilots at the edges + interpEqCoeff = interp1(find(P_EST~=0),P_EST(P_EST~=0),(1:length(P_EST)).','linear','extrap'); + % --------------------- + % The DC carrier needs to be accounted for during + % interpolation + % Get pilot symbol index values + ind = lteCellRSIndices(ENB,0); + % Using initial index value calculate position of pilot + % symbols within interpolated coefficients + if ind(1)-3>0 + vec = (ind(1)-3):3:K; + else + vec = ind(1):3:K; + end + % Determine the index values of the pilots either side of + % the DC carrier + preDC = vec(length(vec)/2); + postDC = vec(1+length(vec)/2); + % Interpolate the section using the DC carrier and insert + % this into the interpolated vector containing the + % coefficients + interpEqCoeffTemp = interp1(1:4:5,[interpEqCoeff(preDC) interpEqCoeff(postDC)],1:5,'linear'); + interpEqCoeff(preDC:K/2) = interpEqCoeffTemp(1:length(interpEqCoeff(preDC:K/2))); + interpEqCoeff(1+K/2:postDC) = interpEqCoeffTemp(2+length(interpEqCoeff(preDC:K/2)):end); + %---------------------- + % Generate grid by replicating estimated equalizer channel + % coefficients + H_EST(:,:,rxANT,nTxAntLayer) = repmat(interpEqCoeff,1,Lsf*nsfs); + % The value of the noise averaged pilot symbols are placed + % into P_EST(3,:) matrix and these are used to determine + % the noise power present on the pilot symbol estimates of + % the channel. + P_EST = ls_estimates; + tempGrid = squeeze(H_EST(:,:,rxANT,nTxAntLayer)); + P_EST(3,:) = tempGrid(sub2ind(size(H_EST),P_EST(1,:),P_EST(2,:))); + + else + % Channel estimation is performed by analyzing up to + % 'CEC.InterpWinSize' subframes together and estimating + % virtual pilots outwith the bounds of the subframe. + % Averaging window can be set to Causal, Non-causal or + % Centred, Centered. + + % Using the desired subframeAveraging type the initial + % position of the window is determined + if(CEC.InterpWinSize>=1) + if strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered') + % For Centered averaging the window size must be odd + if ~mod(CEC.InterpWinSize,2) + error('lte:error','Window size must be odd for centered window type'); + end + % For Centered windowing both current,future and past + % data are used to estimate current channel coefficients + x = floor(CEC.InterpWinSize/2); + y = floor(CEC.InterpWinSize/2); + elseif strcmpi(CEC.InterpWindow,'Causal') + % For causal windowing current and past data are used + % to estimate current subframe channel coefficients + x = 0; + y = CEC.InterpWinSize-1; + elseif strcmpi(CEC.InterpWindow,'Non-causal') + % For non-causal windowing current and future data are + % used to estimate current subframe channel + % coefficients + x = CEC.InterpWinSize-1; + y = 0; + else + error('lte:error','Channel estimation structure field InterpWindow must be one of the following: Causal,Non-causal,Centred,Centered'); + end + else + error('lte:error','InterpWinSize cannot be less than 1'); + end + + % Interpolate using averaged pilot estimates and defined + % interpolation settings + for sf = 0:nsfs-1 + if specialvec(sf+1)=='U' + H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = NaN; + else + % Extract the pilots from required subframes + p_use = P_EST; + p_use(:,p_use(4,:)>(sf+1)+x)=[]; + p_use(:,p_use(4,:)<(sf+1)-y)=[]; + + % Account for DC offset + p_use(1,(p_use(1,:)>K/2)) = p_use(1,(p_use(1,:)>K/2))+1; + + if strcmpi(CEC.InterpType,'Cubic')||strcmpi(CEC.InterpType,'Linear') + % VPVEC is used to determine if virtual pilots are + % needed at the beginning or end of the + % interpolation window, if the current subframe,sf, + % is located at beginning or end of the window then + % virtual pilots are created accordingly + vpvec = unique(p_use(4,:)); + + if (strcmp(CEC.Reference,'CellRS')==1) + % Create virtual pilots and append to vector + % containing pilots using cell-specific RS + % methodology. + vps = createVirtualPilots(ENB,p_use(1:3,:),1,1,(sf+1==min(vpvec)),(sf+1==max(vpvec))); + p_use = [p_use(1:3,:) vps]; + else + % Create edge virtual pilots suitable for + % UE RS which can have partial bandwidth, + % or CSI-RS. + if (~isempty(p_use)) + vps = createEdgeVirtualPilots(ENB,p_use(1:3,:)); + p_use = [p_use(1:3,:) vps]; + end + end + end + % Perform 2D interpolation + % Interpolation is carried out on a (K+1)-by-L + % matrix to account for DC offset being added in + if (~isempty(p_use)) + Htemp = griddata(p_use(2,:)-Lsf*sf,p_use(1,:),p_use(3,:),1:Lsf,(1:K+1)',CEC.InterpType); %#ok + % Remove DC offset + Htemp(1+(K/2),:) = []; + + if specialvec(sf+1)=='S' + Htemp(:,DwPTS+1:Lsf) = NaN; + end + H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = Htemp; + + if isnan(H_EST) + error('lte:error','H_EST NaN'); + end + end + end + end + end + if nTxAntLayer<3 || (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'}))) + % The noise level present can be determined using the noisy + % least squares estimates of the channel at pilot symbol + % locations and the noise averaged pilot symbol estimates of the + % channel + noise = ls_estimates(3,~isnan(ls_estimates(3,:))) - P_EST(3,~isnan(P_EST(3,:))); + if strcmpi(CEC.PilotAverage,'UserDefined') + noise = sqrt(ScalingVec./(ScalingVec+1)).*noise; + end + + % Additional averaging for noise estimation in LTE-A case, + % to suppress interference from orthogonal sequences on + % other antennas in same time-frequency locations. + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... + (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) + if (~isempty(ls_estimates)) + if (strcmpi(CEC.Reference,'DMRS')==1) + temp=[]; + pilotSC = unique(ls_estimates(1,:)); + for i = pilotSC + x=find(ls_estimates(1,:)==i); + x=[x(1) x(end)]; + temp=[temp mean(noise(x))*2]; %#ok + end + noise=temp; + end + end + end + + % Taking the variance of the noise present on the pilot symbols + % results in a value of the noise power for each transmit and + % receive antenna pair + if (isempty(noise)) + noiseVec(rxANT,nTxAntLayer)=NaN; + else + noiseVec(rxANT,nTxAntLayer) = mean(noise.*conj(noise)); + end + end + end + end + + % The mean of the noise power across all the transmit/receive antenna + % pairs is used as the estimate of the noise power + NoisePowerEst = mean(mean(noiseVec)); + +end + +% GetPilotEstimates Obtain the least squares estimates of the reference +% signals +% [ls_estimates] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID) Extracts the +% reference signals for a specific transmit/receive antenna pair and +% calculates their least squares estimate. The results are placed in a +% 3xNp matrix containing the subcarrier and OFDM symbol location, row and +% column subscripts, and value. Np is the number of cell specific +% reference (pilot) symbols per resource grid +% +% RXGRID is an MxN array where M is the number of subcarriers, +% N is the number of OFDM symbols. Dimension M must be +% 12*NDLRB where NDLRB must be {6,15,25,50,75,100}. +% Dimension N must be a multiple of number of symbols in a subframe L, +% where L=14 for normal cyclic prefix and L=12 for extended cyclic +% prefix. +% +% nTxAntLayer defines which transmit antennas' or layers' pilot symbols to extract +% +% ENB is a structure and must contain the following fields: +% NDLRB - Number of downlink resource blocks +% NCellID - Physical layer cell identity +% CellRefP - Number of transmit antenna ports {1,2,4} +% CyclicPrefix - Optional. Cyclic prefix length{'Normal'(default),'Extended'} +% +% +% Example +% Return the least squares estimate of the pilots symbols in a 3xNp array +% where the first row is the subcarrier index,k the second row is the OFDM +% symbol,l and the third row defines the least squares estimate of the +% pilot located at that position. +% +% enb=struct('NDLRB',6,'CellRefP',1,'NCellID',0,'CyclicPrefix','Normal'); +% rxGrid=ones(lteDLResourceGridSize(enb)); +% nTxAntLayer=0; +% ls_estimates = GetPilotEstimates(enb,nTxAntLayer,rxGrid).' +% ans = +% 1.0000 1.0000 -0.7071 - 0.7071i +% 7.0000 1.0000 -0.7071 - 0.7071i +% 13.0000 1.0000 -0.7071 - 0.7071i +% . . . +% . . . +% . . . +% 58.0000 12.0000 -0.7071 + 0.7071i +% 64.0000 12.0000 0.7071 - 0.7071i +% 70.0000 12.0000 0.7071 - 0.7071i + +% Copyright 2009-2010 The MathWorks, Inc. +function [ls_estimates,specialvec,DwPTS] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID,PDSCH,CEC) + +% Get dimensions of resource grid +Dims = lteDLResourceGridSize(ENB); +nsfs = size(RXGRID,2)/Dims(2); +K = Dims(1); +L = Dims(2); + +if (rem(nsfs,1)~=0) + error('lte:error','The received grid input must contain a whole number of subframes.'); +end + +if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) + if (strcmp(CEC.Reference,'DMRS')==1) + % create UE RS indices + PDSCH.NTxAnts=0; + PDSCH.W=[]; + linearIndSF = lteDMRSIndices(ENB,PDSCH,'mat'); + else + % create CSI-RS indices and symbols and deal with zero removal + linearIndSF = lteCSIRSIndices(ENB,'mat'); + CsiRS = lteCSIRS(ENB,'mat'); + CsiRS = CsiRS(:,nTxAntLayer+1); + linearIndSF(CsiRS==0,:)=[]; + CsiRS(CsiRS==0)=[]; + end + % If more than one TxAntenna is used we need to adjust indices values so that + % they start in first antenna plane + linearIndSF = linearIndSF(:,nTxAntLayer+1) - (K*L*nTxAntLayer); +else + % Extract linear indices of reference signals for particular TxAntenna + dumENB = ENB; + dumENB.NSubframe = 0; + linearIndSF = lteCellRSIndices(dumENB,nTxAntLayer); + % If more than one TxAntenna is used we need to adjust indices values so that + % they start in first antenna plane + linearIndSF = linearIndSF - (K*L*nTxAntLayer); +end + +% Create grid for pilot symbols +linearIndGrid = zeros(size(linearIndSF,1),nsfs); +idealPilotGrid = zeros(size(linearIndSF,1),nsfs); +offset = double(ENB.NSubframe); +specialvec = char(zeros(1,0)); +DwPTS = 0; +for sf = ENB.NSubframe:ENB.NSubframe+nsfs-1 + ENB.NSubframe = mod(sf,10); + linearIndGrid(:,sf-offset+1) = (linearIndSF+(sf*K*L)); + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) + if (strcmp(CEC.Reference,'DMRS')==1) + % create UE RS symbols + DMRS = lteDMRS(ENB,PDSCH,'mat'); + idealPilotGrid(1:length(DMRS),sf-offset+1) = DMRS(:,nTxAntLayer+1); + else + % use CSI-RS symbols created earlier + idealPilotGrid(1:length(CsiRS),sf-offset+1) = CsiRS; + end + else + CellRS = lteCellRS(ENB, nTxAntLayer); + idealPilotGrid(1:length(CellRS),sf-offset+1) = CellRS; + end + dupinfo = lteDuplexingInfo(ENB); + if strcmpi(dupinfo.SubframeType,'Special') + specialvec = [specialvec 'S']; %#ok + DwPTS = dupinfo.NSymbolsDL; + elseif strcmpi(dupinfo.SubframeType,'Uplink') + specialvec = [specialvec 'U']; %#ok + elseif strcmpi(dupinfo.SubframeType,'Downlink') + specialvec = [specialvec 'D']; %#ok + else + error('lte:error','Invalid SubframeType, in structure dupinfo'); + end +end + +if (~isempty(idealPilotGrid)) + ulvec = find(idealPilotGrid(size(idealPilotGrid,1),:)==0); + linearIndGrid(:,ulvec) = []; + idealPilotGrid(:,ulvec) = []; +else + ulvec = []; +end + +linearIndGrid = linearIndGrid - (offset*K*L); +% Extract the row and column subscripts of the pilot symbols for entire +% grid +[p_estSC, p_estSym] = ind2sub(size(RXGRID),linearIndGrid); + +% Calculate least squares channel estimates at pilot locations +p_est = RXGRID(linearIndGrid)./idealPilotGrid; + +% Create a vector - [k;l;p_est] +sfref = repmat((1:nsfs),length(linearIndSF),1); +sfref(:,ulvec) = []; +ls_estimates = [double(p_estSC(:).') ; double(p_estSym(:).') ; p_est(:).';double(sfref(:)).']; + +end + +%PilotAverage Average reference signals +% [P_EST] = PilotAverage(PDSCH,CEC,H_EST,LS_EST) performs a moving average of pilot +% symbols +% +% LS_EST is a 3xNp matrix containing the least square estimates of the +% pilots symbols and their column and row indices within the received +% grid. +% LS_EST = [k;l;p_est] +% H_EST is an MxN matrix and defines the size of the grid that the +% averaging will be performed on +% +% CEC is a structure which defines the type of channel estimation +% performed. CEC must contain a set of the following fields: +% PilotAverage - Type of pilot averaging {'TestEVM', 'UserDefined'} +% FreqWindow - Size of window used to average in frequency in +% resource elements. +% TimeWindow - Size of window used to average in time in resource +% elements +% InterpType - Type of 2D interpolation used(see griddata for types) +% +% The dimensions of the averaging window are defined in structure CEC. +% The window is defined in terms of Resource Elements, and depending on +% the size of the averaging window, averaging will be performed in either +% the time or frequency direction only, or a combination of both creating +% a square/rectangular window. The pilot to be averaged will always be +% placed at the center of the window, therefore the window size must be +% an odd number. +% +% Frequency Direction: 9x1 Time Direction: 1x9 +% +% x +% x +% x +% x +% P x x x x P x x x x +% x +% x +% x +% x +% +% +% Square window: 9x9 +% x x x x x x x x x +% P x x x x x x P x +% x x x x x x x x x +% x x x x x x x x x +% x x x x P x x x x +% x x x x x x x x x +% x x x x x x x x x +% P x x x x x x P x +% x x x x x x x x x +% +% Performing EVM compliance testing as per TS36.141 AnnexF.3.4, requires +% time averaging be done over 10 subframes(i.e. 1 Frame) across each +% pilot symbol carrying subcarrier creating a TotalNumberPilotsx1 vector. +% This is then frequency averaged using a moving window average with a window +% size of 19. This type of averaging can be performed by setting the +% PilotAverage type in structure CEC to 'TestEVM'. + +% Copyright 2009-2013 The MathWorks, Inc. + +function [P_EST, scalingVec] = PilotAverage(PDSCH,CEC,H_EST,P_EST) + + switch lower(CEC.PilotAverage) + + case 'userdefined' + if(CEC.FreqWindow<1)||(CEC.TimeWindow<1) + error('lte:error','Frequency and time averaging window size cannot be less than 1'); + end + + if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... + (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) + + % Perform averaging in time direction using a moving window + % of size N = CEC.TimeWindow + N = CEC.TimeWindow; + + if (~isempty(P_EST)) + % Average only subcarriers which contain RS symbols. Extract RS + % symbols on a per subcarrier basis and use window to average. + for subcarrier = unique(P_EST(1,:)) + + % Store DRS symbols from relevant slot in vector for easy access + symbVec = (P_EST(3,P_EST(1,:)==subcarrier)).'; + + % Define temporary vector to store the averaged values + avgVec = zeros(size(symbVec)); + + % Check length of input at least equal to size of window; + % if not, reduce window size. Despreading will be incomplete + % here + if (length(symbVec) < N) + N = length(symbVec); + end + + % Determines position of window w.r.t element being averaged, + % and performs the averaging + for symbNo = 1:length(symbVec) + if (symbNo-(N/2+1)<=0) + avgVec(symbNo)= sum(symbVec(1:N))/N; + else + avgVec(symbNo) = sum(symbVec(end-(N-1):end))/N; + end + end + + % Update P_EST with averaged values + P_EST(3,P_EST(1,:)==subcarrier)= avgVec; + end + + end + + % This vector is used to scale the noise by the number of averaging + % elements in the window + scalingVec = ones(size(P_EST(3,:)))*N; + + else + + if (strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered')) + if (~mod(CEC.FreqWindow,2)||~mod(CEC.TimeWindow,2)) + error('lte:error','Window size must be odd in time and frequency for centred/centered window type'); + end + end + + % Define number of subcarriers + K = size(H_EST,1); + + % Define an empty resource grid with the DC offset subcarrier + % inserted + grid = zeros(size(H_EST,1)+1,size(H_EST,2)); + + % Account for DC offset + P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))+1; + + % Place the pilot symbols back into the received grid with the + % DC offset subcarrier in place + grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = P_EST(3,:); + + % Define convolution window + kernel = ones(CEC.FreqWindow,CEC.TimeWindow); + + % Perform convolution + grid = conv2(grid,kernel,'same'); + + % Extract only pilot symbol location values and set the rest of + % the grid to zero + tempGrid = zeros(size(grid)); + tempGrid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))); + grid = tempGrid; + + % Normalize pilot symbol values after convolution + [grid, scalingVec] = normalisePilotAverage(CEC,P_EST,grid); + + % Place averaged values back into pilot symbol matrix + P_EST(3,:) = grid(sub2ind(size(tempGrid),P_EST(1,:),P_EST(2,:))); + + % Remove DC offset + P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))-1; + + end + + + case 'testevm' + % As defined in TS36.141 Annex F.3.4 pilots are averaged in + % time across all pilot carrying subcarriers. The resulting + % vector is averaged in frequency direction with a moving + % averaging window of 19. + + % Get phase (theta) and magnitude(radius) of complex estimates + [theta,radius] = cart2pol(real(P_EST(3,:)),imag(P_EST(3,:))); + + % Declare vector to temporarily store averaged phase and + % magnitude + phasemagVec = zeros(size(H_EST,1),2); + + % Perform averaging in time and frequency for phase and + % magnitude separately and recombine at end + for phaseOrMag = 1:2 + % Define temporary P_EST vector and set estimates row to + % phase then magnitude + P_EST_temp = P_EST; + if phaseOrMag==1 + P_EST_temp(3,:) = theta; + elseif phaseOrMag==2 + P_EST_temp (3,:) = radius; + end + + % Declare averaging vector + avgVec = zeros(size(H_EST,1),1); + vec = []; + + % Average across pilot symbol carrying subcarriers in time, + % unwrapping performed on a subcarrier basis + for i = 1:size(H_EST,1) + if ~isempty(P_EST(3,(P_EST(1,:)==i))) + if phaseOrMag==1 + avgVec(i) = mean(unwrap(P_EST_temp(3,(P_EST(1,:)==i)))); + + elseif phaseOrMag==2 + avgVec(i) = mean(P_EST_temp(3,(P_EST(1,:)==i))); + end + vec = [vec i]; %#ok + end + end + + % Remove subcarriers which contained no pilot symbols, then + % perform frequency averaging + avgVec = avgVec(vec); + + % Perform averaging in frequency direction using a moving + % window of size N, N = 19 in TS36.141 Annex F.3.4 + % Performs a moving average of window size N. At the edges, where less than + % N samples are span the window size is reduce to span 1, 3, 5, 7 ... + % samples. + N = 19; + + % avgVec must be a column vector + if (size(avgVec,2) > 1) + error('lte:error','Input to moving average function must be a column vector.') + end + + % N max window size 19 as defined in Annex F.3.4 + if ~mod(N,2) + error('lte:error','Window size N must be odd'); + end + + if (length(avgVec) < N) + % sprintf ('Input signal must have at least %d elements',N); + error('lte:error','Input signal must have at least %d elements',N); + end + + % Use filter to perform part of the averaging (not normalized) + zeroPad = zeros(N-1,1); + data = [avgVec; zeroPad]; + weights = ones(N,1); + freqAvg = filter(weights,1,data); + + % Remove unwanted elements + removeIdx = [ 2:2:N ( length(data)-(2:2:N)+1 )]; + freqAvg(removeIdx) = []; + + % Normalization factor + normFactor = [1:2:N-2 N*ones(1,length(freqAvg)-(N-1)) N-2:-2:1]'; + freqAvg = freqAvg./normFactor; + + % Place frequency averaged pilots into temporary storage + % vector + phasemagVec(vec,phaseOrMag) = freqAvg; + + end + % Convert averaged symbols back to Cartesian coordinates + [X,Y] = pol2cart(phasemagVec(:,1),phasemagVec(:,2)); + P_EST = complex(X,Y); + scalingVec = []; + + otherwise + error('lte:error','Channel estimation structure field PilotAverage must be one of the following: "UserDefined" or "TestEVM"'); + + end +end + +function [avgGrid, scalingVec] = normalisePilotAverage(CEC,p_est,grid) + + % Determine total number of pilots within half a subframe + nPilots = length(p_est); + + avgGrid = zeros(size(grid)); + scalingVec = zeros(1,size(p_est,2)); + + for n = 1:nPilots + % Determine in which subcarrier and OFDM symbol pilot is located + sc = p_est(1,n); + sym = p_est(2,n); + % Determine number of REs to look at either side of pilot + % symbol in time and frequency + half_freq_window = floor(CEC.FreqWindow/2); + half_time_window = floor(CEC.TimeWindow/2); + % Set the location of the window at the back of the pilot + % to be averaged in frequency direction + upperSC = sc-half_freq_window; + % If this location is outwith the grid dimensions set it to + % lowest subcarrier value + if upperSC<1 + upperSC = 1; + end + % Set the location of the window in front of the pilot to + % be averaged in frequency direction + lowerSC = sc+half_freq_window; + % If this location is outwith the grid dimensions set it to + % highest subcarrier value + if lowerSC>size(grid,1) + lowerSC = size(grid,1); + end + % Set the location of the window in front of the pilot to + % be averaged in time direction + leftSYM = sym-half_time_window; + % If this location is outwith the grid dimensions set it to + % lowest OFDM symbol value + if leftSYM<1 + leftSYM = 1; + end + % Set the location of the window at the back of the pilot + % to be averaged in time direction + rightSYM = sym+half_time_window; + % If this location is outwith the grid dimensions set it to + % highest OFDM symbol value + if rightSYM>size(grid,2) + rightSYM = size(grid,2); + end + + % Define the window to average using the determined + % subcarrier and OFDM symbol values + avgVec = grid(upperSC:lowerSC,leftSYM:rightSYM); + + % Remove the zero values from the window so that the average is + % calculated using only valid pilots + avgVec = avgVec(avgVec~=0); + % Average the desired pilot using all pilots within + % averaging window + if isempty(avgVec) + avgVec = 0; + end + + avgGrid(sc,sym) = grid(sc,sym)/numel(avgVec); + scalingVec(n) = numel(avgVec); + end +end + +%createVirtualPilots Create virtual pilots. +% [VP] = createVirtualPilots(..) returns a 3xNvp matrix which contains +% the time/frequency and least squares estimate of virtual pilots. +% Nvp is the number of virtual pilots. +% +% The inputs are: +% +% ENB structure which must contain the following fields: +% NDLRB - Number of downlink resource blocks +% CyclicPrefix - Optional. Cyclic prefix length {'Normal'(default),'Extended'} +% +% P_EST - A matrix containing the pilots within the grid. The matrix must +% have three rows. Each column contains the information for each pilot: +% [subcarrier_indices symbol_indices pilot_channel_estimate] +% +% ANTENNA - The current antenna port +% CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END - a value {0 or 1} +% indicating whether to return virtual pilots in each position. A 1 +% indicates virtual pilots should be returned, a 0 indicates they should +% not be returned. +% +% Example: +% +% Create virtual pilots on the top of a grid of pilots (estimates) +% VP_TOP = createVirtualPilots(ENB,estimates,0,1,0,0,0); +% +% Add virtual pilots to current pilot estimates for interpolation +% estimates = [estimates VP_TOP]; + +% Copyright 2009-2010 The MathWorks, Inc. +function VP = createVirtualPilots(ENB,P_EST,CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END) + + % Initialize outputs + VP = zeros(3,0); + + % Get resource grid dimensions + dims = lteDLResourceGridSize(ENB); + K = dims(1); + + % Virtual pilot cut-off values - indices in time or frequency at which + % the virtual pilot shall be discarded. As the symbol indices of the + % pilots passed in may be positive and negative the start and end of + % the effective grid varies therefore affecting the front and end pilot + % cut-off values + coTop = -6; % + coBottom = K+6; % + coFront = min(P_EST(2,:))-7; % floor(min(P_EST(2,:))/L)*L-5; % + coEnd = max(P_EST(2,:))+7; % ceil(max(P_EST(2,:))/L)*L+5; + + % Number of pilots in a subcarrier is dependent upon antenna +% noPilotinSC = (2-floor(ANTENNA/2))*nSF; + noPilotinSC = numel(P_EST(P_EST(1,:)==P_EST(1,1))); + + % Number of pilots in a symbol + noPilotinSym = K/6; + + % Sort by subcarrier + [~, indices] = sortrows(P_EST(1,:).'); + p_est_sorted_sc = P_EST(:,indices).'; + + if CREATE_TOP + % Repeat first and second SC containing pilots + p_est_rep_above = p_est_sorted_sc(1+noPilotinSC:noPilotinSC*2,:); + p_est_rep_above = [p_est_rep_above.' p_est_sorted_sc(1:noPilotinSC,:).'].'; + + % Subtract six to normalize subcarrier indices + p_est_rep_above(:,1) = p_est_rep_above(:,1) - 6; + + % Remove virtual pilots which are too far + p_est_rep_above(p_est_rep_above(:,1) < coTop,:) = []; + + % Initialize vp vector + VP_TOP = zeros(size(p_est_rep_above)); + + % Create virtual pilots on top + for p = 1:size(p_est_rep_above) + VP_TOP(p,:) = calculatePilot(p_est_rep_above(p,:), p_est_sorted_sc); + end + + % Transpose to make suitable for output + VP = [VP VP_TOP.']; + end + + if CREATE_BOTTOM + % Repeat last and second last SC containing pilots + p_est_rep_below = p_est_sorted_sc(end-noPilotinSC*2+1:end-noPilotinSC,:); + p_est_rep_below = [p_est_rep_below.' p_est_sorted_sc(end-noPilotinSC+1:end,:).'].'; + + % Add six to normalize subcarrier indices + p_est_rep_below(:,1) = p_est_rep_below(:,1) + 6; + + % Remove virtual pilots which are too far + p_est_rep_below(p_est_rep_below(:,1) > coBottom,:) = []; + + % Initialize vp vector + VP_BOTTOM = zeros(size(p_est_rep_below)); + + % Create virtual pilots on bottom + for p = 1:size(p_est_rep_below) + VP_BOTTOM(p,:) = calculatePilot(p_est_rep_below(p,:), p_est_sorted_sc); + end + + % Transpose to make suitable for output + VP = [VP VP_BOTTOM.']; + end + + % Sort by symbol + [~, indices] = sortrows(P_EST(2,:).'); + p_est_sorted_sym = P_EST(:,indices).'; + + if CREATE_FRONT + % Repeat first symbol containing pilots + p_est_rep_front = p_est_sorted_sym(noPilotinSym+1:(noPilotinSym*2),:); + + % Add subcarrier above and below + p_est_rep_front = addSCs(p_est_rep_front,noPilotinSym); + + % Repeat second symbol containing pilots + p_est_rep_front_second = p_est_sorted_sym(1:noPilotinSym,:); + + % Add subcarrier above and below + p_est_rep_front_second = addSCs(p_est_rep_front_second,noPilotinSym); + + % Concatenate to create virtual pilots + p_est_rep_front = [p_est_rep_front.' p_est_rep_front_second.'].'; + + % Subtract seven to normalize symbol indices + p_est_rep_front(:,2) = p_est_rep_front(:,2) - 7; + + % Remove virtual pilots which are too far + p_est_rep_front = removeTooFar(p_est_rep_front,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); + + % Initialize vp vector + VP_FRONT = zeros(size(p_est_rep_front)); + + % Create virtual pilots on front + for p = 1:length(p_est_rep_front) + VP_FRONT(p,:) = calculatePilot(p_est_rep_front(p,:), p_est_sorted_sc); + end + + % Transpose for output + VP = [VP VP_FRONT.']; + end + + if CREATE_END + % Repeat last symbol containing pilots + p_est_rep_end = p_est_sorted_sym(end-(noPilotinSym*2)+1:end-noPilotinSym,:); + + % Add subcarrier above and below + p_est_rep_end = addSCs(p_est_rep_end,noPilotinSym); + + % Repeat second symbol containing pilots + p_est_rep_end_second = p_est_sorted_sym(end-noPilotinSym+1:end,:); + + % Add subcarrier above and below + p_est_rep_end_second = addSCs(p_est_rep_end_second,noPilotinSym); + + % Concatenate to create virtual pilots + p_est_rep_end = [p_est_rep_end.' p_est_rep_end_second.'].'; + + % Add seven to normalize symbol indices, mod controls case when + % only 2 pilots per subcarrier + p_est_rep_end(:,2) = p_est_rep_end(:,2) + 7; + + % Remove virtual pilots which are too far + p_est_rep_end = removeTooFar(p_est_rep_end,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); + + % Initialize vp vector + VP_END = zeros(size(p_est_rep_end)); + + % Create virtual pilots on front + for p = 1:length(p_est_rep_end) + VP_END(p,:) = calculatePilot(p_est_rep_end(p,:), p_est_sorted_sc); + end + + % Transpose for output + VP = [VP VP_END.']; + end +end + +function vp = calculatePilot(p_est_rep, p_est_sorted) + % Calculate Euclidean distance between virtual pilot and other + % pilots + ind = sqrt((p_est_rep(1)-p_est_sorted(:,1)).^2+ (p_est_rep(2)-p_est_sorted(:,2)).^2); + % ind = (abs(p_est_rep(1)-p_est_sorted(:,1))+ abs(p_est_rep(2)-p_est_sorted(:,2))); + + % Sort from shortest to longest distance + [~, ind] = sortrows(ind); + + % Take three closest pilots + ind = ind(1:10); + pilots_use = p_est_sorted(ind,:); + + % If first 3 pilots used are in the same subcarrier or symbol then use 4th instead of 3rd + while ((pilots_use(3,1) == pilots_use(2,1)) && (pilots_use(2,1) == pilots_use(1,1)) || (pilots_use(3,2) == pilots_use(2,2)) && (pilots_use(2,2) == pilots_use(1,2))) + pilots_use(3,:) = []; + end + + % Calculate virtual pilot value + vp = calculateVirtualValue(pilots_use(3,:),pilots_use(1,:),pilots_use(2,:),p_est_rep(1),p_est_rep(2)); +end + +function new = calculateVirtualValue(a,b,c,xnew,ynew) + % Calculate vectors + AB = b-a; + AC = c-a; + + % Perform cross product + cro = cross(AB,AC); + + % Break out X, Y and Z plane coeffs + x = cro(1); + y = cro(2); + z = cro(3); + + % Calculate normal in equation + c = sum(cro.*a); + + % Calculate new z value + znew = (c - xnew*x - ynew*y)/z; + + % Return new point + new = [xnew ynew znew]; +end + +function pilots = addSCs(pilots, noPilotinSym) + % Add on extra subcarrier above + pilots(end+1,:) = pilots(1,:); + pilots(end,1) = pilots(end,1) - 6; + + % Add on extra subcarrier below + pilots(end+1,:) = pilots(noPilotinSym,:); + pilots(end,1) = pilots(end,1) + 6; +end + +function pilots = removeTooFar(pilots,p_est_sorted_sym,coTop,coBottom,coFront,coEnd) + pilots((pilots(:,2) < coFront) | (pilots(:,1) < coTop) | (pilots(:,2)> coEnd) | (pilots(:,1) > coBottom),:) = []; + + % Remove virtual pilots which fall within resource grid + removeInd = []; + for i = 1:size(pilots) + if (find(p_est_sorted_sym(:,2) == pilots(i,2))) + removeInd = [removeInd i]; %#ok + end + end + pilots(removeInd,:) = []; +end + +%CreateEdgeVirtualPilots +% Creates virtual pilots on the edges of the resource grid to improve +% interpolation results. Also adds virtual pilots around the current pilot +% estimates. +function vps = createEdgeVirtualPilots(enb,p_est) + + % Determine dimensions of current subframe + dims=lteDLResourceGridSize(enb); + K=dims(1); + L=dims(2); + + % Calculate virtual pilots beyond upper and lower bandwidth edge based + % on pilots present on subcarriers. Also create virtual pilots 1/2 RB + % above and below extent of current pilots. + vps=createDimensionVirtualPilots(p_est,2,unique([-6 min(p_est(1,:)-6) max(p_est(1,:)+6) K+6])); + + % Combine these frequency-direction VPs with original pilots. + temp = [p_est vps]; + + % Calculate virtual pilots beyond start and end of subframe based on + % pilots and frequency-direction VPs present in symbols. Also create + % virtual 1 OFDM symbol before and after extent of current pilots. + vps = [vps createDimensionVirtualPilots(temp,1,unique([-1 min(p_est(2,:)-1) max(p_est(2,:)+1) L+1]))]; + +end + +% dim=1 adds VPs in time +% dim=2 adds VPs in frequency +function vps = createDimensionVirtualPilots(p_est,dim,points) + + vps=[]; + + pilots = unique(p_est(dim,:)); + for i = pilots + x=find(p_est(dim,:)==i); + rep=1+double(length(x)==1); + adj=(1:rep)-rep; + pil = interp1(p_est(3-dim,x)+adj,repmat(p_est(3,x),1,rep),points,'linear','extrap'); + for j=1:length(points) + vps = [ vps [i;points(j);pil(j)] ]; %#ok + end + end + + if (dim==2) + vps = vps([2 1 3],:); + end + +end + From f505a753823f0244ef3952203e8063414e28b527 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 11 Nov 2014 18:20:09 +0000 Subject: [PATCH 17/55] New equalizer working --- CMakeLists.txt | 2 +- cmake/modules/FindVolk.cmake | 7 +- lte/examples/cell_measurement.c | 18 +- lte/examples/pdsch_enodeb.c | 15 +- .../include/liblte/phy/ch_estimation/cheq.h | 57 ++ .../include/liblte/phy/ch_estimation/chest.h | 238 --------- .../liblte/phy/ch_estimation/chest_dl.h | 47 +- .../liblte/phy/ch_estimation/refsignal.h | 92 ---- .../liblte/phy/ch_estimation/refsignal_dl.h | 16 +- lte/phy/include/liblte/phy/phy.h | 2 - .../include/liblte/phy/resampling/interp.h | 111 ++-- lte/phy/include/liblte/phy/ue/ue_celldetect.h | 2 +- lte/phy/include/liblte/phy/ue/ue_dl.h | 4 +- lte/phy/include/liblte/phy/ue/ue_mib.h | 6 +- lte/phy/include/liblte/phy/ue/ue_sync.h | 2 +- .../include/liblte/phy/utils/convolution.h | 12 + lte/phy/include/liblte/phy/utils/vector.h | 6 +- lte/phy/lib/ch_estimation/src/cheq.c | 53 ++ lte/phy/lib/ch_estimation/src/chest.c | 503 ------------------ lte/phy/lib/ch_estimation/src/chest_dl.c | 339 ++++++------ lte/phy/lib/ch_estimation/src/refsignal.c | 382 ------------- lte/phy/lib/ch_estimation/src/refsignal_dl.c | 181 ++++--- lte/phy/lib/ch_estimation/src/refsignal_ul.c | 183 +++++++ .../lib/ch_estimation/test/chest_test_dl.c | 11 +- .../ch_estimation/test/chest_test_dl_mex.c | 53 +- lte/phy/lib/phch/test/pbch_file_test.c | 21 +- lte/phy/lib/phch/test/pcfich_file_test.c | 21 +- lte/phy/lib/phch/test/pdcch_file_test.c | 19 +- lte/phy/lib/phch/test/pdsch_file_test.c | 20 +- lte/phy/lib/phch/test/phich_file_test.c | 21 +- lte/phy/lib/resampling/src/interp.c | 302 +++++------ lte/phy/lib/resampling/test/CMakeLists.txt | 2 - .../lib/resampling/test/interp_test_volk.c | 92 ---- lte/phy/lib/ue/src/ue_dl.c | 6 +- lte/phy/lib/ue/src/ue_mib.c | 29 +- lte/phy/lib/utils/src/convolution.c | 39 +- lte/phy/lib/utils/src/vector.c | 34 +- matlab/tests/equalizer_test.m | 20 +- 38 files changed, 1023 insertions(+), 1945 deletions(-) create mode 100644 lte/phy/include/liblte/phy/ch_estimation/cheq.h delete mode 100644 lte/phy/include/liblte/phy/ch_estimation/chest.h delete mode 100644 lte/phy/include/liblte/phy/ch_estimation/refsignal.h create mode 100644 lte/phy/lib/ch_estimation/src/cheq.c delete mode 100644 lte/phy/lib/ch_estimation/src/chest.c delete mode 100644 lte/phy/lib/ch_estimation/src/refsignal.c create mode 100644 lte/phy/lib/ch_estimation/src/refsignal_ul.c delete mode 100644 lte/phy/lib/resampling/test/interp_test_volk.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c166e60e..610e96230 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,7 +78,7 @@ IF(CMAKE_COMPILER_IS_GNUCXX) ENDIF(CMAKE_COMPILER_IS_GNUCXX) IF(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-format-extra-args -Winline -Wno-unused-result -Wno-format -std=c99 -D_GNU_SOURCE") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-format-extra-args -Winline -Wno-unused-result -Wno-format -std=c99 -D_GNU_SOURCE -g") # IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wno-error=implicit-function-declaration -Wno-error=unused-but-set-variable") # ENDIF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") diff --git a/cmake/modules/FindVolk.cmake b/cmake/modules/FindVolk.cmake index eff504408..d1e554bf2 100644 --- a/cmake/modules/FindVolk.cmake +++ b/cmake/modules/FindVolk.cmake @@ -37,13 +37,15 @@ CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_multiply_32f HAVE_VOLK_MULT_FLOAT_FUNCT CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_32f HAVE_VOLK_MAG_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_square_32f HAVE_VOLK_MAG_SQUARE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_divide_32f HAVE_VOLK_DIVIDE_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_dot_prod_32fc HAVE_VOLK_DOTPROD_FC_FUNCTION) +CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_dot_prod_32fc HAVE_VOLK_DOTPROD_FC_FUNCTION) +CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_dot_prod_32fc HAVE_VOLK_DOTPROD_CFC_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_conjugate_dot_prod_32fc HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_dot_prod_32f HAVE_VOLK_DOTPROD_F_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32f_atan2_32f HAVE_VOLK_ATAN_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_convert_16i HAVE_VOLK_CONVERT_FI_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_32f_x2 HAVE_VOLK_DEINTERLEAVE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_subtract_32f HAVE_VOLK_SUB_FLOAT_FUNCTION) +CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_add_32f HAVE_VOLK_ADD_FLOAT_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_square_dist_32f HAVE_VOLK_SQUARE_DIST_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_real_32f HAVE_VOLK_DEINTERLEAVE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_index_max_16u HAVE_VOLK_MAX_ABS_FUNCTION) @@ -66,6 +68,9 @@ ENDIF() IF(${HAVE_VOLK_SUB_FLOAT_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SUB_FLOAT_FUNCTION") ENDIF() +IF(${HAVE_VOLK_ADD_FLOAT_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ADD_FLOAT_FUNCTION") +ENDIF() IF(${HAVE_VOLK_MULT2_CONJ_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT2_CONJ_FUNCTION") ENDIF() diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index a26c68579..82c3dd41d 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -128,7 +128,7 @@ int main(int argc, char **argv) { void *uhd; ue_dl_t ue_dl; lte_fft_t fft; - chest_t chest; + chest_dl_t chest; uint32_t nframes=0; uint32_t nof_trials = 0; uint32_t sfn = 0; // system frame number @@ -136,6 +136,11 @@ int main(int argc, char **argv) { uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; float rssi=0, rsrp=0, rsrq=0; + cf_t *nullce[MAX_PORTS]; + + for (int i=0;i + +#include "liblte/config.h" +#include "liblte/phy/common/phy_common.h" + +typedef _Complex float cf_t; + +/** Generic OFDM channel equalizer +*/ + + +LIBLTE_API int cheq_zf(cf_t *input, + cf_t *ce, + cf_t *output, + uint32_t len); + +LIBLTE_API int cheq_mmse(cf_t *input, + cf_t *ce, + cf_t *output, + uint32_t len, + float noise_estimate); + + + +#endif \ No newline at end of file diff --git a/lte/phy/include/liblte/phy/ch_estimation/chest.h b/lte/phy/include/liblte/phy/ch_estimation/chest.h deleted file mode 100644 index 0eb7a4401..000000000 --- a/lte/phy/include/liblte/phy/ch_estimation/chest.h +++ /dev/null @@ -1,238 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - - - -#ifndef CHEST_ -#define CHEST_ - -#include - -#include "liblte/config.h" - -#include "liblte/phy/resampling/interp.h" -#include "liblte/phy/ch_estimation/refsignal.h" -#include "liblte/phy/common/phy_common.h" - -typedef _Complex float cf_t; /* this is only a shortcut */ - -typedef void (*interpolate_fnc_t) (cf_t *input, - cf_t *output, - uint32_t M, - uint32_t len, - uint32_t off_st, - uint32_t off_end); - -/** This is an OFDM channel estimator. - * It works with any reference signal pattern, provided by the object - * refsignal_t - * A 2-D filter is used for freq and time channel interpolation. - * - */ - -/* Low-level API */ -typedef struct LIBLTE_API { - uint32_t nof_ports; - uint32_t nof_re; - uint32_t nof_symbols; - - refsignal_t refsignal[MAX_PORTS][NSLOTS_X_FRAME]; - interp_t interp_time[MAX_PORTS]; - interp_t interp_freq[MAX_PORTS]; - -}chest_t; - -LIBLTE_API int chest_init(chest_t *q, - uint32_t nof_re, - uint32_t nof_symbols, - uint32_t nof_ports); - -LIBLTE_API void chest_free(chest_t *q); - -LIBLTE_API int chest_set_nof_ports(chest_t *q, - uint32_t nof_ports); - - -LIBLTE_API float chest_rsrp(chest_t *q, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API float chest_rsrp_sf(chest_t *q, - uint32_t sf_idx); - -LIBLTE_API float chest_rssi(chest_t *q, - cf_t *input); - -LIBLTE_API float chest_rssi_sf(chest_t *q, - cf_t *input); - -LIBLTE_API float chest_rsrq(chest_t *q, - cf_t *input, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API float chest_rsrq_sf(chest_t *q, - cf_t *input, - uint32_t sf_idx); - -LIBLTE_API int chest_measure_ref(chest_t *q, - cf_t *input, - uint32_t nslot, - uint32_t port_id, - uint32_t nref); - -LIBLTE_API void chest_measure_slot(chest_t *q, - cf_t *input, - uint32_t nslot); - -LIBLTE_API void chest_measure_sf(chest_t *q, - cf_t *input, - uint32_t sf_idx); - -LIBLTE_API int chest_ce_slot_port(chest_t *q, - cf_t *input, - cf_t *ce, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API int chest_ce_sf_port(chest_t *q, - cf_t *input, - cf_t *ce, - uint32_t sf_idx, - uint32_t port_id); - -LIBLTE_API int chest_ce_slot(chest_t *q, - cf_t *input, - cf_t *ce[MAX_PORTS], - uint32_t nslot); - -LIBLTE_API int chest_ce_sf(chest_t *q, - cf_t *input, - cf_t *ce[MAX_PORTS], - uint32_t sf_idx); - -LIBLTE_API void chest_fprint(chest_t *q, - FILE *stream, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API void chest_ref_fprint(chest_t *q, - FILE *stream, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API void chest_recvsig_fprint(chest_t *q, - FILE *stream, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API void chest_ce_fprint(chest_t *q, - FILE *stream, - uint32_t nslot, - uint32_t port_id); - -LIBLTE_API int chest_ref_get_symbols(chest_t *q, - uint32_t port_id, - uint32_t nslot, - uint32_t l[2]); - - - - -/********************************************************* - * - * Downlink Channel Estimator - * - *********************************************************/ -LIBLTE_API int chest_init_LTEDL(chest_t *q, - lte_cell_t cell); - -LIBLTE_API int chest_ref_set_LTEDL_slot_port(chest_t *q, - uint32_t nslot, - uint32_t port_id, - lte_cell_t cell); - -LIBLTE_API int chest_ref_set_LTEDL_slot(chest_t *q, - uint32_t nslot, - lte_cell_t cell); - -LIBLTE_API int chest_ref_set_LTEDL(chest_t *q, - lte_cell_t cell); - - -/********************************************************* - * - * Uplink Channel Estimator - * - *********************************************************/ -LIBLTE_API int chest_init_LTEUL(chest_t *q, - lte_cell_t cell); - -LIBLTE_API int chest_ref_set_LTEUL_slot(chest_t *q, - uint32_t nslot, - lte_cell_t cell); - -LIBLTE_API int chest_ref_set_LTEUL(chest_t *q, - lte_cell_t cell); - - -/* High-level API */ - -/** TODO: The high-level API has N interfaces, one for each port */ - -typedef struct LIBLTE_API{ - chest_t obj; - struct chest_init { - int nof_symbols; // 7 for normal cp, 6 for extended - int nof_ports; - int nof_prb; - int cell_id; // set to -1 to init at runtime - } init; - cf_t *input; - int in_len; - struct chest_ctrl_in { - int sf_idx; // subframe id in the 10ms frame - } ctrl_in; - cf_t *output[MAX_PORTS]; - int out_len[MAX_PORTS]; -}chest_hl; - -#define DEFAULT_FRAME_SIZE 2048 - -LIBLTE_API int chest_initialize(chest_hl* h); -LIBLTE_API int chest_work(chest_hl* hl); -LIBLTE_API int chest_stop(chest_hl* hl); - -#endif - - - - - - - - diff --git a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h index c1f3d23ca..799e40c00 100644 --- a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h +++ b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h @@ -39,11 +39,6 @@ #include "liblte/phy/ch_estimation/refsignal_dl.h" #include "liblte/phy/common/phy_common.h" -#define CHEST_RS_AVERAGE_TIME 0 -#define CHEST_RS_AVERAGE_FREQ 3 - - - /** 3GPP LTE Downlink channel estimator and equalizer. * Estimates the channel in the resource elements transmitting references and interpolates for the rest * of the resource grid. @@ -53,19 +48,30 @@ * This object depends on the refsignal_t object for creating the LTE CSR signal. */ +#define CHEST_MAX_FILTER_FREQ_LEN 10 +#define CHEST_MAX_FILTER_TIME_LEN 4 + typedef struct { lte_cell_t cell; refsignal_cs_t csr_signal; cf_t *pilot_estimates[MAX_PORTS]; + cf_t *pilot_estimates_average[MAX_PORTS]; cf_t *pilot_recv_signal[MAX_PORTS]; - cf_t *pilot_symbol_avg; + + uint32_t filter_freq_len; + float filter_freq[CHEST_MAX_FILTER_FREQ_LEN]; + uint32_t filter_time_len; + float filter_time[CHEST_MAX_FILTER_TIME_LEN]; + + cf_t *tmp_freqavg; + cf_t *tmp_timeavg[CHEST_MAX_FILTER_TIME_LEN]; + + interp_linvec_t interp_linvec; + interp_lin_t interp_lin; - interp_t interp_time[MAX_PORTS]; - interp_t interp_freq[MAX_PORTS]; - float rssi; - float rsrq; - float rsrp; + float rsrp[MAX_PORTS]; + float noise_estimate[MAX_PORTS]; } chest_dl_t; @@ -74,6 +80,14 @@ LIBLTE_API int chest_dl_init(chest_dl_t *q, LIBLTE_API void chest_dl_free(chest_dl_t *q); +LIBLTE_API int chest_dl_set_filter_freq(chest_dl_t *q, + float *filter, + uint32_t filter_len); + +LIBLTE_API int chest_dl_set_filter_time(chest_dl_t *q, + float *filter, + uint32_t filter_len); + LIBLTE_API int chest_dl_estimate(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], @@ -85,16 +99,7 @@ LIBLTE_API int chest_dl_estimate_port(chest_dl_t *q, uint32_t sf_idx, uint32_t port_id); -LIBLTE_API int chest_dl_equalize_zf(chest_dl_t *q, - cf_t *input, - cf_t *ce[MAX_PORTS], - cf_t *output); - -LIBLTE_API int chest_dl_equalize_mmse(chest_dl_t *q, - cf_t *input, - cf_t *ce[MAX_PORTS], - float *noise_estimate, - cf_t *output); +LIBLTE_API float chest_dl_get_noise_estimate(chest_dl_t *q); LIBLTE_API float chest_dl_get_rssi(chest_dl_t *q); diff --git a/lte/phy/include/liblte/phy/ch_estimation/refsignal.h b/lte/phy/include/liblte/phy/ch_estimation/refsignal.h deleted file mode 100644 index 6efb85fa9..000000000 --- a/lte/phy/include/liblte/phy/ch_estimation/refsignal.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - - - -#ifndef REFSIGNAL_ -#define REFSIGNAL_ - - -/* Object to manage reference signals for OFDM channel equalization. - * - * It generates the reference signals for LTE. - * - */ - -#include "liblte/config.h" -#include "liblte/phy/common/phy_common.h" - -typedef _Complex float cf_t; - -typedef struct LIBLTE_API{ - uint32_t time_idx; - uint32_t freq_idx; - cf_t symbol; -}ref_t; - -typedef struct LIBLTE_API{ - uint32_t nof_refs; // number of reference signals - uint32_t *symbols_ref; // symbols with at least one reference - uint32_t nsymbols; // number of symbols with at least one reference - uint32_t voffset; // offset of the first reference in the freq domain - uint32_t nof_prb; - ref_t *refs; - cf_t *ch_est; - cf_t *recv_symbol; -} refsignal_t; - - -typedef struct LIBLTE_API { - float beta; // amplitude scaling - uint32_t delta_ss; // Set to 0 for PUCCH - uint32_t cyclic_shift; - uint32_t cyclic_shift_for_drms; /* From DCI 0. Set to 0 if no PDCCH with DCI 0 for the same TB - or if the initial PUSCH is semi-persisently scheduled or - if the initial PUSCH is scheduled by the RA response grant */ - bool group_hopping_en; - bool sequence_hopping_en; -} refsignal_ul_cfg_t; - - -LIBLTE_API int refsignal_init_LTEDL(refsignal_t *q, - uint32_t port_id, - uint32_t nslot, - lte_cell_t cell); - -LIBLTE_API int refsignal_init_LTEUL_drms_pusch(refsignal_t *q, - uint32_t nof_prb, - uint32_t prb_start, - uint32_t nslot, - lte_cell_t cell, - refsignal_ul_cfg_t *drms_cfg); - -LIBLTE_API void refsignal_free(refsignal_t *q); - -LIBLTE_API int refsignal_put(refsignal_t *q, - cf_t *slot_symbols); - -#endif diff --git a/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h b/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h index 6b8374572..176a36cf3 100644 --- a/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h +++ b/lte/phy/include/liblte/phy/ch_estimation/refsignal_dl.h @@ -41,13 +41,13 @@ typedef _Complex float cf_t; #define REFSIGNAL_NUM_SF(nof_prb, port_id) (((port_id)<2?8:4)*(nof_prb)) #define REFSIGNAL_MAX_NUM_SF(nof_prb) REFSIGNAL_NUM_SF(nof_prb, 0) -#define REFSIGNAL_PILOT_IDX(i,l,ns,cell) (2*cell.nof_prb*((l)+2*((ns)%2))+(i)) +#define REFSIGNAL_PILOT_IDX(i,l,cell) (2*cell.nof_prb*(l)+(i)) /** Cell-Specific Reference Signal */ typedef struct LIBLTE_API { lte_cell_t cell; - cf_t *pilots[NSUBFRAMES_X_FRAME]; // save 2 reference symbols per slot + cf_t *pilots[2][NSUBFRAMES_X_FRAME]; // Saves the reference signal per subframe for ports 0,1 and ports 2,3 } refsignal_cs_t; @@ -58,29 +58,25 @@ LIBLTE_API void refsignal_cs_free(refsignal_cs_t *q); LIBLTE_API int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, - uint32_t sf_idx, cf_t *pilots, cf_t *sf_symbols); LIBLTE_API int refsignal_cs_get_sf(lte_cell_t cell, uint32_t port_id, - uint32_t sf_idx, cf_t *sf_symbols, cf_t *pilots); LIBLTE_API uint32_t refsignal_fidx(lte_cell_t cell, - uint32_t ns, uint32_t l, uint32_t port_id, uint32_t m); -LIBLTE_API uint32_t refsignal_nsymbol(lte_cell_t cell, - uint32_t ns, - uint32_t l); +LIBLTE_API uint32_t refsignal_nsymbol(uint32_t l, + lte_cp_t cp, + uint32_t port_id); LIBLTE_API uint32_t refsignal_cs_v(uint32_t port_id, - uint32_t ns, - uint32_t symbol_id); + uint32_t ref_symbol_idx); LIBLTE_API uint32_t refsignal_cs_nof_symbols(uint32_t port_id); diff --git a/lte/phy/include/liblte/phy/phy.h b/lte/phy/include/liblte/phy/phy.h index ed8152bd5..5709496f0 100644 --- a/lte/phy/include/liblte/phy/phy.h +++ b/lte/phy/include/liblte/phy/phy.h @@ -51,9 +51,7 @@ #include "liblte/phy/common/phy_common.h" #include "liblte/phy/common/fft.h" -#include "liblte/phy/ch_estimation/chest.h" #include "liblte/phy/ch_estimation/chest_dl.h" -#include "liblte/phy/ch_estimation/refsignal.h" #include "liblte/phy/ch_estimation/refsignal_dl.h" #include "liblte/phy/resampling/interp.h" diff --git a/lte/phy/include/liblte/phy/resampling/interp.h b/lte/phy/include/liblte/phy/resampling/interp.h index e2028b22b..64f4251f4 100644 --- a/lte/phy/include/liblte/phy/resampling/interp.h +++ b/lte/phy/include/liblte/phy/resampling/interp.h @@ -34,69 +34,70 @@ typedef _Complex float cf_t; -typedef enum LIBLTE_API {LINEAR} interp_type_t; -typedef struct LIBLTE_API { - interp_type_t type; - - float *in_mag; - float *in_arg; - float *in_mag0; - float *in_arg0; - float *in_mag1; - float *in_arg1; - - float *out_mag; - float *out_arg; - float *out_arg2; - int16_t *table_idx; - - cf_t *out_cexp; - cf_t *out_prod; - - cf_t *cexptable; - - uint32_t len; - uint32_t M; - -}interp_t; +/************* STATIC LINEAR INTERPOLATION FUNCTIONS */ -LIBLTE_API int interp_init(interp_t *q, - interp_type_t type, - uint32_t len, - uint32_t M); +LIBLTE_API cf_t interp_linear_onesample(cf_t input0, + cf_t input1); -LIBLTE_API void interp_free(interp_t *q); +LIBLTE_API cf_t interp_linear_onesample_cabs(cf_t input0, + cf_t input1); -LIBLTE_API void interp_run(interp_t *q, - cf_t *input, - cf_t *output); - -LIBLTE_API void interp_run_offset(interp_t *q, - cf_t *input, - cf_t *output, - uint32_t off_st, - uint32_t off_end); - -LIBLTE_API cf_t interp_linear_onesample(cf_t *input); - -LIBLTE_API cf_t interp_linear_onesample2(cf_t *input); - -LIBLTE_API void interp_linear_offset(cf_t *input, - cf_t *output, - uint32_t M, - uint32_t len, - uint32_t off_st, - uint32_t off_end); - -LIBLTE_API void interp_linear_c(cf_t *input, - cf_t *output, - uint32_t M, - uint32_t len); +LIBLTE_API void interp_linear_offset_cabs(cf_t *input, + cf_t *output, + uint32_t M, + uint32_t len, + uint32_t off_st, + uint32_t off_end); LIBLTE_API void interp_linear_f(float *input, float *output, uint32_t M, uint32_t len); + + +/* Interpolation between vectors */ + +typedef struct { + cf_t *diff_vec; + uint32_t vector_len; +} interp_linvec_t; + +LIBLTE_API int interp_linear_vector_init(interp_linvec_t *q, + uint32_t vector_len); + +LIBLTE_API void interp_linear_vector_free(interp_linvec_t *q); + +LIBLTE_API void interp_linear_vector(interp_linvec_t *q, + cf_t *in0, + cf_t *in1, + cf_t *between, + uint32_t M); + + + +/* Interpolation within a vector */ + +typedef struct { + cf_t *diff_vec; + cf_t *diff_vec2; + float *ramp; + uint32_t vector_len; + uint32_t M; +} interp_lin_t; + +LIBLTE_API int interp_linear_init(interp_lin_t *q, + uint32_t vector_len, + uint32_t M); + +LIBLTE_API void interp_linear_free(interp_lin_t *q); + +LIBLTE_API void interp_linear_offset(interp_lin_t *q, + cf_t *input, + cf_t *output, + uint32_t off_st, + uint32_t off_end); + + #endif // INTERP_H diff --git a/lte/phy/include/liblte/phy/ue/ue_celldetect.h b/lte/phy/include/liblte/phy/ue/ue_celldetect.h index 7ce2f86c9..83bd5fa42 100644 --- a/lte/phy/include/liblte/phy/ue/ue_celldetect.h +++ b/lte/phy/include/liblte/phy/ue/ue_celldetect.h @@ -33,7 +33,7 @@ #include "liblte/config.h" #include "liblte/phy/sync/sync.h" #include "liblte/phy/sync/cfo.h" -#include "liblte/phy/ch_estimation/chest.h" +#include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/phch/pbch.h" #include "liblte/phy/common/fft.h" diff --git a/lte/phy/include/liblte/phy/ue/ue_dl.h b/lte/phy/include/liblte/phy/ue/ue_dl.h index 17a144a1b..00f5b7f3b 100644 --- a/lte/phy/include/liblte/phy/ue/ue_dl.h +++ b/lte/phy/include/liblte/phy/ue/ue_dl.h @@ -36,7 +36,7 @@ -#include "liblte/phy/ch_estimation/chest.h" +#include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/common/fft.h" #include "liblte/phy/common/phy_common.h" @@ -64,7 +64,7 @@ typedef struct LIBLTE_API { pdsch_harq_t harq_process[NOF_HARQ_PROCESSES]; regs_t regs; lte_fft_t fft; - chest_t chest; + chest_dl_t chest; lte_cell_t cell; diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index 3e3f2cb98..45c14e276 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -51,7 +51,7 @@ #include "liblte/config.h" #include "liblte/phy/sync/sync.h" #include "liblte/phy/sync/cfo.h" -#include "liblte/phy/ch_estimation/chest.h" +#include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/phch/pbch.h" #include "liblte/phy/common/fft.h" @@ -66,11 +66,11 @@ typedef struct LIBLTE_API { sync_t sfind; - cf_t *slot1_symbols; + cf_t *sf_symbols; cf_t *ce[MIB_MAX_PORTS]; lte_fft_t fft; - chest_t chest; + chest_dl_t chest; pbch_t pbch; uint8_t bch_payload[BCH_PAYLOAD_LEN]; diff --git a/lte/phy/include/liblte/phy/ue/ue_sync.h b/lte/phy/include/liblte/phy/ue/ue_sync.h index d1a02d72f..6a9c972d0 100644 --- a/lte/phy/include/liblte/phy/ue/ue_sync.h +++ b/lte/phy/include/liblte/phy/ue/ue_sync.h @@ -33,7 +33,7 @@ #include "liblte/config.h" #include "liblte/phy/sync/sync.h" #include "liblte/phy/sync/cfo.h" -#include "liblte/phy/ch_estimation/chest.h" +#include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/phch/pbch.h" #include "liblte/phy/common/fft.h" diff --git a/lte/phy/include/liblte/phy/utils/convolution.h b/lte/phy/include/liblte/phy/utils/convolution.h index ed9404738..84d2d8d17 100644 --- a/lte/phy/include/liblte/phy/utils/convolution.h +++ b/lte/phy/include/liblte/phy/utils/convolution.h @@ -64,4 +64,16 @@ LIBLTE_API uint32_t conv_cc(cf_t *input, uint32_t input_len, uint32_t filter_len); +LIBLTE_API uint32_t conv_same_cf(cf_t *input, + float *filter, + cf_t *output, + uint32_t input_len, + uint32_t filter_len); + +LIBLTE_API uint32_t conv_same_cc(cf_t *input, + cf_t *filter, + cf_t *output, + uint32_t input_len, + uint32_t filter_len); + #endif // CONVOLUTION_H_ diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index 27f3fcc19..81c82b4ce 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -63,10 +63,12 @@ LIBLTE_API void vec_save_file(char *filename, void *buffer, uint32_t len); /* sum two vectors */ LIBLTE_API void vec_sum_ch(uint8_t *x, uint8_t *y, char *z, uint32_t len); +LIBLTE_API void vec_sum_fff(float *x, float *y, float *z, uint32_t len); LIBLTE_API void vec_sum_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); /* substract two vectors z=x-y */ LIBLTE_API void vec_sub_fff(float *x, float *y, float *z, uint32_t len); +LIBLTE_API void vec_sub_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); /* Square distance */ LIBLTE_API void vec_square_dist(cf_t symbol, cf_t *points, float *distance, uint32_t npoints); @@ -91,6 +93,7 @@ LIBLTE_API void vec_prod_cfc(cf_t *x, float *y, cf_t *z, uint32_t len); LIBLTE_API void vec_prod_conj_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); /* Dot-product */ +LIBLTE_API cf_t vec_dot_prod_cfc(cf_t *x, float *y, uint32_t len); LIBLTE_API cf_t vec_dot_prod_ccc(cf_t *x, cf_t *y, uint32_t len); LIBLTE_API cf_t vec_dot_prod_conj_ccc(cf_t *x, cf_t *y, uint32_t len); LIBLTE_API float vec_dot_prod_fff(float *x, float *y, uint32_t len); @@ -98,9 +101,6 @@ LIBLTE_API float vec_dot_prod_fff(float *x, float *y, uint32_t len); /* z=x/y vector division (element-wise) */ LIBLTE_API void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, uint32_t len); -/* z=x/y vector division with mod(y)=1 (element-wise) */ -LIBLTE_API void vec_div_ccc_mod1(cf_t *x, cf_t *y, cf_t *z, uint32_t len); - /* conjugate */ LIBLTE_API void vec_conj_cc(cf_t *x, cf_t *y, uint32_t len); diff --git a/lte/phy/lib/ch_estimation/src/cheq.c b/lte/phy/lib/ch_estimation/src/cheq.c new file mode 100644 index 000000000..c1719892a --- /dev/null +++ b/lte/phy/lib/ch_estimation/src/cheq.c @@ -0,0 +1,53 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + + +#include +#include +#include +#include +#include +#include + +#include "liblte/config.h" + +#include "liblte/phy/ch_estimation/cheq.h" +#include "liblte/phy/utils/vector.h" + + +int cheq_zf(cf_t *input, cf_t *ce, cf_t *output, uint32_t len) +{ + fprintf(stderr, "Not implemented\n"); + return -1; +} + +int cheq_mmse(cf_t *input, cf_t *ce, cf_t *output, uint32_t len, float noise_estimate) +{ + fprintf(stderr, "Not implemented\n"); + return -1; +} diff --git a/lte/phy/lib/ch_estimation/src/chest.c b/lte/phy/lib/ch_estimation/src/chest.c deleted file mode 100644 index 417695899..000000000 --- a/lte/phy/lib/ch_estimation/src/chest.c +++ /dev/null @@ -1,503 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - - -#include -#include -#include -#include - -#include "liblte/phy/ch_estimation/chest.h" -#include "liblte/phy/utils/vector.h" -#include "liblte/phy/utils/debug.h" - -#define SLOT_SZ(q) (q->nof_symbols * q->symbol_sz) -#define SF_SZ(q) (2 * SLOT_SZ(q)) - -#define VOLK_INTERP - -void chest_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { - chest_ref_fprint(q, stream, nslot, port_id); - chest_recvsig_fprint(q, stream, nslot, port_id); - chest_ce_fprint(q, stream, nslot, port_id); -} - -/* Sets the number of ports to estimate. nof_ports must be smaler than nof_ports - * used during the call to chest_init(). - */ -int chest_set_nof_ports(chest_t *q, uint32_t nof_ports) { - if (nof_ports < q->nof_ports) { - q->nof_ports = nof_ports; - return LIBLTE_SUCCESS; - } else { - return LIBLTE_ERROR_INVALID_INPUTS; - } -} - -void chest_ref_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { - int i; - fprintf(stream, "refs%d=[",port_id); - for (i=0;irefsignal[port_id][nslot].nof_refs;i++) { - fprintf(stream, "%3.3f%+3.3fi, ", __real__ q->refsignal[port_id][nslot].refs[i].symbol, - __imag__ q->refsignal[port_id][nslot].refs[i].symbol); - } - fprintf(stream, "];\n"); -} - -void chest_recvsig_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { - int i; - fprintf(stream, "recvsig%d=[",port_id); - for (i=0;irefsignal[port_id][nslot].nof_refs;i++) { - fprintf(stream, "%3.3f%+3.3fi, ", __real__ q->refsignal[port_id][nslot].recv_symbol[i], - __imag__ q->refsignal[port_id][nslot].recv_symbol[i]); - } - fprintf(stream, "];\n"); -} - -void chest_ce_fprint(chest_t *q, FILE *stream, uint32_t nslot, uint32_t port_id) { - int i; - fprintf(stream, "mag%d=[",port_id); - for (i=0;irefsignal[port_id][nslot].nof_refs;i++) { - fprintf(stream, "%3.3f, ", cabsf(q->refsignal[port_id][nslot].ch_est[i])); - } - fprintf(stream, "];\nphase%d=[",port_id); - for (i=0;irefsignal[port_id][nslot].nof_refs;i++) { - fprintf(stream, "%3.3f, ", atan2f(__imag__ q->refsignal[port_id][nslot].ch_est[i], - __real__ q->refsignal[port_id][nslot].ch_est[i])); - } - fprintf(stream, "];\n"); -} - -float chest_rsrp(chest_t *q, uint32_t nslot, uint32_t port_id) { - int nof_refs = q->refsignal[port_id][nslot].nof_refs; - cf_t *ch_est = q->refsignal[port_id][nslot].ch_est; - return crealf(vec_dot_prod_conj_ccc(ch_est, ch_est, nof_refs))/nof_refs; -} - -float chest_rsrp_sf(chest_t *q, uint32_t sf_idx) { - int n,p; - float rsrp=0; - for (p=0;pnof_ports;p++) { - for (n=0;n<2;n++) { - rsrp+=chest_rsrp(q, 2*sf_idx+n, p)/(2*q->nof_ports); - } - } - return rsrp; -} - -float chest_rssi(chest_t *q, cf_t *input) { - float rssi = 0; - int i; - int l[2]; - if (q->nof_symbols == CPNORM_NSYMB) { - l[0] = 0; l[1] = 4; - } else { - l[0] = 0; l[1] = 3; - } - - for (i=0;i<2;i++) { - cf_t *tmp = &input[l[i]*q->nof_re]; - rssi += crealf(vec_dot_prod_conj_ccc(tmp, tmp, q->nof_re)); - } - return rssi; -} - -float chest_rssi_sf(chest_t *q, cf_t *input) { - int n; - int slotsz = q->nof_symbols*q->nof_re; - float rssi=0; - for (n=0;n<2;n++) { - rssi += chest_rssi(q, &input[n*slotsz]); - } - return rssi; -} - -float chest_rsrq(chest_t *q, cf_t *input, uint32_t nslot, uint32_t port_id) { - return (q->nof_re/RE_X_RB) * chest_rsrp(q, nslot, port_id) / chest_rssi(q, input); -} - -float chest_rsrq_sf(chest_t *q, cf_t *input, uint32_t sf_idx) { - return (4*q->nof_ports*q->nof_re/RE_X_RB) * chest_rsrp_sf(q, sf_idx) / chest_rssi_sf(q, input); -} - -int chest_measure_ref(chest_t *q, cf_t *input, uint32_t nslot, uint32_t port_id, uint32_t nref) { - int fidx, tidx; - cf_t known_ref, channel_ref; - int ret = LIBLTE_ERROR_INVALID_INPUTS; - - if (q != NULL && - input != NULL && - nslot < NSLOTS_X_FRAME && - port_id < q->nof_ports) - { - if (nref < q->refsignal[port_id][nslot].nof_refs) { - - fidx = q->refsignal[port_id][nslot].refs[nref].freq_idx; // reference frequency index - tidx = q->refsignal[port_id][nslot].refs[nref].time_idx; // reference time index - - known_ref = q->refsignal[port_id][nslot].refs[nref].symbol; - channel_ref = input[tidx * q->nof_re + fidx]; - q->refsignal[port_id][nslot].recv_symbol[nref] = channel_ref; - - DEBUG("Reference %2d pos (%2d,%2d)=%3d %.2f dB %.2f/%.2f=%.2f\n", nref, tidx, fidx, tidx * q->nof_re + fidx, - 10*log10f(cabsf(channel_ref/known_ref)), - cargf(channel_ref)/M_PI,cargf(known_ref)/M_PI, - cargf(channel_ref/known_ref)/M_PI); - - - /* FIXME: compare with threshold */ - if (channel_ref != 0) { - q->refsignal[port_id][nslot].ch_est[nref] = channel_ref/known_ref; - } else { - q->refsignal[port_id][nslot].ch_est[nref] = 1e-6; - } - ret = LIBLTE_SUCCESS; - } - } - return ret; -} - -void chest_measure_slot_port(chest_t *q, cf_t *input, uint32_t nslot, uint32_t port_id) -{ - int i; - refsignal_t *r = &q->refsignal[port_id][nslot]; - - DEBUG("Estimating channel slot=%d port=%d using %d reference signals\n", - nslot, port_id, r->nof_refs); - - for (i=0;inof_refs;i++) { - chest_measure_ref(q, input, nslot, port_id, i); - } -} - -void chest_measure_slot(chest_t *q, cf_t *input, uint32_t nslot) { - int p; - for (p=0;pnof_ports;p++) { - chest_measure_slot_port(q, input, nslot, p); - } -} - -void chest_measure_sf(chest_t *q, cf_t *input, uint32_t sf_idx) { - int p, n, slotsz; - slotsz = q->nof_symbols*q->nof_re; - for (p=0;pnof_ports;p++) { - for (n=0;n<2;n++) { - chest_measure_slot_port(q, &input[n*slotsz], 2*sf_idx+n, p); - } - } -} - - -/* Computes channel estimates for each reference in a slot and port. - * Saves the nof_prb * 12 * nof_symbols channel estimates in the array ce - */ -int chest_ce_slot_port(chest_t *q, cf_t *input, cf_t *ce, uint32_t nslot, uint32_t port_id) -{ - uint32_t i, j; - cf_t x[2], y[MAX_NSYMB]; - - int ret = LIBLTE_ERROR_INVALID_INPUTS; - - if (q != NULL && - input != NULL && - nslot < NSLOTS_X_FRAME && - port_id < q->nof_ports) - { - if (q->refsignal[port_id][nslot].nsymbols <= 2) { - refsignal_t *r = &q->refsignal[port_id][nslot]; - - chest_measure_slot_port(q, input, nslot, port_id); - - /* interpolate the symbols with references - * in the freq domain */ - for (i=0;insymbols;i++) { -#ifdef VOLK_INTERP - interp_run_offset(&q->interp_freq[port_id], - &r->ch_est[i * r->nof_refs/2], &ce[r->symbols_ref[i] * q->nof_re], - r->voffset, RE_X_RB/2-r->voffset); -#else - interp_linear_offset(&r->ch_est[i * r->nof_refs/2], - &ce[r->symbols_ref[i] * q->nof_re], RE_X_RB/2, - r->nof_refs/2, r->voffset, RE_X_RB/2-r->voffset); -#endif - } - /* now interpolate in the time domain */ - for (i=0;inof_re; i++) { - if (r->nsymbols > 1) { - for (j=0;jnsymbols;j++) { - x[j] = ce[r->symbols_ref[j] * q->nof_re + i]; - } -#ifdef VOLK_INTERP - interp_run_offset(&q->interp_time[port_id], x, y, - r->symbols_ref[0], 3); -#else - interp_linear_offset(x, y, r->symbols_ref[1]-r->symbols_ref[0], - 2, r->symbols_ref[0], 3); -#endif - } else { - for (j=0;jsymbols_ref[0] * q->nof_re + i]; - } - } - for (j=0;jnof_symbols;j++) { - ce[j * q->nof_re + i] = y[j]; - } - } - ret = LIBLTE_SUCCESS; - } - } - return ret; -} - - -/* Computes channel estimates for each reference in a subframe and port id. - */ -int chest_ce_sf_port(chest_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx, uint32_t port_id) { - int n, slotsz, ret; - slotsz = q->nof_symbols*q->nof_re; - for (n=0;n<2;n++) { - ret = chest_ce_slot_port(q, &input[n*slotsz], &ce[n*slotsz], 2*sf_idx+n, port_id); - if (ret != LIBLTE_SUCCESS) { - return ret; - } - } - return LIBLTE_SUCCESS; -} - -/* Computes channel estimates for each reference in a slot for all ports. - */ -int chest_ce_slot(chest_t *q, cf_t *input, cf_t **ce, uint32_t nslot) { - int p, ret; - for (p=0;pnof_ports;p++) { - ret = chest_ce_slot_port(q, input, ce[p], nslot, p); - if (ret != LIBLTE_SUCCESS) { - return ret; - } - } - return LIBLTE_SUCCESS; -} - -/* Computes channel estimates for each reference in a subframe for all ports. - */ -int chest_ce_sf(chest_t *q, cf_t *input, cf_t *ce[MAX_PORTS], uint32_t sf_idx) { - int p, n, slotsz, ret; - slotsz = q->nof_symbols*q->nof_re; - for (p=0;pnof_ports;p++) { - for (n=0;n<2;n++) { - ret = chest_ce_slot_port(q, &input[n*slotsz], &ce[p][n*slotsz], 2*sf_idx+n, p); - if (ret != LIBLTE_SUCCESS) { - return ret; - } - } - } - return LIBLTE_SUCCESS; -} - -int chest_init(chest_t *q, uint32_t nof_re, uint32_t nof_symbols, uint32_t nof_ports) { - int ret = LIBLTE_ERROR_INVALID_INPUTS; - - if (q != NULL && - nof_ports <= MAX_PORTS) - { - bzero(q, sizeof(chest_t)); - - q->nof_ports = nof_ports; - q->nof_symbols = nof_symbols; - q->nof_re = nof_re; - - INFO("Initializing channel estimator size %dx%d, nof_ports=%d\n", - q->nof_symbols, q->nof_re, nof_ports); - - ret = LIBLTE_SUCCESS; - } - return ret; -} - -void chest_free(chest_t *q) { - int p, n; - for (p=0;pnof_ports;p++) { - for (n=0;nrefsignal[p][n]); - } - } -#ifdef VOLK_INTERP - for (p=0;pinterp_freq[p]); - interp_free(&q->interp_time[p]); - } -#endif - bzero(q, sizeof(chest_t)); -} - -/* Fills l[2] with the symbols in the slot nslot that contain references. - * returns the number of symbols with references (in the slot) - */ -int chest_ref_get_symbols(chest_t *q, uint32_t port_id, uint32_t nslot, uint32_t l[2]) { - - if (q != NULL && - port_id < MAX_PORTS && - nslot < NSLOTS_X_FRAME) - { - memcpy(l, q->refsignal[port_id][nslot].symbols_ref, sizeof(uint32_t) * q->refsignal[port_id][nslot].nsymbols); - return q->refsignal[port_id][nslot].nsymbols; - } else { - return LIBLTE_ERROR_INVALID_INPUTS; - } -} - - - - - -/********************************************************************* - * - * Downlink Channel estimator - * - *********************************************************************/ -int chest_init_LTEDL(chest_t *q, lte_cell_t cell) { - int ret; - ret = chest_init(q, cell.nof_prb * RE_X_RB, CP_NSYMB(cell.cp), cell.nof_ports); - if (ret != LIBLTE_SUCCESS) { - return ret; - } else { - return chest_ref_set_LTEDL(q, cell); - } -} - -int chest_ref_set_LTEDL_slot_port(chest_t *q, uint32_t nslot, uint32_t port_id, lte_cell_t cell) { - int ret = LIBLTE_ERROR_INVALID_INPUTS; - - if (q != NULL && - port_id < MAX_PORTS && - nslot < NSLOTS_X_FRAME) - { - ret = refsignal_init_LTEDL(&q->refsignal[port_id][nslot], port_id, nslot, cell); - -#ifdef VOLK_INTERP - if (ret == LIBLTE_SUCCESS) { - if (nslot == 0) { - ret = interp_init(&q->interp_freq[port_id], LINEAR, q->refsignal[port_id][nslot].nof_refs/2, RE_X_RB/2); - if (ret == LIBLTE_SUCCESS) { - ret = interp_init(&q->interp_time[port_id], LINEAR, 2, - q->refsignal[port_id][nslot].symbols_ref[1] - q->refsignal[port_id][nslot].symbols_ref[0]); - } - } - } -#endif - } - return ret; -} - -int chest_ref_set_LTEDL_slot(chest_t *q, uint32_t nslot, lte_cell_t cell) { - int p, ret; - for (p=0;pnof_ports;p++) { - ret = chest_ref_set_LTEDL_slot_port(q, nslot, p, cell); - if (ret != LIBLTE_SUCCESS) { - return ret; - } - } - return LIBLTE_SUCCESS; -} - -int chest_ref_set_LTEDL(chest_t *q, lte_cell_t cell) { - int n, ret; - for (n=0;ninit.nof_symbols) { - h->init.nof_symbols = CPNORM_NSYMB; // Normal CP - } - if (!h->init.nof_prb) { - h->init.nof_prb = 6; - } - - cell.id = h->init.cell_id; - cell.nof_ports = h->init.nof_ports; - cell.nof_prb = h->init.nof_prb; - cell.cp = h->init.nof_symbols == CPNORM_NSYMB ? CPNORM : CPEXT; - - if (chest_init_LTEDL(&h->obj, cell)) { - fprintf(stderr, "Error initializing equalizer\n"); - return -1; - } - - return 0; -} - -/** This function must be called in an subframe basis (1ms) for LTE */ -int chest_work(chest_hl* hl) { - chest_t *q = &hl->obj; - chest_ce_sf(q, hl->input, hl->output, hl->ctrl_in.sf_idx); - return 0; -} - -int chest_stop(chest_hl* hl) { - chest_free(&hl->obj); - return 0; -} - - diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index d515fc413..c37afd308 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -32,13 +32,17 @@ #include #include #include +#include #include "liblte/config.h" #include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/utils/vector.h" +#include "liblte/phy/utils/convolution.h" + +#define CHEST_RS_AVERAGE_TIME 2 +#define CHEST_RS_AVERAGE_FREQ 3 -//#define VOLK_INTERP /** 3GPP LTE Downlink channel estimator and equalizer. * Estimates the channel in the resource elements transmitting references and interpolates for the rest @@ -63,11 +67,19 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) goto clean_exit; } - q->pilot_symbol_avg = vec_malloc(sizeof(cf_t) * 2*cell.nof_prb); - if (!q->pilot_symbol_avg) { + q->tmp_freqavg = vec_malloc(sizeof(cf_t) * 2*cell.nof_prb); + if (!q->tmp_freqavg) { perror("malloc"); goto clean_exit; } + for (int i=0;itmp_timeavg[i] = vec_malloc(sizeof(cf_t) * 2*cell.nof_prb); + if (!q->tmp_timeavg[i]) { + perror("malloc"); + goto clean_exit; + } + bzero(q->tmp_timeavg[i], sizeof(cf_t) * 2*cell.nof_prb); + } for (int i=0;ipilot_estimates[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); @@ -75,21 +87,34 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) perror("malloc"); goto clean_exit; } + q->pilot_estimates_average[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + if (!q->pilot_estimates_average[i]) { + perror("malloc"); + goto clean_exit; + } q->pilot_recv_signal[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); if (!q->pilot_recv_signal[i]) { perror("malloc"); goto clean_exit; } - #ifdef VOLK_INTERP - ret = interp_init(&q->interp_freq[i], LINEAR, 2*cell.nof_prb, RE_X_RB/2); - if (ret == LIBLTE_SUCCESS) { - ret = interp_init(&q->interp_time[i], LINEAR, 2, CP_NSYMB(cell.cp) - 3); - } - #endif - } - /* Init buffer for holding CE estimates averages */ + if (interp_linear_vector_init(&q->interp_linvec, RE_X_RB*cell.nof_prb)) { + fprintf(stderr, "Error initializing vector interpolator\n"); + goto clean_exit; + } + + if (interp_linear_init(&q->interp_lin, 2*cell.nof_prb, RE_X_RB/2)) { + fprintf(stderr, "Error initializing interpolator\n"); + goto clean_exit; + } + + /* Set default time/freq filters */ + float f[3]={0.15, 0.7, 0.15}; + chest_dl_set_filter_freq(q, f, 3); + + float t[2]={0.1, 0.9}; + chest_dl_set_filter_time(q, t, 2); q->cell = cell; } @@ -107,10 +132,13 @@ void chest_dl_free(chest_dl_t *q) { refsignal_cs_free(&q->csr_signal); - if (q->pilot_symbol_avg) { - free(q->pilot_symbol_avg); + if (q->tmp_freqavg) { + free(q->tmp_freqavg); } + interp_linear_vector_free(&q->interp_linvec); + interp_linear_free(&q->interp_lin); + for (int i=0;ipilot_estimates[i]) { free(q->pilot_estimates[i]); @@ -118,166 +146,163 @@ void chest_dl_free(chest_dl_t *q) if (q->pilot_recv_signal[i]) { free(q->pilot_recv_signal[i]); } - #ifdef VOLK_INTERP - interp_free(&q->interp_freq[i]); - interp_free(&q->interp_time[i]); - #endif } } -#define pilot_est(idx) q->pilot_estimates[port_id][REFSIGNAL_PILOT_IDX(idx,l,ns,q->cell)] +int chest_dl_set_filter_freq(chest_dl_t *q, float *filter, uint32_t filter_len) { + if (filter_len <= CHEST_MAX_FILTER_FREQ_LEN) { + q->filter_freq_len = filter_len; + for (int i=0;ifilter_freq[i] = filter[i]; + } + return LIBLTE_SUCCESS; + } else { + return LIBLTE_ERROR; + } +} -#if CHEST_RS_AVERAGE_TIME > 1 -cf_t timeavg[CHEST_RS_AVERAGE_TIME-1][12]; -int nof_timeavg=0; -#endif +int chest_dl_set_filter_time(chest_dl_t *q, float *filter, uint32_t filter_len) { + if (filter_len <= CHEST_MAX_FILTER_TIME_LEN) { + q->filter_time_len = filter_len; + for (int i=0;ifilter_time[i] = filter[i]; + } + return LIBLTE_SUCCESS; + } else { + return LIBLTE_ERROR; + } +} -static void average_pilots(chest_dl_t *q, uint32_t sf_idx, uint32_t port_id) +#define pilot_est(idx) q->pilot_estimates[port_id][REFSIGNAL_PILOT_IDX(idx,l,q->cell)] +#define pilot_avg(idx) q->pilot_estimates_average[port_id][REFSIGNAL_PILOT_IDX(idx,l,q->cell)] + +static void average_pilots(chest_dl_t *q, uint32_t port_id) { - uint32_t ns, l; - int i; + int nref=2*q->cell.nof_prb; + uint32_t l, i; + /* For each symbol with pilots in a slot */ - for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { - for (l=0;lpilot_symbol_avg, 2*q->cell.nof_prb); - - /** Frequency average */ -#if CHEST_RS_AVERAGE_FREQ > 1 - const uint32_t M = CHEST_RS_AVERAGE_FREQ; - cf_t xint[CHEST_RS_AVERAGE_FREQ]; - int j, k; - /* Extrapolate first M/2 samples */ - for (i=M/2-1;i>=0;i--) { - k=0; - for (j=i+M/2;j>=0;j--) { - xint[k]=pilot_est(j); - k++; - } - for (;j>=i-M/2;j--) { - if (k>=2) { - xint[k] = interp_linear_onesample(&xint[k-2]); - k++; - } - } - q->pilot_symbol_avg[i] = vec_acc_cc(xint,M)/M; - //q->pilot_symbol_avg[i] = (pilot_est(0)+pilot_est(1))/2; - } - - for (i=M/2;i<2*q->cell.nof_prb-M/2;i++) { - q->pilot_symbol_avg[i] = vec_acc_cc(&pilot_est(i-M/2),M)/M; - } - - /* Extrapolate last M/2 samples */ - for (;i<2*q->cell.nof_prb;i++) { - k=0; - for (j=i-M/2;j<2*q->cell.nof_prb;j++) { - xint[k]=pilot_est(j); - k++; - } - for (;k=2) { - xint[k] = interp_linear_onesample(&xint[k-2]); - } - } - q->pilot_symbol_avg[i] = vec_acc_cc(xint,M)/M; - //q->pilot_symbol_avg[i] = (pilot_est(i)+pilot_est(i+1))/2; - - } -#else - memcpy(q->pilot_symbol_avg, &pilot_est(0), 2*q->cell.nof_prb*sizeof(cf_t)); -#endif - - /* Time average last symbols */ -#if CHEST_RS_AVERAGE_TIME > 1 - if (nof_timeavgpilot_symbol_avg, 2*q->cell.nof_prb * sizeof(cf_t)); - nof_timeavg++; - } else { - bzero(&pilot_est(0),2*q->cell.nof_prb*sizeof(cf_t)); - for (i=0;icell.nof_prb); - } - vec_sum_ccc(q->pilot_symbol_avg,&pilot_est(0),&pilot_est(0),2*q->cell.nof_prb); - vec_sc_prod_cfc(&pilot_est(0), 1.0/CHEST_RS_AVERAGE_TIME, &pilot_est(0), 2*q->cell.nof_prb); - for (i=0;icell.nof_prb*sizeof(cf_t)); - } - memcpy(timeavg[i],q->pilot_symbol_avg,2*q->cell.nof_prb*sizeof(cf_t)); - } -#else - memcpy(&pilot_est(0), q->pilot_symbol_avg, 2*q->cell.nof_prb * sizeof(cf_t)); -#endif + for (l=0;lfilter_freq_len > 0) { + /* Filter pilot estimates in frequency */ + conv_same_cf(&pilot_est(0), q->filter_freq, q->tmp_freqavg, nref, q->filter_freq_len); + /* Adjust extremes using linear interpolation */ + q->tmp_freqavg[0] += interp_linear_onesample(pilot_est(1), pilot_est(0)) + * q->filter_freq[q->filter_freq_len/2-1]; + q->tmp_freqavg[nref-1] += interp_linear_onesample(pilot_est(nref-2), pilot_est(nref-1)) + * q->filter_freq[q->filter_freq_len/2+1]; + } else { + memcpy(q->tmp_freqavg, &pilot_est(0), nref * sizeof(cf_t)); } - } - -} + + /* Filter in time domain. */ + if (q->filter_time_len > 0) { + /* Move last symbols */ + for (i=0;ifilter_time_len-1;i++) { + memcpy(q->tmp_timeavg[i], q->tmp_timeavg[i+1], nref*sizeof(cf_t)); + } + /* Put last symbol to buffer */ + memcpy(q->tmp_timeavg[i], q->tmp_freqavg, nref*sizeof(cf_t)); -static void interpolate_pilots(chest_dl_t *q, cf_t *ce, uint32_t sf_idx, uint32_t port_id) -{ - /* interpolate the symbols with references in the freq domain */ - uint32_t ns, l, i,j; - cf_t x[2], y[MAX_NSYMB]; - - for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { - for (l=0;lcell, ns, l, port_id, 0); -#ifdef VOLK_INTERP - interp_run_offset(&q->interp_freq[port_id], - &q->pilot_estimates[port_id][((ns%2)*2+l)*2*q->cell.nof_prb], - &ce[refsignal_nsymbol(q->cell,ns,l) * q->cell.nof_prb * RE_X_RB], - fidx_offset, RE_X_RB/2-fidx_offset); -#else - interp_linear_offset(&q->pilot_estimates[port_id][((ns%2)*2+l)*2*q->cell.nof_prb], - &ce[refsignal_nsymbol(q->cell,ns,l) * q->cell.nof_prb * RE_X_RB], RE_X_RB/2, - 2*q->cell.nof_prb, fidx_offset, RE_X_RB/2-fidx_offset); -#endif - } - } - /* now interpolate in the time domain */ - for (i=0;icell.nof_prb; i++) { - if (refsignal_cs_nof_symbols(port_id) > 1) { - for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { - j=0; - for (l=0;lcell,ns,l) * q->cell.nof_prb * RE_X_RB + i]; - j++; - } - #ifdef VOLK_INTERP - interp_run_offset(&q->interp_time[port_id], x, y, - 0, CP_NSYMB(q->cell.cp) - 4); - #else - interp_linear_offset(x, y, CP_NSYMB(q->cell.cp) - 3, - 2, 0, CP_NSYMB(q->cell.cp) - 4); - #endif - for (j=0;jcell.cp);j++) { - ce[(j+((ns%2)*CP_NSYMB(q->cell.cp))) * q->cell.nof_prb*RE_X_RB + i] = y[j]; - } + /* Multiply all symbols by filter and add them */ + bzero(&pilot_avg(0), nref * sizeof(cf_t)); + for (i=0;ifilter_time_len;i++) { + vec_sc_prod_cfc(q->tmp_timeavg[i], q->filter_time[i], q->tmp_timeavg[i], nref); + vec_sum_ccc(q->tmp_timeavg[i], &pilot_avg(0), &pilot_avg(0), nref); } } else { - fprintf(stderr, "3/4 Ports interpolator not implemented\n"); - exit(-1); - } + memcpy(&pilot_avg(0), q->tmp_freqavg, nref * sizeof(cf_t)); + } } } +static float estimate_noise_port(chest_dl_t *q, uint32_t port_id) { + /* Use difference between averaged and noisy LS pilot estimates */ + vec_sub_fff((float*) q->pilot_estimates_average[port_id], (float*) q->pilot_estimates[port_id], + (float*) q->pilot_estimates[port_id], 2*REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); + /* compute noise power */ + float noiseEst = vec_dot_prod_conj_ccc(q->pilot_estimates[port_id], + q->pilot_estimates[port_id], + REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); + + return noiseEst * sqrtf((float) q->filter_freq_len) / REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id); +} + +#define cesymb(i) ce[SAMPLE_IDX(q->cell.nof_prb,i,0)] + +static void interpolate_pilots(chest_dl_t *q, cf_t *ce, uint32_t port_id) +{ + /* interpolate the symbols with references in the freq domain */ + uint32_t l; + uint32_t nsymbols = refsignal_cs_nof_symbols(port_id); + + /* Interpolate in the frequency domain */ + for (l=0;lcell, l, port_id, 0); + interp_linear_offset(&q->interp_lin, &pilot_avg(0), + &ce[refsignal_nsymbol(l,q->cell.cp, port_id) * q->cell.nof_prb * RE_X_RB], + fidx_offset, RE_X_RB/2-fidx_offset); + } + + /* Now interpolate in the time domain between symbols */ + if (nsymbols == 4) { + interp_linear_vector(&q->interp_linvec, &cesymb(0), &cesymb(4), &cesymb(1), 3); + interp_linear_vector(&q->interp_linvec, &cesymb(4), &cesymb(7), &cesymb(5), 2); + interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(11), &cesymb(8), 3); + interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(11), &cesymb(12), 2); + } else { + interp_linear_vector(&q->interp_linvec, &cesymb(8), &cesymb(1), &cesymb(0), 1); + interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(8), &cesymb(2), 6); + interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(8), &cesymb(9), 5); + } + +} + +float chest_dl_rssi(lte_cell_t cell, cf_t *input) { + float rssi = 0; + uint32_t l, p; + uint32_t loop_ports = cell.nof_ports>2?2:1; + + for (p=0;ppilot_estimates_average[port_id], + q->pilot_estimates_average[port_id], + REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id))) + / REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id); +} + int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx, uint32_t port_id) { - //filter2d_reset(&q->filter); - /* Get references from the input signal */ - refsignal_cs_get_sf(q->cell, port_id, sf_idx, input, q->pilot_recv_signal[port_id]); + refsignal_cs_get_sf(q->cell, port_id, input, q->pilot_recv_signal[port_id]); /* Use the known CSR signal to compute Least-squares estimates */ - vec_div_ccc_mod1(q->pilot_recv_signal[port_id], q->csr_signal.pilots[sf_idx], + vec_prod_conj_ccc(q->pilot_recv_signal[port_id], q->csr_signal.pilots[port_id/2][sf_idx], q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); /* Average pilot estimates */ - average_pilots(q, sf_idx, port_id); + average_pilots(q, port_id); + + /* Compute RSRP for the references in this port */ + q->rsrp[port_id] = chest_dl_rsrp(q, port_id); /* Interpolate to create channel estimates for all resource grid */ - interpolate_pilots(q, ce, sf_idx, port_id); - + if (ce != NULL) { + interpolate_pilots(q, ce, port_id); + } + + q->noise_estimate[port_id] = estimate_noise_port(q, port_id); + return 0; } @@ -288,19 +313,13 @@ int chest_dl_estimate(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], uint32_t for (port_id=0;port_idcell.nof_ports;port_id++) { chest_dl_estimate_port(q, input, ce[port_id], sf_idx, port_id); } + /* compute rssi */ + q->rssi = chest_dl_rssi(q->cell, input); return LIBLTE_SUCCESS; } -int chest_dl_equalize_zf(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], cf_t *output) -{ - fprintf(stderr, "Not implemented\n"); - return -1; -} - -int chest_dl_equalize_mmse(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], float *noise_estimate, cf_t *output) -{ - fprintf(stderr, "Not implemented\n"); - return -1; +float chest_dl_get_noise_estimate(chest_dl_t *q) { + return vec_acc_ff(q->noise_estimate, q->cell.nof_ports)/q->cell.nof_ports; } float chest_dl_get_rssi(chest_dl_t *q) { @@ -308,10 +327,10 @@ float chest_dl_get_rssi(chest_dl_t *q) { } float chest_dl_get_rsrq(chest_dl_t *q) { - return q->rsrq; + return (4*q->cell.nof_ports*q->cell.nof_prb) * chest_dl_get_rsrp(q) / q->rssi; } float chest_dl_get_rsrp(chest_dl_t *q) { - return q->rsrp; + return vec_acc_ff(q->rsrp, q->cell.nof_ports)/q->cell.nof_ports; } diff --git a/lte/phy/lib/ch_estimation/src/refsignal.c b/lte/phy/lib/ch_estimation/src/refsignal.c deleted file mode 100644 index 2002eb47a..000000000 --- a/lte/phy/lib/ch_estimation/src/refsignal.c +++ /dev/null @@ -1,382 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - - -#include -#include -#include -#include -#include - -#include "liblte/phy/common/phy_common.h" -#include "liblte/phy/ch_estimation/refsignal.h" -#include "liblte/phy/utils/vector.h" -#include "liblte/phy/utils/debug.h" -#include "liblte/phy/common/sequence.h" - -#include "ul_rs_tables.h" - -#define idx(x, y) (l*nof_refs_x_symbol+i) - -int refsignal_v(uint32_t port_id, uint32_t ns, uint32_t symbol_id) -{ - int v = -1; - switch (port_id) { - case 0: - if (symbol_id == 0) { - v = 0; - } else { - v = 3; - } - break; - case 1: - if (symbol_id == 0) { - v = 3; - } else { - v = 0; - } - break; - case 2: - v = 3 * (ns % 2); - break; - case 3: - v = 3 + 3 * (ns % 2); - break; - } - return v; -} - -uint32_t refsignal_k(uint32_t m, uint32_t v, uint32_t cell_id) -{ - return 6 * m + ((v + (cell_id % 6)) % 6); -} - -int refsignal_put(refsignal_t * q, cf_t * slot_symbols) -{ - uint32_t i; - uint32_t fidx, tidx; - if (q != NULL && slot_symbols != NULL) { - for (i = 0; i < q->nof_refs; i++) { - fidx = q->refs[i].freq_idx; // reference frequency index - tidx = q->refs[i].time_idx; // reference time index - slot_symbols[SAMPLE_IDX(q->nof_prb, tidx, fidx)] = q->refs[i].symbol; - } - return LIBLTE_SUCCESS; - } else { - return LIBLTE_ERROR_INVALID_INPUTS; - } -} - -/** Initializes refsignal_t object according to 3GPP 36.211 6.10.1 - * - */ -int refsignal_init_LTEDL(refsignal_t * q, uint32_t port_id, uint32_t nslot, - lte_cell_t cell) -{ - - uint32_t c_init; - uint32_t ns, l, lp[2]; - uint32_t N_cp; - uint32_t i; - int ret = LIBLTE_ERROR_INVALID_INPUTS; - sequence_t seq; - int v; - uint32_t mp; - uint32_t nof_refs_x_symbol, nof_ref_symbols; - - if (q != NULL && - port_id < MAX_PORTS && - nslot < NSLOTS_X_FRAME && lte_cell_isvalid(&cell)) { - - bzero(q, sizeof(refsignal_t)); - bzero(&seq, sizeof(sequence_t)); - - if (CP_ISNORM(cell.cp)) { - N_cp = 1; - } else { - N_cp = 0; - } - - if (port_id < 2) { - nof_ref_symbols = 2; - lp[0] = 0; - lp[1] = CP_NSYMB(cell.cp) - 3; - } else { - nof_ref_symbols = 1; - lp[0] = 1; - } - nof_refs_x_symbol = 2 * cell.nof_prb; - - q->nof_refs = nof_refs_x_symbol * nof_ref_symbols; - q->nsymbols = nof_ref_symbols; - q->voffset = cell.id % 6; - q->nof_prb = cell.nof_prb; - - q->symbols_ref = malloc(sizeof(uint32_t) * nof_ref_symbols); - if (!q->symbols_ref) { - perror("malloc"); - goto free_and_exit; - } - - memcpy(q->symbols_ref, lp, sizeof(uint32_t) * nof_ref_symbols); - - q->refs = vec_malloc(q->nof_refs * sizeof(ref_t)); - if (!q->refs) { - goto free_and_exit; - } - q->ch_est = vec_malloc(q->nof_refs * sizeof(cf_t)); - if (!q->ch_est) { - goto free_and_exit; - } - - q->recv_symbol = vec_malloc(q->nof_refs * sizeof(cf_t)); - if (!q->recv_symbol) { - goto free_and_exit; - } - - ns = nslot; - for (l = 0; l < nof_ref_symbols; l++) { - - c_init = 1024 * (7 * (ns + 1) + lp[l] + 1) * (2 * cell.id + 1) - + 2 * cell.id + N_cp; - ret = sequence_LTE_pr(&seq, 2 * 2 * MAX_PRB, c_init); - if (ret != LIBLTE_SUCCESS) { - goto free_and_exit; - } - - v = refsignal_v(port_id, ns, lp[l]); - - for (i = 0; i < nof_refs_x_symbol; i++) { - mp = i + MAX_PRB - cell.nof_prb; - - /* generate signal */ - __real__ q->refs[idx(l, i)].symbol = - (1 - 2 * (float) seq.c[2 * mp]) / sqrt(2); - __imag__ q->refs[idx(l, i)].symbol = - (1 - 2 * (float) seq.c[2 * mp + 1]) / sqrt(2); - - /* mapping to resource elements */ - q->refs[idx(l, i)].freq_idx = refsignal_k(i, (uint32_t) v, cell.id); - q->refs[idx(l, i)].time_idx = lp[l]; - } - } - ret = LIBLTE_SUCCESS; - } -free_and_exit: - if (ret != LIBLTE_ERROR_INVALID_INPUTS) { - sequence_free(&seq); - } - if (ret == LIBLTE_ERROR) { - refsignal_free(q); - } - return ret; -} - -// n_drms_2 table 5.5.2.1.1-1 from 36.211 -uint32_t n_drms_2[8] = { 0, 6, 3, 4, 2, 8, 10, 9 }; - -// n_drms_1 table 5.5.2.1.1-2 from 36.211 -uint32_t n_drms_1[8] = { 0, 2, 3, 4, 6, 8, 9, 10 }; - - -/* Generation of the reference signal sequence according to Section 5.5.1 of 36.211 */ -int rs_sequence(ref_t * refs, uint32_t len, float alpha, uint32_t ns, uint32_t cell_id, - refsignal_ul_cfg_t * cfg) -{ - uint32_t i; - - // Calculate u and v - uint32_t u, v; - uint32_t f_ss = (((cell_id % 30) + cfg->delta_ss) % 30); - if (cfg->group_hopping_en) { - sequence_t seq; - sequence_LTE_pr(&seq, cell_id / 30, 160); - uint32_t f_gh = 0; - for (i = 0; i < 8; i++) { - f_gh += seq.c[8 * ns + i] << i; - } - sequence_free(&seq); - u = ((f_gh%30) + f_ss) % 30; - } else { - u = f_ss % 30; - } - - if (len < 6 * RE_X_RB) { - v = 0; - } else { - if (!cfg->group_hopping_en && cfg->sequence_hopping_en) { - sequence_t seq; - sequence_LTE_pr(&seq, ((cell_id / 30) << 5) + f_ss, 20); - v = seq.c[ns]; - sequence_free(&seq); - } else { - v = 0; - } - } - if (len >= 3 * RE_X_RB) { - uint32_t n_sz=0; - uint32_t q; - float q_hat; - /* get largest prime n_zc 0; i--) { - if (prime_numbers[i] < len) { - n_sz = prime_numbers[i]; - break; - } - } - q_hat = (float) n_sz *(u + 1) / 31; - if ((((uint32_t) (2 * q_hat)) % 2) == 0) { - q = (uint32_t) (q_hat + 0.5) + v; - } else { - q = (uint32_t) (q_hat + 0.5) - v; - } - cf_t *x_q = malloc(sizeof(cf_t) * n_sz); - if (!x_q) { - perror("malloc"); - return LIBLTE_ERROR; - } - for (i = 0; i < n_sz; i++) { - x_q[i] = - cexpf(-I * M_PI * (float) q * (float) i * ((float) i + 1) / n_sz); - } - for (i = 0; i < len; i++) { - refs[i].symbol = cfg->beta * cexpf(I * alpha * i) * x_q[i % n_sz]; - } - free(x_q); - } else { - if (len == RE_X_RB) { - for (i = 0; i < len; i++) { - refs[i].symbol = cfg->beta * cexpf(I * (phi_M_sc_12[u][i] * M_PI / 4 + alpha * i)); - } - } else { - for (i = 0; i < len; i++) { - refs[i].symbol = cfg->beta * cexpf(I * (phi_M_sc_24[u][i] * M_PI / 4 + alpha * i)); - } - } - } - - return LIBLTE_SUCCESS; -} - -/** Initializes refsignal_t object according to 3GPP 36.211 5.5.2 - * - */ -int refsignal_init_LTEUL_drms_pusch(refsignal_t * q, uint32_t nof_prb, uint32_t prb_start, - uint32_t nslot, lte_cell_t cell, refsignal_ul_cfg_t * cfg) -{ - - uint32_t i; - int ret = LIBLTE_ERROR_INVALID_INPUTS; - uint32_t n_prs; - uint32_t M_sc; - float alpha; - - if (q != NULL && nslot < NSLOTS_X_FRAME && lte_cell_isvalid(&cell)) { - - bzero(q, sizeof(refsignal_t)); - - M_sc = nof_prb * RE_X_RB; - - q->nof_refs = M_sc; - q->nsymbols = 1; - q->voffset = cell.id % 6; - q->nof_prb = cell.nof_prb; - - q->symbols_ref = malloc(sizeof(uint32_t) * 1); - if (!q->symbols_ref) { - perror("malloc"); - goto free_and_exit; - } - - if (CP_ISNORM(cell.cp)) { - q->symbols_ref[0] = 3; - } else { - q->symbols_ref[0] = 2; - } - - q->refs = vec_malloc(q->nof_refs * sizeof(ref_t)); - if (!q->refs) { - goto free_and_exit; - } - q->ch_est = vec_malloc(q->nof_refs * sizeof(cf_t)); - if (!q->ch_est) { - goto free_and_exit; - } - - /* Calculate n_prs */ - uint32_t c_init; - sequence_t seq; - c_init = ((cell.id / 30) << 5) + (((cell.id % 30) + cfg->delta_ss) % 30); - ret = sequence_LTE_pr(&seq, 8 * CP_NSYMB(cell.cp) * 20, c_init); - if (ret != LIBLTE_SUCCESS) { - goto free_and_exit; - } - n_prs = 0; - for (i = 0; i < 8; i++) { - n_prs += (seq.c[8 * CP_NSYMB(cell.cp) * nslot + i] << i); - } - sequence_free(&seq); - - // Calculate cyclic shift alpha - uint32_t n_cs = - (n_drms_1[cfg->cyclic_shift] + - n_drms_2[cfg->cyclic_shift_for_drms] + n_prs) % 12; - alpha = 2 * M_PI * (n_cs) / 12; - - if (rs_sequence(q->refs, M_sc, alpha, cell.id, nslot, cfg)) { - fprintf(stderr, "Error generating RS sequence\n"); - goto free_and_exit; - } - /* mapping to resource elements */ - for (i=0;irefs[i].freq_idx = prb_start*RE_X_RB + i; - q->refs[i].time_idx = q->symbols_ref[0]; - } - - ret = LIBLTE_SUCCESS; - } -free_and_exit: - if (ret == LIBLTE_ERROR) { - refsignal_free(q); - } - return ret; -} - - -void refsignal_free(refsignal_t * q) -{ - if (q->symbols_ref) { - free(q->symbols_ref); - } - if (q->refs) { - free(q->refs); - } - if (q->ch_est) { - free(q->ch_est); - } - bzero(q, sizeof(refsignal_t)); -} diff --git a/lte/phy/lib/ch_estimation/src/refsignal_dl.c b/lte/phy/lib/ch_estimation/src/refsignal_dl.c index e9d927bc6..5d3d6d690 100644 --- a/lte/phy/lib/ch_estimation/src/refsignal_dl.c +++ b/lte/phy/lib/ch_estimation/src/refsignal_dl.c @@ -38,29 +38,37 @@ #include "liblte/phy/utils/debug.h" #include "liblte/phy/common/sequence.h" -uint32_t refsignal_cs_v(uint32_t port_id, uint32_t ns, uint32_t symbol_id) +uint32_t refsignal_cs_v(uint32_t port_id, uint32_t ref_symbol_idx) { uint32_t v = 0; switch (port_id) { case 0: - if (symbol_id == 0) { + if (!(ref_symbol_idx % 2)) { v = 0; } else { v = 3; } break; case 1: - if (symbol_id == 0) { + if (!(ref_symbol_idx % 2)) { v = 3; } else { v = 0; } break; case 2: - v = 3 * (ns % 2); + if (ref_symbol_idx < 2) { + v = 0; + } else { + v = 3; + } break; case 3: - v = 3 + 3 * (ns % 2); + if (ref_symbol_idx < 2) { + v = 3; + } else { + v = 6; + } break; } return v; @@ -68,21 +76,30 @@ uint32_t refsignal_cs_v(uint32_t port_id, uint32_t ns, uint32_t symbol_id) uint32_t refsignal_cs_nof_symbols(uint32_t port_id) { - if (port_id < 2) { - return 2; - } else { - return 1; - } -} - -static uint32_t lp(uint32_t l, lte_cp_t cp) { - if (l == 1) { - return CP_NSYMB(cp) - 3; + if (port_id < 2) { + return 4; } else { - return 0; + return 2; } } +inline uint32_t refsignal_fidx(lte_cell_t cell, uint32_t l, uint32_t port_id, uint32_t m) { + return 6*m + ((refsignal_cs_v(port_id, l) + (cell.id % 6)) % 6); +} + +inline uint32_t refsignal_nsymbol(uint32_t l, lte_cp_t cp, uint32_t port_id) { + if (port_id < 2) { + if (l % 2) { + return (l/2+1)*CP_NSYMB(cp) - 3; + } else { + return (l/2)*CP_NSYMB(cp); + } + } else { + return 1+l*CP_NSYMB(cp); + } +} + + /** Allocates and precomputes the Cell-Specific Reference (CSR) signal for * the 20 slots in a subframe */ @@ -90,7 +107,7 @@ int refsignal_cs_generate(refsignal_cs_t * q, lte_cell_t cell) { uint32_t c_init; - uint32_t i, ns, l; + uint32_t i, ns, l, p; uint32_t N_cp, mp; sequence_t seq; int ret = LIBLTE_ERROR_INVALID_INPUTS; @@ -114,31 +131,38 @@ int refsignal_cs_generate(refsignal_cs_t * q, lte_cell_t cell) q->cell = cell; - for (i=0;ipilots[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(q->cell.nof_prb)); - if (!q->pilots[i]) { - perror("malloc"); - goto free_and_exit; - } + for (p=0;p<2;p++) { + for (i=0;ipilots[p][i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_NUM_SF(q->cell.nof_prb, 2*p)); + if (!q->pilots[p][i]) { + perror("malloc"); + goto free_and_exit; + } + } } for (ns=0;nscell.nof_prb; i++) { + mp = i + MAX_PRB - cell.nof_prb; + /* save signal */ + q->pilots[p][ns/2][REFSIGNAL_PILOT_IDX(i,(ns%2)*nsymbols+l,q->cell)] = + (1 - 2 * (float) seq.c[2 * mp]) / sqrt(2) + + _Complex_I * (1 - 2 * (float) seq.c[2 * mp + 1]) / sqrt(2); + } + } - /* generate sequence for this symbol and slot */ - sequence_set_LTE_pr(&seq, c_init); - - /* Compute signal */ - for (i = 0; i < 2*q->cell.nof_prb; i++) { - mp = i + MAX_PRB - cell.nof_prb; - /* save signal */ - q->pilots[ns/2][REFSIGNAL_PILOT_IDX(i,l,ns,q->cell)] = - (1 - 2 * (float) seq.c[2 * mp]) / sqrt(2) + - _Complex_I * (1 - 2 * (float) seq.c[2 * mp + 1]) / sqrt(2); - } } } sequence_free(&seq); @@ -155,51 +179,42 @@ free_and_exit: /** Deallocates a refsignal_cs_t object allocated with refsignal_cs_init */ void refsignal_cs_free(refsignal_cs_t * q) { - int i; + int i, p; - for (i=0;ipilots[i]) { - free(q->pilots[i]); - } - } + for (p=0;p<2;p++) { + for (i=0;ipilots[p][i]) { + free(q->pilots[p][i]); + } + } + } bzero(q, sizeof(refsignal_cs_t)); } -inline uint32_t refsignal_fidx(lte_cell_t cell, uint32_t ns, uint32_t l, uint32_t port_id, uint32_t m) { - return 6*m + ((refsignal_cs_v(port_id, ns, lp(l,cell.cp)) + (cell.id % 6)) % 6); -} - -inline uint32_t refsignal_nsymbol(lte_cell_t cell, uint32_t ns, uint32_t l) { - return (ns%2)*CP_NSYMB(cell.cp)+lp(l,cell.cp); -} - /* Maps a reference signal initialized with refsignal_cs_init() into an array of subframe symbols */ -int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, uint32_t sf_idx, - cf_t *pilots, cf_t *sf_symbols) +int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, cf_t *pilots, cf_t *sf_symbols) { - uint32_t i, l, ns; + uint32_t i, l; uint32_t fidx; if (lte_cell_isvalid(&cell) && - lte_sfidx_isvalid(sf_idx) && lte_portid_isvalid(port_id) && pilots != NULL && sf_symbols != NULL) { - for (ns=2*sf_idx;ns<2*(sf_idx+1);ns++) { - for (l=0;ldelta_ss) % 30); + printf("f_ss: %d\n", f_ss); + if (cfg->group_hopping_en) { + sequence_t seq; + bzero(&seq, sizeof(sequence_t)); + sequence_LTE_pr(&seq, 160, cell_id / 30); + uint32_t f_gh = 0; + for (i = 0; i < 8; i++) { + f_gh += (((uint32_t) seq.c[8 * ns + i]) << i); + } + printf("f_gh: %u\n", f_gh); + sequence_free(&seq); + u = ((f_gh%30) + f_ss) % 30; + } else { + u = f_ss % 30; + } + + if (len < 6 * RE_X_RB) { + v = 0; + } else { + if (!cfg->group_hopping_en && cfg->sequence_hopping_en) { + sequence_t seq; + bzero(&seq, sizeof(sequence_t)); + sequence_LTE_pr(&seq, 20, ((cell_id / 30) << 5) + f_ss); + v = seq.c[ns]; + sequence_free(&seq); + } else { + v = 0; + } + } + printf("u: %d, v: %d\n", u, v); + if (len >= 3 * RE_X_RB) { + uint32_t n_sz; + uint32_t q; + float q_hat; + /* get largest prime n_zc 0; i--) { + if (prime_numbers[i] < len) { + n_sz = prime_numbers[i]; + break; + } + } + printf("n_sz: %d\n", n_sz); + q_hat = (float) n_sz *(u + 1) / 31; + if ((((uint32_t) (2 * q_hat)) % 2) == 0) { + q = (uint32_t) (q_hat + 0.5) + v; + } else { + q = (uint32_t) (q_hat + 0.5) - v; + } + cf_t *x_q = malloc(sizeof(cf_t) * n_sz); + if (!x_q) { + perror("malloc"); + return LIBLTE_ERROR; + } + for (i = 0; i < n_sz; i++) { + x_q[i] = + cexpf(-I * M_PI * (float) q * (float) i * ((float) i + 1) / n_sz); + } + + for (i = 0; i < len; i++) { + refs[i].simbol = cfg->beta * cexpf(I * alpha * i) * x_q[i % n_sz]; + } + free(x_q); + } else { + if (len == RE_X_RB) { + for (i = 0; i < len; i++) { + refs[i].simbol = cfg->beta * cexpf(I * (phi_M_sc_12[u][i] * M_PI / 4 + alpha * i)); + } + } else { + for (i = 0; i < len; i++) { + refs[i].simbol = cfg->beta * cexpf(I * (phi_M_sc_24[u][i] * M_PI / 4 + alpha * i)); + } + } + } + + return LIBLTE_SUCCESS; +} + +/** Initializes refsignal_t object according to 3GPP 36.211 5.5.2 + * + */ +int refsignal_init_LTEUL_drms_pusch(refsignal_t * q, uint32_t nof_prb, uint32_t prb_start, + uint32_t nslot, lte_cell_t cell, refsignal_ul_cfg_t * cfg) +{ + + uint32_t i; + int ret = LIBLTE_ERROR_INVALID_INPUTS; + uint32_t n_prs; + uint32_t M_sc; + float alpha; + + if (q != NULL && nslot < NSLOTS_X_FRAME && lte_cell_isvalid(&cell)) { + + bzero(q, sizeof(refsignal_t)); + + M_sc = nof_prb * RE_X_RB; + + q->nof_refs = M_sc; + q->nsymbols = 1; + q->voffset = cell.id % 6; + q->nof_prb = cell.nof_prb; + + q->symbols_ref = malloc(sizeof(uint32_t) * 1); + if (!q->symbols_ref) { + perror("malloc"); + goto free_and_exit; + } + + if (CP_ISNORM(cell.cp)) { + q->symbols_ref[0] = 3; + } else { + q->symbols_ref[0] = 2; + } + + q->refs = vec_malloc(q->nof_refs * sizeof(ref_t)); + if (!q->refs) { + goto free_and_exit; + } + q->ch_est = vec_malloc(q->nof_refs * sizeof(cf_t)); + if (!q->ch_est) { + goto free_and_exit; + } + + /* Calculate n_prs */ + uint32_t c_init; + sequence_t seq; + bzero(&seq, sizeof(sequence_t)); + c_init = ((cell.id / 30) << 5) + (((cell.id % 30) + cfg->delta_ss) % 30); + ret = sequence_LTE_pr(&seq, 8 * CP_NSYMB(cell.cp) * 20, c_init); + if (ret != LIBLTE_SUCCESS) { + goto free_and_exit; + } + n_prs = 0; + for (i = 0; i < 8; i++) { + n_prs += (seq.c[8 * CP_NSYMB(cell.cp) * nslot + i] << i); + } + sequence_free(&seq); + + // Calculate cyclic shift alpha + uint32_t n_cs = + (n_drms_1[cfg->cyclic_shift] + + n_drms_2[cfg->cyclic_shift_for_drms] + n_prs) % 12; + alpha = 2 * M_PI * (n_cs) / 12; + + printf("alpha: %g\n", alpha); + + if (rs_sequence(q->refs, M_sc, alpha, nslot, cell.id, cfg)) { + fprintf(stderr, "Error generating RS sequence\n"); + goto free_and_exit; + } + /* mapping to resource elements */ + for (i=0;irefs[i].freq_idx = prb_start*RE_X_RB + i; + q->refs[i].time_idx = q->symbols_ref[0]; + } + + ret = LIBLTE_SUCCESS; + } +free_and_exit: + if (ret == LIBLTE_ERROR) { + refsignal_free(q); + } + return ret; +} + +#endif \ No newline at end of file diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl.c b/lte/phy/lib/ch_estimation/test/chest_test_dl.c index 83abb57f1..08cca66cc 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl.c @@ -177,7 +177,7 @@ int main(int argc, char **argv) { bzero(ce, sizeof(cf_t) * num_re); bzero(h, sizeof(cf_t) * num_re); - refsignal_cs_put_sf(cell, n_port, sf_idx, eq.csr_signal.pilots[sf_idx], input); + refsignal_cs_put_sf(cell, n_port, eq.csr_signal.pilots[n_port/2][sf_idx], input); for (i=0;i<2*CP_NSYMB(cell.cp);i++) { for (j=0;j NOF_INPUTS && nsubframes == 10) { + if (nrhs >= NOF_INPUTS + 1) { + filter_len = mxGetNumberOfElements(FREQ_FILTER); + filter = malloc(sizeof(float) * filter_len); + f = (double*) mxGetPr(FREQ_FILTER); + for (i=0;i= NOF_INPUTS + 2) { + filter_len = mxGetNumberOfElements(TIME_FILTER); + filter = malloc(sizeof(float) * filter_len); + f = (double*) mxGetPr(TIME_FILTER); + for (i=0;i= 2) { plhs[1] = mxCreateDoubleMatrix(REFSIGNAL_MAX_NUM_SF(cell.nof_prb)*nsubframes, cell.nof_ports, mxCOMPLEX); outr1 = mxGetPr(plhs[1]); outi1 = mxGetPi(plhs[1]); @@ -150,6 +180,9 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) mexErrMsgTxt("Error running channel estimator\n"); return; } + + noiseAverage[sf]=chest_dl_get_noise_estimate(&chest); + if (nlhs >= 1) { for (i=0;i= 2) { for (int j=0;j= 3) { + plhs[2] = mxCreateDoubleMatrix(1, 1, mxREAL); + outr1 = mxGetPr(plhs[2]); + *outr1 = vec_acc_ff(noiseAverage,10)/10; + } return; diff --git a/lte/phy/lib/phch/test/pbch_file_test.c b/lte/phy/lib/phch/test/pbch_file_test.c index e4d52b459..0ab0bdc7b 100644 --- a/lte/phy/lib/phch/test/pbch_file_test.c +++ b/lte/phy/lib/phch/test/pbch_file_test.c @@ -55,7 +55,7 @@ filesource_t fsrc; cf_t *input_buffer, *fft_buffer, *ce[MAX_PORTS]; pbch_t pbch; lte_fft_t fft; -chest_t chest; +chest_dl_t chest; void usage(char *prog) { printf("Usage: %s [vcoe] -i input_file\n", prog); @@ -121,14 +121,14 @@ int base_init() { exit(-1); } - fft_buffer = malloc(SLOT_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); + fft_buffer = malloc(SF_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); if (!fft_buffer) { perror("malloc"); return -1; } for (i=0;i #include #include +#include #include "liblte/phy/resampling/interp.h" #include "liblte/phy/utils/vector.h" #include "liblte/phy/utils/debug.h" -#define TABLE_SIZE 1024 +/*************** STATIC FUNCTIONS ***********************/ - -#ifdef TABLE_SIZE - #define ARG2IDX(arg) ((uint32_t) ((1+(arg)/M_PI)*TABLE_SIZE/2)) - #define MYCEXP(arg) q->cexptable[ARG2IDX(arg)] -#else - #define MYCEXP(arg) (cosf(arg) + I*sinf(arg)) -#endif - -#define MAX_OFFSET 64 - -int interp_init(interp_t *q, interp_type_t type, uint32_t len, uint32_t M) { - int ret = LIBLTE_ERROR_INVALID_INPUTS; - - if (q != NULL && len > 0 && M > 0) { - ret = LIBLTE_ERROR; - - q->in_arg = vec_malloc(len * sizeof(float)); - if (!q->in_arg) { - goto clean_and_exit; - } - q->in_mag = vec_malloc(len * sizeof(float)); - if (!q->in_mag) { - goto clean_and_exit; - } - q->out_arg = vec_malloc((MAX_OFFSET + M * len) * sizeof(float)); - if (!q->out_arg) { - goto clean_and_exit; - } - q->out_arg2 = vec_malloc((MAX_OFFSET + M * len) * sizeof(float)); - if (!q->out_arg2) { - goto clean_and_exit; - } - q->table_idx = vec_malloc((MAX_OFFSET + M * len) * sizeof(int16_t)); - if (!q->table_idx) { - goto clean_and_exit; - } - q->out_mag = vec_malloc((MAX_OFFSET + M * len) * sizeof(float)); - if (!q->out_mag) { - goto clean_and_exit; - } - q->out_cexp = vec_malloc((MAX_OFFSET + M * len) * sizeof(cf_t)); - if (!q->out_cexp) { - goto clean_and_exit; - } - q->out_prod = vec_malloc((MAX_OFFSET + M * len) * sizeof(cf_t)); - if (!q->out_prod) { - goto clean_and_exit; - } -#ifdef TABLE_SIZE - q->cexptable = vec_malloc(TABLE_SIZE * sizeof(cf_t)); - uint32_t i; - for (i=0;icexptable[i] = cexpf(I*M_PI*(2*((float) i/TABLE_SIZE) - 1)); - } -#endif - q->M = M; - q->len = len; - ret = LIBLTE_SUCCESS; - } - -clean_and_exit: - if (ret == LIBLTE_ERROR) { - interp_free(q); - } - return ret; -} - -void interp_free(interp_t *q) { - if (q) { - if (q->in_arg) { - free(q->in_arg); - } - if (q->in_mag) { - free(q->in_mag); - } - if (q->out_arg) { - free(q->out_arg); - } - if (q->out_cexp) { - free(q->out_cexp); - } - if (q->out_mag) { - free(q->out_mag); - } - - if (q->out_prod) { - free(q->out_prod); - } -#ifdef TABLE_SIZE - if (q->cexptable) { - free(q->cexptable); - } -#endif - } -} - -void interp_run_offset(interp_t *q, cf_t *input, cf_t *output, uint32_t off_st, uint32_t off_end) { - uint32_t i, j, n; - float mag0=0, mag1=0, arg0=0, arg1=0; - float dmag, darg; - uint32_t M = q->M; - uint32_t len1 = q->len-1; - - if (off_st + off_end < MAX_OFFSET) { - vec_abs_cf(input, q->in_mag, q->len); - vec_arg_cf(input, q->in_arg, q->len); - - mag0 = q->in_mag[0]; - mag1 = q->in_mag[1]; - arg0 = q->in_arg[0]; - arg1 = q->in_arg[1]; - dmag=(mag1-mag0)/M; - darg=(arg1-arg0)/M; - for (j=0;jout_mag[j] = mag0 - (j+1)*dmag; - q->out_arg[j] = arg0 - (j+1)*darg; - } - - for (i=0;iin_mag[i]; - mag1 = q->in_mag[i+1]; - arg0 = q->in_arg[i]; - arg1 = q->in_arg[i+1]; - dmag=(mag1-mag0)/M; - darg=(arg1-arg0)/M; - for (j=0;jout_mag[i*M+j+off_st] = mag0 + j*dmag; - q->out_arg[i*M+j+off_st] = arg0 + j*darg; - } - } - if (q->len > 1) { - for (j=0;jout_mag[i*M+j+off_st] = mag1 + j*dmag; - q->out_arg[i*M+j+off_st] = arg1 + j*darg; - } - } - uint32_t len=i*M+j+off_st; -#ifdef TABLE_SIZE - vec_convert_fi(q->out_arg, q->table_idx, (float) TABLE_SIZE/2/M_PI, len); - for (n=0;nout_cexp[n] = q->cexptable[q->table_idx[n]+TABLE_SIZE/2]; - } -#else - for (n=0;nout_cexp[n] = MYCEXP(q->out_arg[n]); - } -#endif - vec_prod_cfc(q->out_cexp, q->out_mag, output, len); - } - -} - -void interp_run(interp_t *q, cf_t *input, cf_t *output) { - interp_run_offset(q, input, output, 0, 1); -} - -cf_t interp_linear_onesample(cf_t *input) { +cf_t interp_linear_onesample(cf_t input0, cf_t input1) { float mag0=0, mag1=0, arg0=0, arg1=0, mag=0, arg=0; - mag0 = cabsf(input[0]); - mag1 = cabsf(input[1]); - arg0 = cargf(input[0]); - arg1 = cargf(input[1]); + mag0 = cabsf(input0); + mag1 = cabsf(input1); + arg0 = cargf(input0); + arg1 = cargf(input1); mag = 2*mag1 -mag0; arg = 2*arg1-arg0; return mag * cexpf(I * arg); } -cf_t interp_linear_onesample2(cf_t *input) { +cf_t interp_linear_onesample_cabs(cf_t input0, cf_t input1) { float re0=0, im0=0, re1=0, im1=0, re=0, im=0; - re0 = crealf(input[0]); - im0 = cimagf(input[1]); - re1 = crealf(input[0]); - im1 = cimagf(input[1]); + re0 = crealf(input0); + im0 = cimagf(input1); + re1 = crealf(input0); + im1 = cimagf(input1); re = 2*re1-re0; im = 2*im1-im0; return (re+im*_Complex_I); } + +/* Performs 1st order integer linear interpolation */ +void interp_linear_f(float *input, float *output, uint32_t M, uint32_t len) { + uint32_t i, j; + for (i=0;idiff_vec = vec_malloc(vector_len * sizeof(cf_t)); + if (!q->diff_vec) { + perror("malloc"); + return LIBLTE_ERROR; + } + q->vector_len = vector_len; + } + return ret; } +void interp_linear_vector_free(interp_linvec_t *q) { + if (q->diff_vec) { + free(q->diff_vec); + } +} -/* Performs 1st order uint32_teger linear interpolation */ -void interp_linear_f(float *input, float *output, uint32_t M, uint32_t len) { +void interp_linear_vector(interp_linvec_t *q, cf_t *in0, cf_t *in1, cf_t *between, uint32_t M) +{ + uint32_t i; + + vec_sub_ccc(in1, in0, q->diff_vec, q->vector_len); + vec_sc_prod_cfc(q->diff_vec, (float) 1/M, q->diff_vec, q->vector_len); + vec_sum_ccc(in0, q->diff_vec, between, q->vector_len); + for (i=0;idiff_vec, &between[q->vector_len], q->vector_len); + between += q->vector_len; + } +} + +int interp_linear_init(interp_lin_t *q, uint32_t vector_len, uint32_t M) +{ + int ret = LIBLTE_ERROR_INVALID_INPUTS; + if (q) { + bzero(q, sizeof(interp_lin_t)); + ret = LIBLTE_SUCCESS; + q->diff_vec = vec_malloc(vector_len * sizeof(cf_t)); + if (!q->diff_vec) { + perror("malloc"); + return LIBLTE_ERROR; + } + q->diff_vec2 = vec_malloc(M * vector_len * sizeof(cf_t)); + if (!q->diff_vec2) { + perror("malloc"); + free(q->diff_vec); + return LIBLTE_ERROR; + } + q->ramp = vec_malloc(M * sizeof(float)); + if (!q->ramp) { + perror("malloc"); + free(q->ramp); + free(q->diff_vec); + return LIBLTE_ERROR; + } + + for (int i=0;iramp[i] = (float) i; + } + + q->vector_len = vector_len; + q->M = M; + } + return ret; +} + +void interp_linear_free(interp_lin_t *q) { + if (q->diff_vec) { + free(q->diff_vec); + } +} + +void interp_linear_offset(interp_lin_t *q, cf_t *input, cf_t *output, + uint32_t off_st, uint32_t off_end) +{ uint32_t i, j; - for (i=0;iM; + } + vec_sub_ccc(&input[1], input, q->diff_vec, (q->vector_len-1)); + vec_sc_prod_cfc(q->diff_vec, (float) 1/q->M, q->diff_vec, q->vector_len-1); + for (i=0;ivector_len-1;i++) { + for (j=0;jM;j++) { + output[i*q->M+j+off_st] = input[i]; + q->diff_vec2[i*q->M+j] = q->diff_vec[i]; + } + vec_prod_cfc(&q->diff_vec2[i*q->M],q->ramp,&q->diff_vec2[i*q->M],q->M); + } + vec_sum_ccc(&output[off_st], q->diff_vec2, &output[off_st], q->M*(q->vector_len-1)); + + if (q->vector_len > 1) { + diff = input[q->vector_len-1]-input[q->vector_len-2]; + for (j=0;jM+j+off_st] = input[i] + j * diff / q->M; } } } + diff --git a/lte/phy/lib/resampling/test/CMakeLists.txt b/lte/phy/lib/resampling/test/CMakeLists.txt index e11d6e683..5deb366e8 100644 --- a/lte/phy/lib/resampling/test/CMakeLists.txt +++ b/lte/phy/lib/resampling/test/CMakeLists.txt @@ -31,7 +31,5 @@ TARGET_LINK_LIBRARIES(resample_arb_bench lte_phy) ADD_TEST(resample resample_arb_test) -ADD_EXECUTABLE(interp_test_volk interp_test_volk.c) -TARGET_LINK_LIBRARIES(interp_test_volk lte_phy) diff --git a/lte/phy/lib/resampling/test/interp_test_volk.c b/lte/phy/lib/resampling/test/interp_test_volk.c deleted file mode 100644 index cc97f3cef..000000000 --- a/lte/phy/lib/resampling/test/interp_test_volk.c +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "liblte/phy/phy.h" - -typedef _Complex float cf_t; - -int main(int argc, char **argv) { - uint32_t N = 1000; // Number of sinwave samples - interp_t interp; - struct timeval t[3]; - - if (argc < 3) { - printf("usage: %s upsampling_rate nof_trials\n", argv[0]); - exit(-1); - } - - uint32_t M = atoi(argv[1]); - uint32_t nof_trials = atoi(argv[2]); - - if (interp_init(&interp, LINEAR, N, M)) { - exit(-1); - } - - cf_t *in = vec_malloc(N*sizeof(cf_t)); - if(!in) { - perror("malloc"); - exit(-1); - } - cf_t *out = vec_malloc(M * N*sizeof(cf_t)); - if(!out) { - perror("malloc"); - exit(-1); - } - cf_t *out_volk = vec_malloc(M * N*sizeof(cf_t)); - if(!out_volk) { - perror("malloc"); - exit(-1); - } - - srand(time(NULL)); - for(uint32_t i=0;ichest, cell)) { + if (chest_dl_init(&q->chest, cell)) { fprintf(stderr, "Error initiating channel estimator\n"); goto clean_exit; } @@ -120,7 +120,7 @@ clean_exit: void ue_dl_free(ue_dl_t *q) { if (q) { lte_fft_free(&q->fft); - chest_free(&q->chest); + chest_dl_free(&q->chest); regs_free(&q->regs); pbch_free(&q->pbch); pcfich_free(&q->pcfich); @@ -161,7 +161,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 gettimeofday(&t[1], NULL); /* Get channel estimates for each port */ - chest_ce_sf(&q->chest, q->sf_symbols, q->ce, sf_idx); + chest_dl_estimate(&q->chest, q->sf_symbols, q->ce, sf_idx); gettimeofday(&t[2], NULL); get_time_interval(t); diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 9530d48ba..c3c1f831d 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -64,14 +64,14 @@ int ue_mib_init(ue_mib_t * q, bzero(q, sizeof(ue_mib_t)); - q->slot1_symbols = vec_malloc(SLOT_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); - if (!q->slot1_symbols) { + q->sf_symbols = vec_malloc(SF_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); + if (!q->sf_symbols) { perror("malloc"); goto clean_exit; } for (int i=0;ice[i] = vec_malloc(SLOT_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); + q->ce[i] = vec_malloc(SF_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); if (!q->ce[i]) { perror("malloc"); goto clean_exit; @@ -94,7 +94,7 @@ int ue_mib_init(ue_mib_t * q, fprintf(stderr, "Error initializing FFT\n"); goto clean_exit; } - if (chest_init_LTEDL(&q->chest, cell)) { + if (chest_dl_init(&q->chest, cell)) { fprintf(stderr, "Error initializing reference signal\n"); goto clean_exit; } @@ -116,8 +116,8 @@ clean_exit: void ue_mib_free(ue_mib_t * q) { - if (q->slot1_symbols) { - free(q->slot1_symbols); + if (q->sf_symbols) { + free(q->sf_symbols); } for (int i=0;ice[i]) { @@ -125,7 +125,7 @@ void ue_mib_free(ue_mib_t * q) } } sync_free(&q->sfind); - chest_free(&q->chest); + chest_dl_free(&q->chest); pbch_free(&q->pbch); lte_fft_free(&q->fft); } @@ -148,12 +148,13 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { int ret = LIBLTE_SUCCESS; + cf_t *ce_slot1[MAX_PORTS]; /* Run FFT for the slot symbols */ - lte_fft_run_slot(&q->fft, input, q->slot1_symbols); + lte_fft_run_sf(&q->fft, input, q->sf_symbols); /* Get channel estimates of slot #1 for each port */ - ret = chest_ce_slot(&q->chest, q->slot1_symbols, q->ce, 1); + ret = chest_dl_estimate(&q->chest, q->sf_symbols, q->ce, 0); if (ret < 0) { return LIBLTE_ERROR; } @@ -167,8 +168,12 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, ue_mib_reset(q); } + for (int i=0;ice[i][SLOT_LEN_RE(q->chest.cell.nof_prb, q->chest.cell.cp)]; + } + /* Decode PBCH */ - ret = pbch_decode(&q->pbch, q->slot1_symbols, q->ce, bch_payload, nof_tx_ports, sfn_offset); + ret = pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->chest.cell.nof_prb, q->chest.cell.cp)], ce_slot1, bch_payload, nof_tx_ports, sfn_offset); if (ret < 0) { fprintf(stderr, "Error decoding PBCH (%d)\n", ret); } else if (ret == 1) { @@ -246,7 +251,9 @@ int ue_mib_sync_and_decode(ue_mib_t * q, sync_get_sf_idx(&q->sfind) == 0) { INFO("Trying to decode MIB\n",0); - ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx], q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); + printf("caution here should pass begining of frame \n"); + exit(-1); + ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-960], q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); counter3++; } else if ((ret == LIBLTE_SUCCESS && peak_idx != 0) || (ret == 1 && nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 > nsamples)) diff --git a/lte/phy/lib/utils/src/convolution.c b/lte/phy/lib/utils/src/convolution.c index 76a26bdee..acf7f5c4d 100644 --- a/lte/phy/lib/utils/src/convolution.c +++ b/lte/phy/lib/utils/src/convolution.c @@ -91,7 +91,6 @@ uint32_t conv_cc(cf_t *input, cf_t *filter, cf_t *output, uint32_t input_len, ui uint32_t i,j; uint32_t output_len; output_len=input_len+filter_len-1; - memset(output,0,output_len*sizeof(cf_t)); for (i=0;i Date: Thu, 13 Nov 2014 15:14:22 +0000 Subject: [PATCH 18/55] Added MMSE SISO equalizer (predecoding) --- cmake/modules/FindVolk.cmake | 9 +- .../include/liblte/phy/ch_estimation/cheq.h | 57 ---- lte/phy/include/liblte/phy/mimo/precoding.h | 72 +++- lte/phy/include/liblte/phy/phch/pbch.h | 4 +- lte/phy/include/liblte/phy/phch/pcfich.h | 2 + lte/phy/include/liblte/phy/phch/pdcch.h | 3 + lte/phy/include/liblte/phy/phch/pdsch.h | 3 + lte/phy/include/liblte/phy/phch/phich.h | 2 + lte/phy/include/liblte/phy/utils/vector.h | 10 +- lte/phy/lib/ch_estimation/src/cheq.c | 53 --- lte/phy/lib/ch_estimation/src/chest_dl.c | 21 +- lte/phy/lib/ch_estimation/test/CMakeLists.txt | 4 + .../lib/ch_estimation/test/chest_test_dl.c | 105 +++--- .../ch_estimation/test/chest_test_dl_mex.c | 60 ++-- lte/phy/lib/fec/src/viterbi.c | 1 + lte/phy/lib/mimo/src/precoding.c | 315 +++++++++++------- lte/phy/lib/mimo/test/precoding_test.c | 14 +- lte/phy/lib/phch/src/pbch.c | 18 +- lte/phy/lib/phch/src/pcfich.c | 17 +- lte/phy/lib/phch/src/pdcch.c | 16 +- lte/phy/lib/phch/src/pdsch.c | 17 +- lte/phy/lib/phch/src/phich.c | 18 +- lte/phy/lib/phch/src/prach.c | 2 + lte/phy/lib/phch/src/regs.c | 9 + lte/phy/lib/phch/test/pbch_file_test.c | 4 +- lte/phy/lib/phch/test/pbch_test.c | 2 +- lte/phy/lib/phch/test/pcfich_file_test.c | 2 +- lte/phy/lib/phch/test/pcfich_test.c | 2 +- lte/phy/lib/phch/test/pdcch_file_test.c | 2 +- lte/phy/lib/phch/test/pdcch_test.c | 2 +- lte/phy/lib/phch/test/pdsch_file_test.c | 4 +- lte/phy/lib/phch/test/pdsch_test.c | 2 +- lte/phy/lib/phch/test/phich_file_test.c | 2 +- lte/phy/lib/phch/test/phich_test.c | 2 +- lte/phy/lib/resampling/src/interp.c | 12 + lte/phy/lib/ue/src/ue_celldetect.c | 3 + lte/phy/lib/ue/src/ue_dl.c | 9 +- lte/phy/lib/ue/src/ue_mib.c | 7 +- lte/phy/lib/ue/src/ue_sync.c | 2 + lte/phy/lib/utils/src/convolution.c | 3 + lte/phy/lib/utils/src/vector.c | 50 ++- matlab/tests/equalizer_test.m | 55 ++- 42 files changed, 595 insertions(+), 402 deletions(-) delete mode 100644 lte/phy/include/liblte/phy/ch_estimation/cheq.h delete mode 100644 lte/phy/lib/ch_estimation/src/cheq.c diff --git a/cmake/modules/FindVolk.cmake b/cmake/modules/FindVolk.cmake index d1e554bf2..6603139b9 100644 --- a/cmake/modules/FindVolk.cmake +++ b/cmake/modules/FindVolk.cmake @@ -35,7 +35,7 @@ CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_multiply_conjugate_32fc HAVE_VOLK_MULT2_ CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_multiply_32fc HAVE_VOLK_MULT_REAL_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_multiply_32f HAVE_VOLK_MULT_FLOAT_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_32f HAVE_VOLK_MAG_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_square_32f HAVE_VOLK_MAG_SQUARE_FUNCTION) +CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_squared_32f HAVE_VOLK_MAG_SQUARE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_divide_32f HAVE_VOLK_DIVIDE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_dot_prod_32fc HAVE_VOLK_DOTPROD_FC_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_dot_prod_32fc HAVE_VOLK_DOTPROD_CFC_FUNCTION) @@ -44,6 +44,7 @@ CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_dot_prod_32f HAVE_VOLK_DOTPROD_F_FUNCTION CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32f_atan2_32f HAVE_VOLK_ATAN_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_convert_16i HAVE_VOLK_CONVERT_FI_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_32f_x2 HAVE_VOLK_DEINTERLEAVE_FUNCTION) +CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_interleave_32fc HAVE_VOLK_INTERLEAVE_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_subtract_32f HAVE_VOLK_SUB_FLOAT_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_add_32f HAVE_VOLK_ADD_FLOAT_FUNCTION) CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_square_dist_32f HAVE_VOLK_SQUARE_DIST_FUNCTION) @@ -59,12 +60,18 @@ ENDIF() IF(${HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION") ENDIF() +IF(${HAVE_VOLK_MAG_SQUARE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAG_SQUARE_FUNCTION") +ENDIF() IF(${HAVE_VOLK_SQUARE_DIST_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SQUARE_DIST_FUNCTION") ENDIF() IF(${HAVE_VOLK_DEINTERLEAVE_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DEINTERLEAVE_FUNCTION") ENDIF() +IF(${HAVE_VOLK_INTERLEAVE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_INTERLEAVE_FUNCTION") +ENDIF() IF(${HAVE_VOLK_SUB_FLOAT_FUNCTION}) SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SUB_FLOAT_FUNCTION") ENDIF() diff --git a/lte/phy/include/liblte/phy/ch_estimation/cheq.h b/lte/phy/include/liblte/phy/ch_estimation/cheq.h deleted file mode 100644 index 847f3e018..000000000 --- a/lte/phy/include/liblte/phy/ch_estimation/cheq.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - - - -#ifndef CHEQ_DL_ -#define CHEQ_DL_ - -#include - -#include "liblte/config.h" -#include "liblte/phy/common/phy_common.h" - -typedef _Complex float cf_t; - -/** Generic OFDM channel equalizer -*/ - - -LIBLTE_API int cheq_zf(cf_t *input, - cf_t *ce, - cf_t *output, - uint32_t len); - -LIBLTE_API int cheq_mmse(cf_t *input, - cf_t *ce, - cf_t *output, - uint32_t len, - float noise_estimate); - - - -#endif \ No newline at end of file diff --git a/lte/phy/include/liblte/phy/mimo/precoding.h b/lte/phy/include/liblte/phy/mimo/precoding.h index b2baf79d8..adecc03b8 100644 --- a/lte/phy/include/liblte/phy/mimo/precoding.h +++ b/lte/phy/include/liblte/phy/mimo/precoding.h @@ -37,20 +37,70 @@ typedef _Complex float cf_t; * resources on each of the antenna ports. */ + +typedef struct { + cf_t *h_mod; + float *y_mod; + float *z_real; + float *z_imag; + uint32_t max_frame_len; +}precoding_t; + + +LIBLTE_API int precoding_init(precoding_t *q, + uint32_t max_frame_len); + +LIBLTE_API void precoding_free(precoding_t *q); + /* Generates the vector "y" from the input vector "x" */ -LIBLTE_API int precoding_single(cf_t *x, cf_t *y, int nof_symbols); -LIBLTE_API int precoding_diversity(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_ports, - int nof_symbols); -LIBLTE_API int precoding_type(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, - int nof_ports, int nof_symbols, lte_mimo_type_t type); +LIBLTE_API int precoding_single(precoding_t *q, + cf_t *x, + cf_t *y, + int nof_symbols); -/* Estimates the vector "x" based on the received signal "y" and the channel estimates "ce" +LIBLTE_API int precoding_diversity(precoding_t *q, + cf_t *x[MAX_LAYERS], + cf_t *y[MAX_PORTS], + int nof_ports, int nof_symbols); + +LIBLTE_API int precoding_type(precoding_t *q, + cf_t *x[MAX_LAYERS], + cf_t *y[MAX_PORTS], + int nof_layers, + int nof_ports, + int nof_symbols, + lte_mimo_type_t type); + +/* Estimates the vector "x" based on the received signal "y" and the channel estimates "h" */ -LIBLTE_API int predecoding_single_zf(cf_t *y, cf_t *ce, cf_t *x, int nof_symbols); -LIBLTE_API int predecoding_diversity_zf(cf_t *y, cf_t *ce[MAX_PORTS], cf_t *x[MAX_LAYERS], - int nof_ports, int nof_symbols); -LIBLTE_API int predecoding_type(cf_t *y, cf_t *ce[MAX_PORTS], cf_t *x[MAX_LAYERS], - int nof_ports, int nof_layers, int nof_symbols, lte_mimo_type_t type); +LIBLTE_API int predecoding_single_zf(precoding_t *q, + cf_t *y, + cf_t *h, + cf_t *x, + int nof_symbols); + +LIBLTE_API int predecoding_single_mmse(precoding_t *q, + cf_t *y, + cf_t *h, + cf_t *x, + int nof_symbols, + float noise_estimate); + +LIBLTE_API int predecoding_diversity_zf(precoding_t *q, + cf_t *y, + cf_t *h[MAX_PORTS], + cf_t *x[MAX_LAYERS], + int nof_ports, + int nof_symbols); + +LIBLTE_API int predecoding_type(precoding_t *q, + cf_t *y, + cf_t *h[MAX_PORTS], + cf_t *x[MAX_LAYERS], + int nof_ports, + int nof_layers, + int nof_symbols, + lte_mimo_type_t type); #endif /* PRECODING_H_ */ diff --git a/lte/phy/include/liblte/phy/phch/pbch.h b/lte/phy/include/liblte/phy/phch/pbch.h index 2716f1d89..d0399a4de 100644 --- a/lte/phy/include/liblte/phy/phch/pbch.h +++ b/lte/phy/include/liblte/phy/phch/pbch.h @@ -77,7 +77,8 @@ typedef struct LIBLTE_API { viterbi_t decoder; crc_t crc; convcoder_t encoder; - + precoding_t precoding; + } pbch_t; LIBLTE_API int pbch_init(pbch_t *q, @@ -87,6 +88,7 @@ LIBLTE_API void pbch_free(pbch_t *q); LIBLTE_API int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], + float noise_estimate, uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset); diff --git a/lte/phy/include/liblte/phy/phch/pcfich.h b/lte/phy/include/liblte/phy/phch/pcfich.h index cbbf84bf1..cd87c14f9 100644 --- a/lte/phy/include/liblte/phy/phch/pcfich.h +++ b/lte/phy/include/liblte/phy/phch/pcfich.h @@ -64,6 +64,7 @@ typedef struct LIBLTE_API { modem_table_t mod; demod_hard_t demod; sequence_t seq_pcfich[NSUBFRAMES_X_FRAME]; + precoding_t precoding; } pcfich_t; @@ -76,6 +77,7 @@ LIBLTE_API void pcfich_free(pcfich_t *q); LIBLTE_API int pcfich_decode(pcfich_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], + float noise_estimate, uint32_t subframe, uint32_t *cfi, uint32_t *distance); diff --git a/lte/phy/include/liblte/phy/phch/pdcch.h b/lte/phy/include/liblte/phy/phch/pdcch.h index d854dacf4..d9681784b 100644 --- a/lte/phy/include/liblte/phy/phch/pdcch.h +++ b/lte/phy/include/liblte/phy/phch/pdcch.h @@ -74,6 +74,8 @@ typedef struct LIBLTE_API { sequence_t seq_pdcch[NSUBFRAMES_X_FRAME]; viterbi_t decoder; crc_t crc; + precoding_t precoding; + } pdcch_t; LIBLTE_API int pdcch_init(pdcch_t *q, @@ -96,6 +98,7 @@ LIBLTE_API int pdcch_encode(pdcch_t *q, LIBLTE_API int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], + float noise_estimate, dci_location_t location, uint32_t nsubframe, uint32_t cfi); diff --git a/lte/phy/include/liblte/phy/phch/pdsch.h b/lte/phy/include/liblte/phy/phch/pdsch.h index fc7b4b0c9..01a2f4ba3 100644 --- a/lte/phy/include/liblte/phy/phch/pdsch.h +++ b/lte/phy/include/liblte/phy/phch/pdsch.h @@ -97,6 +97,8 @@ typedef struct LIBLTE_API { tdec_t decoder; crc_t crc_tb; crc_t crc_cb; + precoding_t precoding; + }pdsch_t; LIBLTE_API int pdsch_init(pdsch_t *q, @@ -126,6 +128,7 @@ LIBLTE_API int pdsch_encode(pdsch_t *q, LIBLTE_API int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], + float noise_estimate, uint8_t *data, uint32_t nsubframe, pdsch_harq_t *harq_process, diff --git a/lte/phy/include/liblte/phy/phch/phich.h b/lte/phy/include/liblte/phy/phch/phich.h index 845794e97..a976ee718 100644 --- a/lte/phy/include/liblte/phy/phch/phich.h +++ b/lte/phy/include/liblte/phy/phch/phich.h @@ -75,6 +75,7 @@ typedef struct LIBLTE_API { modem_table_t mod; demod_hard_t demod; sequence_t seq_phich[NSUBFRAMES_X_FRAME]; + precoding_t precoding; }phich_t; @@ -87,6 +88,7 @@ LIBLTE_API void phich_free(phich_t *q); LIBLTE_API int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], + float noise_estimate, uint32_t ngroup, uint32_t nseq, uint32_t nsubframe, diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index 81c82b4ce..79bdaa819 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -73,6 +73,11 @@ LIBLTE_API void vec_sub_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); /* Square distance */ LIBLTE_API void vec_square_dist(cf_t symbol, cf_t *points, float *distance, uint32_t npoints); +/* scalar addition */ +LIBLTE_API void vec_sc_add_fff(float *x, float h, float *z, uint32_t len); +LIBLTE_API void vec_sc_add_cfc(cf_t *x, float h, cf_t *z, uint32_t len); +LIBLTE_API void vec_sc_add_ccc(cf_t *x, cf_t h, cf_t *z, uint32_t len); + /* scalar product */ LIBLTE_API void vec_sc_prod_cfc(cf_t *x, float h, cf_t *z, uint32_t len); LIBLTE_API void vec_sc_prod_ccc(cf_t *x, cf_t h, cf_t *z, uint32_t len); @@ -83,6 +88,8 @@ LIBLTE_API void vec_convert_fi(float *x, int16_t *z, float scale, uint32_t len); LIBLTE_API void vec_deinterleave_cf(cf_t *x, float *real, float *imag, uint32_t len); LIBLTE_API void vec_deinterleave_real_cf(cf_t *x, float *real, uint32_t len); +LIBLTE_API void vec_interleave_cf(float *real, float *imag, cf_t *x, uint32_t len); + /* vector product (element-wise) */ LIBLTE_API void vec_prod_ccc(cf_t *x, cf_t *y, cf_t *z, uint32_t len); @@ -99,7 +106,8 @@ LIBLTE_API cf_t vec_dot_prod_conj_ccc(cf_t *x, cf_t *y, uint32_t len); LIBLTE_API float vec_dot_prod_fff(float *x, float *y, uint32_t len); /* z=x/y vector division (element-wise) */ -LIBLTE_API void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, uint32_t len); +LIBLTE_API void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, float *z_real, float *z_imag, uint32_t len); +LIBLTE_API void vec_div_fff(float *x, float *y, float *z, uint32_t len); /* conjugate */ LIBLTE_API void vec_conj_cc(cf_t *x, cf_t *y, uint32_t len); diff --git a/lte/phy/lib/ch_estimation/src/cheq.c b/lte/phy/lib/ch_estimation/src/cheq.c deleted file mode 100644 index c1719892a..000000000 --- a/lte/phy/lib/ch_estimation/src/cheq.c +++ /dev/null @@ -1,53 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - - - -#include -#include -#include -#include -#include -#include - -#include "liblte/config.h" - -#include "liblte/phy/ch_estimation/cheq.h" -#include "liblte/phy/utils/vector.h" - - -int cheq_zf(cf_t *input, cf_t *ce, cf_t *output, uint32_t len) -{ - fprintf(stderr, "Not implemented\n"); - return -1; -} - -int cheq_mmse(cf_t *input, cf_t *ce, cf_t *output, uint32_t len, float noise_estimate) -{ - fprintf(stderr, "Not implemented\n"); - return -1; -} diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index c37afd308..7db8877b1 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -82,17 +82,17 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) } for (int i=0;ipilot_estimates[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + q->pilot_estimates[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_NUM_SF(cell.nof_prb, i)); if (!q->pilot_estimates[i]) { perror("malloc"); goto clean_exit; } - q->pilot_estimates_average[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + q->pilot_estimates_average[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_NUM_SF(cell.nof_prb, i)); if (!q->pilot_estimates_average[i]) { perror("malloc"); goto clean_exit; } - q->pilot_recv_signal[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + q->pilot_recv_signal[i] = vec_malloc(sizeof(cf_t) * REFSIGNAL_NUM_SF(cell.nof_prb, i)); if (!q->pilot_recv_signal[i]) { perror("malloc"); goto clean_exit; @@ -135,7 +135,11 @@ void chest_dl_free(chest_dl_t *q) if (q->tmp_freqavg) { free(q->tmp_freqavg); } - + for (int i=0;itmp_timeavg[i]) { + free(q->tmp_timeavg[i]); + } + } interp_linear_vector_free(&q->interp_linvec); interp_linear_free(&q->interp_lin); @@ -143,10 +147,14 @@ void chest_dl_free(chest_dl_t *q) if (q->pilot_estimates[i]) { free(q->pilot_estimates[i]); } + if (q->pilot_estimates_average[i]) { + free(q->pilot_estimates_average[i]); + } if (q->pilot_recv_signal[i]) { free(q->pilot_recv_signal[i]); } } + bzero(q, sizeof(chest_dl_t)); } int chest_dl_set_filter_freq(chest_dl_t *q, float *filter, uint32_t filter_len) { @@ -219,9 +227,10 @@ static void average_pilots(chest_dl_t *q, uint32_t port_id) static float estimate_noise_port(chest_dl_t *q, uint32_t port_id) { /* Use difference between averaged and noisy LS pilot estimates */ - vec_sub_fff((float*) q->pilot_estimates_average[port_id], (float*) q->pilot_estimates[port_id], - (float*) q->pilot_estimates[port_id], 2*REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); + vec_sub_ccc(q->pilot_estimates_average[port_id], q->pilot_estimates[port_id], + q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); /* compute noise power */ + float noiseEst = vec_dot_prod_conj_ccc(q->pilot_estimates[port_id], q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); diff --git a/lte/phy/lib/ch_estimation/test/CMakeLists.txt b/lte/phy/lib/ch_estimation/test/CMakeLists.txt index dc67a637a..296997bc0 100644 --- a/lte/phy/lib/ch_estimation/test/CMakeLists.txt +++ b/lte/phy/lib/ch_estimation/test/CMakeLists.txt @@ -30,6 +30,10 @@ ADD_TEST(chest_test_dl_cellid0 chest_test_dl -c 0) ADD_TEST(chest_test_dl_cellid1 chest_test_dl -c 1) ADD_TEST(chest_test_dl_cellid2 chest_test_dl -c 2) +ADD_TEST(chest_test_dl_cellid0 chest_test_dl -c 0 -r 50) +ADD_TEST(chest_test_dl_cellid1 chest_test_dl -c 1 -r 50) +ADD_TEST(chest_test_dl_cellid2 chest_test_dl -c 2 -r 50) + ######################################################################## # Downlink MEX libs ######################################################################## diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl.c b/lte/phy/lib/ch_estimation/test/chest_test_dl.c index 08cca66cc..bf5e216e9 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl.c @@ -80,48 +80,15 @@ void parse_args(int argc, char **argv) { } } -int check_mse(float mod, float arg, int n_port) { - INFO("mod=%.4f, arg=%.4f, n_port=%d\n", mod, arg, n_port); - switch(n_port) { - case 0: - if (mod > 0.029) { - return -1; - } - if (arg > 0.029) { - return -1; - } - break; - case 1: - if (mod > 0.012) { - return -1; - } - if (arg > 0.012) { - return -1; - } - break; - case 2: - case 3: - if (mod > 3.33) { - return -1; - } - if (arg > 0.63) { - return -1; - } - break; - default: - return -1; - } - return 0; -} int main(int argc, char **argv) { - chest_dl_t eq; - cf_t *input = NULL, *ce = NULL, *h = NULL; + chest_dl_t est; + precoding_t cheq; + cf_t *input = NULL, *ce = NULL, *h = NULL, *output = NULL; int i, j, n_port, sf_idx, cid, num_re; int ret = -1; int max_cid; FILE *fmatlab = NULL; - float mse_mag, mse_phase; parse_args(argc,argv); @@ -140,6 +107,11 @@ int main(int argc, char **argv) { perror("malloc"); goto do_exit; } + output = malloc(num_re * sizeof(cf_t)); + if (!output) { + perror("malloc"); + goto do_exit; + } h = malloc(num_re * sizeof(cf_t)); if (!h) { perror("malloc"); @@ -158,15 +130,17 @@ int main(int argc, char **argv) { cid = cell.id; max_cid = cell.id; } + + precoding_init(&cheq, num_re); while(cid <= max_cid) { cell.id = cid; - if (chest_dl_init(&eq, cell)) { + if (chest_dl_init(&est, cell)) { fprintf(stderr, "Error initializing equalizer\n"); goto do_exit; } - for (sf_idx=0;sf_idx 1.7) { goto do_exit; - }*/ - + } + if (fmatlab) { fprintf(fmatlab, "input="); vec_fprint_c(fmatlab, input, num_re); @@ -220,7 +218,7 @@ int main(int argc, char **argv) { } } } - chest_dl_free(&eq); + chest_dl_free(&est); cid+=10; INFO("cid=%d\n", cid); } @@ -230,6 +228,11 @@ int main(int argc, char **argv) { do_exit: + precoding_free(&cheq); + + if (output) { + free(output); + } if (ce) { free(ce); } diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c index 016624a2f..8c9e320a6 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c @@ -25,15 +25,6 @@ /** MEX function to be called from MATLAB to test the channel estimator - * - * [estChannel] = liblte_chest(cell_id, nof_ports, inputSignal, (optional) sf_idx) - * - * Returns a matrix of size equal to the inputSignal matrix with the channel estimates - * for each resource element in inputSignal. The inputSignal matrix is the received Grid - * of size nof_resource_elements x nof_ofdm_symbols_in_subframe. - * - * The sf_idx is the subframe index only used if inputSignal is 1 subframe length. - * */ #define CELLID prhs[0] @@ -47,11 +38,14 @@ void help() { mexErrMsgTxt - ("[estChannel] = liblte_chest(cell_id, nof_ports, inputSignal,[sf_idx|freq_filter], [time_filter])\n\n" + ("[estChannel, avg_refs, output] = liblte_chest(cell_id, nof_ports, inputSignal,[sf_idx|freq_filter]," + "[time_filter])\n\n" " Returns a matrix of size equal to the inputSignal matrix with the channel estimates\n " "for each resource element in inputSignal. The inputSignal matrix is the received Grid\n" "of size nof_resource_elements x nof_ofdm_symbols.\n" - "The sf_idx is the subframe index only used if inputSignal is 1 subframe length.\n"); + "The sf_idx is the subframe index only used if inputSignal is 1 subframe length.\n" + "Returns the averaged references and output signal after ZF/MMSE equalization\n" + ); } /* the gateway function */ @@ -61,10 +55,12 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) int i; lte_cell_t cell; chest_dl_t chest; - cf_t *input_signal; + precoding_t cheq; + cf_t *input_signal = NULL, *output_signal = NULL; cf_t *ce[MAX_PORTS]; - double *outr0, *outi0, *outr1, *outi1; - float noiseAverage[10]; + double *outr0=NULL, *outi0=NULL; + double *outr1=NULL, *outi1=NULL; + double *outr2=NULL, *outi2=NULL; if (nrhs < NOF_INPUTS) { help(); @@ -147,7 +143,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) ce[i] = vec_malloc(nof_re * sizeof(cf_t)); } input_signal = vec_malloc(nof_re * sizeof(cf_t)); + output_signal = vec_malloc(nof_re * sizeof(cf_t)); + + precoding_init(&cheq, nof_re); + /* Create output values */ if (nlhs >= 1) { plhs[0] = mxCreateDoubleMatrix(1,nof_re * nsubframes, mxCOMPLEX); @@ -159,6 +159,11 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) outr1 = mxGetPr(plhs[1]); outi1 = mxGetPi(plhs[1]); } + if (nlhs >= 3) { + plhs[2] = mxCreateDoubleMatrix(1,nof_re * nsubframes, mxCOMPLEX); + outr2 = mxGetPr(plhs[2]); + outi2 = mxGetPi(plhs[2]); + } for (int sf=0;sf= 1) { for (i=0;i= 3) { + for (i=0;i= 3) { - plhs[2] = mxCreateDoubleMatrix(1, 1, mxREAL); - outr1 = mxGetPr(plhs[2]); - *outr1 = vec_acc_ff(noiseAverage,10)/10; - } - - + return; } diff --git a/lte/phy/lib/fec/src/viterbi.c b/lte/phy/lib/fec/src/viterbi.c index cf6b506ce..cb334bd33 100644 --- a/lte/phy/lib/fec/src/viterbi.c +++ b/lte/phy/lib/fec/src/viterbi.c @@ -190,6 +190,7 @@ void viterbi_free(viterbi_t *q) { if (q->free) { q->free(q); } + bzero(q, sizeof(viterbi_t)); } /* symbols are real-valued */ diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index 6b2d52481..e501a5d42 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -25,7 +25,7 @@ * */ -#include +#include #include #include #include @@ -35,11 +35,207 @@ #include "liblte/phy/mimo/precoding.h" #include "liblte/phy/utils/vector.h" -int precoding_single(cf_t *x, cf_t *y, int nof_symbols) { + +/************************************************ + * + * RECEIVER SIDE FUNCTIONS + * + **************************************************/ + +int precoding_init(precoding_t *q, uint32_t max_frame_len) { + if (q) { + bzero(q, sizeof(precoding_t)); + + q->h_mod = vec_malloc(sizeof(cf_t) * max_frame_len); + if (!q->h_mod) { + perror("malloc"); + goto clean_exit; + } + q->y_mod = vec_malloc(sizeof(float) * max_frame_len); + if (!q->y_mod) { + perror("malloc"); + goto clean_exit; + } + q->z_real = vec_malloc(sizeof(float) * max_frame_len); + if (!q->z_real) { + perror("malloc"); + goto clean_exit; + } + q->z_imag = vec_malloc(sizeof(float) * max_frame_len); + if (!q->z_imag) { + perror("malloc"); + goto clean_exit; + } + q->max_frame_len = max_frame_len; + return LIBLTE_SUCCESS; + } else { + return LIBLTE_ERROR_INVALID_INPUTS; + } +clean_exit: + precoding_free(q); + return LIBLTE_ERROR; +} + +void precoding_free(precoding_t *q) { + if (q->h_mod) { + free(q->h_mod); + } + if (q->y_mod) { + free(q->y_mod); + } + if (q->z_real) { + free(q->z_real); + } + if (q->z_imag) { + free(q->z_imag); + } + bzero(q, sizeof(precoding_t)); +} + + +/* ZF SISO equalizer: x=y/h */ +int predecoding_single_zf(precoding_t *q, cf_t *y, cf_t *h, cf_t *x, int nof_symbols) { + if (nof_symbols <= q->max_frame_len) { + vec_div_ccc(y, h, q->y_mod, x, q->z_real, q->z_imag, nof_symbols); + return nof_symbols; + } else { + return LIBLTE_ERROR; + } +} + +/* MMSE SISO equalizer x=y*h'/(h*h'+no) */ +int predecoding_single_mmse(precoding_t *q, cf_t *y, cf_t *h, cf_t *x, int nof_symbols, float noise_estimate) { + if (nof_symbols <= q->max_frame_len) { + // h*h' + vec_prod_conj_ccc(h, h, q->h_mod, nof_symbols); + // real(h*h') + vec_deinterleave_real_cf(q->h_mod, q->y_mod, nof_symbols); + // (h*h' + n0) + vec_sc_add_fff(q->y_mod, noise_estimate, q->y_mod, nof_symbols); + // y*h' + vec_prod_conj_ccc(y, h, x, nof_symbols); + // decompose real/imag parts + vec_deinterleave_cf(x, q->z_real, q->z_imag, nof_symbols); + // real and imag division + vec_div_fff(q->z_real, q->y_mod, q->z_real, nof_symbols); + vec_div_fff(q->z_imag, q->y_mod, q->z_imag, nof_symbols); + // interleave again + vec_interleave_cf(q->z_real, q->z_imag, x, nof_symbols); + return nof_symbols; + } else { + return LIBLTE_ERROR; + } +} + +/* ZF STBC equalizer */ +int predecoding_diversity_zf(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], + int nof_ports, int nof_symbols) { + int i; + cf_t h0, h1, h2, h3, r0, r1, r2, r3; + float hh, hh02, hh13; + if (nof_ports == 2) { + /* TODO: Use VOLK here */ + for (i = 0; i < nof_symbols / 2; i++) { + h0 = h[0][2 * i]; + h1 = h[1][2 * i]; + hh = crealf(h0) * crealf(h0) + cimagf(h0) * cimagf(h0) + + crealf(h1) * crealf(h1) + cimagf(h1) * cimagf(h1); + r0 = y[2 * i]; + r1 = y[2 * i + 1]; + if (hh == 0) { + hh = 1e-2; + } + x[0][i] = (conjf(h0) * r0 + h1 * conjf(r1)) / hh * sqrt(2); + x[1][i] = (-h1 * conj(r0) + conj(h0) * r1) / hh * sqrt(2); + } + return i; + } else if (nof_ports == 4) { + + int m_ap = (nof_symbols % 4) ? ((nof_symbols - 2) / 4) : nof_symbols / 4; + for (i = 0; i < m_ap; i++) { + h0 = h[0][4 * i]; + h1 = h[1][4 * i + 2]; + h2 = h[2][4 * i]; + h3 = h[3][4 * i + 2]; + hh02 = crealf(h0) * crealf(h0) + cimagf(h0) * cimagf(h0) + + crealf(h2) * crealf(h2) + cimagf(h2) * cimagf(h2); + hh13 = crealf(h1) * crealf(h1) + cimagf(h1) * cimagf(h1) + + crealf(h3) * crealf(h3) + cimagf(h3) * cimagf(h3); + r0 = y[4 * i]; + r1 = y[4 * i + 1]; + r2 = y[4 * i + 2]; + r3 = y[4 * i + 3]; + + x[0][i] = (conjf(h0) * r0 + h2 * conjf(r1)) / hh02 * sqrt(2); + x[1][i] = (-h2 * conjf(r0) + conjf(h0) * r1) / hh02 * sqrt(2); + x[2][i] = (conjf(h1) * r2 + h3 * conjf(r3)) / hh13 * sqrt(2); + x[3][i] = (-h3 * conjf(r2) + conjf(h1) * r3) / hh13 * sqrt(2); + + } + return i; + } else { + fprintf(stderr, "Number of ports must be 2 or 4 for transmit diversity (nof_ports=%d)\n", nof_ports); + return -1; + } +} + +/* 36.211 v10.3.0 Section 6.3.4 */ +int predecoding_type(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], + int nof_ports, int nof_layers, int nof_symbols, lte_mimo_type_t type) { + + if (nof_ports > MAX_PORTS) { + fprintf(stderr, "Maximum number of ports is %d (nof_ports=%d)\n", MAX_PORTS, + nof_ports); + return -1; + } + if (nof_layers > MAX_LAYERS) { + fprintf(stderr, "Maximum number of layers is %d (nof_layers=%d)\n", + MAX_LAYERS, nof_layers); + return -1; + } + + switch (type) { + case SINGLE_ANTENNA: + if (nof_ports == 1 && nof_layers == 1) { + return predecoding_single_zf(q, y, h[0], x[0], nof_symbols); + } else { + fprintf(stderr, + "Number of ports and layers must be 1 for transmission on single antenna ports\n"); + return -1; + } + break; + case TX_DIVERSITY: + if (nof_ports == nof_layers) { + return predecoding_diversity_zf(q, y, h, x, nof_ports, nof_symbols); + } else { + fprintf(stderr, + "Error number of layers must equal number of ports in transmit diversity\n"); + return -1; + } + break; + case SPATIAL_MULTIPLEX: + fprintf(stderr, "Spatial multiplexing not supported\n"); + return -1; + } + return 0; +} + + + + + + +/************************************************ + * + * TRANSMITTER SIDE FUNCTIONS + * + **************************************************/ + +int precoding_single(precoding_t *q, cf_t *x, cf_t *y, int nof_symbols) { memcpy(y, x, nof_symbols * sizeof(cf_t)); return nof_symbols; } -int precoding_diversity(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_ports, +int precoding_diversity(precoding_t *q, cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_ports, int nof_symbols) { int i; if (nof_ports == 2) { @@ -83,7 +279,7 @@ int precoding_diversity(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_ports, } /* 36.211 v10.3.0 Section 6.3.4 */ -int precoding_type(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, +int precoding_type(precoding_t *q, cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, int nof_ports, int nof_symbols, lte_mimo_type_t type) { if (nof_ports > MAX_PORTS) { @@ -100,7 +296,7 @@ int precoding_type(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, switch (type) { case SINGLE_ANTENNA: if (nof_ports == 1 && nof_layers == 1) { - return precoding_single(x[0], y[0], nof_symbols); + return precoding_single(q, x[0], y[0], nof_symbols); } else { fprintf(stderr, "Number of ports and layers must be 1 for transmission on single antenna ports\n"); @@ -109,7 +305,7 @@ int precoding_type(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, break; case TX_DIVERSITY: if (nof_ports == nof_layers) { - return precoding_diversity(x, y, nof_ports, nof_symbols); + return precoding_diversity(q, x, y, nof_ports, nof_symbols); } else { fprintf(stderr, "Error number of layers must equal number of ports in transmit diversity\n"); @@ -122,110 +318,3 @@ int precoding_type(cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_layers, return 0; } - -float y_mod[110*12*14]; - -/* ZF detector */ -int predecoding_single_zf(cf_t *y, cf_t *ce, cf_t *x, int nof_symbols) { - for (int i=0;i MAX_PORTS) { - fprintf(stderr, "Maximum number of ports is %d (nof_ports=%d)\n", MAX_PORTS, - nof_ports); - return -1; - } - if (nof_layers > MAX_LAYERS) { - fprintf(stderr, "Maximum number of layers is %d (nof_layers=%d)\n", - MAX_LAYERS, nof_layers); - return -1; - } - - switch (type) { - case SINGLE_ANTENNA: - if (nof_ports == 1 && nof_layers == 1) { - return predecoding_single_zf(y, ce[0], x[0], nof_symbols); - } else { - fprintf(stderr, - "Number of ports and layers must be 1 for transmission on single antenna ports\n"); - return -1; - } - break; - case TX_DIVERSITY: - if (nof_ports == nof_layers) { - return predecoding_diversity_zf(y, ce, x, nof_ports, nof_symbols); - } else { - fprintf(stderr, - "Error number of layers must equal number of ports in transmit diversity\n"); - return -1; - } - break; - case SPATIAL_MULTIPLEX: - fprintf(stderr, "Spatial multiplexing not supported\n"); - return -1; - } - return 0; -} - diff --git a/lte/phy/lib/mimo/test/precoding_test.c b/lte/phy/lib/mimo/test/precoding_test.c index bd30e33c2..7efb3e0b1 100644 --- a/lte/phy/lib/mimo/test/precoding_test.c +++ b/lte/phy/lib/mimo/test/precoding_test.c @@ -82,7 +82,8 @@ int main(int argc, char **argv) { cf_t *x[MAX_LAYERS], *r[MAX_PORTS], *y[MAX_PORTS], *h[MAX_PORTS], *xr[MAX_LAYERS]; lte_mimo_type_t type; - + precoding_t precoding; + parse_args(argc, argv); if (nof_ports > MAX_PORTS || nof_layers > MAX_LAYERS) { @@ -135,9 +136,14 @@ int main(int argc, char **argv) { * ((float) rand() / RAND_MAX + (float) I * rand() / RAND_MAX); } } + + if (precoding_init(&precoding, nof_symbols)) { + fprintf(stderr, "Error initializing precoding\n"); + exit(-1); + } /* precoding */ - if (precoding_type(x, y, nof_layers, nof_ports, nof_symbols, type) < 0) { + if (precoding_type(&precoding, x, y, nof_layers, nof_ports, nof_symbols, type) < 0) { fprintf(stderr, "Error layer mapper encoder\n"); exit(-1); } @@ -163,7 +169,7 @@ int main(int argc, char **argv) { } /* predecoding / equalization */ - if (predecoding_type(r[0], h, xr, nof_ports, nof_layers, + if (predecoding_type(&precoding, r[0], h, xr, nof_ports, nof_layers, nof_symbols * nof_layers, type) < 0) { fprintf(stderr, "Error layer mapper encoder\n"); exit(-1); @@ -187,6 +193,8 @@ int main(int argc, char **argv) { } free(r[0]); + + precoding_free(&precoding); if (mse > MSE_THRESHOLD) { printf("MSE: %f\n", mse); diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index d753a6dc2..bedbfb669 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -133,6 +133,10 @@ int pbch_init(pbch_t *q, lte_cell_t cell) { bzero(q, sizeof(pbch_t)); q->cell = cell; + + if (precoding_init(&q->precoding, SF_LEN_RE(cell.nof_prb, cell.cp))) { + fprintf(stderr, "Error initializing precoding\n"); + } if (modem_table_lte(&q->mod, LTE_QPSK, true)) { goto clean; @@ -223,9 +227,13 @@ void pbch_free(pbch_t *q) { if (q->pbch_rm_b) { free(q->pbch_rm_b); } + precoding_free(&q->precoding); sequence_free(&q->seq_pbch); modem_table_free(&q->mod); viterbi_free(&q->decoder); + + bzero(q, sizeof(pbch_t)); + } void pbch_decode_reset(pbch_t *q) { @@ -315,7 +323,7 @@ int pbch_decode_frame(pbch_t *q, uint32_t src, uint32_t dst, uint32_t n, * * Returns 1 if successfully decoded MIB, 0 if not and -1 on error */ -int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], +int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], float noise_estimate, uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { uint32_t src, dst, nb; @@ -369,10 +377,10 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], /* in conctrol channels, only diversity is supported */ if (nant == 1) { /* no need for layer demapping */ - predecoding_single_zf(q->pbch_symbols[0], q->ce[0], q->pbch_d, - q->nof_symbols); + predecoding_single_mmse(&q->precoding, q->pbch_symbols[0], q->ce[0], q->pbch_d, + q->nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(q->pbch_symbols[0], q->ce, x, nant, + predecoding_diversity_zf(&q->precoding, q->pbch_symbols[0], q->ce, x, nant, q->nof_symbols); layerdemap_diversity(x, q->pbch_d, nant, q->nof_symbols / nant); } @@ -465,7 +473,7 @@ int pbch_encode(pbch_t *q, uint8_t bch_payload[BCH_PAYLOAD_LEN], cf_t *slot1_sym /* layer mapping & precoding */ if (q->cell.nof_ports > 1) { layermap_diversity(q->pbch_d, x, q->cell.nof_ports, q->nof_symbols); - precoding_diversity(x, q->pbch_symbols, q->cell.nof_ports, + precoding_diversity(&q->precoding, x, q->pbch_symbols, q->cell.nof_ports, q->nof_symbols / q->cell.nof_ports); } else { memcpy(q->pbch_symbols[0], q->pbch_d, q->nof_symbols * sizeof(cf_t)); diff --git a/lte/phy/lib/phch/src/pcfich.c b/lte/phy/lib/phch/src/pcfich.c index 8a783c104..8db9fbd60 100644 --- a/lte/phy/lib/phch/src/pcfich.c +++ b/lte/phy/lib/phch/src/pcfich.c @@ -69,6 +69,10 @@ int pcfich_init(pcfich_t *q, regs_t *regs, lte_cell_t cell) { bzero(q, sizeof(pcfich_t)); q->cell = cell; q->regs = regs; + + if (precoding_init(&q->precoding, SF_LEN_RE(cell.nof_prb, cell.cp))) { + fprintf(stderr, "Error initializing precoding\n"); + } if (modem_table_lte(&q->mod, LTE_QPSK, false)) { goto clean; @@ -100,6 +104,9 @@ void pcfich_free(pcfich_t *q) { sequence_free(&q->seq_pcfich[ns]); } modem_table_free(&q->mod); + precoding_free(&q->precoding); + + bzero(q, sizeof(pcfich_t)); } /** Finds the CFI with minimum distance with the vector of received 32 bits. @@ -143,7 +150,7 @@ int pcfich_cfi_encode(int cfi, uint8_t bits[PCFICH_CFI_LEN]) { * * Returns 1 if successfully decoded the CFI, 0 if not and -1 on error */ -int pcfich_decode(pcfich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], +int pcfich_decode(pcfich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, uint32_t nsubframe, uint32_t *cfi, uint32_t *distance) { int dist; @@ -183,10 +190,10 @@ int pcfich_decode(pcfich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], /* in control channels, only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_zf(q->pcfich_symbols[0], q->ce[0], q->pcfich_d, - q->nof_symbols); + predecoding_single_mmse(&q->precoding, q->pcfich_symbols[0], q->ce[0], q->pcfich_d, + q->nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(q->pcfich_symbols[0], ce_precoding, x, + predecoding_diversity_zf(&q->precoding, q->pcfich_symbols[0], ce_precoding, x, q->cell.nof_ports, q->nof_symbols); layerdemap_diversity(x, q->pcfich_d, q->cell.nof_ports, q->nof_symbols / q->cell.nof_ports); @@ -249,7 +256,7 @@ int pcfich_encode(pcfich_t *q, uint32_t cfi, cf_t *slot_symbols[MAX_PORTS], /* layer mapping & precoding */ if (q->cell.nof_ports > 1) { layermap_diversity(q->pcfich_d, x, q->cell.nof_ports, q->nof_symbols); - precoding_diversity(x, symbols_precoding, q->cell.nof_ports, + precoding_diversity(&q->precoding, x, symbols_precoding, q->cell.nof_ports, q->nof_symbols / q->cell.nof_ports); } else { memcpy(q->pcfich_symbols[0], q->pcfich_d, q->nof_symbols * sizeof(cf_t)); diff --git a/lte/phy/lib/phch/src/pdcch.c b/lte/phy/lib/phch/src/pdcch.c index 8775dacc5..d39a282d5 100644 --- a/lte/phy/lib/phch/src/pdcch.c +++ b/lte/phy/lib/phch/src/pdcch.c @@ -78,6 +78,10 @@ int pdcch_init(pdcch_t *q, regs_t *regs, lte_cell_t cell) { bzero(q, sizeof(pdcch_t)); q->cell = cell; q->regs = regs; + + if (precoding_init(&q->precoding, SF_LEN_RE(cell.nof_prb, cell.cp))) { + fprintf(stderr, "Error initializing precoding\n"); + } /* Allocate memory for the largest aggregation level L=3 */ q->max_bits = PDCCH_FORMAT_NOF_BITS(3); @@ -175,8 +179,12 @@ void pdcch_free(pdcch_t *q) { sequence_free(&q->seq_pdcch[i]); } + precoding_free(&q->precoding); modem_table_free(&q->mod); viterbi_free(&q->decoder); + + bzero(q, sizeof(pdcch_t)); + } /** 36.213 v9.1.1 @@ -341,7 +349,7 @@ int pdcch_decode_msg(pdcch_t *q, dci_msg_t *msg, dci_format_t format, uint16_t * * Every time this function is called (with a different location), the last demodulated symbols are overwritten and * new messages from other locations can be decoded */ -int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], +int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, dci_location_t location, uint32_t nsubframe, uint32_t cfi) { int ret = LIBLTE_ERROR_INVALID_INPUTS; @@ -394,9 +402,9 @@ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], /* in control channels, only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_zf(q->pdcch_symbols[0], q->ce[0], q->pdcch_d, nof_symbols); + predecoding_single_mmse(&q->precoding, q->pdcch_symbols[0], q->ce[0], q->pdcch_d, nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(q->pdcch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols); + predecoding_diversity_zf(&q->precoding, q->pdcch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols); layerdemap_diversity(x, q->pdcch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } @@ -536,7 +544,7 @@ int pdcch_encode(pdcch_t *q, dci_msg_t *msg, dci_location_t location, uint16_t r /* layer mapping & precoding */ if (q->cell.nof_ports > 1) { layermap_diversity(q->pdcch_d, x, q->cell.nof_ports, nof_symbols); - precoding_diversity(x, q->pdcch_symbols, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); + precoding_diversity(&q->precoding, x, q->pdcch_symbols, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } else { memcpy(q->pdcch_symbols[0], q->pdcch_d, nof_symbols * sizeof(cf_t)); } diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index ec54c8db6..4d4b91d2f 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -189,6 +189,10 @@ int pdsch_init(pdsch_t *q, lte_cell_t cell) { INFO("Init PDSCH: %d ports %d PRBs, max_symbols: %d\n", q->cell.nof_ports, q->cell.nof_prb, q->max_symbols); + if (precoding_init(&q->precoding, SF_LEN_RE(cell.nof_prb, cell.cp))) { + fprintf(stderr, "Error initializing precoding\n"); + } + for (i = 0; i < 4; i++) { if (modem_table_lte(&q->mod[i], modulations[i], true)) { goto clean; @@ -295,6 +299,9 @@ void pdsch_free(pdsch_t *q) { } tdec_free(&q->decoder); tcod_free(&q->encoder); + precoding_free(&q->precoding); + + bzero(q, sizeof(pdsch_t)); } @@ -607,7 +614,7 @@ int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, /** Decodes the PDSCH from the received symbols */ -int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], uint8_t *data, uint32_t subframe, +int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, uint8_t *data, uint32_t subframe, pdsch_harq_t *harq_process, uint32_t rv_idx) { @@ -657,10 +664,10 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], uint8_t *dat /* TODO: only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_zf(q->pdsch_symbols[0], q->ce[0], q->pdsch_d, - nof_symbols); + predecoding_single_mmse(&q->precoding, q->pdsch_symbols[0], q->ce[0], q->pdsch_d, + nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(q->pdsch_symbols[0], q->ce, x, q->cell.nof_ports, + predecoding_diversity_zf(&q->precoding, q->pdsch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols); layerdemap_diversity(x, q->pdsch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); @@ -878,7 +885,7 @@ int pdsch_encode(pdsch_t *q, uint8_t *data, cf_t *sf_symbols[MAX_PORTS], uint32_ /* TODO: only diversity supported */ if (q->cell.nof_ports > 1) { layermap_diversity(q->pdsch_d, x, q->cell.nof_ports, nof_symbols); - precoding_diversity(x, q->pdsch_symbols, q->cell.nof_ports, + precoding_diversity(&q->precoding, x, q->pdsch_symbols, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } else { memcpy(q->pdsch_symbols[0], q->pdsch_d, nof_symbols * sizeof(cf_t)); diff --git a/lte/phy/lib/phch/src/phich.c b/lte/phy/lib/phch/src/phich.c index 3d6fa182f..8bb45a695 100644 --- a/lte/phy/lib/phch/src/phich.c +++ b/lte/phy/lib/phch/src/phich.c @@ -75,6 +75,10 @@ int phich_init(phich_t *q, regs_t *regs, lte_cell_t cell) { q->cell = cell; q->regs = regs; + + if (precoding_init(&q->precoding, SF_LEN_RE(cell.nof_prb, cell.cp))) { + fprintf(stderr, "Error initializing precoding\n"); + } if (modem_table_lte(&q->mod, LTE_BPSK, false)) { goto clean; @@ -102,6 +106,10 @@ void phich_free(phich_t *q) { sequence_free(&q->seq_phich[ns]); } modem_table_free(&q->mod); + precoding_free(&q->precoding); + + bzero(q, sizeof(phich_t)); + } /* Decodes ACK @@ -139,7 +147,7 @@ void phich_ack_encode(uint8_t ack, uint8_t bits[PHICH_NBITS]) { * * Returns 1 if successfully decoded the CFI, 0 if not and -1 on error */ -int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], +int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, uint32_t ngroup, uint32_t nseq, uint32_t subframe, uint8_t *ack, uint32_t *distance) { /* Set pointers for layermapping & precoding */ @@ -200,10 +208,10 @@ int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], /* in control channels, only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_zf(q->phich_symbols[0], q->ce[0], q->phich_d0, - PHICH_MAX_NSYMB); + predecoding_single_mmse(&q->precoding, q->phich_symbols[0], q->ce[0], q->phich_d0, + PHICH_MAX_NSYMB, noise_estimate); } else { - predecoding_diversity_zf(q->phich_symbols[0], ce_precoding, x, + predecoding_diversity_zf(&q->precoding, q->phich_symbols[0], ce_precoding, x, q->cell.nof_ports, PHICH_MAX_NSYMB); layerdemap_diversity(x, q->phich_d0, q->cell.nof_ports, PHICH_MAX_NSYMB / q->cell.nof_ports); @@ -368,7 +376,7 @@ int phich_encode(phich_t *q, uint8_t ack, uint32_t ngroup, uint32_t nseq, uint32 /* layer mapping & precoding */ if (q->cell.nof_ports > 1) { layermap_diversity(q->phich_d0, x, q->cell.nof_ports, PHICH_MAX_NSYMB); - precoding_diversity(x, symbols_precoding, q->cell.nof_ports, + precoding_diversity(&q->precoding, x, symbols_precoding, q->cell.nof_ports, PHICH_MAX_NSYMB / q->cell.nof_ports); /**FIXME: According to 6.9.2, Precoding for 4 tx ports is different! */ } else { diff --git a/lte/phy/lib/phch/src/prach.c b/lte/phy/lib/phch/src/prach.c index 9f9cce611..06c1ba20f 100644 --- a/lte/phy/lib/phch/src/prach.c +++ b/lte/phy/lib/phch/src/prach.c @@ -503,6 +503,8 @@ int prach_free(prach_t *p){ dft_plan_free(p->zc_ifft); free(p->zc_ifft); + bzero(p, sizeof(prach_t)); + return 0; } diff --git a/lte/phy/lib/phch/src/regs.c b/lte/phy/lib/phch/src/regs.c index d34c1d898..d752e7d77 100644 --- a/lte/phy/lib/phch/src/regs.c +++ b/lte/phy/lib/phch/src/regs.c @@ -69,6 +69,9 @@ void regs_pdcch_free(regs_t *h) { free(h->pdcch[i].regs); } } + + bzero(h, sizeof(regs_t)); + } #define PDCCH_NCOLS 32 @@ -349,6 +352,9 @@ void regs_phich_free(regs_t *h) { } free(h->phich); } + + bzero(h, sizeof(regs_t)); + } uint32_t regs_phich_nregs(regs_t *h) { @@ -492,6 +498,9 @@ void regs_pcfich_free(regs_t *h) { if (h->pcfich.regs) { free(h->pcfich.regs); } + + bzero(h, sizeof(regs_t)); + } uint32_t regs_pcfich_nregs(regs_t *h) { diff --git a/lte/phy/lib/phch/test/pbch_file_test.c b/lte/phy/lib/phch/test/pbch_file_test.c index 0ab0bdc7b..3dd3c5954 100644 --- a/lte/phy/lib/phch/test/pbch_file_test.c +++ b/lte/phy/lib/phch/test/pbch_file_test.c @@ -219,7 +219,9 @@ int main(int argc, char **argv) { ce_slot1[i] = &ce[i][SLOT_LEN_RE(cell.nof_prb, cell.cp)]; } - n = pbch_decode(&pbch, &fft_buffer[SLOT_LEN_RE(cell.nof_prb, cell.cp)], ce_slot1, bch_payload, &nof_tx_ports, &sfn_offset); + n = pbch_decode(&pbch, &fft_buffer[SLOT_LEN_RE(cell.nof_prb, cell.cp)], + ce_slot1, chest_dl_get_noise_estimate(&chest), + bch_payload, &nof_tx_ports, &sfn_offset); base_free(); if (n < 0) { diff --git a/lte/phy/lib/phch/test/pbch_test.c b/lte/phy/lib/phch/test/pbch_test.c index ffeece5a0..4e40c56d4 100644 --- a/lte/phy/lib/phch/test/pbch_test.c +++ b/lte/phy/lib/phch/test/pbch_test.c @@ -125,7 +125,7 @@ int main(int argc, char **argv) { } pbch_decode_reset(&pbch); - if (1 != pbch_decode(&pbch, slot1_symbols[0], ce, bch_payload_rx, &nof_rx_ports, NULL)) { + if (1 != pbch_decode(&pbch, slot1_symbols[0], ce, 0, bch_payload_rx, &nof_rx_ports, NULL)) { printf("Error decoding\n"); exit(-1); } diff --git a/lte/phy/lib/phch/test/pcfich_file_test.c b/lte/phy/lib/phch/test/pcfich_file_test.c index 41b7b7d56..e91fa150b 100644 --- a/lte/phy/lib/phch/test/pcfich_file_test.c +++ b/lte/phy/lib/phch/test/pcfich_file_test.c @@ -226,7 +226,7 @@ int main(int argc, char **argv) { INFO("Decoding PCFICH\n", 0); - n = pcfich_decode(&pcfich, fft_buffer, ce, 0, &cfi, &distance); + n = pcfich_decode(&pcfich, fft_buffer, ce, chest_dl_get_noise_estimate(&chest), 0, &cfi, &distance); printf("cfi: %d, distance: %d\n", cfi, distance); base_free(); diff --git a/lte/phy/lib/phch/test/pcfich_test.c b/lte/phy/lib/phch/test/pcfich_test.c index a58907763..f4f907848 100644 --- a/lte/phy/lib/phch/test/pcfich_test.c +++ b/lte/phy/lib/phch/test/pcfich_test.c @@ -139,7 +139,7 @@ int main(int argc, char **argv) { slot_symbols[0][j] += slot_symbols[i][j]; } } - if (pcfich_decode(&pcfich, slot_symbols[0], ce, nsf, &cfi_rx, &distance)<0) { + if (pcfich_decode(&pcfich, slot_symbols[0], ce, 0, nsf, &cfi_rx, &distance)<0) { exit(-1); } INFO("cfi_tx: %d, cfi_rx: %d, ns: %d, distance: %d\n", diff --git a/lte/phy/lib/phch/test/pdcch_file_test.c b/lte/phy/lib/phch/test/pdcch_file_test.c index e0ef3c4c5..ebba943c4 100644 --- a/lte/phy/lib/phch/test/pdcch_file_test.c +++ b/lte/phy/lib/phch/test/pdcch_file_test.c @@ -262,7 +262,7 @@ int main(int argc, char **argv) { uint16_t crc_rem = 0; for (i=0;idiff_vec) { free(q->diff_vec); } + + bzero(q, sizeof(interp_linvec_t)); + } void interp_linear_vector(interp_linvec_t *q, cf_t *in0, cf_t *in1, cf_t *between, uint32_t M) @@ -179,6 +182,15 @@ void interp_linear_free(interp_lin_t *q) { if (q->diff_vec) { free(q->diff_vec); } + if (q->diff_vec2) { + free(q->diff_vec2); + } + if (q->ramp) { + free(q->ramp); + } + + bzero(q, sizeof(interp_lin_t)); + } void interp_linear_offset(interp_lin_t *q, cf_t *input, cf_t *output, diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index 48711fbaa..51a6386bd 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -102,6 +102,9 @@ void ue_celldetect_free(ue_celldetect_t * q) free(q->mode_ntimes); } sync_free(&q->sfind); + + bzero(q, sizeof(ue_celldetect_t)); + } diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 4d9ce8094..2e06a057f 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -137,6 +137,9 @@ void ue_dl_free(ue_dl_t *q) { free(q->ce[i]); } } + + bzero(q, sizeof(ue_dl_t)); + } } @@ -171,7 +174,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 /* First decode PCFICH and obtain CFI */ - if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, sf_idx, &cfi, &cfi_distance)<0) { + if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { fprintf(stderr, "Error decoding PCFICH\n"); return LIBLTE_ERROR; } @@ -194,7 +197,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 crc_rem = 0; for (i=0;ipdcch, q->sf_symbols, q->ce, locations[i], sf_idx, cfi)) { + if (pdcch_extract_llr(&q->pdcch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), locations[i], sf_idx, cfi)) { fprintf(stderr, "Error extracting LLRs\n"); return LIBLTE_ERROR; } @@ -239,7 +242,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } } if (q->harq_process[0].mcs.mod > 0) { - ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, data, sf_idx, + ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, &q->harq_process[0], rvidx); if (ret == LIBLTE_ERROR) { if (rnti == SIRNTI && rvidx == 1) { diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index c3c1f831d..764429acf 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -128,6 +128,9 @@ void ue_mib_free(ue_mib_t * q) chest_dl_free(&q->chest); pbch_free(&q->pbch); lte_fft_free(&q->fft); + + bzero(q, sizeof(ue_mib_t)); + } @@ -173,7 +176,9 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, } /* Decode PBCH */ - ret = pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->chest.cell.nof_prb, q->chest.cell.cp)], ce_slot1, bch_payload, nof_tx_ports, sfn_offset); + ret = pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->chest.cell.nof_prb, q->chest.cell.cp)], + ce_slot1, chest_dl_get_noise_estimate(&q->chest), + bch_payload, nof_tx_ports, sfn_offset); if (ret < 0) { fprintf(stderr, "Error decoding PBCH (%d)\n", ret); } else if (ret == 1) { diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 176ba6c26..4943c7dc9 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -124,6 +124,8 @@ void ue_sync_free(ue_sync_t *q) { cfo_free(&q->cfocorr); sync_free(&q->sfind); sync_free(&q->strack); + + bzero(q, sizeof(ue_sync_t)); } uint32_t ue_sync_peak_idx(ue_sync_t *q) { diff --git a/lte/phy/lib/utils/src/convolution.c b/lte/phy/lib/utils/src/convolution.c index acf7f5c4d..2dcac6e5f 100644 --- a/lte/phy/lib/utils/src/convolution.c +++ b/lte/phy/lib/utils/src/convolution.c @@ -72,6 +72,9 @@ void conv_fft_cc_free(conv_fft_cc_t *q) { dft_plan_free(&q->input_plan); dft_plan_free(&q->filter_plan); dft_plan_free(&q->output_plan); + + bzero(q, sizeof(conv_fft_cc_t)); + } uint32_t conv_fft_cc_run(conv_fft_cc_t *q, cf_t *input, cf_t *filter, cf_t *output) { diff --git a/lte/phy/lib/utils/src/vector.c b/lte/phy/lib/utils/src/vector.c index 67555ba46..c264ce5cb 100644 --- a/lte/phy/lib/utils/src/vector.c +++ b/lte/phy/lib/utils/src/vector.c @@ -121,6 +121,27 @@ void vec_sum_bbb(uint8_t *x, uint8_t *y, uint8_t *z, uint32_t len) { } } +void vec_sc_add_fff(float *x, float h, float *z, uint32_t len) { + int i; + for (i=0;i Date: Sat, 15 Nov 2014 12:11:41 +0000 Subject: [PATCH 19/55] ZF/MMSE equalizer for single antenna and diversity working correctly --- lte/examples/cell_search_utils.c | 10 +- lte/phy/include/liblte/phy/mimo/precoding.h | 37 ++- lte/phy/include/liblte/phy/utils/vector.h | 1 + .../lib/ch_estimation/test/chest_test_dl.c | 4 +- .../ch_estimation/test/chest_test_dl_mex.c | 90 +++--- lte/phy/lib/mimo/src/precoding.c | 139 ++++++--- lte/phy/lib/mimo/test/precoding_test.c | 83 ++--- lte/phy/lib/phch/src/pbch.c | 6 +- lte/phy/lib/phch/src/pcfich.c | 6 +- lte/phy/lib/phch/src/pdcch.c | 4 +- lte/phy/lib/phch/src/pdsch.c | 6 +- lte/phy/lib/phch/src/phich.c | 6 +- lte/phy/lib/utils/src/vector.c | 20 +- matlab/tests/diversity_test_rate.m | 285 ++++++++++++++++++ matlab/tests/equalizer_test.m | 61 ++-- 15 files changed, 562 insertions(+), 196 deletions(-) create mode 100644 matlab/tests/diversity_test_rate.m diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index e9576276c..331b4a6ca 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -125,11 +125,7 @@ int find_cell(void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) fprintf(stderr, "Error initiating UE cell detect\n"); goto free_and_exit; } - - ue_celldetect_set_nof_frames_detected(&cd, 50); - - ue_celldetect_set_nof_frames_total(&cd, 500); - + INFO("Setting sampling frequency 960 KHz for PSS search\n", 0); cuhd_set_rx_srate(uhd, 960000.0); INFO("Starting receiver...\n", 0); @@ -222,6 +218,10 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) ue_celldetect_result_t found_cells[3]; bzero(found_cells, 3*sizeof(ue_celldetect_result_t)); + + ue_celldetect_set_nof_frames_detected(&cd, 50); + + ue_celldetect_set_nof_frames_total(&cd, 500); if (force_N_id_2 >= 0) { ret = find_cell(uhd, &found_cells[force_N_id_2], force_N_id_2); diff --git a/lte/phy/include/liblte/phy/mimo/precoding.h b/lte/phy/include/liblte/phy/mimo/precoding.h index adecc03b8..d0e5abf09 100644 --- a/lte/phy/include/liblte/phy/mimo/precoding.h +++ b/lte/phy/include/liblte/phy/mimo/precoding.h @@ -40,6 +40,9 @@ typedef _Complex float cf_t; typedef struct { cf_t *h_mod; + cf_t *tmp1; + cf_t *tmp2; + cf_t *tmp3; float *y_mod; float *z_real; float *z_imag; @@ -74,25 +77,20 @@ LIBLTE_API int precoding_type(precoding_t *q, /* Estimates the vector "x" based on the received signal "y" and the channel estimates "h" */ -LIBLTE_API int predecoding_single_zf(precoding_t *q, +LIBLTE_API int predecoding_single(precoding_t *q, + cf_t *y, + cf_t *h, + cf_t *x, + int nof_symbols, + float noise_estimate); + +LIBLTE_API int predecoding_diversity(precoding_t *q, cf_t *y, - cf_t *h, - cf_t *x, - int nof_symbols); - -LIBLTE_API int predecoding_single_mmse(precoding_t *q, - cf_t *y, - cf_t *h, - cf_t *x, - int nof_symbols, - float noise_estimate); - -LIBLTE_API int predecoding_diversity_zf(precoding_t *q, - cf_t *y, - cf_t *h[MAX_PORTS], - cf_t *x[MAX_LAYERS], - int nof_ports, - int nof_symbols); + cf_t *h[MAX_PORTS], + cf_t *x[MAX_LAYERS], + int nof_ports, + int nof_symbols, + float noise_estimate); LIBLTE_API int predecoding_type(precoding_t *q, cf_t *y, @@ -101,6 +99,7 @@ LIBLTE_API int predecoding_type(precoding_t *q, int nof_ports, int nof_layers, int nof_symbols, - lte_mimo_type_t type); + lte_mimo_type_t type, + float noise_estimate); #endif /* PRECODING_H_ */ diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index 79bdaa819..eaa8150b3 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -107,6 +107,7 @@ LIBLTE_API float vec_dot_prod_fff(float *x, float *y, uint32_t len); /* z=x/y vector division (element-wise) */ LIBLTE_API void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, float *z_real, float *z_imag, uint32_t len); +void vec_div_cfc(cf_t *x, float *y, cf_t *z, float *z_real, float *z_imag, uint32_t len); LIBLTE_API void vec_div_fff(float *x, float *y, float *z, uint32_t len); /* conjugate */ diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl.c b/lte/phy/lib/ch_estimation/test/chest_test_dl.c index bf5e216e9..8b60a23c0 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl.c @@ -173,7 +173,7 @@ int main(int argc, char **argv) { gettimeofday(&t[1], NULL); for (int j=0;j<100;j++) { - predecoding_single_zf(&cheq, input, ce, output, num_re); + predecoding_single(&cheq, input, ce, output, num_re, 0); } gettimeofday(&t[2], NULL); get_time_interval(t); @@ -188,7 +188,7 @@ int main(int argc, char **argv) { gettimeofday(&t[1], NULL); for (int j=0;j<100;j++) { - predecoding_single_mmse(&cheq, input, ce, output, num_re, chest_dl_get_noise_estimate(&est)); + predecoding_single(&cheq, input, ce, output, num_re, chest_dl_get_noise_estimate(&est)); } gettimeofday(&t[2], NULL); get_time_interval(t); diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c index 8c9e320a6..6d6a4768e 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c @@ -30,10 +30,10 @@ #define CELLID prhs[0] #define PORTS prhs[1] #define INPUT prhs[2] -#define NOF_INPUTS 3 -#define SFIDX prhs[3] #define FREQ_FILTER prhs[3] #define TIME_FILTER prhs[4] +#define NOF_INPUTS 5 +#define SFIDX prhs[5] void help() { @@ -56,7 +56,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) lte_cell_t cell; chest_dl_t chest; precoding_t cheq; - cf_t *input_signal = NULL, *output_signal = NULL; + cf_t *input_signal = NULL, *output_signal[MAX_LAYERS]; + cf_t *output_signal2 = NULL; cf_t *ce[MAX_PORTS]; double *outr0=NULL, *outi0=NULL; double *outr1=NULL, *outi1=NULL; @@ -107,33 +108,38 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) return; } sf_idx = (uint32_t) *((double*) mxGetPr(SFIDX)); + } else { + if (nrhs != NOF_INPUTS) { + help(); + return; + } } + + uint32_t filter_len = 0; float *filter; double *f; - if (nrhs > NOF_INPUTS && nsubframes == 10) { - if (nrhs >= NOF_INPUTS + 1) { - filter_len = mxGetNumberOfElements(FREQ_FILTER); - filter = malloc(sizeof(float) * filter_len); - f = (double*) mxGetPr(FREQ_FILTER); - for (i=0;i= NOF_INPUTS + 2) { - filter_len = mxGetNumberOfElements(TIME_FILTER); - filter = malloc(sizeof(float) * filter_len); - f = (double*) mxGetPr(TIME_FILTER); - for (i=0;i= 1) { - plhs[0] = mxCreateDoubleMatrix(1,nof_re * nsubframes, mxCOMPLEX); + plhs[0] = mxCreateDoubleMatrix(nof_re * nsubframes, cell.nof_ports, mxCOMPLEX); outr0 = mxGetPr(plhs[0]); outi0 = mxGetPi(plhs[0]); } @@ -160,7 +168,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) outi1 = mxGetPi(plhs[1]); } if (nlhs >= 3) { - plhs[2] = mxCreateDoubleMatrix(1,nof_re * nsubframes, mxCOMPLEX); + plhs[2] = mxCreateDoubleMatrix(nof_re * nsubframes, 1, mxCOMPLEX); outr2 = mxGetPr(plhs[2]); outi2 = mxGetPi(plhs[2]); } @@ -185,18 +193,24 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) mexErrMsgTxt("Error running channel estimator\n"); return; } - //predecoding_single_zf(&cheq, input_signal, ce[0], output_signal, nof_re); - predecoding_single_mmse(&cheq, input_signal, ce[0], output_signal, nof_re, chest_dl_get_noise_estimate(&chest)); + if (cell.nof_ports == 1) { + predecoding_single(&cheq, input_signal, ce[0], output_signal2, nof_re, chest_dl_get_noise_estimate(&chest)); + } else { + predecoding_diversity(&cheq, input_signal, ce, output_signal, cell.nof_ports, nof_re, chest_dl_get_noise_estimate(&chest)); + layerdemap_diversity(output_signal, output_signal2, cell.nof_ports, nof_re/cell.nof_ports); + } if (nlhs >= 1) { - for (i=0;i= 2) { for (int j=0;j= 3) { for (i=0;itmp1 = vec_malloc(sizeof(cf_t) * max_frame_len); + if (!q->tmp1) { + perror("malloc"); + goto clean_exit; + } + q->tmp2 = vec_malloc(sizeof(cf_t) * max_frame_len); + if (!q->tmp2) { + perror("malloc"); + goto clean_exit; + } + q->tmp3 = vec_malloc(sizeof(cf_t) * max_frame_len); + if (!q->tmp3) { + perror("malloc"); + goto clean_exit; + } q->y_mod = vec_malloc(sizeof(float) * max_frame_len); if (!q->y_mod) { perror("malloc"); @@ -77,6 +92,16 @@ clean_exit: } void precoding_free(precoding_t *q) { + + if (q->tmp1) { + free(q->tmp1); + } + if (q->tmp2) { + free(q->tmp2); + } + if (q->tmp3) { + free(q->tmp3); + } if (q->h_mod) { free(q->h_mod); } @@ -92,54 +117,83 @@ void precoding_free(precoding_t *q) { bzero(q, sizeof(precoding_t)); } - -/* ZF SISO equalizer: x=y/h */ -int predecoding_single_zf(precoding_t *q, cf_t *y, cf_t *h, cf_t *x, int nof_symbols) { +/* ZF/MMSE SISO equalizer x=y(h'h+no)^(-1)h' (ZF if n0=0.0)*/ +int predecoding_single(precoding_t *q, cf_t *y, cf_t *h, cf_t *x, int nof_symbols, float noise_estimate) { if (nof_symbols <= q->max_frame_len) { - vec_div_ccc(y, h, q->y_mod, x, q->z_real, q->z_imag, nof_symbols); - return nof_symbols; - } else { - return LIBLTE_ERROR; - } -} - -/* MMSE SISO equalizer x=y*h'/(h*h'+no) */ -int predecoding_single_mmse(precoding_t *q, cf_t *y, cf_t *h, cf_t *x, int nof_symbols, float noise_estimate) { - if (nof_symbols <= q->max_frame_len) { - // h*h' - vec_prod_conj_ccc(h, h, q->h_mod, nof_symbols); - // real(h*h') - vec_deinterleave_real_cf(q->h_mod, q->y_mod, nof_symbols); - // (h*h' + n0) - vec_sc_add_fff(q->y_mod, noise_estimate, q->y_mod, nof_symbols); + // h'h + vec_abs_square_cf(h, q->y_mod, nof_symbols); + if (noise_estimate > 0.0) { + // (h'h + n0) + vec_sc_add_fff(q->y_mod, noise_estimate, q->y_mod, nof_symbols); + } // y*h' vec_prod_conj_ccc(y, h, x, nof_symbols); - // decompose real/imag parts - vec_deinterleave_cf(x, q->z_real, q->z_imag, nof_symbols); - // real and imag division - vec_div_fff(q->z_real, q->y_mod, q->z_real, nof_symbols); - vec_div_fff(q->z_imag, q->y_mod, q->z_imag, nof_symbols); - // interleave again - vec_interleave_cf(q->z_real, q->z_imag, x, nof_symbols); + // divide by (h'h+no) + vec_div_cfc(x,q->y_mod,x,q->z_real,q->z_imag, nof_symbols); return nof_symbols; } else { return LIBLTE_ERROR; } } -/* ZF STBC equalizer */ -int predecoding_diversity_zf(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], - int nof_ports, int nof_symbols) { +/* ZF/MMSE STBC equalizer x=y(H'H+n0·I)^(-1)H' (ZF is n0=0.0) + */ +int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], int nof_ports, int nof_symbols, float noise_estimate) { int i; + if (nof_ports == 2) { + +#define new +#ifdef new + + // reuse buffers + cf_t *r0 = q->tmp3; + cf_t *r1 = &q->tmp3[nof_symbols/2]; + cf_t *h0 = q->h_mod; + cf_t *h1 = &q->h_mod[nof_symbols/2]; + + float *modhh = q->y_mod; + float *modh0 = q->z_real; + float *modh1 = q->z_imag; + + // prepare buffers + for (i=0;i 0.0) { + // (H'H + n0) + vec_sc_add_fff(modhh, noise_estimate, modhh, nof_symbols/2); + } + vec_sc_prod_fff(modhh, 1.0/sqrt(2), modhh, nof_symbols/2); + + // x[0] = r0·h0*/(|h0|+|h1|)+r1*·h1/(|h0|+|h1|) + vec_prod_conj_ccc(r0,h0,q->tmp1, nof_symbols/2); + vec_prod_conj_ccc(h1,r1,q->tmp2, nof_symbols/2); + vec_sum_ccc(q->tmp1, q->tmp2, x[0], nof_symbols/2); + vec_div_cfc(x[0], modhh, x[0], q->z_real, q->z_imag, nof_symbols/2); + + // x[1] = r1·h0*/(|h0|+|h1|)-r0*·h1/(|h0|+|h1|) + vec_prod_conj_ccc(r1,h0,q->tmp1, nof_symbols/2); + vec_prod_conj_ccc(h1,r0,q->tmp2, nof_symbols/2); + vec_sub_ccc(q->tmp1, q->tmp2, x[1], nof_symbols/2); + vec_div_cfc(x[1], modhh, x[1], q->z_real, q->z_imag, nof_symbols/2); + +#else cf_t h0, h1, h2, h3, r0, r1, r2, r3; float hh, hh02, hh13; - if (nof_ports == 2) { - /* TODO: Use VOLK here */ + for (i = 0; i < nof_symbols / 2; i++) { h0 = h[0][2 * i]; h1 = h[1][2 * i]; hh = crealf(h0) * crealf(h0) + cimagf(h0) * cimagf(h0) - + crealf(h1) * crealf(h1) + cimagf(h1) * cimagf(h1); + + crealf(h1) * crealf(h1) + cimagf(h1) * cimagf(h1) + noise_estimate; r0 = y[2 * i]; r1 = y[2 * i + 1]; if (hh == 0) { @@ -148,8 +202,11 @@ int predecoding_diversity_zf(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t * x[0][i] = (conjf(h0) * r0 + h1 * conjf(r1)) / hh * sqrt(2); x[1][i] = (-h1 * conj(r0) + conj(h0) * r1) / hh * sqrt(2); } +#endif return i; } else if (nof_ports == 4) { + cf_t h0, h1, h2, h3, r0, r1, r2, r3; + float hh02, hh13; int m_ap = (nof_symbols % 4) ? ((nof_symbols - 2) / 4) : nof_symbols / 4; for (i = 0; i < m_ap; i++) { @@ -181,7 +238,7 @@ int predecoding_diversity_zf(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t * /* 36.211 v10.3.0 Section 6.3.4 */ int predecoding_type(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], - int nof_ports, int nof_layers, int nof_symbols, lte_mimo_type_t type) { + int nof_ports, int nof_layers, int nof_symbols, lte_mimo_type_t type, float noise_estimate) { if (nof_ports > MAX_PORTS) { fprintf(stderr, "Maximum number of ports is %d (nof_ports=%d)\n", MAX_PORTS, @@ -197,7 +254,7 @@ int predecoding_type(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LA switch (type) { case SINGLE_ANTENNA: if (nof_ports == 1 && nof_layers == 1) { - return predecoding_single_zf(q, y, h[0], x[0], nof_symbols); + return predecoding_single(q, y, h[0], x[0], nof_symbols, noise_estimate); } else { fprintf(stderr, "Number of ports and layers must be 1 for transmission on single antenna ports\n"); @@ -206,7 +263,7 @@ int predecoding_type(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LA break; case TX_DIVERSITY: if (nof_ports == nof_layers) { - return predecoding_diversity_zf(q, y, h, x, nof_ports, nof_symbols); + return predecoding_diversity(q, y, h, x, nof_ports, nof_symbols, noise_estimate); } else { fprintf(stderr, "Error number of layers must equal number of ports in transmit diversity\n"); @@ -239,13 +296,15 @@ int precoding_diversity(precoding_t *q, cf_t *x[MAX_LAYERS], cf_t *y[MAX_PORTS], int nof_symbols) { int i; if (nof_ports == 2) { - /* FIXME: Use VOLK here */ for (i = 0; i < nof_symbols; i++) { - y[0][2 * i] = x[0][i] / sqrtf(2); - y[1][2 * i] = -conjf(x[1][i]) / sqrtf(2); - y[0][2 * i + 1] = x[1][i] / sqrtf(2); - y[1][2 * i + 1] = conjf(x[0][i]) / sqrtf(2); + y[0][2 * i] = x[0][i]; + y[1][2 * i] = -conjf(x[1][i]); + y[0][2 * i + 1] = x[1][i]; + y[1][2 * i + 1] = conjf(x[0][i]); } + // normalize + vec_sc_prod_cfc(y[0], 1.0/sqrtf(2), y[0], 2*nof_symbols); + vec_sc_prod_cfc(y[1], 1.0/sqrtf(2), y[1], 2*nof_symbols); return 2 * i; } else if (nof_ports == 4) { //int m_ap = (nof_symbols%4)?(nof_symbols*4-2):nof_symbols*4; diff --git a/lte/phy/lib/mimo/test/precoding_test.c b/lte/phy/lib/mimo/test/precoding_test.c index 7efb3e0b1..5528fb8fb 100644 --- a/lte/phy/lib/mimo/test/precoding_test.c +++ b/lte/phy/lib/mimo/test/precoding_test.c @@ -97,47 +97,46 @@ int main(int argc, char **argv) { } for (i = 0; i < nof_layers; i++) { - x[i] = malloc(sizeof(cf_t) * nof_symbols); + x[i] = vec_malloc(sizeof(cf_t) * nof_symbols); if (!x[i]) { - perror("malloc"); + perror("vec_malloc"); exit(-1); } - xr[i] = malloc(sizeof(cf_t) * nof_symbols); + xr[i] = calloc(1,sizeof(cf_t) * nof_symbols); if (!xr[i]) { - perror("malloc"); + perror("vec_malloc"); exit(-1); } } for (i = 0; i < nof_ports; i++) { - y[i] = malloc(sizeof(cf_t) * nof_symbols * nof_layers); + y[i] = vec_malloc(sizeof(cf_t) * nof_symbols * nof_layers); // TODO: The number of symbols per port is different in spatial multiplexing. if (!y[i]) { - perror("malloc"); + perror("vec_malloc"); exit(-1); } - h[i] = malloc(sizeof(cf_t) * nof_symbols * nof_layers); + h[i] = vec_malloc(sizeof(cf_t) * nof_symbols * nof_layers); if (!h[i]) { - perror("malloc"); + perror("vec_malloc"); exit(-1); } } /* only 1 receiver antenna supported now */ - r[0] = malloc(sizeof(cf_t) * nof_symbols * nof_layers); + r[0] = vec_malloc(sizeof(cf_t) * nof_symbols * nof_layers); if (!r[0]) { - perror("malloc"); + perror("vec_malloc"); exit(-1); } /* generate random data */ for (i = 0; i < nof_layers; i++) { for (j = 0; j < nof_symbols; j++) { - x[i][j] = 100 - * ((float) rand() / RAND_MAX + (float) I * rand() / RAND_MAX); + x[i][j] = (float) rand()/RAND_MAX+((float) rand()/RAND_MAX)*_Complex_I; } } - if (precoding_init(&precoding, nof_symbols)) { + if (precoding_init(&precoding, nof_symbols * nof_layers)) { fprintf(stderr, "Error initializing precoding\n"); exit(-1); } @@ -150,9 +149,12 @@ int main(int argc, char **argv) { /* generate channel */ for (i = 0; i < nof_ports; i++) { - for (j = 0; j < nof_symbols * nof_layers; j++) { - float hc = -1 + (float) i / nof_ports; - h[i][j] = (3 + hc) * cexpf(I * hc); + for (j = 0; j < nof_symbols; j++) { + h[i][nof_layers*j] = (float) rand()/RAND_MAX+((float) rand()/RAND_MAX)*_Complex_I; + // assume the channel is time-invariant in nlayer consecutive symbols + for (int k=0;k MSE_THRESHOLD) { + exit(-1); + } } for (i = 0; i < nof_layers; i++) { @@ -195,12 +211,7 @@ int main(int argc, char **argv) { free(r[0]); precoding_free(&precoding); - - if (mse > MSE_THRESHOLD) { - printf("MSE: %f\n", mse); - exit(-1); - } else { - printf("Ok\n"); - exit(0); - } + + printf("Ok\n"); + exit(0); } diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index bedbfb669..c32daf979 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -377,11 +377,11 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], float /* in conctrol channels, only diversity is supported */ if (nant == 1) { /* no need for layer demapping */ - predecoding_single_mmse(&q->precoding, q->pbch_symbols[0], q->ce[0], q->pbch_d, + predecoding_single(&q->precoding, q->pbch_symbols[0], q->ce[0], q->pbch_d, q->nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(&q->precoding, q->pbch_symbols[0], q->ce, x, nant, - q->nof_symbols); + predecoding_diversity(&q->precoding, q->pbch_symbols[0], q->ce, x, nant, + q->nof_symbols, noise_estimate); layerdemap_diversity(x, q->pbch_d, nant, q->nof_symbols / nant); } diff --git a/lte/phy/lib/phch/src/pcfich.c b/lte/phy/lib/phch/src/pcfich.c index 8db9fbd60..5dd68ea05 100644 --- a/lte/phy/lib/phch/src/pcfich.c +++ b/lte/phy/lib/phch/src/pcfich.c @@ -190,11 +190,11 @@ int pcfich_decode(pcfich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], float no /* in control channels, only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_mmse(&q->precoding, q->pcfich_symbols[0], q->ce[0], q->pcfich_d, + predecoding_single(&q->precoding, q->pcfich_symbols[0], q->ce[0], q->pcfich_d, q->nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(&q->precoding, q->pcfich_symbols[0], ce_precoding, x, - q->cell.nof_ports, q->nof_symbols); + predecoding_diversity(&q->precoding, q->pcfich_symbols[0], ce_precoding, x, + q->cell.nof_ports, q->nof_symbols, noise_estimate); layerdemap_diversity(x, q->pcfich_d, q->cell.nof_ports, q->nof_symbols / q->cell.nof_ports); } diff --git a/lte/phy/lib/phch/src/pdcch.c b/lte/phy/lib/phch/src/pdcch.c index d39a282d5..9a5351f7d 100644 --- a/lte/phy/lib/phch/src/pdcch.c +++ b/lte/phy/lib/phch/src/pdcch.c @@ -402,9 +402,9 @@ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float n /* in control channels, only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_mmse(&q->precoding, q->pdcch_symbols[0], q->ce[0], q->pdcch_d, nof_symbols, noise_estimate); + predecoding_single(&q->precoding, q->pdcch_symbols[0], q->ce[0], q->pdcch_d, nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(&q->precoding, q->pdcch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols); + predecoding_diversity(&q->precoding, q->pdcch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols, noise_estimate); layerdemap_diversity(x, q->pdcch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index 4d4b91d2f..a9d223cf0 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -664,11 +664,11 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ /* TODO: only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_mmse(&q->precoding, q->pdsch_symbols[0], q->ce[0], q->pdsch_d, + predecoding_single(&q->precoding, q->pdsch_symbols[0], q->ce[0], q->pdsch_d, nof_symbols, noise_estimate); } else { - predecoding_diversity_zf(&q->precoding, q->pdsch_symbols[0], q->ce, x, q->cell.nof_ports, - nof_symbols); + predecoding_diversity(&q->precoding, q->pdsch_symbols[0], q->ce, x, q->cell.nof_ports, + nof_symbols, noise_estimate); layerdemap_diversity(x, q->pdsch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } diff --git a/lte/phy/lib/phch/src/phich.c b/lte/phy/lib/phch/src/phich.c index 8bb45a695..d039a7de9 100644 --- a/lte/phy/lib/phch/src/phich.c +++ b/lte/phy/lib/phch/src/phich.c @@ -208,11 +208,11 @@ int phich_decode(phich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], float nois /* in control channels, only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ - predecoding_single_mmse(&q->precoding, q->phich_symbols[0], q->ce[0], q->phich_d0, + predecoding_single(&q->precoding, q->phich_symbols[0], q->ce[0], q->phich_d0, PHICH_MAX_NSYMB, noise_estimate); } else { - predecoding_diversity_zf(&q->precoding, q->phich_symbols[0], ce_precoding, x, - q->cell.nof_ports, PHICH_MAX_NSYMB); + predecoding_diversity(&q->precoding, q->phich_symbols[0], ce_precoding, x, + q->cell.nof_ports, PHICH_MAX_NSYMB, noise_estimate); layerdemap_diversity(x, q->phich_d0, q->cell.nof_ports, PHICH_MAX_NSYMB / q->cell.nof_ports); } diff --git a/lte/phy/lib/utils/src/vector.c b/lte/phy/lib/utils/src/vector.c index c264ce5cb..a807f10bf 100644 --- a/lte/phy/lib/utils/src/vector.c +++ b/lte/phy/lib/utils/src/vector.c @@ -377,10 +377,7 @@ void vec_div_ccc(cf_t *x, cf_t *y, float *y_mod, cf_t *z, float *z_real, float * #ifdef DIV_USE_VEC vec_prod_conj_ccc(x,y,z,len); vec_abs_square_cf(y,y_mod,len); - vec_deinterleave_cf(z, z_real, z_imag, len); - vec_div_fff(z_real, y_mod, z_real, len); - vec_div_fff(z_imag, y_mod, z_imag, len); - vec_interleave_cf(z_real, z_imag, z, len); + vec_div_cfc(z,y_mod,z,z_real,z_imag,len); #else int i; for (i=0;i ]: single codeword, +% transmit diversity 4Tx-2Rx with medium correlation, EPA5 (Extended +% Pedestrian A) channel. The example also introduces the use of Parallel +% Computing Toolbox(TM) to provide improvements in the simulation time. + +% Copyright 2009-2013 The MathWorks, Inc. + +%% Introduction +% In this example, Hybrid Automatic Repeat Request(HARQ) is used in line +% with conformance test requirements. A total of 8 HARQ processes are used +% with a maximum of 4 retransmissions permitted. This example uses the R.12 +% Reference Measurement Channel (RMC). +% +% This example also uses loop instead of the +% loop for SNR calculation. , as part of the Parallel Computing Toolbox, executes the SNR loop +% in parallel to reduce the total simulation time. + +%% Simulation Settings +% The default simulation length is set to 10 frames at a number of |SNR| +% values including 0.2dB (as per TS36.101 (Section 8.2.1.2.2-Test1)[ <#9 +% 1> ]). +NFrames = 50; % Number of frames +SNRdB = [4 5 6]; % SNR range + +% eNodeB Configuration +enb = struct; % eNodeB config structure +enb.TotSubframes = 1; % Total subframes RMC will generate +enb.RC = 'R.10'; % RMC number + +% Channel Configuration +channel = struct; % Channel config structure +channel.Seed = 2; % Random channel seed +channel.NRxAnts = 1; % 2 receive antennas +channel.DelayProfile ='EVA'; % Delay profile +channel.DopplerFreq = 5; % Doppler frequency +channel.MIMOCorrelation = 'Low'; % Multi-antenna correlation +channel.NTerms = 16; % Oscillators used in fading model +channel.ModelType = 'GMEDS'; % Rayleigh fading model type +channel.InitPhase = 'Random'; % Random initial phases +channel.NormalizePathGains = 'On'; % Normalize delay profile power +channel.NormalizeTxAnts = 'On'; % Normalize for transmit antennas + +% Channel Estimator Configuration +cec = struct; % Channel estimation config structure +cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging +cec.FreqWindow = 9; % Frequency window size +cec.TimeWindow = 9; % Time window size +cec.InterpType = 'Linear'; % 2D interpolation type +cec.InterpWindow = 'Centered'; % Interpolation window type +cec.InterpWinSize = 1; % Interpolation window size + +% PDSCH Configuration +enb.PDSCH.TxScheme = 'TxDiversity'; % Transmission scheme +enb.PDSCH.RNTI = 1; % 16-bit User Equipment (UE) mask +enb.PDSCH.Rho = 0; % PDSCH RE power adjustment factor +enb.PDSCH.CSI = 'Off'; % No CSI scaling of soft bits + +% Simulation Variables +totalBLKCRC = []; % Define total block CRC vector +bitThroughput = []; % Define total bit throughput vector + +%% System Processing +% Working on a subframe by subframe basis and using the LTE System +% Toolbox(TM) a populated resource grid is generated and OFDM modulated to +% create a transmit waveform. The generated waveform is transmitted through +% a propagation channel and AWGN is added. Channel estimation, equalization +% and the inverse of transmission chain are performed at receiver. The +% throughput performance of the PDSCH is determined using the block CRC +% result. + +% Generate the RMC configuration structure for RMC R.12 +rmc = lteRMCDL(enb); +rvSeq = rmc.PDSCH.RVSeq; + +% Transport block sizes for each subframe in a frame +trBlkSizes = rmc.PDSCH.TrBlkSizes; +codedTrBlkSizes = rmc.PDSCH.CodedTrBlkSizes; + +% Determine resource grid dimensions +dims = lteDLResourceGridSize(rmc); +p = dims(3); + +% Set up channel model sampling rate +ofdmInfo = lteOFDMInfo(rmc); +channel.SamplingRate = ofdmInfo.SamplingRate; + +% Generation HARQ table for 8-HARQ processes +harqTable = hHARQTable(); + +% Initializing state of all HARQ processes +for i=1:9 + harqProcess_init(i) = hTxDiversityNewHARQProcess ... + (trBlkSizes(i),codedTrBlkSizes(i),rvSeq); %#ok +end + +% Display the SNR points being simulated +for s=1:numel(SNRdB) + fprintf('\nSimulating at %gdB SNR for a total %d Frame(s)\n', ... + SNRdB(s),NFrames); +end + +% The temporary variables 'rmc_init' and 'channel_init' are used to create +% the temporary variables 'rmc' and 'channel' within the SNR loop to create +% independent simulation loops for the parfor loop +rmc_init = rmc; +channel_init = channel; + +% 'parfor' will default to the normal 'for' when executed without Parallel +% Computing Toolbox. +parfor index = 1:numel(SNRdB) + + % Set the random number generator seed depending to the loop variable + % to ensure independent random streams + rng(index,'combRecursive'); + + % Set up variables for the SNR loop + offsets = 0; % Initialize overall frame offset value for the SNR + offset = 0; % Initialize frame offset value for the radio frame + rmc = rmc_init; % Initialize RMC configuration + channel = channel_init; % Initialize channel configuration + blkCRC = []; % Define intermediate block CRC vector + bitTput = []; % Intermediate bit throughput vector + + % Initializing state of all HARQ processes + harqProcess = harqProcess_init; + + for subframeNo = 0:(NFrames*10-1) + + % Updating subframe number + rmc.NSubframe = subframeNo; + + % HARQ index table + harqIdx = harqTable(mod(subframeNo,length(harqTable))+1); %#ok + + % Update HARQ process + harqProcess(harqIdx) = hTxDiversityHARQScheduling( ... + harqProcess(harqIdx)); + + % Updating the RV value for correct waveform generation + rmc.PDSCH.RV = harqProcess(harqIdx).rvSeq ... + (harqProcess(harqIdx).rvIdx); + + rmc.PDSCH.RVSeq = harqProcess(harqIdx).rvSeq ... + (harqProcess(harqIdx).rvIdx); + + [txWaveform txGrid] = lteRMCDLTool(rmc, ... + {harqProcess(harqIdx).dlschTransportBlk}); + txWaveform = [txWaveform; zeros(25,p)]; + + % Initialize at time zero + channel.InitTime = subframeNo/1000; + + % Pass data through the fading channel model + rxWaveform = lteFadingChannel(channel,txWaveform); + + % Noise setup including compensation for downlink power allocation + SNR = 10^((SNRdB(index)-rmc.PDSCH.Rho)/20); % Linear SNR + + % Normalize noise power to take account of sampling rate, which is + % a function of the IFFT size used in OFDM modulation, and the + % number of antennas + N0 = 1/(sqrt(2.0*rmc.CellRefP*double(ofdmInfo.Nfft))*SNR); + + % Create additive white Gaussian noise + noise = N0*complex(randn(size(rxWaveform)), ... + randn(size(rxWaveform))); + + % Add AWGN to the received time domain waveform + rxWaveform = rxWaveform + noise; + + % Receiver + % Perform synchronization + % An offset within the range of delays expected from the channel + % modeling(a combination of implementation delay and channel delay + % spread) indicates success + if (mod(subframeNo,10)==0) + [offset] = lteDLFrameOffset(rmc,rxWaveform); + if (offset > 25) + offset = offsets(end); + end + offsets = [offsets offset]; + end + rxWaveform = rxWaveform(1+offset:end,:); + + % Perform OFDM demodulation on the received data to recreate the + % resource grid + rxSubframe = lteOFDMDemodulate(rmc,rxWaveform); + + % Equalization and channel estimation + [estChannelGrid,noiseEst] = lteDLChannelEstimate(rmc,cec, ... + rxSubframe); + + addpath('../../debug/lte/phy/lib/ch_estimation/test') + [est, ~, output] = liblte_chest(rmc.NCellID,rmc.CellRefP,rxSubframe,[0.25 0.5 0.25],[0.1 0.9],mod(rmc.NSubframe,10)); + + %estChannelGrid=reshape(est,size(estChannelGrid)); + + % Perform deprecoding, layer demapping, demodulation and + % descrambling on the received data using the estimate of + % the channel + rxEncodedBits = ltePDSCHDecode2(rmc,rmc.PDSCH,rxSubframe,estChannelGrid,noiseEst); + + % Decode DownLink Shared Channel (DL-SCH) + [decbits,harqProcess(harqIdx).crc,harqProcess(harqIdx).decState] = ... + lteDLSCHDecode(rmc,rmc.PDSCH,harqProcess(harqIdx).trBlkSize, ... + rxEncodedBits{1},harqProcess(harqIdx).decState); + + if(harqProcess(harqIdx).trBlkSize ~= 0) + blkCRC = [blkCRC harqProcess(harqIdx).crc]; + bitTput = [bitTput harqProcess(harqIdx).trBlkSize.*(1- ... + harqProcess(harqIdx).crc)]; + end + end + % Record the block CRC and bit throughput for the total number of + % frames simulated at a particular SNR + totalBLKCRC(index,:) = blkCRC; + bitThroughput(index,:) = bitTput; + +end +%% +% |totalBLKCRC| is a matrix where each row contains the results of decoding +% the block CRC for a defined value of SNR. |bitThroughput| is a matrix +% containing the total number of bits per subframe at the different SNR +% points that have been successfully received and decoded. + +%% Results + +% First graph shows the throughput as total bits per second against the +% range of SNRs +% figure; +% plot(SNRdB,mean(bitThroughput,2),'-*'); +% %axis([-5 3 200 400]) +% title(['Throughput for ', num2str(NFrames) ' frame(s)'] ); +% xlabel('SNRdB'); ylabel('Throughput (kbps)'); +% grid on; +% hold on; +% plot(SNRdB,mean([trBlkSizes(1:5) trBlkSizes(7:10)])*0.7*ones ... +% (1,numel(SNRdB)),'--rs'); +% legend('Simulation Result','70 Percent Throughput','Location','SouthEast'); +% +% % Second graph shows the total throughput as a percentage of CRC passes +% % against SNR range +% figure; +plot(SNRdB,100*(1-mean(totalBLKCRC,2)),'-*'); +%axis([-5 3 50 110]) +title(['Throughput for ', num2str(NFrames) ' frame(s)'] ); +xlabel('SNRdB'); ylabel('Throughput (%)'); +grid on; +hold on; +plot(SNRdB,70*ones(1,numel(SNRdB)),'--rs'); +legend('Simulation Result','70 Percent Throughput','Location','SouthEast'); + + +%% Further Exploration +% +% You can modify parts of this example to experiment with different number +% of |NFrames| and different values of SNR. SNR can be a vector of +% values or a single value. Following scenarios can be simulated. +%% +% * Allows control over the total number of frames to run the demo at an +% SNR of 0.2dB (as per TS 36.101). +% +% * Allows control over the total number of frames to run the demo, as well +% as defining a set of desired SNR values. |SNRIn| can be a single value +% or a vector containing a range of values. +% +% * For simulations of multiple SNR points over a large number of frames, +% the use of Parallel Computing Toolbox provides significant improvement in +% the simulation time. This can be easily verified by changing the |parfor| +% in the SNR loop to |for| and re-running the example. + +%% Appendix +% This example uses the following helper functions: +% +% * +% * +% * + +%% Selected Bibliography +% # 3GPP TS 36.101 + +displayEndOfDemoMessage(mfilename) diff --git a/matlab/tests/equalizer_test.m b/matlab/tests/equalizer_test.m index 7c16a86c5..573493d7b 100644 --- a/matlab/tests/equalizer_test.m +++ b/matlab/tests/equalizer_test.m @@ -4,7 +4,7 @@ clear -SNR_values_db=linspace(0,20,8); +SNR_values_db=[0 1 2];%15;%[5 10 15];%linspace(0,20,8); Nrealizations=1; preEVM = zeros(length(SNR_values_db),Nrealizations); @@ -22,10 +22,10 @@ enb.DuplexMode = 'FDD'; % FDD %% Channel Model Configuration rng(1); % Configure random number generators -cfg.Seed = 1; % Random channel seed +cfg.Seed = 2; % Random channel seed cfg.NRxAnts = 1; % 1 receive antenna cfg.DelayProfile = 'EVA'; % EVA delay spread -cfg.DopplerFreq = 120; % 120Hz Doppler frequency +cfg.DopplerFreq = 5; % 120Hz Doppler frequency cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation cfg.InitTime = 0; % Initialize at time zero cfg.NTerms = 16; % Oscillators used in fading model @@ -35,24 +35,13 @@ cfg.NormalizePathGains = 'On'; % Normalize delay profile power cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas %% Channel Estimator Configuration - -cec.FreqWindow = 9; % Frequency averaging window in - % Resource Elements (REs) -cec.TimeWindow = 9; % Time averaging window in REs -cec.InterpType = 'Cubic'; % Cubic interpolation -cec.PilotAverage = 'UserDefined'; % Pilot averaging method -cec.InterpWinSize = 3; % Interpolate up to 3 subframes - % simultaneously -cec.InterpWindow = 'Centred'; % Interpolation windowing method - -cec2.FreqWindow = 9; % Frequency averaging window in - % Resource Elements (REs) -cec2.TimeWindow = 9; % Time averaging window in REs -cec2.InterpType = 'Linear'; % Cubic interpolation -cec2.PilotAverage = 'UserDefined'; % Pilot averaging method -cec2.InterpWinSize = 3; % Interpolate up to 3 subframes - % simultaneously -cec2.InterpWindow = 'Causal'; % Interpolation windowing method +cec = struct; % Channel estimation config structure +cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging +cec.FreqWindow = 9; % Frequency window size +cec.TimeWindow = 9; % Time window size +cec.InterpType = 'Linear'; % 2D interpolation type +cec.InterpWindow = 'Centered'; % Interpolation window type +cec.InterpWinSize = 1; % Interpolation window size %% Subframe Resource Grid Size @@ -151,14 +140,16 @@ rxWaveform = rxWaveform(1+offset:end,:); rxGrid = lteOFDMDemodulate(enb,rxWaveform); addpath('../../debug/lte/phy/lib/ch_estimation/test') + %% Channel Estimation [estChannel, noiseEst] = lteDLChannelEstimate(enb,cec,rxGrid); -[estChannel_lin, noiseEst_lin] = lteDLChannelEstimate(enb,cec2,rxGrid); -[d, a, output] = liblte_chest(enb.NCellID,enb.CellRefP,rxGrid,[0.15 0.7 0.15],[0.1 0.9]); - +output=[]; +for i=0:9 + [d, a, out] = liblte_chest(enb.NCellID,enb.CellRefP,rxGrid(:,i*14+1:(i+1)*14),[0.15 0.7 0.15],[0.1 0.9],i); + output = [output out]; +end %% MMSE Equalization eqGrid_mmse = lteEqualizeMMSE(rxGrid, estChannel, noiseEst); -eqGrid_mmse_lin = lteEqualizeMMSE(rxGrid, estChannel_lin, noiseEst_lin); eqGrid_liblte = reshape(output,size(eqGrid_mmse)); @@ -169,25 +160,20 @@ eqGrid_liblte = reshape(output,size(eqGrid_mmse)); preEqualisedEVM = lteEVM(txGrid,rxGrid); fprintf('%d-%d: Pre-EQ: %0.3f%%\n', ... snr_idx,nreal,preEqualisedEVM.RMS*100); - + + %EVM of post-equalized receive signal -postEqualisedEVM_mmse = lteEVM(txGrid,eqGrid_mmse); +postEqualisedEVM_mmse = lteEVM(txGrid,reshape(eqGrid_mmse,size(txGrid))); fprintf('%d-%d: MMSE: %0.3f%%\n', ... snr_idx,nreal,postEqualisedEVM_mmse.RMS*100); - -postEqualisedEVM_mmse_lin = lteEVM(txGrid,eqGrid_mmse_lin); -fprintf('%d-%d: MMSE-LIN: %0.3f%%\n', ... - snr_idx,nreal,postEqualisedEVM_mmse_lin.RMS*100); -postEqualisedEVM_liblte = lteEVM(txGrid,eqGrid_liblte); +postEqualisedEVM_liblte = lteEVM(txGrid,reshape(eqGrid_liblte,size(txGrid))); fprintf('%d-%d: liblte: %0.3f%%\n', ... snr_idx,nreal,postEqualisedEVM_liblte.RMS*100); -preEVM(snr_idx,nreal) =preEqualisedEVM.RMS; -postEVM_mmse(snr_idx,nreal) = postEqualisedEVM_mmse.RMS; -postEVM_mmse_lin(snr_idx,nreal) = postEqualisedEVM_mmse_lin.RMS; -postEVM_liblte(snr_idx,nreal) = postEqualisedEVM_liblte.RMS; - +preEVM(snr_idx,nreal) = preEqualisedEVM.RMS; +postEVM_mmse(snr_idx,nreal) = mean([postEqualisedEVM_mmse.RMS]); +postEVM_liblte(snr_idx,nreal) = mean([postEqualisedEVM_liblte.RMS]); end end @@ -195,7 +181,6 @@ end % legend('real','seu','meu') plot(SNR_values_db, mean(preEVM,2), ... SNR_values_db, mean(postEVM_mmse,2), ... - SNR_values_db, mean(postEVM_mmse_lin,2), ... SNR_values_db, mean(postEVM_liblte,2)) legend('No Eq','MMSE-cubic','MMSE-lin','MMSE-liblte') grid on From 8531fb1a0c1b919cb5d13e288a5f351f5a921a22 Mon Sep 17 00:00:00 2001 From: ismagom Date: Sun, 16 Nov 2014 19:40:41 +0000 Subject: [PATCH 20/55] Fixed a bug with type 2 distributed resource allocation --- lte/examples/cell_measurement.c | 28 +-- lte/examples/cell_search.c | 36 +--- lte/examples/cell_search_utils.c | 29 ++- lte/examples/cell_search_utils.h | 25 ++- lte/examples/iodev.c | 5 +- lte/phy/include/liblte/phy/phch/dci.h | 4 +- lte/phy/include/liblte/phy/phch/pdcch.h | 3 +- lte/phy/include/liblte/phy/phch/ra.h | 7 +- lte/phy/include/liblte/phy/ue/ue_dl.h | 1 + lte/phy/lib/ch_estimation/src/refsignal_dl.c | 8 +- lte/phy/lib/fec/src/rm_conv.c | 2 +- lte/phy/lib/mimo/src/precoding.c | 2 +- lte/phy/lib/mimo/test/precoding_test.c | 50 +++-- lte/phy/lib/phch/src/dci.c | 19 +- lte/phy/lib/phch/src/pdcch.c | 192 ++++++++++--------- lte/phy/lib/phch/src/pdsch.c | 158 +++++++-------- lte/phy/lib/phch/src/prb.c | 19 ++ lte/phy/lib/phch/src/ra.c | 52 ++--- lte/phy/lib/phch/src/regs.c | 19 +- lte/phy/lib/phch/test/pdcch_file_test.c | 147 ++++++-------- lte/phy/lib/phch/test/pdcch_test.c | 5 +- lte/phy/lib/phch/test/pdsch_file_test.c | 116 +++++------ lte/phy/lib/ue/src/ue_dl.c | 50 +++-- lte/phy/lib/ue/src/ue_mib.c | 11 +- lte/phy/lib/ue/src/ue_sync.c | 2 +- matlab/tests/test_pdsch_resalloc.m | 76 ++++++++ 26 files changed, 587 insertions(+), 479 deletions(-) create mode 100644 matlab/tests/test_pdsch_resalloc.m diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 82c3dd41d..9449e8c95 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -41,6 +41,12 @@ #include "liblte/cuhd/cuhd.h" #include "cell_search_utils.h" +cell_detect_cfg_t cell_detect_config = { + 500, // nof_frames_total + 50, // nof_frames_detected + CS_FIND_THRESHOLD // threshold +}; + /********************************************************************** * Program arguments processing ***********************************************************************/ @@ -157,7 +163,7 @@ int main(int argc, char **argv) { cuhd_rx_wait_lo_locked(uhd); printf("Tunning receiver to %.3f MHz\n", (double ) prog_args.uhd_freq/1000000); - if (cell_search(uhd, prog_args.force_N_id_2, &cell)) { + if (detect_and_decode_cell(&cell_detect_config, uhd, prog_args.force_N_id_2, &cell)) { fprintf(stderr, "Cell not found\n"); exit(-1); } @@ -191,7 +197,7 @@ int main(int argc, char **argv) { } int sf_re = SF_LEN_RE(cell.nof_prb, cell.cp); - printf("%d RE allocated\n", sf_re); + cf_t *sf_symbols = vec_malloc(sf_re * sizeof(cf_t)); /* Main loop */ @@ -201,14 +207,17 @@ int main(int argc, char **argv) { if (ret < 0) { fprintf(stderr, "Error calling ue_sync_work()\n"); } + - /* iodev_receive returns 1 if successfully read 1 aligned subframe */ + /* ue_sync_get_buffer returns 1 if successfully read 1 aligned subframe */ if (ret == 1) { switch (state) { case DECODE_MIB: if (ue_sync_get_sfidx(&ue_sync) == 0) { pbch_decode_reset(&ue_mib.pbch); - n = ue_mib_decode_aligned_frame(&ue_mib, &sf_buffer[ue_sync_sf_len(&ue_sync)/2], bch_payload_unpacked, NULL, &sfn_offset); + n = ue_mib_decode_aligned_frame(&ue_mib, + sf_buffer, bch_payload_unpacked, + NULL, &sfn_offset); if (n < 0) { fprintf(stderr, "Error decoding UE MIB\n"); exit(-1); @@ -223,20 +232,17 @@ int main(int argc, char **argv) { break; case DECODE_SIB: sfn=0; - /* If we are looking for SI Blocks, search only in appropiate places */ - if ((sfn % 2) == 0 && (ue_sync_get_sfidx(&ue_sync) == 5)) { + /* We are looking for SI Blocks, search only in appropiate places */ + if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, SIRNTI); if (n < 0) { fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); exit(-1); } else if (n == 0) { - // Printf -// if (!(sf_cnt%20)) { - printf("CFO: %+6.4f KHz, SFO: %+6.4f Khz, ExecTime: %5.1f us, NOI: %.2f, Nof Trials: %4d, Nof Error: %4d\r", + printf("CFO: %+6.4f KHz, SFO: %+6.4f Khz, ExecTime: %5.1f us, NOI: %.2f, PDCCH-Det: %.3f\r", ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, mean_exec_time, pdsch_average_noi(&ue_dl.pdsch), - (int) nof_trials, (int) ue_dl.pkt_errors); - // } + (float) ue_dl.nof_pdcch_detected/nof_trials); nof_trials++; } else { printf("\n\nDecoded SIB1 Message Len %d: ",n); diff --git a/lte/examples/cell_search.c b/lte/examples/cell_search.c index 0242457fe..45f570aba 100644 --- a/lte/examples/cell_search.c +++ b/lte/examples/cell_search.c @@ -54,9 +54,8 @@ int band = -1; int earfcn_start=-1, earfcn_end = -1; -int nof_frames_total = 50; -int nof_frames_detected = 10; -float threshold = CS_FIND_THRESHOLD; + +cell_detect_cfg_t config = {50, 10, CS_FIND_THRESHOLD}; float uhd_gain = 60.0; @@ -70,7 +69,7 @@ void usage(char *prog) { printf("\t-e earfcn_end [Default All]\n"); printf("\t-n nof_frames_total [Default 100]\n"); printf("\t-d nof_frames_detected [Default 10]\n"); - printf("\t-t threshold [Default %.2f]\n",threshold); + printf("\t-t threshold [Default %.2f]\n",config.threshold); printf("\t-v [set verbose to debug, default none]\n"); } @@ -91,13 +90,13 @@ void parse_args(int argc, char **argv) { earfcn_end = atoi(argv[optind]); break; case 'n': - nof_frames_total = atoi(argv[optind]); + config.nof_frames_total = atoi(argv[optind]); break; case 'd': - nof_frames_detected = atoi(argv[optind]); + config.nof_frames_detected = atoi(argv[optind]); break; case 't': - threshold = atof(argv[optind]); + config.threshold = atof(argv[optind]); break; case 'g': uhd_gain = atof(argv[optind]); @@ -119,7 +118,6 @@ void parse_args(int argc, char **argv) { int main(int argc, char **argv) { int n; void *uhd; - ue_celldetect_t s; ue_celldetect_result_t found_cells[3]; int nof_freqs; lte_earfcn_t channels[MAX_EARFCN]; @@ -142,21 +140,6 @@ int main(int argc, char **argv) { exit(-1); } - if (ue_celldetect_init(&s)) { - fprintf(stderr, "Error initiating UE sync module\n"); - exit(-1); - } - if (threshold > 0) { - ue_celldetect_set_threshold(&s, threshold); - } - - if (nof_frames_total > 0) { - ue_celldetect_set_nof_frames_total(&s, nof_frames_total); - } - if (nof_frames_detected > 0) { - ue_celldetect_set_nof_frames_detected(&s, nof_frames_detected); - } - for (freq=0;freq threshold/2) { - if (decode_pbch(uhd, &found_cells[i], nof_frames_total, bch_payload, &nof_tx_ports, NULL)) { + if (found_cells[i].peak > config.threshold/2) { + if (decode_pbch(uhd, &found_cells[i], config.nof_frames_total, bch_payload, &nof_tx_ports, NULL)) { fprintf(stderr, "Error decoding PBCH\n"); exit(-1); } else { @@ -194,7 +177,6 @@ int main(int argc, char **argv) { printf("\nBye\n"); - ue_celldetect_free(&s); cuhd_close(uhd); exit(0); } diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 331b4a6ca..fbb6a986a 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -37,6 +37,8 @@ #include "liblte/phy/phy.h" #include "liblte/rrc/rrc.h" +#include "cell_search_utils.h" + #ifndef DISABLE_UHD #include "liblte/cuhd/cuhd.h" @@ -82,6 +84,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram } if (n == MIB_FRAME_UNALIGNED) { printf("Realigning frame\n"); + // Receive some randon number of samples to try to resynchronise the frame. if (cuhd_recv(uhd, buffer, 1500, 1)<0) { fprintf(stderr, "Error receiving from USRP\n"); goto free_and_exit; @@ -110,7 +113,7 @@ free_and_exit: return ret; } -int find_cell(void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) +int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) { int ret = LIBLTE_ERROR; ue_celldetect_t cd; @@ -125,6 +128,16 @@ int find_cell(void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) fprintf(stderr, "Error initiating UE cell detect\n"); goto free_and_exit; } + + if (config->nof_frames_detected) { + ue_celldetect_set_nof_frames_detected(&cd, config->nof_frames_detected); + } + if (config->nof_frames_total) { + ue_celldetect_set_nof_frames_total(&cd, config->nof_frames_total); + } + if (config->threshold) { + ue_celldetect_set_threshold(&cd, config->threshold); + } INFO("Setting sampling frequency 960 KHz for PSS search\n", 0); cuhd_set_rx_srate(uhd, 960000.0); @@ -192,7 +205,7 @@ free_and_exit: } -int find_all_cells(void *uhd, ue_celldetect_result_t found_cell[3]) +int detect_all_cells(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t found_cell[3]) { uint32_t N_id_2; @@ -200,7 +213,7 @@ int find_all_cells(void *uhd, ue_celldetect_result_t found_cell[3]) int nof_detected_cells = 0; for (N_id_2=0;N_id_2<3;N_id_2++) { - ret = find_cell(uhd, &found_cell[N_id_2], N_id_2); + ret = detect_cell(config, uhd, &found_cell[N_id_2], N_id_2); if (ret == 1) { nof_detected_cells++; } else if (ret == LIBLTE_ERROR) { @@ -210,7 +223,7 @@ int find_all_cells(void *uhd, ue_celldetect_result_t found_cell[3]) return nof_detected_cells; } -int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) +int detect_and_decode_cell(cell_detect_cfg_t *config, void *uhd, int force_N_id_2, lte_cell_t *cell) { int ret; uint32_t nof_tx_ports; @@ -219,14 +232,10 @@ int cell_search(void *uhd, int force_N_id_2, lte_cell_t *cell) ue_celldetect_result_t found_cells[3]; bzero(found_cells, 3*sizeof(ue_celldetect_result_t)); - ue_celldetect_set_nof_frames_detected(&cd, 50); - - ue_celldetect_set_nof_frames_total(&cd, 500); - if (force_N_id_2 >= 0) { - ret = find_cell(uhd, &found_cells[force_N_id_2], force_N_id_2); + ret = detect_cell(config, uhd, &found_cells[force_N_id_2], force_N_id_2); } else { - ret = find_all_cells(uhd, found_cells); + ret = detect_all_cells(config, uhd, found_cells); } if (ret < 0) { fprintf(stderr, "Error searching cell\n"); diff --git a/lte/examples/cell_search_utils.h b/lte/examples/cell_search_utils.h index a73a52ec5..03a14f36f 100644 --- a/lte/examples/cell_search_utils.h +++ b/lte/examples/cell_search_utils.h @@ -28,6 +28,12 @@ #include "liblte/phy/phy.h" +typedef struct LIBLTE_API { + uint32_t nof_frames_total; + uint32_t nof_frames_detected; + float threshold; +}cell_detect_cfg_t; + int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_frames_total, @@ -35,13 +41,16 @@ int decode_pbch(void *uhd, uint32_t *nof_tx_ports, uint32_t *sfn_offset); -int find_all_cells(void *uhd, - ue_celldetect_result_t found_cell[3]); +int detect_all_cells(cell_detect_cfg_t *config, + void *uhd, + ue_celldetect_result_t found_cell[3]); -int find_cell(void *uhd, - ue_celldetect_result_t *found_cell, - uint32_t N_id_2); +int detect_cell(cell_detect_cfg_t *config, + void *uhd, + ue_celldetect_result_t *found_cell, + uint32_t N_id_2); -int cell_search(void *uhd, - int force_N_id_2, - lte_cell_t *cell); \ No newline at end of file +int detect_and_decode_cell(cell_detect_cfg_t *config, + void *uhd, + int force_N_id_2, + lte_cell_t *cell); \ No newline at end of file diff --git a/lte/examples/iodev.c b/lte/examples/iodev.c index 1f1e63b17..c64031783 100644 --- a/lte/examples/iodev.c +++ b/lte/examples/iodev.c @@ -98,8 +98,11 @@ int iodev_init(iodev_t *q, iodev_cfg_t *config, lte_cell_t *cell) { cuhd_set_rx_freq(q->uhd, (double) config->uhd_freq); cuhd_rx_wait_lo_locked(q->uhd); DEBUG("Set uhd_freq to %.3f MHz\n", (double ) config->uhd_freq); + + cell_detect_cfg_t detect_config; + bzero(&detect_config, sizeof(cell_detect_cfg_t)); - if (cell_search(q->uhd, config->force_N_id_2, cell)) { + if (detect_and_decode_cell(&detect_config, q->uhd, config->force_N_id_2, cell)) { fprintf(stderr, "Cell not found\n"); return LIBLTE_ERROR; } diff --git a/lte/phy/include/liblte/phy/phch/dci.h b/lte/phy/include/liblte/phy/phch/dci.h index 66e166571..b21fa7d3a 100644 --- a/lte/phy/include/liblte/phy/phch/dci.h +++ b/lte/phy/include/liblte/phy/phch/dci.h @@ -46,7 +46,7 @@ typedef _Complex float cf_t; #define DCI_MAX_BITS 57 typedef enum { - Format0, Format1, Format1A, Format1C + Format0, Format1, Format1A, Format1C, FormatError } dci_format_t; // Each type is for a different interface to packing/unpacking functions @@ -89,6 +89,8 @@ LIBLTE_API int dci_msg_to_ra_ul(dci_msg_t *msg, uint32_t cfi, ra_pusch_t *ra_ul); */ +LIBLTE_API dci_format_t dci_format_from_string(char *str); + LIBLTE_API char* dci_format_string(dci_format_t format); LIBLTE_API int dci_location_set(dci_location_t *c, diff --git a/lte/phy/include/liblte/phy/phch/pdcch.h b/lte/phy/include/liblte/phy/phch/pdcch.h index d9681784b..d061f7d0e 100644 --- a/lte/phy/include/liblte/phy/phch/pdcch.h +++ b/lte/phy/include/liblte/phy/phch/pdcch.h @@ -53,7 +53,6 @@ typedef enum LIBLTE_API { /* PDCCH object */ typedef struct LIBLTE_API { lte_cell_t cell; - uint32_t e_bits; uint32_t nof_regs; uint32_t nof_cce; uint32_t max_bits; @@ -99,13 +98,13 @@ LIBLTE_API int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, - dci_location_t location, uint32_t nsubframe, uint32_t cfi); /* Decoding functions: Try to decode a DCI message after calling pdcch_extract_llr */ LIBLTE_API int pdcch_decode_msg(pdcch_t *q, dci_msg_t *msg, + dci_location_t *location, dci_format_t format, uint16_t *crc_rem); diff --git a/lte/phy/include/liblte/phy/phch/ra.h b/lte/phy/include/liblte/phy/phch/ra.h index 0d519c031..98e8eca09 100644 --- a/lte/phy/include/liblte/phy/phch/ra.h +++ b/lte/phy/include/liblte/phy/phch/ra.h @@ -39,7 +39,7 @@ typedef struct LIBLTE_API { lte_mod_t mod; - uint32_t tbs; + int tbs; } ra_mcs_t; typedef enum LIBLTE_API { @@ -72,7 +72,7 @@ typedef struct LIBLTE_API { } ra_type2_t; typedef struct LIBLTE_API { - uint32_t prb_idx[MAX_PRB]; + bool prb_idx[MAX_PRB]; uint32_t nof_prb; } ra_prb_slot_t; @@ -123,7 +123,8 @@ typedef struct LIBLTE_API { } ra_pusch_t; LIBLTE_API void ra_prb_fprint(FILE *f, - ra_prb_slot_t *prb); + ra_prb_slot_t *prb, + uint32_t nof_prb); LIBLTE_API int ra_prb_get_dl(ra_prb_t *prb, ra_pdsch_t *ra, diff --git a/lte/phy/include/liblte/phy/ue/ue_dl.h b/lte/phy/include/liblte/phy/ue/ue_dl.h index 00f5b7f3b..56e7a4dc7 100644 --- a/lte/phy/include/liblte/phy/ue/ue_dl.h +++ b/lte/phy/include/liblte/phy/ue/ue_dl.h @@ -73,6 +73,7 @@ typedef struct LIBLTE_API { uint64_t pkt_errors; uint64_t pkts_total; + uint64_t nof_pdcch_detected; uint16_t user_rnti; }ue_dl_t; diff --git a/lte/phy/lib/ch_estimation/src/refsignal_dl.c b/lte/phy/lib/ch_estimation/src/refsignal_dl.c index 5d3d6d690..168637c3b 100644 --- a/lte/phy/lib/ch_estimation/src/refsignal_dl.c +++ b/lte/phy/lib/ch_estimation/src/refsignal_dl.c @@ -210,10 +210,7 @@ int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, cf_t *pilots, cf_t *s fidx = ((refsignal_cs_v(port_id, l) + (cell.id % 6)) % 6); for (i = 0; i < 2*cell.nof_prb; i++) { sf_symbols[SAMPLE_IDX(cell.nof_prb, nsymbol, fidx)] = pilots[REFSIGNAL_PILOT_IDX(i,l,cell)]; - fidx += 6; // 1 reference every 6 RE - DEBUG("Putting %d to %d (fidx: %d, lp:%d)\n", - REFSIGNAL_PILOT_IDX(i,l,cell), SAMPLE_IDX(cell.nof_prb, nsymbol, fidx), - fidx, nsymbol); + fidx += 6; // 1 reference every 6 RE } } return LIBLTE_SUCCESS; @@ -242,9 +239,6 @@ int refsignal_cs_get_sf(lte_cell_t cell, uint32_t port_id, cf_t *sf_symbols, cf_ fidx = ((refsignal_cs_v(port_id, l) + (cell.id % 6)) % 6); for (i = 0; i < 2*cell.nof_prb; i++) { pilots[REFSIGNAL_PILOT_IDX(i,l,cell)] = sf_symbols[SAMPLE_IDX(cell.nof_prb, nsymbol, fidx)]; - DEBUG("Getting %d from %d (fidx: %d, lp:%d)\n",REFSIGNAL_PILOT_IDX(i,l,cell), - SAMPLE_IDX(cell.nof_prb, nsymbol, fidx), - fidx, nsymbol); fidx += RE_X_RB/2; // 2 references per PRB } } diff --git a/lte/phy/lib/fec/src/rm_conv.c b/lte/phy/lib/fec/src/rm_conv.c index e01e81876..876c5d824 100644 --- a/lte/phy/lib/fec/src/rm_conv.c +++ b/lte/phy/lib/fec/src/rm_conv.c @@ -98,7 +98,7 @@ int rm_conv_rx(float *input, uint32_t in_len, float *output, uint32_t out_len) { int d_i, d_j; float tmp[3 * NCOLS * NROWS_MAX]; - + nrows = (uint32_t) (out_len / 3 - 1) / NCOLS + 1; if (nrows > NROWS_MAX) { fprintf(stderr, "Output too large. Max output length is %d\n", diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index 2dd39e34d..f3dd41af5 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -171,7 +171,7 @@ int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[M // (H'H + n0) vec_sc_add_fff(modhh, noise_estimate, modhh, nof_symbols/2); } - vec_sc_prod_fff(modhh, 1.0/sqrt(2), modhh, nof_symbols/2); + //vec_sc_prod_fff(modhh, 1.0/sqrt(2), modhh, nof_symbols/2); // x[0] = r0·h0*/(|h0|+|h1|)+r1*·h1/(|h0|+|h1|) vec_prod_conj_ccc(r0,h0,q->tmp1, nof_symbols/2); diff --git a/lte/phy/lib/mimo/test/precoding_test.c b/lte/phy/lib/mimo/test/precoding_test.c index 5528fb8fb..6374175ad 100644 --- a/lte/phy/lib/mimo/test/precoding_test.c +++ b/lte/phy/lib/mimo/test/precoding_test.c @@ -132,7 +132,7 @@ int main(int argc, char **argv) { /* generate random data */ for (i = 0; i < nof_layers; i++) { for (j = 0; j < nof_symbols; j++) { - x[i][j] = (float) rand()/RAND_MAX+((float) rand()/RAND_MAX)*_Complex_I; + x[i][j] = (2*(rand()%2)-1+(2*(rand()%2)-1)*_Complex_I)/sqrt(2); } } @@ -153,7 +153,7 @@ int main(int argc, char **argv) { h[i][nof_layers*j] = (float) rand()/RAND_MAX+((float) rand()/RAND_MAX)*_Complex_I; // assume the channel is time-invariant in nlayer consecutive symbols for (int k=0;k MSE_THRESHOLD) { - exit(-1); - } + gettimeofday(&t[1], NULL); + if (predecoding_type(&precoding, r[0], h, xr, nof_ports, nof_layers, + nof_symbols * nof_layers, type, 0) < 0) { + fprintf(stderr, "Error layer mapper encoder\n"); + exit(-1); } + gettimeofday(&t[2], NULL); + get_time_interval(t); + printf("Execution Time: %d us\n", t[0].tv_usec); + + /* check errors */ + mse = 0; + for (i = 0; i < nof_layers; i++) { + for (j = 0; j < nof_symbols; j++) { + printf("%f - %f\n", crealf(xr[i][j]), crealf(x[i][j])); + mse += cabsf(xr[i][j] - x[i][j]); + } + } + printf("MSE: %f\n", mse/ nof_layers / nof_symbols ); + if (mse / nof_layers / nof_symbols > MSE_THRESHOLD) { + exit(-1); + } for (i = 0; i < nof_layers; i++) { free(x[i]); diff --git a/lte/phy/lib/phch/src/dci.c b/lte/phy/lib/phch/src/dci.c index 62542fdb0..86cac5e2e 100644 --- a/lte/phy/lib/phch/src/dci.c +++ b/lte/phy/lib/phch/src/dci.c @@ -61,7 +61,8 @@ int dci_msg_to_ra_dl(dci_msg_t *msg, uint16_t msg_rnti, uint16_t c_rnti, return ret; } - if (VERBOSE_ISDEBUG()) { + if (VERBOSE_ISINFO()) { + INFO("",0); dci_msg_type_fprint(stdout, type); } if (type.type == PDSCH_SCHED) { @@ -72,7 +73,7 @@ int dci_msg_to_ra_dl(dci_msg_t *msg, uint16_t msg_rnti, uint16_t c_rnti, return ret; } - if (VERBOSE_ISDEBUG()) { + if (VERBOSE_ISINFO()) { ra_pdsch_fprint(stdout, ra_dl, cell.nof_prb); } @@ -733,6 +734,20 @@ int dci_msg_unpack_pusch(dci_msg_t *msg, ra_pusch_t *data, uint32_t nof_prb) { return dci_format0_unpack(msg, data, nof_prb); } +dci_format_t dci_format_from_string(char *str) { + if (!strcmp(str, "Format0")) { + return Format0; + } else if (!strcmp(str, "Format1")) { + return Format1; + } else if (!strcmp(str, "Format1A")) { + return Format1A; + } else if (!strcmp(str, "Format1C")) { + return Format1C; + } else { + return FormatError; + } +} + char* dci_format_string(dci_format_t format) { switch (format) { case Format0: diff --git a/lte/phy/lib/phch/src/pdcch.c b/lte/phy/lib/phch/src/pdcch.c index 9a5351f7d..2b0c0af24 100644 --- a/lte/phy/lib/phch/src/pdcch.c +++ b/lte/phy/lib/phch/src/pdcch.c @@ -49,14 +49,6 @@ #define MIN(a,b) ((a>b)?b:a) - -#define NOF_COMMON_FORMATS 2 -const dci_format_t common_formats[NOF_COMMON_FORMATS] = { Format1A, Format1C }; - -#define NOF_UE_FORMATS 2 -const dci_format_t ue_formats[NOF_UE_FORMATS] = { Format0, Format1 }; // 1A has the same payload as 0 - - static void set_cfi(pdcch_t *q, uint32_t cfi) { if (cfi > 0 && cfi < 4) { q->nof_regs = (regs_pdcch_nregs(q->regs, cfi) / 9) * 9; @@ -83,10 +75,11 @@ int pdcch_init(pdcch_t *q, regs_t *regs, lte_cell_t cell) { fprintf(stderr, "Error initializing precoding\n"); } - /* Allocate memory for the largest aggregation level L=3 */ - q->max_bits = PDCCH_FORMAT_NOF_BITS(3); + /* Allocate memory for the maximum number of PDCCH bits (CFI=3) */ + q->max_bits = (regs_pdcch_nregs(q->regs, 3) / 9) * 72; - INFO("Init PDCCH: %d bits, %d symbols, %d ports\n", q->max_bits, q->max_bits/2, q->cell.nof_ports); + INFO("Init PDCCH: Max bits: %d, %d ports.\n", + q->max_bits, q->cell.nof_ports); if (modem_table_lte(&q->mod, LTE_QPSK, true)) { goto clean; @@ -112,31 +105,33 @@ int pdcch_init(pdcch_t *q, regs_t *regs, lte_cell_t cell) { goto clean; } - q->pdcch_e = malloc(sizeof(uint8_t) * q->max_bits); + q->pdcch_e = vec_malloc(sizeof(uint8_t) * q->max_bits); if (!q->pdcch_e) { goto clean; } - q->pdcch_llr = malloc(sizeof(float) * q->max_bits); + q->pdcch_llr = vec_malloc(sizeof(float) * q->max_bits); if (!q->pdcch_llr) { goto clean; } + + bzero(q->pdcch_llr, sizeof(float) * q->max_bits); - q->pdcch_d = malloc(sizeof(cf_t) * q->max_bits / 2); + q->pdcch_d = vec_malloc(sizeof(cf_t) * q->max_bits / 2); if (!q->pdcch_d) { goto clean; } for (i = 0; i < MAX_PORTS; i++) { - q->ce[i] = malloc(sizeof(cf_t) * q->max_bits / 2); + q->ce[i] = vec_malloc(sizeof(cf_t) * q->max_bits / 2); if (!q->ce[i]) { goto clean; } - q->pdcch_x[i] = malloc(sizeof(cf_t) * q->max_bits / 2); + q->pdcch_x[i] = vec_malloc(sizeof(cf_t) * q->max_bits / 2); if (!q->pdcch_x[i]) { goto clean; } - q->pdcch_symbols[i] = malloc(sizeof(cf_t) * q->max_bits / 2); + q->pdcch_symbols[i] = vec_malloc(sizeof(cf_t) * q->max_bits / 2); if (!q->pdcch_symbols[i]) { goto clean; } @@ -204,7 +199,7 @@ uint32_t pdcch_ue_locations(pdcch_t *q, dci_location_t *c, uint32_t max_candidat // Compute Yk for this subframe Yk = rnti; - for (m = 0; m < nsubframe; m++) { + for (m = 0; m < nsubframe+1; m++) { Yk = (39827 * Yk) % 65537; } @@ -213,7 +208,7 @@ uint32_t pdcch_ue_locations(pdcch_t *q, dci_location_t *c, uint32_t max_candidat for (l = 3; l >= 0; l--) { L = (1 << l); // For all possible ncce offset - for (i = 0; i < MIN(q->nof_cce / L, 16 / S[l]); i++) { + for (i = 0; i < MIN(q->nof_cce / L, S[l]/PDCCH_FORMAT_NOF_CCE(l)); i++) { ncce = L * ((Yk + i) % (q->nof_cce / L)); if (k < max_candidates && ncce + PDCCH_FORMAT_NOF_CCE(l) <= q->nof_cce) @@ -221,7 +216,7 @@ uint32_t pdcch_ue_locations(pdcch_t *q, dci_location_t *c, uint32_t max_candidat c[k].L = l; c[k].ncce = ncce; - DEBUG("UE-specific SS Candidate %d: nCCE: %d, L: %d\n", + INFO("UE-specific SS Candidate %d: nCCE: %d, L: %d\n", k, c[k].ncce, c[k].L); k++; @@ -256,7 +251,7 @@ uint32_t pdcch_common_locations(pdcch_t *q, dci_location_t *c, uint32_t max_cand if (k < max_candidates) { c[k].L = l; c[k].ncce = (L) * (i % (q->nof_cce / (L))); - DEBUG("Common SS Candidate %d: nCCE: %d, L: %d\n", + INFO("Common SS Candidate %d: nCCE: %d, L: %d\n", k, c[k].ncce, c[k].L); k++; } @@ -291,6 +286,11 @@ static int dci_decode(pdcch_t *q, float *e, uint8_t *data, uint32_t E, uint32_t nof_bits <= DCI_MAX_BITS) { + DEBUG("Rm input: ", 0); + if (VERBOSE_ISDEBUG()) { + vec_fprint_f(stdout, e, E); + } + /* unrate matching */ rm_conv_rx(e, E, tmp, 3 * (nof_bits + 16)); @@ -309,7 +309,7 @@ static int dci_decode(pdcch_t *q, float *e, uint8_t *data, uint32_t E, uint32_t x = &data[nof_bits]; p_bits = (uint16_t) bit_unpack(&x, 16); crc_res = ((uint16_t) crc_checksum(&q->crc, data, nof_bits) & 0xffff); - DEBUG("p_bits: 0x%x, crc_checksum: 0x%x, crc_rem: 0x%x\n", p_bits, crc_res, + INFO("p_bits: 0x%x, crc_checksum: 0x%x, crc_rem: 0x%x\n", p_bits, crc_res, p_bits ^ crc_res); if (crc) { @@ -327,18 +327,30 @@ static int dci_decode(pdcch_t *q, float *e, uint8_t *data, uint32_t E, uint32_t * The decoded message is stored in msg and the CRC remainder in crc_rem pointer * */ -int pdcch_decode_msg(pdcch_t *q, dci_msg_t *msg, dci_format_t format, uint16_t *crc_rem) +int pdcch_decode_msg(pdcch_t *q, dci_msg_t *msg, dci_location_t *location, dci_format_t format, uint16_t *crc_rem) { int ret = LIBLTE_ERROR_INVALID_INPUTS; - if (q != NULL && - msg != NULL && + if (q != NULL && + msg != NULL && + dci_location_isvalid(location) && crc_rem != NULL) { - uint32_t nof_bits = dci_format_sizeof(format, q->cell.nof_prb); + if (location->ncce * 72 + PDCCH_FORMAT_NOF_BITS(location->L) > + q->nof_cce*72) { + fprintf(stderr, "Invalid location: nCCE: %d, L: %d, NofCCE: %d\n", + location->ncce, location->L, q->nof_cce); + } else { + uint32_t nof_bits = dci_format_sizeof(format, q->cell.nof_prb); + uint32_t e_bits = PDCCH_FORMAT_NOF_BITS(location->L); - ret = dci_decode(q, q->pdcch_llr, msg->data, q->e_bits, nof_bits, crc_rem); - if (ret == LIBLTE_SUCCESS) { - msg->nof_bits = nof_bits; + INFO("Decoding DCI offset %d, e_bits: %d, msg_len %d (nCCE: %d, L: %d)\n", + location->ncce * 72, e_bits, nof_bits, location->ncce, location->L); + + ret = dci_decode(q, &q->pdcch_llr[location->ncce * 72], + msg->data, e_bits, nof_bits, crc_rem); + if (ret == LIBLTE_SUCCESS) { + msg->nof_bits = nof_bits; + } } } return ret; @@ -350,7 +362,7 @@ int pdcch_decode_msg(pdcch_t *q, dci_msg_t *msg, dci_format_t format, uint16_t * * new messages from other locations can be decoded */ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, - dci_location_t location, uint32_t nsubframe, uint32_t cfi) { + uint32_t nsubframe, uint32_t cfi) { int ret = LIBLTE_ERROR_INVALID_INPUTS; @@ -361,74 +373,66 @@ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float n if (q != NULL && nsubframe < 10 && cfi > 0 && - cfi < 4 && - dci_location_isvalid(&location)) + cfi < 4) { set_cfi(q, cfi); - q->e_bits = PDCCH_FORMAT_NOF_BITS(location.L); - nof_symbols = q->e_bits/2; + uint32_t e_bits = 72*q->nof_cce; + nof_symbols = e_bits/2; ret = LIBLTE_ERROR; - - if (location.ncce + PDCCH_FORMAT_NOF_CCE(location.L) <= q->nof_cce) { - - INFO("Extracting LLRs: E: %d, nCCE: %d, L: %d, SF: %d, CFI: %d\n", - q->e_bits, location.ncce, location.L, nsubframe, cfi); + + INFO("Extracting LLRs: E: %d, SF: %d, CFI: %d\n", + e_bits, nsubframe, cfi); - /* number of layers equals number of ports */ - for (i = 0; i < q->cell.nof_ports; i++) { - x[i] = q->pdcch_x[i]; - } - memset(&x[q->cell.nof_ports], 0, sizeof(cf_t*) * (MAX_LAYERS - q->cell.nof_ports)); + /* number of layers equals number of ports */ + for (i = 0; i < q->cell.nof_ports; i++) { + x[i] = q->pdcch_x[i]; + } + memset(&x[q->cell.nof_ports], 0, sizeof(cf_t*) * (MAX_LAYERS - q->cell.nof_ports)); + + /* extract symbols */ + int n = regs_pdcch_get(q->regs, sf_symbols, q->pdcch_symbols[0]); + if (nof_symbols != n) { + fprintf(stderr, "Expected %d PDCCH symbols but got %d symbols\n", nof_symbols, n); + return ret; + } - /* extract symbols */ - int n = regs_pdcch_get_offset(q->regs, sf_symbols, q->pdcch_symbols[0], - location.ncce * 9, PDCCH_FORMAT_NOF_REGS(location.L)); + /* extract channel estimates */ + for (i = 0; i < q->cell.nof_ports; i++) { + n = regs_pdcch_get(q->regs, ce[i], q->ce[i]); if (nof_symbols != n) { fprintf(stderr, "Expected %d PDCCH symbols but got %d symbols\n", nof_symbols, n); return ret; } - - /* extract channel estimates */ - for (i = 0; i < q->cell.nof_ports; i++) { - n = regs_pdcch_get_offset(q->regs, ce[i], q->ce[i], - location.ncce * 9, PDCCH_FORMAT_NOF_REGS(location.L)); - if (nof_symbols != n) { - fprintf(stderr, "Expected %d PDCCH symbols but got %d symbols\n", nof_symbols, n); - return ret; - } - } - - /* in control channels, only diversity is supported */ - if (q->cell.nof_ports == 1) { - /* no need for layer demapping */ - predecoding_single(&q->precoding, q->pdcch_symbols[0], q->ce[0], q->pdcch_d, nof_symbols, noise_estimate); - } else { - predecoding_diversity(&q->precoding, q->pdcch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols, noise_estimate); - layerdemap_diversity(x, q->pdcch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); - } - - DEBUG("pdcch d symbols: ", 0); - if (VERBOSE_ISDEBUG()) { - vec_fprint_c(stdout, q->pdcch_d, nof_symbols); - } - - /* demodulate symbols */ - demod_soft_sigma_set(&q->demod, 1.0); - demod_soft_demodulate(&q->demod, q->pdcch_d, q->pdcch_llr, nof_symbols); - - DEBUG("llr: ", 0); - if (VERBOSE_ISDEBUG()) { - vec_fprint_f(stdout, q->pdcch_llr, q->e_bits); - } - - /* descramble */ - scrambling_f_offset(&q->seq_pdcch[nsubframe], q->pdcch_llr, 72 * location.ncce, q->e_bits); - - ret = LIBLTE_SUCCESS; - } else { - fprintf(stderr, "Illegal DCI message nCCE: %d, L: %d, nof_cce: %d\n", location.ncce, location.L, q->nof_cce); } + + /* in control channels, only diversity is supported */ + if (q->cell.nof_ports == 1) { + /* no need for layer demapping */ + predecoding_single(&q->precoding, q->pdcch_symbols[0], q->ce[0], q->pdcch_d, nof_symbols, noise_estimate); + } else { + predecoding_diversity(&q->precoding, q->pdcch_symbols[0], q->ce, x, q->cell.nof_ports, nof_symbols, noise_estimate); + layerdemap_diversity(x, q->pdcch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); + } + + DEBUG("pdcch d symbols: ", 0); + if (VERBOSE_ISDEBUG()) { + vec_fprint_c(stdout, q->pdcch_d, nof_symbols); + } + + /* demodulate symbols */ + demod_soft_sigma_set(&q->demod, 1); + demod_soft_demodulate(&q->demod, q->pdcch_d, q->pdcch_llr, nof_symbols); + + /* descramble */ + scrambling_f_offset(&q->seq_pdcch[nsubframe], q->pdcch_llr, 0, e_bits); + + DEBUG("llr: ", 0); + if (VERBOSE_ISDEBUG()) { + vec_fprint_f(stdout, q->pdcch_llr, e_bits); + } + + ret = LIBLTE_SUCCESS; } return ret; } @@ -514,17 +518,17 @@ int pdcch_encode(pdcch_t *q, dci_msg_t *msg, dci_location_t location, uint16_t r set_cfi(q, cfi); - q->e_bits = PDCCH_FORMAT_NOF_BITS(location.L); - nof_symbols = q->e_bits/2; + uint32_t e_bits = PDCCH_FORMAT_NOF_BITS(location.L); + nof_symbols = e_bits/2; ret = LIBLTE_ERROR; if (location.ncce + PDCCH_FORMAT_NOF_CCE(location.L) <= q->nof_cce && msg->nof_bits < DCI_MAX_BITS) { INFO("Encoding DCI: Nbits: %d, E: %d, nCCE: %d, L: %d, RNTI: 0x%x\n", - msg->nof_bits, q->e_bits, location.ncce, location.L, rnti); + msg->nof_bits, e_bits, location.ncce, location.L, rnti); - dci_encode(q, msg->data, q->pdcch_e, msg->nof_bits, q->e_bits, rnti); + dci_encode(q, msg->data, q->pdcch_e, msg->nof_bits, e_bits, rnti); /* number of layers equals number of ports */ for (i = 0; i < q->cell.nof_ports; i++) { @@ -532,14 +536,14 @@ int pdcch_encode(pdcch_t *q, dci_msg_t *msg, dci_location_t location, uint16_t r } memset(&x[q->cell.nof_ports], 0, sizeof(cf_t*) * (MAX_LAYERS - q->cell.nof_ports)); - scrambling_b_offset(&q->seq_pdcch[nsubframe], q->pdcch_e, 72 * location.ncce, q->e_bits); + scrambling_b_offset(&q->seq_pdcch[nsubframe], q->pdcch_e, 72 * location.ncce, e_bits); DEBUG("Scrambling output: ", 0); if (VERBOSE_ISDEBUG()) { - vec_fprint_b(stdout, q->pdcch_e, q->e_bits); + vec_fprint_b(stdout, q->pdcch_e, e_bits); } - mod_modulate(&q->mod, q->pdcch_e, q->pdcch_d, q->e_bits); + mod_modulate(&q->mod, q->pdcch_e, q->pdcch_d, e_bits); /* layer mapping & precoding */ if (q->cell.nof_ports > 1) { diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index a9d223cf0..8d460db0b 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -49,8 +49,11 @@ const lte_mod_t modulations[4] = { LTE_BPSK, LTE_QPSK, LTE_QAM16, LTE_QAM64 }; - +//#define DEBUG_IDX +#ifdef DEBUG_IDX +cf_t *offset_original=NULL; +#endif int pdsch_cp(pdsch_t *q, cf_t *input, cf_t *output, ra_prb_t *prb_alloc, uint32_t nsubframe, bool put) { @@ -62,6 +65,10 @@ int pdsch_cp(pdsch_t *q, cf_t *input, cf_t *output, ra_prb_t *prb_alloc, INFO("%s %d RE from %d PRB\n", put ? "Putting" : "Getting", prb_alloc->re_sf[nsubframe], prb_alloc->slot[0].nof_prb); +#ifdef DEBUG_IDX + offset_original = input; +#endif + if (q->cell.nof_ports == 1) { nof_refs = 2; } else { @@ -70,72 +77,79 @@ int pdsch_cp(pdsch_t *q, cf_t *input, cf_t *output, ra_prb_t *prb_alloc, for (s = 0; s < 2; s++) { for (l = 0; l < CP_NSYMB(q->cell.cp); l++) { - for (n = 0; n < prb_alloc->slot[s].nof_prb; n++) { - if (s == 0) { - lstart = prb_alloc->lstart; - } else { - lstart = 0; - } - lend = CP_NSYMB(q->cell.cp); - is_pbch = is_sss = false; + for (n = 0; n < q->cell.nof_prb; n++) { - // Skip PSS/SSS signals - if (s == 0 && (nsubframe == 0 || nsubframe == 5)) { - if (prb_alloc->slot[s].prb_idx[n] >= q->cell.nof_prb / 2 - 3 - && prb_alloc->slot[s].prb_idx[n] <= q->cell.nof_prb / 2 + 3) { - lend = CP_NSYMB(q->cell.cp) - 2; - is_sss = true; - } - } - // Skip PBCH - if (s == 1 && nsubframe == 0) { - if (prb_alloc->slot[s].prb_idx[n] >= q->cell.nof_prb / 2 - 3 - && prb_alloc->slot[s].prb_idx[n] <= q->cell.nof_prb / 2 + 3) { - lstart = 4; - is_pbch = true; - } - } - lp = l + s * CP_NSYMB(q->cell.cp); - if (put) { - out_ptr = &output[(lp * q->cell.nof_prb + prb_alloc->slot[s].prb_idx[n]) - * RE_X_RB]; - } else { - in_ptr = &input[(lp * q->cell.nof_prb + prb_alloc->slot[s].prb_idx[n]) - * RE_X_RB]; - } - if (l >= lstart && l < lend) { - if (SYMBOL_HAS_REF(l, q->cell.cp, q->cell.nof_ports)) { - if (nof_refs == 2 && l != 0) { - offset = q->cell.id % 3 + 3; - } else { - offset = q->cell.id % 3; - } - prb_cp_ref(&in_ptr, &out_ptr, offset, nof_refs, nof_refs, put); + // If this PRB is assigned + if (prb_alloc->slot[s].prb_idx[n]) { + if (s == 0) { + lstart = prb_alloc->lstart; } else { - prb_cp(&in_ptr, &out_ptr, 1); + lstart = 0; } - } - if ((q->cell.nof_prb % 2) && ((is_pbch && l < lstart) || (is_sss && l >= lend))) { - if (prb_alloc->slot[s].prb_idx[n] == q->cell.nof_prb / 2 - 3) { - if (SYMBOL_HAS_REF(l, q->cell.cp, q->cell.nof_ports)) { - prb_cp_ref(&in_ptr, &out_ptr, offset, nof_refs, nof_refs/2, put); - } else { - prb_cp_half(&in_ptr, &out_ptr, 1); + lend = CP_NSYMB(q->cell.cp); + is_pbch = is_sss = false; + + // Skip PSS/SSS signals + if (s == 0 && (nsubframe == 0 || nsubframe == 5)) { + if (n >= q->cell.nof_prb / 2 - 3 + && n < q->cell.nof_prb / 2 + 3) { + lend = CP_NSYMB(q->cell.cp) - 2; + is_sss = true; } - } else if (prb_alloc->slot[s].prb_idx[n] == q->cell.nof_prb / 2 + 3) { - if (put) { - out_ptr += 6; - } else { - in_ptr += 6; + } + // Skip PBCH + if (s == 1 && nsubframe == 0) { + if (n >= q->cell.nof_prb / 2 - 3 + && n < q->cell.nof_prb / 2 + 3) { + lstart = 4; + is_pbch = true; } + } + lp = l + s * CP_NSYMB(q->cell.cp); + if (put) { + out_ptr = &output[(lp * q->cell.nof_prb + n) + * RE_X_RB]; + } else { + in_ptr = &input[(lp * q->cell.nof_prb + n) + * RE_X_RB]; + } + // This is a symbol in a normal PRB with or without references + if (l >= lstart && l < lend) { if (SYMBOL_HAS_REF(l, q->cell.cp, q->cell.nof_ports)) { - prb_cp_ref(&in_ptr, &out_ptr, offset, nof_refs, nof_refs/2, put); + if (nof_refs == 2 && l == 0) { + offset = q->cell.id % 3 + 3; + } else { + offset = q->cell.id % 3; + } + prb_cp_ref(&in_ptr, &out_ptr, offset, nof_refs, nof_refs, put); } else { - prb_cp_half(&in_ptr, &out_ptr, 1); + prb_cp(&in_ptr, &out_ptr, 1); + } + } + // This is a symbol in a PRB with PBCH or Synch signals (SS). + // If the number or total PRB is odd, half of the the PBCH or SS will fall into the symbol + if ((q->cell.nof_prb % 2) && ((is_pbch && l < lstart) || (is_sss && l >= lend))) { + if (n == q->cell.nof_prb / 2 - 3) { + if (SYMBOL_HAS_REF(l, q->cell.cp, q->cell.nof_ports)) { + prb_cp_ref(&in_ptr, &out_ptr, offset, nof_refs, nof_refs/2, put); + } else { + prb_cp_half(&in_ptr, &out_ptr, 1); + } + } else if (n == q->cell.nof_prb / 2 + 3) { + if (put) { + out_ptr += 6; + } else { + in_ptr += 6; + } + if (SYMBOL_HAS_REF(l, q->cell.cp, q->cell.nof_ports)) { + prb_cp_ref(&in_ptr, &out_ptr, offset, nof_refs, nof_refs/2, put); + } else { + prb_cp_half(&in_ptr, &out_ptr, 1); + } } } } - } + } } } @@ -532,6 +546,8 @@ int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, fprintf(stderr, "Error in rate matching\n"); return LIBLTE_ERROR; } + + vec_save_file("tdec_in.dat",q->cb_out, sizeof(float) * (3 * cb_len + 12)); /* Turbo Decoding with CRC-based early stopping */ q->nof_iterations = 0; @@ -542,7 +558,6 @@ int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, tdec_reset(&q->decoder, cb_len); do { - tdec_iteration(&q->decoder, (float*) q->cb_out, cb_len); q->nof_iterations++; @@ -651,7 +666,7 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ fprintf(stderr, "Error expecting %d symbols but got %d\n", nof_symbols, n); return LIBLTE_ERROR; } - + /* extract channel estimates */ for (i = 0; i < q->cell.nof_ports; i++) { n = pdsch_get(q, ce[i], q->ce[i], &harq_process->prb_alloc, subframe); @@ -660,7 +675,7 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ return LIBLTE_ERROR; } } - + /* TODO: only diversity is supported */ if (q->cell.nof_ports == 1) { /* no need for layer demapping */ @@ -672,31 +687,22 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ layerdemap_diversity(x, q->pdsch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } - + + vec_save_file("pdsch_after.dat",q->pdsch_d,sizeof(cf_t)*nof_symbols); + /* demodulate symbols * The MAX-log-MAP algorithm used in turbo decoding is unsensitive to SNR estimation, * thus we don't need tot set it in the LLRs normalization */ - demod_soft_sigma_set(&q->demod, 2.0 / q->mod[harq_process->mcs.mod - 1].nbits_x_symbol); + demod_soft_sigma_set(&q->demod, 1);//q->mod[harq_process->mcs.mod - 1].nbits_x_symbol); demod_soft_table_set(&q->demod, &q->mod[harq_process->mcs.mod - 1]); demod_soft_demodulate(&q->demod, q->pdsch_d, q->pdsch_e, nof_symbols); - - /* - for (int j=0;jpdsch_d[j])) || isnan(cimagf(q->pdsch_d[j]))) { - printf("\nerror in d[%d]=%f+%f symbols:%f+%f ce0:%f+%f ce1:%f+%f\n",j, - crealf(q->pdsch_d[j]), cimagf(q->pdsch_d[j]), - crealf(q->pdsch_symbols[0][j]), cimagf(q->pdsch_symbols[0][j]), - crealf(q->ce[0][j]), cimagf(q->ce[0][j]), - crealf(q->ce[1][j]), cimagf(q->ce[1][j]) - ); - } - } - */ /* descramble */ scrambling_f_offset(&q->seq_pdsch[subframe], q->pdsch_e, 0, nof_bits_e); - + + vec_save_file("pdsch_llr.dat",q->pdsch_e,sizeof(float)*nof_bits_e); + return pdsch_decode_tb(q, data, nof_bits, nof_bits_e, harq_process, rv_idx); } else { return LIBLTE_ERROR_INVALID_INPUTS; diff --git a/lte/phy/lib/phch/src/prb.c b/lte/phy/lib/phch/src/prb.c index 3bd597af6..40bac2014 100644 --- a/lte/phy/lib/phch/src/prb.c +++ b/lte/phy/lib/phch/src/prb.c @@ -32,12 +32,27 @@ #include "prb.h" #include "liblte/phy/common/phy_common.h" +//#define DEBUG_IDX + +#ifdef DEBUG_IDX +extern cf_t *offset_original; +#endif + +void print_indexes(cf_t *offset, int len) { +#ifdef DEBUG_IDX + for (int i=0;i= nof_prb / 2 - 3 && prb_idx <= nof_prb / 2 + 3)) { + && (prb_idx >= nof_prb / 2 - 3 && prb_idx < nof_prb / 2 + 3)) { if (subframe == 0) { if (slot == 0) { re = (CP_NSYMB(cp) - nof_ctrl_symbols - 2) * RE_X_RB; @@ -119,26 +119,30 @@ void ra_prb_get_re_dl(ra_prb_t *prb_dist, uint32_t nof_prb, uint32_t nof_ports, for (i = 0; i < NSUBFRAMES_X_FRAME; i++) { prb_dist->re_sf[i] = 0; for (s = 0; s < 2; s++) { - for (j = 0; j < prb_dist->slot[s].nof_prb; j++) { - prb_dist->re_sf[i] += ra_re_x_prb(i, s, prb_dist->slot[s].prb_idx[j], - nof_prb, nof_ports, nof_ctrl_symbols, cp); + for (j = 0; j < nof_prb; j++) { + if (prb_dist->slot[s].prb_idx[j]) { + prb_dist->re_sf[i] += ra_re_x_prb(i, s, j, + nof_prb, nof_ports, nof_ctrl_symbols, cp); + } } } } } -void ra_prb_fprint(FILE *f, ra_prb_slot_t *prb) { - int i, j, nrows; - nrows = (prb->nof_prb - 1) / 25 + 1; - for (j = 0; j < nrows; j++) { - for (i = 0; i < min(25, prb->nof_prb - j * 25); i++) { - fprintf(f, "%3d, ", prb->prb_idx[j * 25 + i]); +void ra_prb_fprint(FILE *f, ra_prb_slot_t *prb, uint32_t nof_prb) { + int i; + if (prb->nof_prb > 0) { + for (i=0;iprb_idx[i]) { + fprintf(f, "%d, ", i); + } } fprintf(f, "\n"); } + } -/** Compute PRB allocation for Downlink as defined in 8.1 of 36.213 */ +/** Compute PRB allocation for Uplink as defined in 8.1 of 36.213 */ int ra_prb_get_ul(ra_prb_slot_t *prb, ra_pusch_t *ra, uint32_t nof_prb) { int i; if (ra->type2_alloc.mode != t2_loc) { @@ -168,7 +172,7 @@ int ra_prb_get_dl(ra_prb_t *prb_dist, ra_pdsch_t *ra, uint32_t nof_prb) { if (bitmask & (1 << (nb - i - 1))) { for (j = 0; j < P; j++) { if (i*P+j < nof_prb) { - prb_dist->slot[0].prb_idx[prb_dist->slot[0].nof_prb] = i * P + j; + prb_dist->slot[0].prb_idx[i * P + j] = true; prb_dist->slot[0].nof_prb++; } } @@ -189,8 +193,8 @@ int ra_prb_get_dl(ra_prb_t *prb_dist, ra_pdsch_t *ra, uint32_t nof_prb) { bitmask = ra->type1_alloc.vrb_bitmask; for (i = 0; i < n_rb_type1; i++) { if (bitmask & (1 << (n_rb_type1 - i - 1))) { - prb_dist->slot[0].prb_idx[prb_dist->slot[0].nof_prb] = ((i + shift) / P) - * P * P + ra->type1_alloc.rbg_subset * P + (i + shift) % P; + prb_dist->slot[0].prb_idx[((i + shift) / P) + * P * P + ra->type1_alloc.rbg_subset * P + (i + shift) % P] = true; prb_dist->slot[0].nof_prb++; } } @@ -199,7 +203,7 @@ int ra_prb_get_dl(ra_prb_t *prb_dist, ra_pdsch_t *ra, uint32_t nof_prb) { case alloc_type2: if (ra->type2_alloc.mode == t2_loc) { for (i = 0; i < ra->type2_alloc.L_crb; i++) { - prb_dist->slot[0].prb_idx[i] = i + ra->type2_alloc.RB_start; + prb_dist->slot[0].prb_idx[i + ra->type2_alloc.RB_start] = true; prb_dist->slot[0].nof_prb++; } memcpy(&prb_dist->slot[1], &prb_dist->slot[0], sizeof(ra_prb_slot_t)); @@ -211,10 +215,10 @@ int ra_prb_get_dl(ra_prb_t *prb_dist, ra_pdsch_t *ra, uint32_t nof_prb) { N_row, n_vrb; int n_tilde_prb_odd, n_tilde_prb_even; if (ra->type2_alloc.n_gap == t2_ng1) { - N_tilde_vrb = nof_prb; + N_tilde_vrb = ra_type2_n_vrb_dl(nof_prb, true); N_gap = ra_type2_ngap(nof_prb, true); } else { - N_tilde_vrb = 2 * nof_prb; + N_tilde_vrb = 2 * ra_type2_n_vrb_dl(nof_prb, true); N_gap = ra_type2_ngap(nof_prb, false); } N_row = (int) ceilf((float) N_tilde_vrb / (4 * P)) * P; @@ -243,17 +247,17 @@ int ra_prb_get_dl(ra_prb_t *prb_dist, ra_pdsch_t *ra, uint32_t nof_prb) { + N_tilde_vrb * (n_vrb / N_tilde_vrb); if (n_tilde_prb_odd < N_tilde_vrb / 2) { - prb_dist->slot[0].prb_idx[i] = n_tilde_prb_odd; + prb_dist->slot[0].prb_idx[n_tilde_prb_odd] = true; } else { - prb_dist->slot[0].prb_idx[i] = n_tilde_prb_odd + N_gap - - N_tilde_vrb / 2; + prb_dist->slot[0].prb_idx[n_tilde_prb_odd + N_gap + - N_tilde_vrb / 2] = true; } prb_dist->slot[0].nof_prb++; if (n_tilde_prb_even < N_tilde_vrb / 2) { - prb_dist->slot[1].prb_idx[i] = n_tilde_prb_even; + prb_dist->slot[1].prb_idx[n_tilde_prb_even] = true; } else { - prb_dist->slot[1].prb_idx[i] = n_tilde_prb_even + N_gap - - N_tilde_vrb / 2; + prb_dist->slot[1].prb_idx[n_tilde_prb_even + N_gap + - N_tilde_vrb / 2] = true; } prb_dist->slot[1].nof_prb++; } @@ -532,7 +536,7 @@ void ra_pdsch_fprint(FILE *f, ra_pdsch_t *ra, uint32_t nof_prb) { ra_prb_get_dl(&alloc, ra, nof_prb); for (int s = 0; s < 2; s++) { fprintf(f, " - PRB Bitmap Assignment %dst slot:\n", s); - ra_prb_fprint(f, &alloc.slot[s]); + ra_prb_fprint(f, &alloc.slot[s], nof_prb); } fprintf(f, " - Number of PRBs:\t\t\t%d\n", ra_nprb_dl(ra, nof_prb)); diff --git a/lte/phy/lib/phch/src/regs.c b/lte/phy/lib/phch/src/regs.c index d752e7d77..e83d7f0b7 100644 --- a/lte/phy/lib/phch/src/regs.c +++ b/lte/phy/lib/phch/src/regs.c @@ -67,11 +67,9 @@ void regs_pdcch_free(regs_t *h) { for (i=0;i<3;i++) { if (h->pdcch[i].regs) { free(h->pdcch[i].regs); + h->pdcch[i].regs = NULL; } } - - bzero(h, sizeof(regs_t)); - } #define PDCCH_NCOLS 32 @@ -114,7 +112,7 @@ int regs_pdcch_init(regs_t *h) { } h->pdcch[cfi].nof_regs = m; - + h->pdcch[cfi].regs = malloc(sizeof(regs_reg_t*) * h->pdcch[cfi].nof_regs); if (!h->pdcch[cfi].regs) { perror("malloc"); @@ -144,6 +142,8 @@ int regs_pdcch_init(regs_t *h) { } } h->pdcch[cfi].nof_regs = (h->pdcch[cfi].nof_regs/9)*9; + INFO("Init PDCCH REG space CFI %d. %d useful REGs (%d CCEs)\n",cfi+1, + h->pdcch[cfi].nof_regs, h->pdcch[cfi].nof_regs/9); free(tmp); tmp = NULL; } @@ -348,13 +348,12 @@ void regs_phich_free(regs_t *h) { for (i=0;ingroups_phich;i++) { if (h->phich[i].regs) { free(h->phich[i].regs); + h->phich[i].regs = NULL; } } free(h->phich); + h->phich = NULL; } - - bzero(h, sizeof(regs_t)); - } uint32_t regs_phich_nregs(regs_t *h) { @@ -487,7 +486,7 @@ int regs_pcfich_init(regs_t *h) { k); return LIBLTE_ERROR; } else { - ch->regs[i]->assigned = true; + ch->regs[i]->assigned = true; INFO("Assigned PCFICH REG#%d (%d,0)\n", i, k); } } @@ -497,10 +496,8 @@ int regs_pcfich_init(regs_t *h) { void regs_pcfich_free(regs_t *h) { if (h->pcfich.regs) { free(h->pcfich.regs); + h->pcfich.regs = NULL; } - - bzero(h, sizeof(regs_t)); - } uint32_t regs_pcfich_nregs(regs_t *h) { diff --git a/lte/phy/lib/phch/test/pdcch_file_test.c b/lte/phy/lib/phch/test/pdcch_file_test.c index ebba943c4..aedd8fb4c 100644 --- a/lte/phy/lib/phch/test/pdcch_file_test.c +++ b/lte/phy/lib/phch/test/pdcch_file_test.c @@ -34,8 +34,8 @@ #include "liblte/phy/phy.h" char *input_file_name = NULL; -char *matlab_file_name = NULL; +#define MAX_CANDIDATES 64 lte_cell_t cell = { 6, // cell.cell.cell.nof_prb @@ -50,8 +50,8 @@ uint32_t cfi = 2; int flen; uint16_t rnti = SIRNTI; int max_frames = 10; -FILE *fmatlab = NULL; +dci_format_t dci_format = Format1A; filesource_t fsrc; pdcch_t pdcch; cf_t *input_buffer, *fft_buffer, *ce[MAX_PORTS]; @@ -61,9 +61,9 @@ chest_dl_t chest; void usage(char *prog) { printf("Usage: %s [vcfoe] -i input_file\n", prog); - printf("\t-o output matlab file name [Default Disabled]\n"); printf("\t-c cell.id [Default %d]\n", cell.id); printf("\t-f cfi [Default %d]\n", cfi); + printf("\t-o DCI Format [Default %s]\n", dci_format_string(dci_format)); printf("\t-r rnti [Default SI-RNTI]\n"); printf("\t-p cell.nof_ports [Default %d]\n", cell.nof_ports); printf("\t-n cell.nof_prb [Default %d]\n", cell.nof_prb); @@ -74,7 +74,7 @@ void usage(char *prog) { void parse_args(int argc, char **argv) { int opt; - while ((opt = getopt(argc, argv, "irovfcenmp")) != -1) { + while ((opt = getopt(argc, argv, "irvofcenmp")) != -1) { switch(opt) { case 'i': input_file_name = argv[optind]; @@ -98,7 +98,11 @@ void parse_args(int argc, char **argv) { cell.nof_ports = atoi(argv[optind]); break; case 'o': - matlab_file_name = argv[optind]; + dci_format = dci_format_from_string(argv[optind]); + if (dci_format == FormatError) { + fprintf(stderr, "Error unsupported format %s\n", argv[optind]); + exit(-1); + } break; case 'v': verbose++; @@ -125,16 +129,6 @@ int base_init() { exit(-1); } - if (matlab_file_name) { - fmatlab = fopen(matlab_file_name, "w"); - if (!fmatlab) { - perror("fopen"); - return -1; - } - } else { - fmatlab = NULL; - } - flen = 2 * (SLOT_LEN(lte_symbol_sz(cell.nof_prb))); input_buffer = malloc(flen * sizeof(cf_t)); @@ -189,9 +183,6 @@ void base_free() { int i; filesource_free(&fsrc); - if (fmatlab) { - fclose(fmatlab); - } free(input_buffer); free(fft_buffer); @@ -210,9 +201,9 @@ void base_free() { int main(int argc, char **argv) { ra_pdsch_t ra_dl; int i; - int nof_frames; + int frame_cnt; int ret; - dci_location_t locations[10]; + dci_location_t locations[MAX_CANDIDATES]; uint32_t nof_locations; dci_msg_t dci_msg; @@ -228,84 +219,72 @@ int main(int argc, char **argv) { exit(-1); } - if (rnti == SIRNTI) { - INFO("Initializing common search space for SI-RNTI\n",0); - nof_locations = pdcch_common_locations(&pdcch, locations, 10, cfi); - } else { - // For ue-specific, generate locations for subframe 5 - INFO("Initializing user-specific search space for RNTI: 0x%x\n", rnti); - nof_locations = pdcch_ue_locations(&pdcch, locations, 10, 5, cfi, rnti); - } ret = -1; - nof_frames = 0; + frame_cnt = 0; do { filesource_read(&fsrc, input_buffer, flen); - if (nof_frames == 5) { - INFO("Reading %d samples sub-frame %d\n", flen, nof_frames); - lte_fft_run_sf(&fft, input_buffer, fft_buffer); + INFO("Reading %d samples sub-frame %d\n", flen, frame_cnt); - if (fmatlab) { - fprintf(fmatlab, "infft%d=", nof_frames); - vec_fprint_c(fmatlab, input_buffer, flen); - fprintf(fmatlab, ";\n"); + lte_fft_run_sf(&fft, input_buffer, fft_buffer); - fprintf(fmatlab, "outfft%d=", nof_frames); - vec_sc_prod_cfc(fft_buffer, 1000.0, fft_buffer, CP_NSYMB(cell.cp) * cell.nof_prb * RE_X_RB); - vec_fprint_c(fmatlab, fft_buffer, CP_NSYMB(cell.cp) * cell.nof_prb * RE_X_RB); - fprintf(fmatlab, ";\n"); - vec_sc_prod_cfc(fft_buffer, 0.001, fft_buffer, CP_NSYMB(cell.cp) * cell.nof_prb * RE_X_RB); + /* Get channel estimates for each port */ + chest_dl_estimate(&chest, fft_buffer, ce, frame_cnt %10); + + uint16_t crc_rem = 0; + if (pdcch_extract_llr(&pdcch, fft_buffer, + ce, chest_dl_get_noise_estimate(&chest), + frame_cnt %10, cfi)) { + fprintf(stderr, "Error extracting LLRs\n"); + return -1; + } + if (rnti == SIRNTI) { + INFO("Initializing common search space for SI-RNTI\n",0); + nof_locations = pdcch_common_locations(&pdcch, locations, MAX_CANDIDATES, cfi); + } else { + INFO("Initializing user-specific search space for RNTI: 0x%x\n", rnti); + nof_locations = pdcch_ue_locations(&pdcch, locations, MAX_CANDIDATES, frame_cnt %10, cfi, rnti); + } + + for (i=0;i 0) { if (pdsch_harq_setup(&harq_process, ra_dl.mcs, &ra_dl.prb_alloc)) { fprintf(stderr, "Error configuring HARQ process\n"); goto goout; } - if (pdsch_decode(&pdsch, fft_buffer, ce, chest_dl_get_noise_estimate(&chest), data, nof_frames%10, &harq_process, ra_dl.rv_idx)) { + if (pdsch_decode(&pdsch, fft_buffer, ce, chest_dl_get_noise_estimate(&chest), + data, sf_idx, &harq_process, ra_dl.rv_idx)) { fprintf(stderr, "Error decoding PDSCH\n"); goto goout; } else { printf("PDSCH Decoded OK!\n"); } + } else { + printf("Received DCI with no resource allocation\n"); } + sf_idx = (sf_idx+1)%10; } nof_frames++; diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 2e06a057f..0918c11a0 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -36,6 +36,7 @@ #define CURRENT_SLOTLEN_RE SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) #define CURRENT_SFLEN_RE SF_LEN_RE(q->cell.nof_prb, q->cell.cp) +#define MAX_CANDIDATES 64 int ue_dl_init(ue_dl_t *q, lte_cell_t cell, @@ -146,17 +147,24 @@ void ue_dl_free(ue_dl_t *q) { LIBLTE_API float mean_exec_time=0; int frame_cnt=0; +dci_format_t ue_formats[] = {Format1A,Format1}; // Format1B should go here also +const uint32_t nof_ue_formats = 2; + +dci_format_t common_formats[] = {Format1A,Format1C}; +const uint32_t nof_common_formats = 2; + int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32_t sfn, uint16_t rnti) { uint32_t cfi, cfi_distance, i; ra_pdsch_t ra_dl; - dci_location_t locations[10]; + dci_location_t locations[MAX_CANDIDATES]; dci_msg_t dci_msg; uint32_t nof_locations; uint16_t crc_rem; - dci_format_t format; int ret = LIBLTE_ERROR; struct timeval t[3]; + uint32_t nof_formats; + dci_format_t *formats = NULL; /* Run FFT for all subframe data */ lte_fft_run_sf(&q->fft, input, q->sf_symbols); @@ -169,7 +177,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 gettimeofday(&t[2], NULL); get_time_interval(t); mean_exec_time = (float) VEC_CMA((float) t[0].tv_usec, mean_exec_time, frame_cnt); - + frame_cnt++; @@ -188,28 +196,34 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 /* Generate PDCCH candidates */ if (rnti == SIRNTI) { - nof_locations = pdcch_common_locations(&q->pdcch, locations, 10, cfi); - format = Format1A; + nof_locations = pdcch_common_locations(&q->pdcch, locations, MAX_CANDIDATES, cfi); + formats = common_formats; + nof_formats = nof_common_formats; } else { - nof_locations = pdcch_ue_locations(&q->pdcch, locations, 10, sf_idx, cfi, q->user_rnti); - format = Format1; + nof_locations = pdcch_ue_locations(&q->pdcch, locations, MAX_CANDIDATES, sf_idx, cfi, q->user_rnti); + formats = ue_formats; + nof_formats = nof_ue_formats; } + /* Extract all PDCCH symbols and get LLRs */ + if (pdcch_extract_llr(&q->pdcch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), sf_idx, cfi)) { + fprintf(stderr, "Error extracting LLRs\n"); + return LIBLTE_ERROR; + } + /* For all possible locations, try to decode a DCI message */ crc_rem = 0; - for (i=0;ipdcch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), locations[i], sf_idx, cfi)) { - fprintf(stderr, "Error extracting LLRs\n"); - return LIBLTE_ERROR; + for (int f=0;fpdcch, &dci_msg, &locations[i], formats[f], &crc_rem)) { + fprintf(stderr, "Error decoding DCI msg\n"); + return LIBLTE_ERROR; + } + INFO("Decoded DCI message RNTI: 0x%x\n", crc_rem); } - if (pdcch_decode_msg(&q->pdcch, &dci_msg, format, &crc_rem)) { - fprintf(stderr, "Error decoding DCI msg\n"); - return LIBLTE_ERROR; - } - INFO("Decoded DCI message RNTI: 0x%x\n", crc_rem); } if (crc_rem == rnti) { - printf("Hem trobat\n"); + q->nof_pdcch_detected++; if (dci_msg_to_ra_dl(&dci_msg, rnti, q->user_rnti, q->cell, cfi, &ra_dl)) { fprintf(stderr, "Error unpacking PDSCH scheduling DCI message\n"); return LIBLTE_ERROR; @@ -249,7 +263,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 q->pkt_errors++; } else if (rnti != SIRNTI) { q->pkt_errors++; - } + } } else if (ret == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling pdsch_decode()\n"); return LIBLTE_ERROR; diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 764429acf..e7075ee08 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -161,7 +161,8 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, if (ret < 0) { return LIBLTE_ERROR; } - + INFO("Channel estimated for %d ports, Noise: %f\n", q->chest.cell.nof_ports, + chest_dl_get_noise_estimate(&q->chest)); /* Reset decoder if we missed a frame */ if ((q->last_frame_trial && (abs(q->frame_cnt - q->last_frame_trial) > 2)) || q->frame_cnt > 16) @@ -177,7 +178,7 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, /* Decode PBCH */ ret = pbch_decode(&q->pbch, &q->sf_symbols[SLOT_LEN_RE(q->chest.cell.nof_prb, q->chest.cell.cp)], - ce_slot1, chest_dl_get_noise_estimate(&q->chest), + ce_slot1, chest_dl_get_noise_estimate(&q->chest), bch_payload, nof_tx_ports, sfn_offset); if (ret < 0) { fprintf(stderr, "Error decoding PBCH (%d)\n", ret); @@ -256,9 +257,9 @@ int ue_mib_sync_and_decode(ue_mib_t * q, sync_get_sf_idx(&q->sfind) == 0) { INFO("Trying to decode MIB\n",0); - printf("caution here should pass begining of frame \n"); - exit(-1); - ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-960], q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); + ret = ue_mib_decode_aligned_frame(q, + &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], + q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); counter3++; } else if ((ret == LIBLTE_SUCCESS && peak_idx != 0) || (ret == 1 && nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 > nsamples)) diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 4943c7dc9..5090f212c 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -189,7 +189,7 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { q->sf_idx, sync_get_sf_idx(&q->strack), q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value); /* FIXME: What should we do in this case? */ q->sf_idx = sync_get_sf_idx(&q->strack); - q->state = SF_TRACK; + q->state = SF_FIND; } else { q->time_offset = ((int) track_idx - (int) CURRENT_FFTSIZE); diff --git a/matlab/tests/test_pdsch_resalloc.m b/matlab/tests/test_pdsch_resalloc.m new file mode 100644 index 000000000..61c9d9740 --- /dev/null +++ b/matlab/tests/test_pdsch_resalloc.m @@ -0,0 +1,76 @@ +filename='../../debug/dist_ra.dat'; + +enb.NDLRB = 50; +enb.CyclicPrefix = 'Normal'; +enb.PHICHDuration = 'Normal'; +enb.CFI = 2; +enb.Ng = 'Sixth'; +enb.CellRefP = 1; +enb.NCellID = 196; +enb.NSubframe = 5; +enb.NTotalSubframes=1; +enb.DuplexMode = 'FDD'; + +dci.NDLRB = enb.NDLRB; +dci.DCIFormat = 'Format1C'; +dci.AllocationType=1; +%dci.Allocation.Bitmap='01111000011110000'; +%dci.Allocation.Subset=3; +dci.Allocation.RIV = 33; +dci.Allocation.Gap = 0; +dci.ModCoding=6; +dci.RV=0; +dci.DuplexMode = enb.DuplexMode; +dci.NTxAnts = enb.CellRefP; +pdcch.RNTI = 65535; +pdcch.PDCCHFormat = 3; + +pdsch.Modulation='QPSK'; +pdsch.RNTI=pdcch.RNTI; +if (enb.CellRefP == 1) + pdsch.TxScheme='Port0'; +else + pdsch.TxScheme='TxDiversity'; +end +pdsch.NLayers=enb.CellRefP; +pdsch.trblklen=176; +pdsch.RV=dci.RV; + +% Begin frame generation +subframe = lteDLResourceGrid(enb); + +%%% Create Reference Signals +rsAnt = lteCellRS(enb); +indAnt = lteCellRSIndices(enb); +subframe(indAnt) = rsAnt; + +%%% Create PDCCH +[dciMessage,dciMessageBits] = lteDCI(enb,dci); +codedDciBits = lteDCIEncode(pdcch,dciMessageBits); +pdcchInfo = ltePDCCHInfo(enb); +pdcchBits = -1*ones(1,pdcchInfo.MTot); +candidates = ltePDCCHSpace(enb,pdcch,{'bits','1based'}); +pdcchBits (candidates(1,1):candidates(1,2)) = codedDciBits; +pdcchSymbols = ltePDCCH(enb, pdcchBits); +pdcchIndices = ltePDCCHIndices(enb,{'1based'}); +subframe(pdcchIndices) = pdcchSymbols; + +% Create PDSCH +pdsch.prbset = lteDCIResourceAllocation(enb,dci); + +[pdschIndices,pdschInfo] = ltePDSCHIndices(enb,pdsch,pdsch.prbset); + +dlschTransportBlk=randi([0 1],pdsch.trblklen,1); +pdschcodeword = lteDLSCH(enb,pdsch,pdschInfo.G,dlschTransportBlk); +%crced = lteCRCEncode(dlschTransportBlk, '24A'); +%encoded = lteTurboEncode(crced); +%pdschcodeword2 = lteRateMatchTurbo(encoded,pdschInfo.G,pdsch.RV); +pdschSymbols = ltePDSCH(enb,pdsch,pdschcodeword); + +subframe(pdschIndices) = pdschSymbols; + +txwaveform = lteOFDMModulate(enb,subframe); + +write_complex(filename,sum(txwaveform,2)); +fprintf('Written signal to %s\n',filename); + From 5193112041abb4a3de69bce6f600bf4b8f075fee Mon Sep 17 00:00:00 2001 From: ismagom Date: Sun, 16 Nov 2014 21:54:38 +0000 Subject: [PATCH 21/55] Fixed BUG in ue_mib.c not checking if enough buffer. Fixed ud_dl rv_idx. Removed iodev.c --- lte/examples/CMakeLists.txt | 2 +- lte/examples/cell_measurement.c | 11 +- lte/examples/iodev.c | 207 ----------------- lte/examples/iodev.h | 99 -------- lte/examples/pdsch_ue.c | 256 ++++++++++++--------- lte/phy/lib/phch/src/pbch.c | 1 - lte/phy/lib/phch/src/pdsch.c | 6 - lte/phy/lib/phch/test/pdsch_file_test.c | 2 +- lte/phy/lib/sync/test/sync_test.c | 2 - lte/phy/lib/ue/src/ue_dl.c | 43 ++-- lte/phy/lib/ue/src/ue_mib.c | 23 +- lte/rrc/include/liblte/rrc/messages/bcch.h | 3 + lte/rrc/lib/messages/src/bcch.c | 1 - 13 files changed, 179 insertions(+), 477 deletions(-) delete mode 100644 lte/examples/iodev.c delete mode 100644 lte/examples/iodev.h diff --git a/lte/examples/CMakeLists.txt b/lte/examples/CMakeLists.txt index 114674cc5..2f7374c2e 100644 --- a/lte/examples/CMakeLists.txt +++ b/lte/examples/CMakeLists.txt @@ -51,7 +51,7 @@ LIST(FIND OPTIONAL_LIBS graphics GRAPHICS_FIND) # These two can be compiled without UHD or graphics support ################################################################# -add_executable(pdsch_ue pdsch_ue.c iodev.c cell_search_utils.c) +add_executable(pdsch_ue pdsch_ue.c cell_search_utils.c) target_link_libraries(pdsch_ue lte_rrc lte_phy) add_executable(pdsch_enodeb pdsch_enodeb.c) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 9449e8c95..82888ab71 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -141,7 +141,7 @@ int main(int argc, char **argv) { int n; uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; - float rssi=0, rsrp=0, rsrq=0; + float rssi=0, rsrp=0, rsrq=0, snr=0; cf_t *nullce[MAX_PORTS]; for (int i=0;i -#include -#include -#include - -#include "iodev.h" - -#include "liblte/phy/io/filesource.h" -#include "liblte/phy/ue/ue_sync.h" -#include "liblte/phy/utils/debug.h" -#include "liblte/phy/utils/vector.h" - -#ifndef DISABLE_UHD -#include "liblte/cuhd/cuhd.h" -#endif - -#include "cell_search_utils.h" - - -int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { - DEBUG(" ---- Receive %d samples ---- \n", nsamples); - return cuhd_recv(h, data, nsamples, 1); -} - -/* Setup USRP or input file */ -int iodev_init(iodev_t *q, iodev_cfg_t *config, lte_cell_t *cell) { - - if (config->input_file_name) { - - cell->phich_resources = R_1; - cell->phich_length = PHICH_NORM; - - cell->id = config->cell_id_file; - cell->cp = CPNORM; - cell->nof_ports = config->nof_ports_file; - cell->nof_prb = config->nof_prb_file; - - if (filesource_init(&q->fsrc, config->input_file_name, COMPLEX_FLOAT_BIN)) { - return LIBLTE_ERROR; - } - q->mode = FILESOURCE; - int symbol_sz = lte_symbol_sz(cell->nof_prb); - if (symbol_sz > 0) { - q->sf_len = SF_LEN(symbol_sz); - } else { - fprintf(stderr, "Invalid number of PRB %d\n", cell->nof_prb); - return LIBLTE_ERROR; - } - - q->input_buffer_file = vec_malloc(q->sf_len * sizeof(cf_t)); - if (!q->input_buffer_file) { - perror("malloc"); - return LIBLTE_ERROR; - } - q->sf_idx = 9; - - } else { - - #ifndef DISABLE_UHD - - printf("Opening UHD device...\n"); - if (cuhd_open(config->uhd_args, &q->uhd)) { - fprintf(stderr, "Error opening uhd\n"); - return LIBLTE_ERROR; - } - /* Set receiver gain */ - cuhd_set_rx_gain(q->uhd, config->uhd_gain); - - /* set receiver frequency */ - cuhd_set_rx_freq(q->uhd, (double) config->uhd_freq); - cuhd_rx_wait_lo_locked(q->uhd); - DEBUG("Set uhd_freq to %.3f MHz\n", (double ) config->uhd_freq); - - cell_detect_cfg_t detect_config; - bzero(&detect_config, sizeof(cell_detect_cfg_t)); - - if (detect_and_decode_cell(&detect_config, q->uhd, config->force_N_id_2, cell)) { - fprintf(stderr, "Cell not found\n"); - return LIBLTE_ERROR; - } - - cuhd_start_rx_stream(q->uhd); - - if (ue_sync_init(&q->sframe, *cell, cuhd_recv_wrapper, q->uhd)) { - fprintf(stderr, "Error initiating ue_sync\n"); - return LIBLTE_ERROR; - } - - // Here, the subframe length and input buffer is managed by ue_sync - q->mode = UHD; - -#else - printf("Error UHD not available. Select an input file\n"); - return LIBLTE_ERROR; -#endif - } - - memcpy(&q->config, config, sizeof(iodev_cfg_t)); - - return LIBLTE_SUCCESS; -} - - - -void iodev_free(iodev_t *q) { - - if (q->mode == FILESOURCE) { - filesource_free(&q->fsrc); - } else { -#ifndef DISABLE_UHD - cuhd_close(q->uhd); -#endif - } -} -/* Receive samples from the USRP or read from file */ -int iodev_receive(iodev_t *q, cf_t **buffer) { - int n; - if (q->mode == FILESOURCE) { - INFO(" ----- READING %d SAMPLES ---- \n", q->sf_len); - n = filesource_read(&q->fsrc, q->input_buffer_file, q->sf_len); - *buffer = q->input_buffer_file; - if (n == -1) { - fprintf(stderr, "Error reading file\n"); - /* wrap file if arrive to end */ - } else if (n < q->sf_len) { - DEBUG("Read %d from file. Seeking to 0\n",n); - filesource_seek(&q->fsrc, 0); - n = filesource_read(&q->fsrc, q->input_buffer_file, q->sf_len); - if (n == -1) { - fprintf(stderr, "Error reading file\n"); - /* wrap file if arrive to end */ - } else { - n = 1; - } - } else { - n = 1; - } - q->sf_idx++; - if (q->sf_idx == 10) { - q->sf_idx = 0; - } - usleep(5000); - } else { - /* Use ue_sync_work which returns a synchronized buffer of subframe samples */ -#ifndef DISABLE_UHD - n = ue_sync_get_buffer(&q->sframe, buffer); - if (n < 0) { - fprintf(stderr, "Error calling ue_sync_work()\n"); - } -#endif - } - return n; -} - -void* iodev_get_cuhd(iodev_t *q) { - if (q->mode == UHD) { - return q->uhd; - } else { - return NULL; - } -} - -bool iodev_isfile(iodev_t *q) { - return q->mode == FILESOURCE; -} - -bool iodev_isUSRP(iodev_t *q) { - return q->mode == UHD; -} - -uint32_t iodev_get_sfidx(iodev_t *q) { - if (iodev_isfile(q)) { - return q->sf_idx; - } else { - return ue_sync_get_sfidx(&q->sframe); - } -} - - diff --git a/lte/examples/iodev.h b/lte/examples/iodev.h deleted file mode 100644 index a437325a1..000000000 --- a/lte/examples/iodev.h +++ /dev/null @@ -1,99 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#ifndef IODEF_H -#define IODEF_H - -#include "liblte/config.h" - -#include "liblte/phy/ue/ue_sync.h" -#include "liblte/phy/io/filesource.h" - -#ifndef DISABLE_UHD -#include "liblte/cuhd/cuhd.h" -#endif - -/********* - * - * This component is a wrapper to the cuhd or filesource modules. It uses - * sync_frame_t to read aligned subframes from the USRP or filesource to read - * subframes from a file. - * - * When created, it starts receiving/reading at 1.92 MHz. The sampling frequency - * can then be changed using iodev_set_srate() - */ - - -typedef enum LIBLTE_API {FILESOURCE, UHD} iodev_mode_t; - -typedef _Complex float cf_t; - -typedef struct LIBLTE_API { - char *input_file_name; - uint32_t cell_id_file; - uint32_t nof_prb_file; - uint32_t nof_ports_file; - int force_N_id_2; - - float uhd_freq; - float uhd_gain; - char *uhd_args; - float find_threshold; -} iodev_cfg_t; - -typedef struct LIBLTE_API { - #ifndef DISABLE_UHD - void *uhd; - ue_sync_t sframe; - #endif - uint32_t sf_len; - uint32_t sf_idx; - cf_t *input_buffer_file; // for UHD mode, the input buffer is managed by sync_frame_t - filesource_t fsrc; - iodev_cfg_t config; - iodev_mode_t mode; -} iodev_t; - - -LIBLTE_API int iodev_init(iodev_t *q, - iodev_cfg_t *config, - lte_cell_t *cell); - -LIBLTE_API void iodev_free(iodev_t *q); - -LIBLTE_API int iodev_receive(iodev_t *q, - cf_t **buffer); - -LIBLTE_API void* iodev_get_cuhd(iodev_t *q); - -LIBLTE_API uint32_t iodev_get_sfidx(iodev_t *q); - -LIBLTE_API bool iodev_isfile(iodev_t *q); - -LIBLTE_API bool iodev_isUSRP(iodev_t *q); - -#endif \ No newline at end of file diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 499e33519..50ac0eb65 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -36,105 +36,76 @@ #include #include +#include "liblte/rrc/rrc.h" #include "liblte/phy/phy.h" -#include "iodev.h" +#include "liblte/cuhd/cuhd.h" +#include "cell_search_utils.h" #ifndef DISABLE_GRAPHICS void init_plots(); void do_plots(ue_dl_t *q, uint32_t sf_idx); #endif -int go_exit = 0; -/* Local function definitions */ -void init_plots(); +cell_detect_cfg_t cell_detect_config = { + 500, // nof_frames_total + 50, // nof_frames_detected + CS_FIND_THRESHOLD // threshold +}; /********************************************************************** * Program arguments processing ***********************************************************************/ typedef struct { - uint16_t rnti; int nof_subframes; bool disable_plots; - iodev_cfg_t io_config; + int force_N_id_2; + char *uhd_args; + float uhd_freq; + float uhd_gain; }prog_args_t; void args_default(prog_args_t *args) { - args->io_config.cell_id_file = 195; - args->io_config.nof_prb_file = 50; - args->io_config.nof_ports_file = 2; - args->rnti = SIRNTI; args->nof_subframes = -1; - args->disable_plots = false; - args->io_config.find_threshold = -1.0; - args->io_config.input_file_name = NULL; - args->io_config.force_N_id_2 = -1; // Pick the best - args->io_config.uhd_args = ""; - args->io_config.uhd_freq = -1.0; - args->io_config.uhd_gain = 60.0; + args->force_N_id_2 = -1; // Pick the best + args->uhd_args = ""; + args->uhd_freq = -1.0; + args->uhd_gain = 60.0; } void usage(prog_args_t *args, char *prog) { - printf("Usage: %s [cargndvtbl] [-i input_file | -f rx_frequency (in Hz)]\n", prog); - printf("\t-c cell_id if reading from file [Default %d]\n", args->io_config.cell_id_file); - printf("\t-p nof_prb if reading from file [Default %d]\n", args->io_config.nof_prb_file); - printf("\t-o nof_ports if reading from file [Default %d]\n", args->io_config.nof_ports_file); - printf("\t-r RNTI to look for [Default 0x%x]\n", args->rnti); -#ifndef DISABLE_UHD - printf("\t-a UHD args [Default %s]\n", args->io_config.uhd_args); - printf("\t-g UHD RX gain [Default %.2f dB]\n", args->io_config.uhd_gain); -#else - printf("\t UHD is disabled. CUHD library not available\n"); -#endif + printf("Usage: %s [agldnv] -f rx_frequency (in Hz)\n", prog); + printf("\t-a UHD args [Default %s]\n", args->uhd_args); + printf("\t-g UHD RX gain [Default %.2f dB]\n", args->uhd_gain); printf("\t-l Force N_id_2 [Default best]\n"); - printf("\t-b Decode PBCH only [Default All channels]\n"); - printf("\t-n nof_subframes [Default %d]\n", args->nof_subframes); - printf("\t-t PSS threshold [Default %f]\n", args->io_config.find_threshold); #ifndef DISABLE_GRAPHICS printf("\t-d disable plots [Default enabled]\n"); #else printf("\t plots are disabled. Graphics library not available\n"); #endif + printf("\t-n nof_subframes [Default %d]\n", args->nof_subframes); printf("\t-v [set verbose to debug, default none]\n"); } void parse_args(prog_args_t *args, int argc, char **argv) { int opt; args_default(args); - while ((opt = getopt(argc, argv, "icagfndvtbprol")) != -1) { + while ((opt = getopt(argc, argv, "agldnvf")) != -1) { switch (opt) { - case 'i': - args->io_config.input_file_name = argv[optind]; - break; - case 'c': - args->io_config.cell_id_file = atoi(argv[optind]); - break; - case 'p': - args->io_config.nof_prb_file = atoi(argv[optind]); - break; - case 'o': - args->io_config.nof_ports_file = atoi(argv[optind]); - break; case 'a': - args->io_config.uhd_args = argv[optind]; + args->uhd_args = argv[optind]; break; case 'g': - args->io_config.uhd_gain = atof(argv[optind]); + args->uhd_gain = atof(argv[optind]); break; case 'f': - args->io_config.uhd_freq = atof(argv[optind]); - break; - case 't': - args->io_config.find_threshold = atof(argv[optind]); + args->uhd_freq = atof(argv[optind]); break; case 'n': args->nof_subframes = atoi(argv[optind]); break; case 'l': - args->io_config.force_N_id_2 = atoi(argv[optind]); - break; - case 'r': - args->rnti= atoi(argv[optind]); + args->force_N_id_2 = atoi(argv[optind]); break; case 'd': args->disable_plots = true; @@ -147,105 +118,160 @@ void parse_args(prog_args_t *args, int argc, char **argv) { exit(-1); } } - if (args->io_config.uhd_freq < 0 && args->io_config.input_file_name == NULL) { + if (args->uhd_freq < 0) { usage(args, argv[0]); exit(-1); } } /**********************************************************************/ -void sigintHandler(int x) { - go_exit = 1; +/* TODO: Do something with the output data */ +uint8_t data[10000], data_unpacked[1000]; + +int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { + DEBUG(" ---- Receive %d samples ---- \n", nsamples); + return cuhd_recv(h, data, nsamples, 1); } -/* TODO: Do something with the output data */ -uint8_t data[10000]; - -extern float mean_exec_time; +extern float mean_exec_time; int main(int argc, char **argv) { int ret; cf_t *sf_buffer; - iodev_t iodev; prog_args_t prog_args; - lte_cell_t cell; - ue_dl_t ue_dl; + lte_cell_t cell; int64_t sf_cnt; - bool printed_sib = false; - int rlen; + ue_sync_t ue_sync; + ue_mib_t ue_mib; + void *uhd; + ue_dl_t ue_dl; + lte_fft_t fft; + chest_dl_t chest; + uint32_t nof_trials = 0; + uint32_t sfn = 0; // system frame number + int n; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; + uint32_t sfn_offset; parse_args(&prog_args, argc, argv); - -#ifndef DISABLE_GRAPHICS + + #ifndef DISABLE_GRAPHICS if (!prog_args.disable_plots) { init_plots(); } -#endif - - /* Initialize subframe counter */ - sf_cnt = 0; + #endif - if (iodev_init(&iodev, &prog_args.io_config, &cell)) { + printf("Opening UHD device...\n"); + if (cuhd_open(prog_args.uhd_args, &uhd)) { + fprintf(stderr, "Error opening uhd\n"); exit(-1); } + /* Set receiver gain */ + cuhd_set_rx_gain(uhd, prog_args.uhd_gain); + /* set receiver frequency */ + cuhd_set_rx_freq(uhd, (double) prog_args.uhd_freq); + cuhd_rx_wait_lo_locked(uhd); + printf("Tunning receiver to %.3f MHz\n", (double ) prog_args.uhd_freq/1000000); + + if (detect_and_decode_cell(&cell_detect_config, uhd, prog_args.force_N_id_2, &cell)) { + fprintf(stderr, "Cell not found\n"); + exit(-1); + } + + cuhd_start_rx_stream(uhd); + + if (ue_sync_init(&ue_sync, cell, cuhd_recv_wrapper, uhd)) { + fprintf(stderr, "Error initiating ue_sync\n"); + exit(-1); + } if (ue_dl_init(&ue_dl, cell, 1234)) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } - pdsch_set_rnti(&ue_dl.pdsch, prog_args.rnti); + if (ue_mib_init_known_cell(&ue_mib, cell, false)) { + fprintf(stderr, "Error initaiting UE MIB decoder\n"); + exit(-1); + } + pdsch_set_rnti(&ue_dl.pdsch, SIRNTI); + + /* Initialize subframe counter */ + sf_cnt = 0; + + if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { + fprintf(stderr, "Error initiating FFT\n"); + return -1; + } + if (chest_dl_init(&chest, cell)) { + fprintf(stderr, "Error initiating channel estimator\n"); + return -1; + } /* Main loop */ - while (!go_exit && (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1)) { + while (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1) { - ret = iodev_receive(&iodev, &sf_buffer); + ret = ue_sync_get_buffer(&ue_sync, &sf_buffer); if (ret < 0) { - fprintf(stderr, "Error reading from input device (%d)\n", ret); - break; + fprintf(stderr, "Error calling ue_sync_work()\n"); } - - fprintf(stderr, "Change in ue_dl API\n"); - exit(-1); - - /* iodev_receive returns 1 if successfully read 1 aligned subframe */ - if (ret == 1) { - rlen = ue_dl_decode(&ue_dl, sf_buffer, data, iodev_get_sfidx(&iodev), 0, prog_args.rnti); - if (rlen < 0) { - fprintf(stderr, "\nError running receiver\n");fflush(stdout); - exit(-1); - } - if (prog_args.rnti == SIRNTI && !printed_sib && rlen > 0) { - printf("\n\nDecoded SIB1 Message: "); - vec_fprint_hex(stdout, data, rlen); - printf("\n");fflush(stdout); - printed_sib = true; - } - // Plot and Printf - if (!(sf_cnt % 10)) { - printf("CFO: %+.4f KHz, SFO: %+.4f Khz, NOI: %.2f Errors: %4d/%4d, BLER: %.1e, Texec: %.2f\r", - ue_sync_get_cfo(&iodev.sframe)/1000, ue_sync_get_sfo(&iodev.sframe)/1000, - pdsch_average_noi(&ue_dl.pdsch), - (int) ue_dl.pkt_errors, (int) ue_dl.pkts_total, (float) ue_dl.pkt_errors / ue_dl.pkts_total, - mean_exec_time); - - } + /* ue_sync_get_buffer returns 1 if successfully read 1 aligned subframe */ + if (ret == 1) { + if (ue_sync_get_sfidx(&ue_sync) == 0) { + pbch_decode_reset(&ue_mib.pbch); + n = ue_mib_decode_aligned_frame(&ue_mib, + sf_buffer, bch_payload_unpacked, + NULL, &sfn_offset); + if (n < 0) { + fprintf(stderr, "Error decoding UE MIB\n"); + exit(-1); + } else if (n == MIB_FOUND) { + bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); + bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); + sfn = (sfn + sfn_offset)%1024; + } + } + /* We are looking for SI Blocks, search only in appropiate places */ + if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { + n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, SIRNTI); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + exit(-1); + } else if (n == 0) { + printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, ExecTime: %6.1f us, NOI: %.2f," + "PDCCH-Det: %.3f, PDSCH-BLER: %.3f\r", + ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, + mean_exec_time, pdsch_average_noi(&ue_dl.pdsch), + (float) ue_dl.nof_pdcch_detected/nof_trials, + (float) ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials); + + } + nof_trials++; + } + } else if (ret == 0) { + /*printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", + sync_get_peak_value(&ue_sync.sfind), + ue_sync.frame_total_cnt, ue_sync.state); + */ + } + if (ue_sync_get_sfidx(&ue_sync) == 9) { + sfn++; + if (sfn == 1024) { + sfn = 0; + } + } #ifndef DISABLE_GRAPHICS - if (!prog_args.disable_plots && iodev_get_sfidx(&iodev) == 5) { + if (!prog_args.disable_plots && ue_sync_get_sfidx(&ue_sync) == 5) { do_plots(&ue_dl, 5); } #endif - } else if (ret == 0) { - printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", - sync_get_peak_value(&iodev.sframe.sfind), - iodev.sframe.frame_total_cnt, iodev.sframe.state); - } + + sf_cnt++; } // Main loop - ue_dl_free(&ue_dl); - iodev_free(&iodev); - + ue_sync_free(&ue_sync); + cuhd_close(uhd); printf("\nBye\n"); exit(0); } @@ -253,6 +279,10 @@ int main(int argc, char **argv) { + + + + /********************************************************************** * Plotting Functions ***********************************************************************/ diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index c32daf979..3fe2c61c6 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -410,7 +410,6 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], float } if (bch_payload) { memcpy(bch_payload, q->data, sizeof(uint8_t) * BCH_PAYLOAD_LEN); - vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); } } } diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index 8d460db0b..e2816400d 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -547,8 +547,6 @@ int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, return LIBLTE_ERROR; } - vec_save_file("tdec_in.dat",q->cb_out, sizeof(float) * (3 * cb_len + 12)); - /* Turbo Decoding with CRC-based early stopping */ q->nof_iterations = 0; bool early_stop = false; @@ -688,8 +686,6 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ nof_symbols / q->cell.nof_ports); } - vec_save_file("pdsch_after.dat",q->pdsch_d,sizeof(cf_t)*nof_symbols); - /* demodulate symbols * The MAX-log-MAP algorithm used in turbo decoding is unsensitive to SNR estimation, * thus we don't need tot set it in the LLRs normalization @@ -701,8 +697,6 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ /* descramble */ scrambling_f_offset(&q->seq_pdsch[subframe], q->pdsch_e, 0, nof_bits_e); - vec_save_file("pdsch_llr.dat",q->pdsch_e,sizeof(float)*nof_bits_e); - return pdsch_decode_tb(q, data, nof_bits, nof_bits_e, harq_process, rv_idx); } else { return LIBLTE_ERROR_INVALID_INPUTS; diff --git a/lte/phy/lib/phch/test/pdsch_file_test.c b/lte/phy/lib/phch/test/pdsch_file_test.c index d48d8ba86..f6909927b 100644 --- a/lte/phy/lib/phch/test/pdsch_file_test.c +++ b/lte/phy/lib/phch/test/pdsch_file_test.c @@ -228,7 +228,7 @@ int main(int argc, char **argv) { int ret; uint8_t *data; dci_location_t locations[MAX_CANDIDATES]; - uint32_t nof_locations; + uint32_t nof_locations = 0; dci_msg_t dci_msg; data = malloc(100000); diff --git a/lte/phy/lib/sync/test/sync_test.c b/lte/phy/lib/sync/test/sync_test.c index b3f3133ae..27ed917f2 100644 --- a/lte/phy/lib/sync/test/sync_test.c +++ b/lte/phy/lib/sync/test/sync_test.c @@ -148,8 +148,6 @@ int main(int argc, char **argv) { memset(fft_buffer, 0, sizeof(cf_t) * FLEN); lte_ifft_run_slot(&ifft, buffer, &fft_buffer[offset]); - vec_save_file("input", fft_buffer, sizeof(cf_t) * FLEN); - if (sync_find(&sync, fft_buffer, 0, &find_idx) < 0) { fprintf(stderr, "Error running sync_find\n"); exit(-1); diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 0918c11a0..3396c9e22 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -174,15 +174,11 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 /* Get channel estimates for each port */ chest_dl_estimate(&q->chest, q->sf_symbols, q->ce, sf_idx); - gettimeofday(&t[2], NULL); - get_time_interval(t); - mean_exec_time = (float) VEC_CMA((float) t[0].tv_usec, mean_exec_time, frame_cnt); - - frame_cnt++; /* First decode PCFICH and obtain CFI */ - if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { + if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, + chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { fprintf(stderr, "Error decoding PCFICH\n"); return LIBLTE_ERROR; } @@ -231,20 +227,8 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 uint32_t rvidx; if (rnti == SIRNTI) { - switch((sfn%8)/2) { - case 0: - rvidx = 0; - break; - case 1: - rvidx = 2; - break; - case 2: - rvidx = 3; - break; - case 3: - rvidx = 1; - break; - } + int k = ((sfn)/2)%4; + rvidx = ((int) ceilf((float)3*k/2))%4; } else { rvidx = ra_dl.rv_idx; } @@ -259,11 +243,7 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, &q->harq_process[0], rvidx); if (ret == LIBLTE_ERROR) { - if (rnti == SIRNTI && rvidx == 1) { - q->pkt_errors++; - } else if (rnti != SIRNTI) { - q->pkt_errors++; - } + q->pkt_errors++; } else if (ret == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling pdsch_decode()\n"); return LIBLTE_ERROR; @@ -273,14 +253,17 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 vec_fprint_hex(stdout, data, ra_dl.mcs.tbs); } } - if (rnti == SIRNTI && rvidx == 1) { - q->pkts_total++; - } else if (rnti != SIRNTI) { - q->pkts_total++; - } + q->pkts_total++; } } + gettimeofday(&t[2], NULL); + get_time_interval(t); + mean_exec_time = (float) VEC_CMA((float) t[0].tv_usec, mean_exec_time, frame_cnt); + + frame_cnt++; + + if (crc_rem == rnti && ret == LIBLTE_SUCCESS) { return ra_dl.mcs.tbs; } else { diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index e7075ee08..1e2bfa06b 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -235,7 +235,7 @@ int ue_mib_sync_and_decode(ue_mib_t * q, } nof_input_frames = nsamples/MIB_FRAME_SIZE_SEARCH; - for (uint32_t nf=0;nfsfind, signal, nf*MIB_FRAME_SIZE_SEARCH, &peak_idx); @@ -249,26 +249,25 @@ int ue_mib_sync_and_decode(ue_mib_t * q, } else if (ret == 1) { counter4++; } - + int peak_idx_i = (int) peak_idx; /* Check if we have space for reading the MIB and we are in Subframe #0 */ - if (ret == 1 && - nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 <= nsamples && - sync_sss_detected(&q->sfind) && - sync_get_sf_idx(&q->sfind) == 0) + if (ret == 1 && + nf*MIB_FRAME_SIZE_SEARCH + peak_idx_i + MIB_FRAME_SIZE_SEARCH/10 <= nsamples && + nf*MIB_FRAME_SIZE_SEARCH + peak_idx_i - MIB_FRAME_SIZE_SEARCH/10 >= 0 && + sync_sss_detected(&q->sfind) && + sync_get_sf_idx(&q->sfind) == 0) { INFO("Trying to decode MIB\n",0); ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); counter3++; - } else if ((ret == LIBLTE_SUCCESS && peak_idx != 0) || - (ret == 1 && nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 > nsamples)) - { - printf("Not enough space for PBCH\n",0); - ret = MIB_FRAME_UNALIGNED; - } else { + } else if (ret == 1 && !sync_sss_detected(&q->sfind)) { INFO("SSS not detected\n",0); ret = 0; + } else { + printf("Not enough space for PBCH\n",0); + ret = MIB_FRAME_UNALIGNED; } counter1++; diff --git a/lte/rrc/include/liblte/rrc/messages/bcch.h b/lte/rrc/include/liblte/rrc/messages/bcch.h index de660688e..2b2081289 100644 --- a/lte/rrc/include/liblte/rrc/messages/bcch.h +++ b/lte/rrc/include/liblte/rrc/messages/bcch.h @@ -62,6 +62,9 @@ LIBLTE_API int bcch_bch_unpack(uint8_t *buffer, lte_cell_t *cell, uint32_t *sfn); +LIBLTE_API void bcch_bch_fprint(void *bcch_dlsch_msg, + FILE *stream); + LIBLTE_API int bcch_dlsch_pack(void *bcch_dlsch_msg, uint8_t *buffer, uint32_t buffer_size_bytes); diff --git a/lte/rrc/lib/messages/src/bcch.c b/lte/rrc/lib/messages/src/bcch.c index 856729e81..0ad68d572 100644 --- a/lte/rrc/lib/messages/src/bcch.c +++ b/lte/rrc/lib/messages/src/bcch.c @@ -113,7 +113,6 @@ int bcch_bch_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, ui printf("Decoding failed.\n"); return LIBLTE_ERROR; } - asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); switch(req->dl_Bandwidth) { case MasterInformationBlock__dl_Bandwidth_n6: From a21c8c7993768a2d1b002f5538cb643bc9bfbaf1 Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 17 Nov 2014 13:04:30 +0000 Subject: [PATCH 22/55] Fixed bug in ue_mib and improved pdsch_ue console output and plots --- lte/examples/cell_measurement.c | 3 +- lte/examples/cell_search_utils.c | 3 - lte/examples/pdsch_ue.c | 162 ++++++++++-------- .../liblte/phy/ch_estimation/chest_dl.h | 2 + lte/phy/include/liblte/phy/ue/ue_sync.h | 3 +- lte/phy/include/liblte/phy/utils/vector.h | 2 +- lte/phy/lib/ch_estimation/src/chest_dl.c | 9 + lte/phy/lib/phch/src/dci.c | 5 +- lte/phy/lib/phch/src/pbch.c | 8 - lte/phy/lib/phch/src/pdsch.c | 1 - lte/phy/lib/sync/src/sync.c | 10 +- lte/phy/lib/ue/src/ue_dl.c | 3 + lte/phy/lib/ue/src/ue_mib.c | 54 +++--- lte/phy/lib/ue/src/ue_sync.c | 22 ++- lte/phy/lib/ue/test/ue_sync_usrp.c | 5 +- 15 files changed, 153 insertions(+), 139 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 82888ab71..3d0fd0719 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -267,8 +267,7 @@ int main(int argc, char **argv) { rssi = VEC_CMA(chest_dl_get_rssi(&chest),rssi,nframes); rsrq = VEC_CMA(chest_dl_get_rsrq(&chest),rsrq,nframes); rsrp = VEC_CMA(chest_dl_get_rsrp(&chest),rsrp,nframes); - float noise = chest_dl_get_noise_estimate(&chest); - snr = VEC_CMA(rssi/(noise*noise*2*cell.nof_ports*fft.symbol_sz),snr,nframes); + snr = VEC_CMA(chest_dl_get_snr(&chest),snr,nframes); nframes++; // Plot and Printf diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index fbb6a986a..21edaefe9 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -165,9 +165,6 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo fprintf(stderr, "Error receiving from USRP\n"); goto free_and_exit; } - /* FIXME: What should we do here?? */ - ret = -1; - goto free_and_exit; case CS_CELL_DETECTED: ue_celldetect_get_cell(&cd, found_cell); if (found_cell->peak > 0) { diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 50ac0eb65..39430574e 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -60,13 +60,15 @@ typedef struct { int nof_subframes; bool disable_plots; int force_N_id_2; + uint16_t rnti; char *uhd_args; float uhd_freq; float uhd_gain; }prog_args_t; void args_default(prog_args_t *args) { - args->nof_subframes = -1; + args->nof_subframes = -1; + args->rnti = SIRNTI; args->force_N_id_2 = -1; // Pick the best args->uhd_args = ""; args->uhd_freq = -1.0; @@ -74,9 +76,10 @@ void args_default(prog_args_t *args) { } void usage(prog_args_t *args, char *prog) { - printf("Usage: %s [agldnv] -f rx_frequency (in Hz)\n", prog); + printf("Usage: %s [agldnrv] -f rx_frequency (in Hz)\n", prog); printf("\t-a UHD args [Default %s]\n", args->uhd_args); printf("\t-g UHD RX gain [Default %.2f dB]\n", args->uhd_gain); + printf("\t-r RNTI [Default 0x%x]\n",args->rnti); printf("\t-l Force N_id_2 [Default best]\n"); #ifndef DISABLE_GRAPHICS printf("\t-d disable plots [Default enabled]\n"); @@ -90,7 +93,7 @@ void usage(prog_args_t *args, char *prog) { void parse_args(prog_args_t *args, int argc, char **argv) { int opt; args_default(args); - while ((opt = getopt(argc, argv, "agldnvf")) != -1) { + while ((opt = getopt(argc, argv, "agldnvrf")) != -1) { switch (opt) { case 'a': args->uhd_args = argv[optind]; @@ -104,6 +107,9 @@ void parse_args(prog_args_t *args, int argc, char **argv) { case 'n': args->nof_subframes = atoi(argv[optind]); break; + case 'r': + args->rnti = atoi(argv[optind]); + break; case 'l': args->force_N_id_2 = atoi(argv[optind]); break; @@ -128,6 +134,15 @@ void parse_args(prog_args_t *args, int argc, char **argv) { /* TODO: Do something with the output data */ uint8_t data[10000], data_unpacked[1000]; +bool go_exit = false; + +void sig_int_handler(int signo) +{ + if (signo == SIGINT) { + go_exit = true; + } +} + int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { DEBUG(" ---- Receive %d samples ---- \n", nsamples); return cuhd_recv(h, data, nsamples, 1); @@ -145,14 +160,12 @@ int main(int argc, char **argv) { ue_mib_t ue_mib; void *uhd; ue_dl_t ue_dl; - lte_fft_t fft; - chest_dl_t chest; uint32_t nof_trials = 0; uint32_t sfn = 0; // system frame number int n; uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; - + float snr = 0; parse_args(&prog_args, argc, argv); #ifndef DISABLE_GRAPHICS @@ -160,7 +173,7 @@ int main(int argc, char **argv) { init_plots(); } #endif - + printf("Opening UHD device...\n"); if (cuhd_open(prog_args.uhd_args, &uhd)) { fprintf(stderr, "Error opening uhd\n"); @@ -185,7 +198,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating ue_sync\n"); exit(-1); } - if (ue_dl_init(&ue_dl, cell, 1234)) { + if (ue_dl_init(&ue_dl, cell, 1234)) { // This is the User RNTI fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } @@ -193,83 +206,75 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } - pdsch_set_rnti(&ue_dl.pdsch, SIRNTI); /* Initialize subframe counter */ sf_cnt = 0; - - if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { - fprintf(stderr, "Error initiating FFT\n"); - return -1; - } - if (chest_dl_init(&chest, cell)) { - fprintf(stderr, "Error initiating channel estimator\n"); - return -1; - } + + // Register Ctrl+C handler + signal(SIGINT, sig_int_handler); /* Main loop */ - while (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1) { + while (go_exit == false && + (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1)) + { ret = ue_sync_get_buffer(&ue_sync, &sf_buffer); if (ret < 0) { fprintf(stderr, "Error calling ue_sync_work()\n"); + go_exit=true; } /* ue_sync_get_buffer returns 1 if successfully read 1 aligned subframe */ if (ret == 1) { - if (ue_sync_get_sfidx(&ue_sync) == 0) { - pbch_decode_reset(&ue_mib.pbch); - n = ue_mib_decode_aligned_frame(&ue_mib, - sf_buffer, bch_payload_unpacked, - NULL, &sfn_offset); - if (n < 0) { - fprintf(stderr, "Error decoding UE MIB\n"); - exit(-1); - } else if (n == MIB_FOUND) { - bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); - bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); - sfn = (sfn + sfn_offset)%1024; - } - } - /* We are looking for SI Blocks, search only in appropiate places */ - if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { - n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, SIRNTI); - if (n < 0) { - fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - exit(-1); - } else if (n == 0) { - printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, ExecTime: %6.1f us, NOI: %.2f," - "PDCCH-Det: %.3f, PDSCH-BLER: %.3f\r", - ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, - mean_exec_time, pdsch_average_noi(&ue_dl.pdsch), - (float) ue_dl.nof_pdcch_detected/nof_trials, - (float) ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials); - - } - nof_trials++; - } - } else if (ret == 0) { - /*printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", - sync_get_peak_value(&ue_sync.sfind), - ue_sync.frame_total_cnt, ue_sync.state); - */ - } - if (ue_sync_get_sfidx(&ue_sync) == 9) { - sfn++; - if (sfn == 1024) { - sfn = 0; + if (ue_sync_get_sfidx(&ue_sync) == 0) { + pbch_decode_reset(&ue_mib.pbch); + n = ue_mib_decode_aligned_frame(&ue_mib, + sf_buffer, bch_payload_unpacked, + NULL, &sfn_offset); + if (n < 0) { + fprintf(stderr, "Error decoding UE MIB\n"); + go_exit=true; + } else if (n == MIB_FOUND) { + bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); + bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); + sfn = (sfn + sfn_offset)%1024; } } - #ifndef DISABLE_GRAPHICS - if (!prog_args.disable_plots && ue_sync_get_sfidx(&ue_sync) == 5) { - do_plots(&ue_dl, 5); + /* We are looking for SI Blocks, search only in appropiate places */ + if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { + n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, prog_args.rnti); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + } + nof_trials++; } - #endif - - + snr = VEC_CMA(chest_dl_get_snr(&ue_dl.chest),snr,sf_cnt); + } + if (ue_sync_get_sfidx(&ue_sync) == 9) { + sfn++; + if (sfn == 1024) { + sfn = 0; + } + } + #ifndef DISABLE_GRAPHICS + if (!prog_args.disable_plots && ue_sync_get_sfidx(&ue_sync) == 5) { + do_plots(&ue_dl, 5); + } + #endif + + if ((sf_cnt%10)==0) { + printf("CFO: %+6.2f KHz, SFO: %+6.2f Khz, SNR: %5.1f dB, NOI: %.2f, " + "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", + ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, + 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), + 100*(1-(float) ue_dl.nof_pdcch_detected/nof_trials), + (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); + } sf_cnt++; } // Main loop + ue_dl_free(&ue_dl); + ue_mib_free(&ue_mib); ue_sync_free(&ue_sync); cuhd_close(uhd); printf("\nBye\n"); @@ -291,24 +296,23 @@ int main(int argc, char **argv) { #include "liblte/graphics/plot.h" plot_real_t poutfft; -plot_complex_t pce; +plot_real_t pce; plot_scatter_t pscatrecv, pscatequal; float tmp_plot[SLOT_LEN_RE(MAX_PRB, CPNORM)]; +float tmp_plot2[SLOT_LEN_RE(MAX_PRB, CPNORM)]; void init_plots() { plot_init(); plot_real_init(&poutfft); plot_real_setTitle(&poutfft, "Output FFT - Magnitude"); plot_real_setLabels(&poutfft, "Index", "dB"); - plot_real_setYAxisScale(&poutfft, -30, 20); + plot_real_setYAxisScale(&poutfft, -60, 0); - plot_complex_init(&pce); - plot_complex_setTitle(&pce, "Channel Estimates"); - plot_complex_setYAxisScale(&pce, Ip, -3, 3); - plot_complex_setYAxisScale(&pce, Q, -3, 3); - plot_complex_setYAxisScale(&pce, Magnitude, 0, 4); - plot_complex_setYAxisScale(&pce, Phase, -M_PI, M_PI); + plot_real_init(&pce); + plot_real_setTitle(&pce, "Channel Response - Magnitude"); + plot_real_setLabels(&pce, "Index", "dB"); + plot_real_setYAxisScale(&pce, -60, 0); plot_scatter_init(&pscatrecv); plot_scatter_setTitle(&pscatrecv, "Received Symbols"); @@ -326,13 +330,19 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx) { uint32_t nof_re = SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp); uint32_t nof_symbols = q->harq_process[0].prb_alloc.re_sf[sf_idx]; for (i = 0; i < nof_re; i++) { - tmp_plot[i] = 10 * log10f(cabsf(q->sf_symbols[i])); + tmp_plot[i] = 20 * log10f(cabsf(q->sf_symbols[i])); if (isinf(tmp_plot[i])) { tmp_plot[i] = -80; } } + for (i = 0; i < REFSIGNAL_NUM_SF(q->cell.nof_prb,0); i++) { + tmp_plot2[i] = 20 * log10f(cabsf(q->chest.pilot_estimates_average[0][i])); + if (isinf(tmp_plot2[i])) { + tmp_plot2[i] = -80; + } + } plot_real_setNewData(&poutfft, tmp_plot, nof_re); - plot_complex_setNewData(&pce, q->ce[0], nof_re); + plot_real_setNewData(&pce, tmp_plot2, REFSIGNAL_NUM_SF(q->cell.nof_prb,0)); plot_scatter_setNewData(&pscatrecv, q->pdsch.pdsch_symbols[0], nof_symbols); plot_scatter_setNewData(&pscatequal, q->pdsch.pdsch_d, nof_symbols); } diff --git a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h index 799e40c00..225d3b226 100644 --- a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h +++ b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h @@ -99,6 +99,8 @@ LIBLTE_API int chest_dl_estimate_port(chest_dl_t *q, uint32_t sf_idx, uint32_t port_id); +LIBLTE_API float chest_dl_get_snr(chest_dl_t *q); + LIBLTE_API float chest_dl_get_noise_estimate(chest_dl_t *q); LIBLTE_API float chest_dl_get_rssi(chest_dl_t *q); diff --git a/lte/phy/include/liblte/phy/ue/ue_sync.h b/lte/phy/include/liblte/phy/ue/ue_sync.h index 6a9c972d0..32b0841d9 100644 --- a/lte/phy/include/liblte/phy/ue/ue_sync.h +++ b/lte/phy/include/liblte/phy/ue/ue_sync.h @@ -53,8 +53,7 @@ typedef enum LIBLTE_API { SF_FIND, SF_TRACK} ue_sync_state_t; -#define TRACK_MAX_LOST 10 -#define MEASURE_EXEC_TIME +//#define MEASURE_EXEC_TIME typedef struct LIBLTE_API { sync_t sfind; diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index eaa8150b3..d7ab6f764 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -39,7 +39,7 @@ typedef _Complex float cf_t; #define VEC_CMA(data, average, n) ((data) + ((data) - (average)) / ((n)+1)) // Exponential moving average -#define VEC_EMA(data, average, alpha) ((factor)*(data)+(1-alpha)*(average)) +#define VEC_EMA(data, average, alpha) ((alpha)*(data)+(1-alpha)*(average)) /** Return the sum of all the elements */ LIBLTE_API int vec_acc_ii(int *x, uint32_t len); diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 7db8877b1..185ab9454 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -331,6 +331,15 @@ float chest_dl_get_noise_estimate(chest_dl_t *q) { return vec_acc_ff(q->noise_estimate, q->cell.nof_ports)/q->cell.nof_ports; } +float chest_dl_get_snr(chest_dl_t *q) { + float noise = chest_dl_get_noise_estimate(q); + if (noise) { + return chest_dl_get_rssi(q)/(noise*2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb)); + } else { + return 0.0; + } +} + float chest_dl_get_rssi(chest_dl_t *q) { return q->rssi; } diff --git a/lte/phy/lib/phch/src/dci.c b/lte/phy/lib/phch/src/dci.c index 86cac5e2e..4c29a4fb6 100644 --- a/lte/phy/lib/phch/src/dci.c +++ b/lte/phy/lib/phch/src/dci.c @@ -85,7 +85,10 @@ int dci_msg_to_ra_dl(dci_msg_t *msg, uint16_t msg_rnti, uint16_t c_rnti, ra_prb_get_re_dl(&ra_dl->prb_alloc, cell.nof_prb, cell.nof_ports, cell.nof_prb<10?(cfi+1):cfi, cell.cp); ret = LIBLTE_SUCCESS; - } + } else { + fprintf(stderr, "Unsupported message type: "); + dci_msg_type_fprint(stderr, type); + } } return ret; } diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index 3fe2c61c6..1131d5fcb 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -296,14 +296,6 @@ int pbch_decode_frame(pbch_t *q, uint32_t src, uint32_t dst, uint32_t n, /* unrate matching */ rm_conv_rx(q->temp, 4 * nof_bits, q->pbch_rm_f, BCH_ENCODED_LEN); - - /* FIXME: If channel estimates are zero, received LLR are NaN. Check and return error */ - for (j = 0; j < BCH_ENCODED_LEN; j++) { - if (isnan(q->pbch_rm_f[j]) || isinf(q->pbch_rm_f[j])) { - printf("Some CE are NaN or Inf!\n"); - return LIBLTE_ERROR; - } - } /* decode */ viterbi_decode_f(&q->decoder, q->pbch_rm_f, q->data, BCH_PAYLOADCRC_LEN); diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index e2816400d..8211a5216 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -578,7 +578,6 @@ int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, } } while (q->nof_iterations < TDEC_MAX_ITERATIONS && !early_stop); - q->average_nof_iterations = VEC_CMA((float) q->nof_iterations, q->average_nof_iterations, q->average_nof_iterations_n); diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 4cadf4ce2..93a04fa4c 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -232,7 +232,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit { int peak_pos; - ret = LIBLTE_ERROR; + ret = LIBLTE_SUCCESS; if (peak_position) { *peak_position = 0; @@ -266,7 +266,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit /* If peak is over threshold, compute CFO and SSS */ if (q->peak_value >= q->threshold) { - if (find_offset + peak_pos >= q->fft_size) { + if (find_offset + peak_pos >= q->fft_size + CP_EXT(q->fft_size)) { q->cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); if (q->sss_en) { ret = sync_sss(q, input, find_offset + peak_pos); @@ -278,15 +278,13 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit ret = 1; } } else { - INFO("Warning: no space for CFO computation\n",0); + INFO("No space for CFO computation: frame starts at \n",peak_pos); } if (peak_position) { *peak_position = (uint32_t) peak_pos; } - } else { - ret = LIBLTE_SUCCESS; - } + } INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", ret, q->N_id_2, peak_pos, peak_unnormalized,energy,q->peak_value, q->threshold, q->sf_idx, find_offset); diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 3396c9e22..7826b503c 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -240,6 +240,9 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } } if (q->harq_process[0].mcs.mod > 0) { + + pdsch_set_rnti(&q->pdsch, rnti); + ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, &q->harq_process[0], rvidx); if (ret == LIBLTE_ERROR) { diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 1e2bfa06b..1f9937927 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -194,8 +194,6 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, return ret; } -int counter1=0,counter2=0,counter3=0,counter4=0; - void ue_mib_get_payload(ue_mib_t *q, uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, @@ -244,35 +242,37 @@ int ue_mib_sync_and_decode(ue_mib_t * q, return -1; } - if (ret == 0) { - counter2++; - } else if (ret == 1) { - counter4++; - } - int peak_idx_i = (int) peak_idx; /* Check if we have space for reading the MIB and we are in Subframe #0 */ - if (ret == 1 && - nf*MIB_FRAME_SIZE_SEARCH + peak_idx_i + MIB_FRAME_SIZE_SEARCH/10 <= nsamples && - nf*MIB_FRAME_SIZE_SEARCH + peak_idx_i - MIB_FRAME_SIZE_SEARCH/10 >= 0 && - sync_sss_detected(&q->sfind) && - sync_get_sf_idx(&q->sfind) == 0) + if (ret == 1) { - INFO("Trying to decode MIB\n",0); - ret = ue_mib_decode_aligned_frame(q, - &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], - q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); - counter3++; - } else if (ret == 1 && !sync_sss_detected(&q->sfind)) { - INFO("SSS not detected\n",0); - ret = 0; + if (sync_sss_detected(&q->sfind)) + { + if (sync_get_sf_idx(&q->sfind) == 0) + { + if (nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 <= nsamples && + nf*MIB_FRAME_SIZE_SEARCH + peak_idx > MIB_FRAME_SIZE_SEARCH/10) + { + // PSS and SSS detected and we have space to decode the PBCH. + INFO("Trying to decode PBCH\n",0); + ret = ue_mib_decode_aligned_frame(q, + &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], + q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); + } else { + printf("Not enough space for PBCH: PSS signal is at offset %d\n",peak_idx); + ret = MIB_FRAME_UNALIGNED; + } + } else { + // Wait for subframe 0 + ret = 0; + } + } else { + INFO("SSS not detected\n",0); + ret = 0; // wait to detect it + } } else { - printf("Not enough space for PBCH\n",0); - ret = MIB_FRAME_UNALIGNED; + INFO("PSS not detected\n",0); + ret = 0; // wait to detect it? } - - counter1++; - INFO("Total: %3d - Sync0: %3d - Sync1: %3d - Tried: %3d - Peak: %4d - Ret: %d\n",counter1,counter2,counter4, counter3, peak_idx, ret); - q->frame_cnt++; } } diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 5090f212c..173848669 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -46,8 +46,9 @@ cf_t dummy[MAX_TIME_OFFSET]; #define CURRENT_SLOTLEN_RE SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) #define CURRENT_SFLEN_RE SF_LEN_RE(q->cell.nof_prb, q->cell.cp) -#define FIND_THRESHOLD 1.2 -#define TRACK_THRESHOLD 0.2 +#define FIND_THRESHOLD 1.0 +#define TRACK_THRESHOLD 0.4 +#define TRACK_MAX_LOST 5 int ue_sync_init(ue_sync_t *q, @@ -186,10 +187,12 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { /* Make sure subframe idx is what we expect */ if ((q->sf_idx != sync_get_sf_idx(&q->strack)) && q->decode_sss_on_track) { INFO("Warning: Expected SF idx %d but got %d (%d,%g - %d,%g)!\n", - q->sf_idx, sync_get_sf_idx(&q->strack), q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value); + q->sf_idx, sync_get_sf_idx(&q->strack), + q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value); + /* FIXME: What should we do in this case? */ q->sf_idx = sync_get_sf_idx(&q->strack); - q->state = SF_FIND; + //q->state = SF_FIND; } else { q->time_offset = ((int) track_idx - (int) CURRENT_FFTSIZE); @@ -220,7 +223,7 @@ int track_peak_no(ue_sync_t *q) { /* if we missed too many PSS go back to FIND */ q->frame_no_cnt++; if (q->frame_no_cnt >= TRACK_MAX_LOST) { - printf("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); + INFO("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); q->state = SF_FIND; } else { INFO("Tracking peak not found. Peak %.3f, %d lost\n", @@ -256,8 +259,7 @@ static int receive_samples(ue_sync_t *q) { int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t track_idx; - struct timeval t[3]; - + if (q != NULL && sf_symbols != NULL && q->input_buffer != NULL) @@ -273,7 +275,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { ret = sync_find(&q->sfind, q->input_buffer, 0, &q->peak_idx); if (ret < 0) { fprintf(stderr, "Error finding correlation peak (%d)\n", ret); - return -1; + return LIBLTE_ERROR; } if (ret == 1) { @@ -286,6 +288,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { rlen = q->peak_idx; } if (q->recv_callback(q->stream, q->input_buffer, rlen) < 0) { + fprintf(stderr, "Error calling recv callback function\n"); return LIBLTE_ERROR; } } @@ -301,6 +304,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { if (q->sf_idx == 0 || q->sf_idx == 5) { #ifdef MEASURE_EXEC_TIME + struct timeval t[3]; gettimeofday(&t[1], NULL); #endif @@ -310,7 +314,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { ret = sync_find(&q->strack, q->input_buffer, CURRENT_SFLEN/2-CURRENT_FFTSIZE, &track_idx); if (ret < 0) { fprintf(stderr, "Error tracking correlation peak\n"); - return -1; + return LIBLTE_ERROR; } #ifdef MEASURE_EXEC_TIME diff --git a/lte/phy/lib/ue/test/ue_sync_usrp.c b/lte/phy/lib/ue/test/ue_sync_usrp.c index 62bb1d7c5..56d98fcb6 100644 --- a/lte/phy/lib/ue/test/ue_sync_usrp.c +++ b/lte/phy/lib/ue/test/ue_sync_usrp.c @@ -239,9 +239,8 @@ int main(int argc, char **argv) { #endif pos = pss_synch_find_pss(&pss, input_buffer, &peak); - printf("CELL_ID: %3d CFO: %+.4f KHz, SFO: %+.4f Khz, TimeOffset: %4d, Exec: %3.2f\r", - sync_get_cell_id(&s.sfind), ue_sync_get_cfo(&s)/1000, ue_sync_get_sfo(&s)/1000, pos, - s.mean_exec_time); + printf("CELL_ID: %3d CFO: %+.4f KHz, SFO: %+.4f Khz, TimeOffset: %4d\r", + sync_get_cell_id(&s.sfind), ue_sync_get_cfo(&s)/1000, ue_sync_get_sfo(&s)/1000, pos); fflush(stdout); if (VERBOSE_ISINFO()) { printf("\n"); From b96e33ffd6af5a352630c5283da9cd250f3d8ef7 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 18 Nov 2014 17:11:56 +0100 Subject: [PATCH 23/55] Fixed memory leak with pdsch_set_rnti() --- lte/examples/pdsch_ue.c | 4 ++++ lte/phy/lib/ue/src/ue_dl.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 39430574e..0701e6fa9 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -206,6 +206,10 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } + + pdsch_set_rnti(&ue_dl.pdsch, prog_args.rnti); // This is the RNTI we want to look for + + /* Initialize subframe counter */ sf_cnt = 0; diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 7826b503c..5b15e3f7c 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -241,8 +241,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } if (q->harq_process[0].mcs.mod > 0) { - pdsch_set_rnti(&q->pdsch, rnti); - ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, &q->harq_process[0], rvidx); if (ret == LIBLTE_ERROR) { From 552c925036fede107fd0e85f858f0072f7ba0386 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 18 Nov 2014 21:22:42 +0100 Subject: [PATCH 24/55] Fixed BCCH encoding bug --- lte/examples/pdsch_enodeb.c | 6 ++++-- lte/rrc/lib/messages/src/bcch.c | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lte/examples/pdsch_enodeb.c b/lte/examples/pdsch_enodeb.c index 8dd4f7f60..ac9c4e154 100644 --- a/lte/examples/pdsch_enodeb.c +++ b/lte/examples/pdsch_enodeb.c @@ -55,7 +55,7 @@ uint32_t mcs_idx = 12; int nof_frames = -1; char *uhd_args = ""; -float uhd_amp = 0.01, uhd_gain = 10.0, uhd_freq = 2400000000; +float uhd_amp = 0.1, uhd_gain = 40.0, uhd_freq = 2400000000; filesink_t fsink; lte_fft_t ifft; @@ -324,6 +324,9 @@ int main(int argc, char **argv) { fprintf(stderr, "Error configuring HARQ process\n"); exit(-1); } + + bcch_bch_pack(&cell, 0, bch_payload_packed, BCH_PAYLOAD_LEN/8); + bit_pack_vector(bch_payload_packed, bch_payload, BCH_PAYLOAD_LEN); while (nf < nof_frames || nof_frames == -1) { for (sf_idx = 0; sf_idx < NSUBFRAMES_X_FRAME && (nf < nof_frames || nof_frames == -1); sf_idx++) { @@ -336,7 +339,6 @@ int main(int argc, char **argv) { } bcch_bch_pack(&cell, sfn, bch_payload_packed, BCH_PAYLOAD_LEN/8); - bit_pack_vector(bch_payload_packed, bch_payload, BCH_PAYLOAD_LEN); if (sf_idx == 0) { pbch_encode(&pbch, bch_payload, sf_symbols); } diff --git a/lte/rrc/lib/messages/src/bcch.c b/lte/rrc/lib/messages/src/bcch.c index 0ad68d572..423148ae5 100644 --- a/lte/rrc/lib/messages/src/bcch.c +++ b/lte/rrc/lib/messages/src/bcch.c @@ -85,6 +85,7 @@ int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buff sfn=(sfn>>2); req.systemFrameNumber.buf = (uint8_t*) &sfn; req.systemFrameNumber.size = 1; + req.systemFrameNumber.bits_unused= 0; int spare = 0; req.spare.buf = (uint8_t*) &spare; req.spare.size = 2; @@ -96,7 +97,7 @@ int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buff printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); return LIBLTE_ERROR; } - asn_fprint(stdout, &asn_DEF_MasterInformationBlock, &req); + return LIBLTE_SUCCESS; } From 103ead62985b7caccc7ce4848f5cf7aa67dc30c6 Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 24 Nov 2014 16:05:15 +0000 Subject: [PATCH 25/55] Fixed pdsch_enodeb, bcch decoding for 20 MHz and CFO correction --- lte/examples/pdsch_enodeb.c | 25 ++++++++++++-------- lte/examples/pdsch_ue.c | 15 ++++++++---- lte/phy/include/liblte/phy/ue/ue_mib.h | 2 ++ lte/phy/lib/ch_estimation/src/refsignal_dl.c | 2 +- lte/phy/lib/ue/src/ue_dl.c | 3 --- lte/phy/lib/ue/src/ue_mib.c | 15 ++++++++++++ lte/phy/lib/ue/src/ue_sync.c | 2 +- lte/rrc/lib/messages/src/bcch.c | 8 +++++-- 8 files changed, 50 insertions(+), 22 deletions(-) diff --git a/lte/examples/pdsch_enodeb.c b/lte/examples/pdsch_enodeb.c index ac9c4e154..7d65e5143 100644 --- a/lte/examples/pdsch_enodeb.c +++ b/lte/examples/pdsch_enodeb.c @@ -249,6 +249,7 @@ int main(int argc, char **argv) { dci_msg_t dci_msg; dci_location_t locations[NSUBFRAMES_X_FRAME][10]; uint32_t sfn; + chest_dl_t est; #ifdef DISABLE_UHD if (argc < 3) { @@ -263,6 +264,10 @@ int main(int argc, char **argv) { sf_n_re = 2 * CPNORM_NSYMB * cell.nof_prb * RE_X_RB; sf_n_samples = 2 * SLOT_LEN(lte_symbol_sz(cell.nof_prb)); + cell.phich_length = PHICH_NORM; + cell.phich_resources = R_1; + sfn = 0; + /* this *must* be called after setting slot_len_* */ base_init(); @@ -270,12 +275,14 @@ int main(int argc, char **argv) { pss_generate(pss_signal, N_id_2); sss_generate(sss_signal0, sss_signal5, cell.id); - /* Generate CRS signals */ - refsignal_cs_generate(&csr_signal, cell); + //refsignal_cs_generate(&csr_signal, cell); + + /* Generate CRS signals */ + if (chest_dl_init(&est, cell)) { + fprintf(stderr, "Error initializing equalizer\n"); + exit(-1); + } - cell.phich_length = PHICH_NORM; - cell.phich_resources = R_1; - sfn = 0; for (i = 0; i < MAX_PORTS; i++) { // now there's only 1 port sf_symbols[i] = sf_buffer; @@ -324,9 +331,6 @@ int main(int argc, char **argv) { fprintf(stderr, "Error configuring HARQ process\n"); exit(-1); } - - bcch_bch_pack(&cell, 0, bch_payload_packed, BCH_PAYLOAD_LEN/8); - bit_pack_vector(bch_payload_packed, bch_payload, BCH_PAYLOAD_LEN); while (nf < nof_frames || nof_frames == -1) { for (sf_idx = 0; sf_idx < NSUBFRAMES_X_FRAME && (nf < nof_frames || nof_frames == -1); sf_idx++) { @@ -337,13 +341,14 @@ int main(int argc, char **argv) { sss_put_slot(sf_idx ? sss_signal5 : sss_signal0, sf_buffer, cell.nof_prb, CPNORM); } + refsignal_cs_put_sf(cell, 0, est.csr_signal.pilots[0][sf_idx], sf_buffer); bcch_bch_pack(&cell, sfn, bch_payload_packed, BCH_PAYLOAD_LEN/8); + bit_pack_vector(bch_payload_packed, bch_payload, BCH_PAYLOAD_LEN); if (sf_idx == 0) { pbch_encode(&pbch, bch_payload, sf_symbols); } - refsignal_cs_put_sf(cell, 0, csr_signal.pilots[0][sf_idx], sf_buffer); pcfich_encode(&pcfich, cfi, sf_symbols, sf_idx); @@ -362,7 +367,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error encoding PDSCH\n"); exit(-1); } - + /* Transform to OFDM symbols */ lte_ifft_run_sf(&ifft, sf_buffer, output_buffer); diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 0701e6fa9..f79c1a273 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -206,10 +206,8 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } - - pdsch_set_rnti(&ue_dl.pdsch, prog_args.rnti); // This is the RNTI we want to look for - + pdsch_set_rnti(&ue_dl.pdsch, prog_args.rnti); /* Initialize subframe counter */ sf_cnt = 0; @@ -301,7 +299,7 @@ int main(int argc, char **argv) { #include "liblte/graphics/plot.h" plot_real_t poutfft; plot_real_t pce; -plot_scatter_t pscatrecv, pscatequal; +plot_scatter_t pscatrecv, pscatequal, pscatequal_pdcch; float tmp_plot[SLOT_LEN_RE(MAX_PRB, CPNORM)]; float tmp_plot2[SLOT_LEN_RE(MAX_PRB, CPNORM)]; @@ -324,9 +322,15 @@ void init_plots() { plot_scatter_setYAxisScale(&pscatrecv, -4, 4); plot_scatter_init(&pscatequal); - plot_scatter_setTitle(&pscatequal, "Equalized Symbols"); + plot_scatter_setTitle(&pscatequal, "PDSCH - Equalized Symbols"); plot_scatter_setXAxisScale(&pscatequal, -2, 2); plot_scatter_setYAxisScale(&pscatequal, -2, 2); + + plot_scatter_init(&pscatequal_pdcch); + plot_scatter_setTitle(&pscatequal_pdcch, "PDCCH - Equalized Symbols"); + plot_scatter_setXAxisScale(&pscatequal_pdcch, -2, 2); + plot_scatter_setYAxisScale(&pscatequal_pdcch, -2, 2); + } void do_plots(ue_dl_t *q, uint32_t sf_idx) { @@ -349,6 +353,7 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx) { plot_real_setNewData(&pce, tmp_plot2, REFSIGNAL_NUM_SF(q->cell.nof_prb,0)); plot_scatter_setNewData(&pscatrecv, q->pdsch.pdsch_symbols[0], nof_symbols); plot_scatter_setNewData(&pscatequal, q->pdsch.pdsch_d, nof_symbols); + plot_scatter_setNewData(&pscatequal_pdcch, q->pdcch.pdcch_d, 36*q->pdcch.nof_cce); } #endif diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index 45c14e276..3473241e6 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -58,6 +58,7 @@ #define MIB_MAX_PORTS 4 #define MIB_FRAME_SIZE_SEARCH 9600 +#define MIB_FFT_SIZE 128 #define MIB_FRAME_UNALIGNED -3 #define MIB_FOUND 1 @@ -69,6 +70,7 @@ typedef struct LIBLTE_API { cf_t *sf_symbols; cf_t *ce[MIB_MAX_PORTS]; + cfo_t cfocorr; lte_fft_t fft; chest_dl_t chest; pbch_t pbch; diff --git a/lte/phy/lib/ch_estimation/src/refsignal_dl.c b/lte/phy/lib/ch_estimation/src/refsignal_dl.c index 168637c3b..ee7b3b7f0 100644 --- a/lte/phy/lib/ch_estimation/src/refsignal_dl.c +++ b/lte/phy/lib/ch_estimation/src/refsignal_dl.c @@ -210,7 +210,7 @@ int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, cf_t *pilots, cf_t *s fidx = ((refsignal_cs_v(port_id, l) + (cell.id % 6)) % 6); for (i = 0; i < 2*cell.nof_prb; i++) { sf_symbols[SAMPLE_IDX(cell.nof_prb, nsymbol, fidx)] = pilots[REFSIGNAL_PILOT_IDX(i,l,cell)]; - fidx += 6; // 1 reference every 6 RE + fidx += RE_X_RB/2; // 1 reference every 6 RE } } return LIBLTE_SUCCESS; diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 5b15e3f7c..5d122b338 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -174,8 +174,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 /* Get channel estimates for each port */ chest_dl_estimate(&q->chest, q->sf_symbols, q->ce, sf_idx); - - /* First decode PCFICH and obtain CFI */ if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { @@ -240,7 +238,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } } if (q->harq_process[0].mcs.mod > 0) { - ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, &q->harq_process[0], rvidx); if (ret == LIBLTE_ERROR) { diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 1f9937927..69136d980 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -90,6 +90,12 @@ int ue_mib_init(ue_mib_t * q, sync_set_cp(&q->sfind, cell.cp); } + if (cfo_init(&q->cfocorr, 5*SF_LEN_PRB(cell.nof_prb))) { + fprintf(stderr, "Error initiating CFO\n"); + goto clean_exit; + } + + if (lte_fft_init(&q->fft, cell.cp, cell.nof_prb)) { fprintf(stderr, "Error initializing FFT\n"); goto clean_exit; @@ -124,6 +130,7 @@ void ue_mib_free(ue_mib_t * q) free(q->ce[i]); } } + cfo_free(&q->cfocorr); sync_free(&q->sfind); chest_dl_free(&q->chest); pbch_free(&q->pbch); @@ -161,6 +168,7 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, if (ret < 0) { return LIBLTE_ERROR; } + INFO("Channel estimated for %d ports, Noise: %f\n", q->chest.cell.nof_ports, chest_dl_get_noise_estimate(&q->chest)); /* Reset decoder if we missed a frame */ @@ -253,6 +261,13 @@ int ue_mib_sync_and_decode(ue_mib_t * q, nf*MIB_FRAME_SIZE_SEARCH + peak_idx > MIB_FRAME_SIZE_SEARCH/10) { // PSS and SSS detected and we have space to decode the PBCH. + + // Apply CFO correction + INFO("Correcting CFO: %f\n", sync_get_cfo(&q->sfind)); + cfo_correct(&q->cfocorr, &signal[nf*MIB_FRAME_SIZE_SEARCH], &signal[nf*MIB_FRAME_SIZE_SEARCH], + -sync_get_cfo(&q->sfind) / MIB_FFT_SIZE); + + INFO("Trying to decode PBCH\n",0); ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 173848669..eb6a67d15 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -338,7 +338,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { } /* Do CFO Correction and deliver the frame */ - cfo_correct(&q->cfocorr, q->input_buffer, q->input_buffer, q->cur_cfo / CURRENT_FFTSIZE); + cfo_correct(&q->cfocorr, q->input_buffer, q->input_buffer, -q->cur_cfo / CURRENT_FFTSIZE); *sf_symbols = q->input_buffer; break; diff --git a/lte/rrc/lib/messages/src/bcch.c b/lte/rrc/lib/messages/src/bcch.c index 423148ae5..c57d6bb53 100644 --- a/lte/rrc/lib/messages/src/bcch.c +++ b/lte/rrc/lib/messages/src/bcch.c @@ -85,7 +85,7 @@ int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buff sfn=(sfn>>2); req.systemFrameNumber.buf = (uint8_t*) &sfn; req.systemFrameNumber.size = 1; - req.systemFrameNumber.bits_unused= 0; + req.systemFrameNumber.bits_unused = 0; int spare = 0; req.spare.buf = (uint8_t*) &spare; req.spare.size = 2; @@ -97,7 +97,6 @@ int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buff printf("Failed to encode element %s\n", n.failed_type ? n.failed_type->name : ""); return LIBLTE_ERROR; } - return LIBLTE_SUCCESS; } @@ -131,6 +130,9 @@ int bcch_bch_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, ui case MasterInformationBlock__dl_Bandwidth_n75: cell->nof_prb = 75; break; + case MasterInformationBlock__dl_Bandwidth_n100: + cell->nof_prb = 100; + break; } if (req->phich_Config.phich_Duration == PHICH_Config__phich_Duration_normal) { cell->phich_length = PHICH_NORM; @@ -155,6 +157,8 @@ int bcch_bch_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, ui memcpy(&sfn_i, req->systemFrameNumber.buf, req->systemFrameNumber.size); if (sfn) { *sfn=(sfn_i<<2); + } else { + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); } return LIBLTE_SUCCESS; } From fded8e40d17134d55127fea11a53d7f8533b742f Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 24 Nov 2014 16:44:24 +0000 Subject: [PATCH 26/55] Fixed problem in decode_pbch() with frame unaligment --- lte/examples/cell_measurement.c | 2 +- lte/examples/cell_search_utils.c | 13 ++++++++----- lte/examples/pdsch_enodeb.c | 1 - lte/examples/pdsch_ue.c | 2 +- lte/phy/include/liblte/phy/phch/pdsch.h | 1 - lte/phy/include/liblte/phy/ue/ue_mib.h | 14 +++++++------- lte/phy/lib/phch/src/pdsch.c | 7 ++----- lte/phy/lib/sync/src/pss.c | 2 +- lte/phy/lib/ue/src/ue_celldetect.c | 14 +++++++------- lte/phy/lib/ue/src/ue_dl.c | 9 +++------ lte/phy/lib/ue/src/ue_mib.c | 14 ++++++-------- 11 files changed, 36 insertions(+), 43 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 3d0fd0719..06a136c51 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -178,7 +178,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } - if (ue_mib_init_known_cell(&ue_mib, cell, false)) { + if (ue_mib_init(&ue_mib, cell, false)) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 21edaefe9..2a83148ed 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -59,7 +59,7 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram goto free_and_exit; } - if (ue_mib_init(&uemib, found_cell->cell_id, found_cell->cp)) { + if (ue_mib_init_1_92(&uemib, found_cell->cell_id, found_cell->cp)) { fprintf(stderr, "Error initiating PBCH decoder\n"); goto free_and_exit; } @@ -77,13 +77,13 @@ int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_fram DEBUG("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - n = ue_mib_sync_and_decode(&uemib, buffer, flen); + n = ue_mib_sync_and_decode_1_92(&uemib, buffer, flen); if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { fprintf(stderr, "Error calling ue_mib_decode()\n"); goto free_and_exit; } if (n == MIB_FRAME_UNALIGNED) { - printf("Realigning frame\n"); + INFO("Realigning frame\n",0); // Receive some randon number of samples to try to resynchronise the frame. if (cuhd_recv(uhd, buffer, 1500, 1)<0) { fprintf(stderr, "Error receiving from USRP\n"); @@ -147,6 +147,8 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo uint32_t flen = 4800; int n; + bzero(found_cell, sizeof(ue_celldetect_result_t)); + ue_celldetect_set_N_id_2(&cd, N_id_2); do { @@ -160,11 +162,12 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo n = ue_celldetect_scan(&cd, buffer, flen); switch(n) { case CS_FRAME_UNALIGNED: - printf("Realigning frame\n"); + INFO("Realigning frame\n",0); if (cuhd_recv(uhd, buffer, flen/2, 1)<0) { fprintf(stderr, "Error receiving from USRP\n"); goto free_and_exit; } + break; case CS_CELL_DETECTED: ue_celldetect_get_cell(&cd, found_cell); if (found_cell->peak > 0) { @@ -189,7 +192,7 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo goto free_and_exit; } - } while(n == 0); + } while(n == 0 || n == CS_FRAME_UNALIGNED); free_and_exit: free(buffer); diff --git a/lte/examples/pdsch_enodeb.c b/lte/examples/pdsch_enodeb.c index 7d65e5143..88e71455e 100644 --- a/lte/examples/pdsch_enodeb.c +++ b/lte/examples/pdsch_enodeb.c @@ -242,7 +242,6 @@ int main(int argc, char **argv) { uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_packed[BCH_PAYLOAD_LEN/8]; ra_pdsch_t ra_dl; ra_prb_t prb_alloc; - refsignal_cs_t csr_signal; int i; uint8_t *data; cf_t *sf_symbols[MAX_PORTS]; diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index f79c1a273..10db4c419 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -202,7 +202,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } - if (ue_mib_init_known_cell(&ue_mib, cell, false)) { + if (ue_mib_init(&ue_mib, cell, false)) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } diff --git a/lte/phy/include/liblte/phy/phch/pdsch.h b/lte/phy/include/liblte/phy/phch/pdsch.h index 01a2f4ba3..d09f29d29 100644 --- a/lte/phy/include/liblte/phy/phch/pdsch.h +++ b/lte/phy/include/liblte/phy/phch/pdsch.h @@ -76,7 +76,6 @@ typedef struct LIBLTE_API { bool rnti_is_set; uint16_t rnti; uint32_t nof_iterations; - uint64_t average_nof_iterations_n; float average_nof_iterations; /* buffers */ diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index 3473241e6..0b85bbb75 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -84,21 +84,21 @@ typedef struct LIBLTE_API { } ue_mib_t; -LIBLTE_API int ue_mib_init(ue_mib_t *q, +LIBLTE_API int ue_mib_init_1_92(ue_mib_t *q, uint32_t cell_id, lte_cp_t cp); -LIBLTE_API int ue_mib_init_known_cell(ue_mib_t *q, - lte_cell_t cell, - bool do_sync); +LIBLTE_API int ue_mib_init(ue_mib_t *q, + lte_cell_t cell, + bool do_sync); LIBLTE_API void ue_mib_free(ue_mib_t *q); LIBLTE_API void ue_mib_reset(ue_mib_t *q); -LIBLTE_API int ue_mib_sync_and_decode(ue_mib_t *q, - cf_t *signal, - uint32_t nsamples); +LIBLTE_API int ue_mib_sync_and_decode_1_92(ue_mib_t *q, + cf_t *signal, + uint32_t nsamples); LIBLTE_API int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index 8211a5216..e66890766 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -197,7 +197,6 @@ int pdsch_init(pdsch_t *q, lte_cell_t cell) { ret = LIBLTE_ERROR; q->cell = cell; - q->average_nof_iterations_n = 0; q->max_symbols = q->cell.nof_prb * MAX_PDSCH_RE(q->cell.cp); INFO("Init PDSCH: %d ports %d PRBs, max_symbols: %d\n", q->cell.nof_ports, @@ -578,10 +577,8 @@ int pdsch_decode_tb(pdsch_t *q, uint8_t *data, uint32_t tbs, uint32_t nb_e, } } while (q->nof_iterations < TDEC_MAX_ITERATIONS && !early_stop); - q->average_nof_iterations = VEC_CMA((float) q->nof_iterations, - q->average_nof_iterations, - q->average_nof_iterations_n); - q->average_nof_iterations_n++; + q->average_nof_iterations = VEC_EMA((float) q->nof_iterations, q->average_nof_iterations, 0.2); + /* Copy data to another buffer, removing the Codeblock CRC */ if (i < harq_process->cb_segm.C - 1) { diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index 3f42d7872..8808d4aa2 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -237,7 +237,7 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) uint32_t conv_output_len; if (!lte_N_id_2_isvalid(q->N_id_2)) { - fprintf(stderr, "Error finding PSS peak, N_id_2 not set\n"); + fprintf(stderr, "Error finding PSS peak, Must set N_id_2 first\n"); return LIBLTE_ERROR; } diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index 51a6386bd..4a526a792 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -36,6 +36,7 @@ #include "liblte/phy/utils/debug.h" #include "liblte/phy/utils/vector.h" + #define FIND_FFTSIZE 64 #define FIND_SFLEN 5*SF_LEN(FIND_FFTSIZE) @@ -51,7 +52,7 @@ int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total, uint3 bzero(q, sizeof(ue_celldetect_t)); - q->candidates = malloc(sizeof(ue_celldetect_result_t) * max_frames_detected); + q->candidates = calloc(sizeof(ue_celldetect_result_t), max_frames_detected); if (!q->candidates) { perror("malloc"); goto clean_exit; @@ -59,12 +60,12 @@ int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total, uint3 if (sync_init(&q->sfind, FIND_SFLEN, FIND_FFTSIZE)) { goto clean_exit; } - q->mode_ntimes = malloc(sizeof(uint32_t) * max_frames_detected); + q->mode_ntimes = calloc(sizeof(uint32_t), max_frames_detected); if (!q->mode_ntimes) { perror("malloc"); goto clean_exit; } - q->mode_counted = malloc(sizeof(uint8_t) * max_frames_detected); + q->mode_counted = calloc(sizeof(uint8_t), max_frames_detected); if (!q->mode_counted) { perror("malloc"); goto clean_exit; @@ -160,9 +161,6 @@ void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_c } uint32_t max_times=0, mode_pos=0; for (i=0;inof_frames_detected;i++) { - if (q->mode_ntimes[i] > 0) { - DEBUG("ntimes[%d]=%d (CID: %d)\n",i,q->mode_ntimes[i],q->candidates[i].cell_id); - } if (q->mode_ntimes[i] > max_times) { max_times = q->mode_ntimes[i]; mode_pos = i; @@ -177,7 +175,9 @@ void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_c if (CP_ISNORM(q->candidates[i].cp)) { nof_normal++; } - found_cell->peak += q->candidates[i].peak/q->mode_ntimes[mode_pos]; + if (q->mode_ntimes[mode_pos]) { + found_cell->peak += q->candidates[i].peak/q->mode_ntimes[mode_pos]; + } } } if (nof_normal > q->mode_ntimes[mode_pos]/2) { diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 5d122b338..7282dd320 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -145,7 +145,6 @@ void ue_dl_free(ue_dl_t *q) { } LIBLTE_API float mean_exec_time=0; -int frame_cnt=0; dci_format_t ue_formats[] = {Format1A,Format1}; // Format1B should go here also const uint32_t nof_ue_formats = 2; @@ -174,6 +173,8 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 /* Get channel estimates for each port */ chest_dl_estimate(&q->chest, q->sf_symbols, q->ce, sf_idx); + + /* First decode PCFICH and obtain CFI */ if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { @@ -230,7 +231,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } else { rvidx = ra_dl.rv_idx; } - if (rvidx == 0) { if (pdsch_harq_setup(&q->harq_process[0], ra_dl.mcs, &ra_dl.prb_alloc)) { fprintf(stderr, "Error configuring HARQ process\n"); @@ -254,12 +254,9 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 q->pkts_total++; } } - gettimeofday(&t[2], NULL); get_time_interval(t); - mean_exec_time = (float) VEC_CMA((float) t[0].tv_usec, mean_exec_time, frame_cnt); - - frame_cnt++; + mean_exec_time = (float) VEC_EMA((float) t[0].tv_usec, mean_exec_time, 0.01); if (crc_rem == rnti && ret == LIBLTE_SUCCESS) { diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 69136d980..2357c30fc 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -38,7 +38,7 @@ #define MIB_FIND_THRESHOLD 0.0 -int ue_mib_init(ue_mib_t * q, +int ue_mib_init_1_92(ue_mib_t * q, uint32_t cell_id, lte_cp_t cp) { @@ -47,12 +47,12 @@ int ue_mib_init(ue_mib_t * q, cell.nof_prb = 6; cell.id = cell_id; cell.cp = cp; - return ue_mib_init_known_cell(q, cell, true); + return ue_mib_init(q, cell, true); } - int ue_mib_init_known_cell(ue_mib_t * q, - lte_cell_t cell, - bool do_sync) + int ue_mib_init(ue_mib_t * q, + lte_cell_t cell, + bool do_sync) { int ret = LIBLTE_ERROR_INVALID_INPUTS; @@ -95,7 +95,6 @@ int ue_mib_init(ue_mib_t * q, goto clean_exit; } - if (lte_fft_init(&q->fft, cell.cp, cell.nof_prb)) { fprintf(stderr, "Error initializing FFT\n"); goto clean_exit; @@ -168,7 +167,6 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, if (ret < 0) { return LIBLTE_ERROR; } - INFO("Channel estimated for %d ports, Noise: %f\n", q->chest.cell.nof_ports, chest_dl_get_noise_estimate(&q->chest)); /* Reset decoder if we missed a frame */ @@ -216,7 +214,7 @@ void ue_mib_get_payload(ue_mib_t *q, } } -int ue_mib_sync_and_decode(ue_mib_t * q, +int ue_mib_sync_and_decode_1_92(ue_mib_t * q, cf_t *signal, uint32_t nsamples) { From 21636025afe03ac3735fc9f21d139e20b4fd903a Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 24 Nov 2014 16:46:38 +0000 Subject: [PATCH 27/55] Calling ue_dl in pdsch_ue only when pbch is decoded --- lte/examples/pdsch_ue.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 10db4c419..15c30c031 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -214,6 +214,8 @@ int main(int argc, char **argv) { // Register Ctrl+C handler signal(SIGINT, sig_int_handler); + + bool pbch_decoded = false; /* Main loop */ while (go_exit == false && @@ -240,22 +242,27 @@ int main(int argc, char **argv) { bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); sfn = (sfn + sfn_offset)%1024; + pbch_decoded = true; } } - /* We are looking for SI Blocks, search only in appropiate places */ - if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { - n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, prog_args.rnti); - if (n < 0) { - fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - } - nof_trials++; + if (pbch_decoded) { + /* We are looking for SI Blocks, search only in appropiate places */ + if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { + n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, prog_args.rnti); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + } + nof_trials++; + } + snr = VEC_EMA(chest_dl_get_snr(&ue_dl.chest), snr, 0.01); } - snr = VEC_CMA(chest_dl_get_snr(&ue_dl.chest),snr,sf_cnt); } if (ue_sync_get_sfidx(&ue_sync) == 9) { - sfn++; - if (sfn == 1024) { - sfn = 0; + if (pbch_decoded) { + sfn++; + if (sfn == 1024) { + sfn = 0; + } } } #ifndef DISABLE_GRAPHICS @@ -271,6 +278,7 @@ int main(int argc, char **argv) { 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), 100*(1-(float) ue_dl.nof_pdcch_detected/nof_trials), (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); + } sf_cnt++; } // Main loop From cbe159a77bb5e562fcd7441a33effff67a89f095 Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 24 Nov 2014 18:50:38 +0000 Subject: [PATCH 28/55] Changed sync() to return always 1 if the peak is found --- lte/phy/lib/sync/src/sync.c | 65 ++++++++++++++++++------------ lte/phy/lib/ue/src/ue_celldetect.c | 8 ++-- 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 93a04fa4c..4a7001470 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -186,6 +186,9 @@ static lte_cp_t detect_cp(sync_t *q, cf_t *input, uint32_t peak_pos) } } +/* Returns 1 if the SSS is found, 0 if not and -1 if there is not enough space + * to correlate + */ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { int sss_idx, ret; @@ -199,7 +202,7 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { sss_idx = (int) peak_pos - 2*(q->fft_size + CP(q->fft_size, q->cp)); if (sss_idx < 0) { INFO("Not enough room to decode CP SSS (sss_idx=%d, peak_pos=%d)\n", sss_idx, peak_pos); - return LIBLTE_SUCCESS; + return LIBLTE_ERROR; } sss_synch_m0m1(&q->sss, &input[sss_idx], &q->m0, &q->m0_value, &q->m1, &q->m1_value); @@ -208,16 +211,23 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { ret = sss_synch_N_id_1(&q->sss, q->m0, q->m1); if (ret >= 0) { q->N_id_1 = (uint32_t) ret; + DEBUG("SSS detected N_id_1=%d, sf_idx=%d, %s CP\n", + q->N_id_1, q->sf_idx, CP_ISNORM(q->cp)?"Normal":"Extended"); + return 1; } else { q->N_id_1 = 1000; + return LIBLTE_SUCCESS; } - - DEBUG("SSS detected N_id_1=%d, sf_idx=%d, %s CP\n", - q->N_id_1, q->sf_idx, CP_ISNORM(q->cp)?"Normal":"Extended"); - - return 1; } + +/** Finds the PSS sequence previously defined by a call to sync_set_N_id_2() + * around the position find_offset in the buffer input. + * Returns 1 if the correlation peak exceeds the threshold set by sync_set_threshold() + * or 0 otherwise. Returns a negative number on error (if N_id_2 has not been set) + * + * The maximum of the correlation peak is always stored in *peak_position + */ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_position) { @@ -249,8 +259,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit peak_pos + find_offset >= q->fft_size) { /* Compute the energy of the received PSS sequence to normalize */ - cf_t *pss_ptr = &input[find_offset+peak_pos-q->fft_size]; - energy = sqrtf(crealf(vec_dot_prod_conj_ccc(pss_ptr, pss_ptr, q->fft_size)) / (q->fft_size)); + energy = sqrtf(vec_avg_power_cf(&input[find_offset+peak_pos-q->fft_size], q->fft_size)); q->mean_energy = VEC_CMA(energy, q->mean_energy, q->frame_cnt); } else { if (q->mean_energy == 0.0) { @@ -263,28 +272,34 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit q->peak_value = peak_unnormalized/energy; q->mean_peak_value = VEC_CMA(q->peak_value, q->mean_peak_value, q->frame_cnt); q->frame_cnt++; + + if (peak_position) { + *peak_position = (uint32_t) peak_pos; + } /* If peak is over threshold, compute CFO and SSS */ if (q->peak_value >= q->threshold) { - if (find_offset + peak_pos >= q->fft_size + CP_EXT(q->fft_size)) { - q->cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); - if (q->sss_en) { - ret = sync_sss(q, input, find_offset + peak_pos); - if (ret < 0) { - fprintf(stderr, "Error synchronizing with SSS\n"); - return LIBLTE_ERROR; - } - } else { - ret = 1; - } - } else { - INFO("No space for CFO computation: frame starts at \n",peak_pos); - } - if (peak_position) { - *peak_position = (uint32_t) peak_pos; + // Set an invalid N_id_1 indicating SSS is yet to be detected + q->N_id_1 = 1000; + + // Try to detect SSS + if (q->sss_en) { + if (sync_sss(q, input, find_offset + peak_pos) < 0) { + INFO("No space for SSS processing. Frame starts at %d\n", peak_pos); + } } - } + // Make sure we have enough space to estimate CFO + if (find_offset + peak_pos >= q->fft_size + CP_EXT(q->fft_size)) { + q->cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); + } else { + INFO("No space for CFO computation. Frame starts at \n",peak_pos); + } + // Return 1 (peak detected) even if we couldn't estimate CFO and SSS + ret = 1; + } else { + ret = 0; + } INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", ret, q->N_id_2, peak_pos, peak_unnormalized,energy,q->peak_value, q->threshold, q->sf_idx, find_offset); diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index 4a526a792..e3464f567 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -226,11 +226,6 @@ int ue_celldetect_scan(ue_celldetect_t * q, return LIBLTE_ERROR; } - /* If peak position does not allow to read SSS, return error -3 */ - if (ret == LIBLTE_SUCCESS && peak_idx != 0) { - return CS_FRAME_UNALIGNED; - } - /* Process the peak result */ if (ret == 1) { if (sync_sss_detected(&q->sfind)) { @@ -247,6 +242,9 @@ int ue_celldetect_scan(ue_celldetect_t * q, q->candidates[q->current_nof_detected].peak, q->candidates[q->current_nof_detected].cell_id, lte_cp_string(q->candidates[q->current_nof_detected].cp)); q->current_nof_detected++; + } else { + /* If peak position does not allow to read SSS, return error -3 */ + return CS_FRAME_UNALIGNED; } } q->current_nof_total++; From 256666554acf89dcc28ebcd7cce1a12bc02b143d Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 25 Nov 2014 16:23:40 +0000 Subject: [PATCH 29/55] Fixed memory bug with extended CP --- lte/examples/cell_search_utils.c | 2 ++ lte/examples/pdsch_ue.c | 4 ++-- lte/phy/lib/ch_estimation/src/chest_dl.c | 30 +++++++++++++++++------- lte/phy/lib/sync/src/pss.c | 13 +++++++--- lte/phy/lib/sync/src/sync.c | 2 +- 5 files changed, 36 insertions(+), 15 deletions(-) diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 2a83148ed..93301e88f 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -256,6 +256,8 @@ int detect_and_decode_cell(cell_detect_cfg_t *config, void *uhd, int force_N_id_ } } + found_cells[max_peak_cell].cp = CPEXT; + printf("Decoding PBCH for cell %d (N_id_2=%d)\n", found_cells[max_peak_cell].cell_id, max_peak_cell); if (decode_pbch(uhd, &found_cells[max_peak_cell], 400, bch_payload, &nof_tx_ports, NULL)) { fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", found_cells[max_peak_cell].cell_id); diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 15c30c031..46f73cbaf 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -273,10 +273,10 @@ int main(int argc, char **argv) { if ((sf_cnt%10)==0) { printf("CFO: %+6.2f KHz, SFO: %+6.2f Khz, SNR: %5.1f dB, NOI: %.2f, " - "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", + "PDCCH-Miss: %d/%d, PDSCH-BLER: %5.2f%% (%d blocks)\n", ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), - 100*(1-(float) ue_dl.nof_pdcch_detected/nof_trials), + nof_trials-ue_dl.nof_pdcch_detected, nof_trials, (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); } diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 185ab9454..26943f093 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -255,17 +255,29 @@ static void interpolate_pilots(chest_dl_t *q, cf_t *ce, uint32_t port_id) } /* Now interpolate in the time domain between symbols */ - if (nsymbols == 4) { - interp_linear_vector(&q->interp_linvec, &cesymb(0), &cesymb(4), &cesymb(1), 3); - interp_linear_vector(&q->interp_linvec, &cesymb(4), &cesymb(7), &cesymb(5), 2); - interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(11), &cesymb(8), 3); - interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(11), &cesymb(12), 2); + if (CP_ISNORM(q->cell.cp)) { + if (nsymbols == 4) { + interp_linear_vector(&q->interp_linvec, &cesymb(0), &cesymb(4), &cesymb(1), 3); + interp_linear_vector(&q->interp_linvec, &cesymb(4), &cesymb(7), &cesymb(5), 2); + interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(11), &cesymb(8), 3); + interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(11), &cesymb(12), 2); + } else { + interp_linear_vector(&q->interp_linvec, &cesymb(8), &cesymb(1), &cesymb(0), 1); + interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(8), &cesymb(2), 6); + interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(8), &cesymb(9), 5); + } } else { - interp_linear_vector(&q->interp_linvec, &cesymb(8), &cesymb(1), &cesymb(0), 1); - interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(8), &cesymb(2), 6); - interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(8), &cesymb(9), 5); + if (nsymbols == 4) { + interp_linear_vector(&q->interp_linvec, &cesymb(0), &cesymb(3), &cesymb(1), 2); + interp_linear_vector(&q->interp_linvec, &cesymb(3), &cesymb(6), &cesymb(4), 2); + interp_linear_vector(&q->interp_linvec, &cesymb(6), &cesymb(9), &cesymb(7), 2); + interp_linear_vector(&q->interp_linvec, &cesymb(6), &cesymb(9), &cesymb(9), 2); + } else { + interp_linear_vector(&q->interp_linvec, &cesymb(7), &cesymb(1), &cesymb(0), 1); + interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(7), &cesymb(2), 5); + interp_linear_vector(&q->interp_linvec, &cesymb(1), &cesymb(7), &cesymb(8), 4); + } } - } float chest_dl_rssi(lte_cell_t cell, cf_t *input) { diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index 8808d4aa2..8c6246604 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -255,10 +255,17 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) /* Find maximum of the absolute value of the correlation */ corr_peak_pos = vec_max_abs_ci(q->conv_output, conv_output_len-1); - if (corr_peak_value) { - *corr_peak_value = cabsf(q->conv_output[corr_peak_pos]); + if (corr_peak_pos <= q->frame_size) { + if (corr_peak_value) { + *corr_peak_value = cabsf(q->conv_output[corr_peak_pos]); + } + ret = (int) corr_peak_pos; + } else { + ret = q->frame_size; + if (corr_peak_value) { + *corr_peak_value = 0.0; + } } - ret = (int) corr_peak_pos; } return ret; } diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 4a7001470..0f5f1b13f 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -301,7 +301,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit ret = 0; } - INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", + printf("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", ret, q->N_id_2, peak_pos, peak_unnormalized,energy,q->peak_value, q->threshold, q->sf_idx, find_offset); } else if (lte_N_id_2_isvalid(q->N_id_2)) { From 929033650233b7734a11c1e456580a782b82131d Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 25 Nov 2014 16:24:02 +0000 Subject: [PATCH 30/55] Fixed memory bug with extended CP --- lte/examples/cell_search_utils.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 93301e88f..2a83148ed 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -256,8 +256,6 @@ int detect_and_decode_cell(cell_detect_cfg_t *config, void *uhd, int force_N_id_ } } - found_cells[max_peak_cell].cp = CPEXT; - printf("Decoding PBCH for cell %d (N_id_2=%d)\n", found_cells[max_peak_cell].cell_id, max_peak_cell); if (decode_pbch(uhd, &found_cells[max_peak_cell], 400, bch_payload, &nof_tx_ports, NULL)) { fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", found_cells[max_peak_cell].cell_id); From 9b3a890d6a5e1b4ff84c051d64179b17bf0d68ea Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 25 Nov 2014 22:11:15 +0000 Subject: [PATCH 31/55] Increased sync threshold. Fixed some memory issues --- lte/examples/pdsch_ue.c | 2 +- lte/phy/lib/sync/src/pss.c | 13 +++---------- lte/phy/lib/sync/src/sync.c | 18 +++++++++++++----- lte/phy/lib/ue/src/ue_sync.c | 13 ++++++++----- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 46f73cbaf..141db674c 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -273,7 +273,7 @@ int main(int argc, char **argv) { if ((sf_cnt%10)==0) { printf("CFO: %+6.2f KHz, SFO: %+6.2f Khz, SNR: %5.1f dB, NOI: %.2f, " - "PDCCH-Miss: %d/%d, PDSCH-BLER: %5.2f%% (%d blocks)\n", + "PDCCH-Miss: %d/%d, PDSCH-BLER: %5.2f%% (%d blocks)\r", ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), nof_trials-ue_dl.nof_pdcch_detected, nof_trials, diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index 8c6246604..f0925891f 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -255,17 +255,10 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) /* Find maximum of the absolute value of the correlation */ corr_peak_pos = vec_max_abs_ci(q->conv_output, conv_output_len-1); - if (corr_peak_pos <= q->frame_size) { - if (corr_peak_value) { - *corr_peak_value = cabsf(q->conv_output[corr_peak_pos]); - } - ret = (int) corr_peak_pos; - } else { - ret = q->frame_size; - if (corr_peak_value) { - *corr_peak_value = 0.0; - } + if (corr_peak_value) { + *corr_peak_value = cabsf(q->conv_output[corr_peak_pos]); } + ret = (int) corr_peak_pos; } return ret; } diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 0f5f1b13f..8ec939d3f 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -195,7 +195,12 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { sss_synch_set_N_id_2(&q->sss, q->N_id_2); if (q->detect_cp) { - q->cp = detect_cp(q, input, peak_pos); + if (peak_pos - q->fft_size - CP_EXT(q->fft_size)) { + q->cp = detect_cp(q, input, peak_pos); + } else { + INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); + return LIBLTE_ERROR; + } } /* Make sure we have enough room to find SSS sequence */ @@ -255,8 +260,9 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit fprintf(stderr, "Error calling finding PSS sequence\n"); return LIBLTE_ERROR; } - if (q->normalize_en && - peak_pos + find_offset >= q->fft_size) + if (q->normalize_en && + peak_pos < q->frame_size && + peak_pos + find_offset >= q->fft_size ) { /* Compute the energy of the received PSS sequence to normalize */ energy = sqrtf(vec_avg_power_cf(&input[find_offset+peak_pos-q->fft_size], q->fft_size)); @@ -290,7 +296,9 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit } } // Make sure we have enough space to estimate CFO - if (find_offset + peak_pos >= q->fft_size + CP_EXT(q->fft_size)) { + if (peak_pos < q->frame_size && + peak_pos + find_offset >= q->fft_size) + { q->cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); } else { INFO("No space for CFO computation. Frame starts at \n",peak_pos); @@ -301,7 +309,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit ret = 0; } - printf("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", + INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", ret, q->N_id_2, peak_pos, peak_unnormalized,energy,q->peak_value, q->threshold, q->sf_idx, find_offset); } else if (lte_N_id_2_isvalid(q->N_id_2)) { diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index eb6a67d15..408914113 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -46,9 +46,9 @@ cf_t dummy[MAX_TIME_OFFSET]; #define CURRENT_SLOTLEN_RE SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) #define CURRENT_SFLEN_RE SF_LEN_RE(q->cell.nof_prb, q->cell.cp) -#define FIND_THRESHOLD 1.0 -#define TRACK_THRESHOLD 0.4 -#define TRACK_MAX_LOST 5 +#define FIND_THRESHOLD 1.4 +#define TRACK_THRESHOLD 0.7 +#define TRACK_MAX_LOST 10 int ue_sync_init(ue_sync_t *q, @@ -190,7 +190,10 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { q->sf_idx, sync_get_sf_idx(&q->strack), q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value); - /* FIXME: What should we do in this case? */ + /* FIXME: What should we do in this case? + * If the threshold is high enough, an OK peak means it is likely to be true + * Otherwise, maybe we should not trust the new sf_idx. + */ q->sf_idx = sync_get_sf_idx(&q->strack); //q->state = SF_FIND; } else { @@ -223,7 +226,7 @@ int track_peak_no(ue_sync_t *q) { /* if we missed too many PSS go back to FIND */ q->frame_no_cnt++; if (q->frame_no_cnt >= TRACK_MAX_LOST) { - INFO("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); + printf("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); q->state = SF_FIND; } else { INFO("Tracking peak not found. Peak %.3f, %d lost\n", From 213b9467f3040bdcd0155e775620f55b1cf42a58 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 25 Nov 2014 22:12:05 +0000 Subject: [PATCH 32/55] Increased sync threshold. Fixed some memory issues --- lte/examples/pdsch_ue.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 141db674c..acf28e472 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -273,10 +273,10 @@ int main(int argc, char **argv) { if ((sf_cnt%10)==0) { printf("CFO: %+6.2f KHz, SFO: %+6.2f Khz, SNR: %5.1f dB, NOI: %.2f, " - "PDCCH-Miss: %d/%d, PDSCH-BLER: %5.2f%% (%d blocks)\r", + "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), - nof_trials-ue_dl.nof_pdcch_detected, nof_trials, + 100*(1-(float) nof_trials/ue_dl.nof_pdcch_detected), (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); } From 632e841dbe31883e03ed304d8f0620ab13da58cd Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 25 Nov 2014 22:12:43 +0000 Subject: [PATCH 33/55] Increased sync threshold. Fixed some memory issues --- lte/examples/pdsch_ue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index acf28e472..15c30c031 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -276,7 +276,7 @@ int main(int argc, char **argv) { "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), - 100*(1-(float) nof_trials/ue_dl.nof_pdcch_detected), + 100*(1-(float) ue_dl.nof_pdcch_detected/nof_trials), (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); } From 445fc639e825975ba92f213f33a8ce42796ef67f Mon Sep 17 00:00:00 2001 From: ismagom Date: Wed, 26 Nov 2014 17:24:10 +0000 Subject: [PATCH 34/55] Improved UE measurements. Calibrated for gain 40 dB --- lte/examples/cell_measurement.c | 22 ++++--- lte/examples/pdsch_ue.c | 2 +- .../liblte/phy/ch_estimation/chest_dl.h | 2 +- lte/phy/include/liblte/phy/utils/vector.h | 4 +- lte/phy/lib/ch_estimation/src/chest_dl.c | 59 +++++++++++-------- lte/phy/lib/sync/src/sync.c | 33 +++++++---- lte/phy/lib/ue/src/ue_sync.c | 16 ++--- lte/phy/lib/utils/src/vector.c | 7 +-- 8 files changed, 82 insertions(+), 63 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 06a136c51..c59020a1a 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -41,6 +41,11 @@ #include "liblte/cuhd/cuhd.h" #include "cell_search_utils.h" +#define B210_DEFAULT_GAIN 40.0 +#define B210_DEFAULT_GAIN_CORREC 76.0 // Gain of the Rx chain when the gain is set to 40 + +float gain_offset = B210_DEFAULT_GAIN_CORREC; + cell_detect_cfg_t cell_detect_config = { 500, // nof_frames_total 50, // nof_frames_detected @@ -64,7 +69,7 @@ void args_default(prog_args_t *args) { args->force_N_id_2 = -1; // Pick the best args->uhd_args = ""; args->uhd_freq = -1.0; - args->uhd_gain = 60.0; + args->uhd_gain = B210_DEFAULT_GAIN; } void usage(prog_args_t *args, char *prog) { @@ -141,7 +146,7 @@ int main(int argc, char **argv) { int n; uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; - float rssi=0, rsrp=0, rsrq=0, snr=0; + float rssi_utra=0,rssi=0, rsrp=0, rsrq=0, snr=0; cf_t *nullce[MAX_PORTS]; for (int i=0;i2?2:1; +float chest_dl_rssi(chest_dl_t *q, cf_t *input, uint32_t port_id) { + uint32_t l; - for (p=0;pcell.cp, port_id) * q->cell.nof_prb * RE_X_RB]; + rssi += vec_dot_prod_conj_ccc(tmp,tmp,q->cell.nof_prb * RE_X_RB); + } + return rssi/nsymbols; } float chest_dl_rsrp(chest_dl_t *q, uint32_t port_id) { - return crealf(vec_dot_prod_conj_ccc(q->pilot_estimates_average[port_id], - q->pilot_estimates_average[port_id], - REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id))) - / REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id); + return vec_avg_power_cf(q->pilot_recv_signal[port_id], + REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); } int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx, uint32_t port_id) @@ -307,16 +302,23 @@ int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx /* Get references from the input signal */ refsignal_cs_get_sf(q->cell, port_id, input, q->pilot_recv_signal[port_id]); + /* Compute RSRP for the references in this port */ + if (port_id == 0) { + q->rsrp[port_id] = chest_dl_rsrp(q, port_id); + } + + /* compute rssi */ + if (port_id == 0) { + q->rssi[port_id] = chest_dl_rssi(q, input, port_id); + } + /* Use the known CSR signal to compute Least-squares estimates */ vec_prod_conj_ccc(q->pilot_recv_signal[port_id], q->csr_signal.pilots[port_id/2][sf_idx], q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); /* Average pilot estimates */ average_pilots(q, port_id); - - /* Compute RSRP for the references in this port */ - q->rsrp[port_id] = chest_dl_rsrp(q, port_id); - + /* Interpolate to create channel estimates for all resource grid */ if (ce != NULL) { interpolate_pilots(q, ce, port_id); @@ -334,8 +336,6 @@ int chest_dl_estimate(chest_dl_t *q, cf_t *input, cf_t *ce[MAX_PORTS], uint32_t for (port_id=0;port_idcell.nof_ports;port_id++) { chest_dl_estimate_port(q, input, ce[port_id], sf_idx, port_id); } - /* compute rssi */ - q->rssi = chest_dl_rssi(q->cell, input); return LIBLTE_SUCCESS; } @@ -346,21 +346,28 @@ float chest_dl_get_noise_estimate(chest_dl_t *q) { float chest_dl_get_snr(chest_dl_t *q) { float noise = chest_dl_get_noise_estimate(q); if (noise) { - return chest_dl_get_rssi(q)/(noise*2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb)); + return chest_dl_get_rssi(q)/(noise);//*2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb)); } else { return 0.0; } } float chest_dl_get_rssi(chest_dl_t *q) { - return q->rssi; + return 4*q->rssi[0]/q->cell.nof_prb/RE_X_RB; } +/* q->rssi[0] is the average power in all RE in all symbol containing references for port 0 . q->rssi[0]/q->cell.nof_prb is the average power per PRB + * q->rsrp[0] is the average power of RE containing references only (for port 0). +*/ float chest_dl_get_rsrq(chest_dl_t *q) { - return (4*q->cell.nof_ports*q->cell.nof_prb) * chest_dl_get_rsrp(q) / q->rssi; + return q->cell.nof_prb*q->rsrp[0] / q->rssi[0]; } float chest_dl_get_rsrp(chest_dl_t *q) { - return vec_acc_ff(q->rsrp, q->cell.nof_ports)/q->cell.nof_ports; + // return linear average from port 0 only + return q->rsrp[0]; + + // return linear average from all ports + //return vec_acc_ff(q->rsrp, q->cell.nof_ports)/q->cell.nof_ports; } diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 8ec939d3f..710adc7d9 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -34,6 +34,9 @@ #include "liblte/phy/sync/sync.h" #include "liblte/phy/utils/vector.h" +#define MEANENERGY_EMA_ALPHA 0.5 +#define MEANPEAK_EMA_ALPHA 0.2 + static bool fft_size_isvalid(uint32_t fft_size) { if (fft_size >= FFT_SIZE_MIN && fft_size <= FFT_SIZE_MAX && (fft_size%64) == 0) { @@ -55,7 +58,8 @@ int sync_init(sync_t *q, uint32_t frame_size, uint32_t fft_size) { bzero(q, sizeof(sync_t)); q->detect_cp = true; q->normalize_en = true; - q->mean_energy = 1.0; + q->mean_energy = 0.0; + q->mean_peak_value = 0.0; q->sss_en = true; q->N_id_2 = 1000; q->N_id_1 = 1000; @@ -261,22 +265,26 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit return LIBLTE_ERROR; } if (q->normalize_en && - peak_pos < q->frame_size && peak_pos + find_offset >= q->fft_size ) { /* Compute the energy of the received PSS sequence to normalize */ energy = sqrtf(vec_avg_power_cf(&input[find_offset+peak_pos-q->fft_size], q->fft_size)); - q->mean_energy = VEC_CMA(energy, q->mean_energy, q->frame_cnt); + q->mean_energy = VEC_EMA(energy, q->mean_energy, MEANENERGY_EMA_ALPHA); } else { if (q->mean_energy == 0.0) { - q->mean_energy = 1.0; + energy = 1.0; + } else { + energy = q->mean_energy; } - energy = q->mean_energy; } /* Normalize and compute mean peak value */ - q->peak_value = peak_unnormalized/energy; - q->mean_peak_value = VEC_CMA(q->peak_value, q->mean_peak_value, q->frame_cnt); + if (q->mean_energy) { + q->peak_value = peak_unnormalized/q->mean_energy; + } else { + q->peak_value = peak_unnormalized/energy; + } + q->mean_peak_value = VEC_EMA(q->peak_value, q->mean_peak_value, MEANPEAK_EMA_ALPHA); q->frame_cnt++; if (peak_position) { @@ -284,7 +292,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit } /* If peak is over threshold, compute CFO and SSS */ - if (q->peak_value >= q->threshold) { + if (q->peak_value >= q->threshold) { // Set an invalid N_id_1 indicating SSS is yet to be detected q->N_id_1 = 1000; @@ -296,9 +304,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit } } // Make sure we have enough space to estimate CFO - if (peak_pos < q->frame_size && - peak_pos + find_offset >= q->fft_size) - { + if (peak_pos + find_offset >= q->fft_size) { q->cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); } else { INFO("No space for CFO computation. Frame starts at \n",peak_pos); @@ -309,8 +315,9 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit ret = 0; } - INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f threshold=%.2f sf_idx=%d offset=%d\n", - ret, q->N_id_2, peak_pos, peak_unnormalized,energy,q->peak_value, q->threshold, q->sf_idx, find_offset); + INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f mean_energy=%.2f threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", + ret, q->N_id_2, peak_pos, peak_unnormalized*1000,energy*1000,q->peak_value, q->mean_energy*1000, + q->threshold, q->sf_idx, 15*q->cfo); } else if (lte_N_id_2_isvalid(q->N_id_2)) { fprintf(stderr, "Must call sync_set_N_id_2() first!\n"); diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 408914113..4e207a3d3 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -46,10 +46,12 @@ cf_t dummy[MAX_TIME_OFFSET]; #define CURRENT_SLOTLEN_RE SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) #define CURRENT_SFLEN_RE SF_LEN_RE(q->cell.nof_prb, q->cell.cp) -#define FIND_THRESHOLD 1.4 -#define TRACK_THRESHOLD 0.7 +#define FIND_THRESHOLD 1.5 +#define TRACK_THRESHOLD 0.8 #define TRACK_MAX_LOST 10 +#define CFO_EMA_ALPHA 0.01 + int ue_sync_init(ue_sync_t *q, lte_cell_t cell, @@ -145,7 +147,7 @@ float ue_sync_get_cfo(ue_sync_t *q) { } float ue_sync_get_sfo(ue_sync_t *q) { - return 1000*q->mean_time_offset; + return 5000*q->mean_time_offset; } void ue_sync_decode_sss_on_track(ue_sync_t *q, bool enabled) { @@ -209,9 +211,9 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { } /* compute cumulative moving average CFO */ - q->cur_cfo = VEC_CMA(sync_get_cfo(&q->strack), q->cur_cfo, q->frame_ok_cnt); + q->cur_cfo = VEC_EMA(sync_get_cfo(&q->strack), q->cur_cfo, CFO_EMA_ALPHA); /* compute cumulative moving average time offset */ - q->mean_time_offset = (float) VEC_CMA((float) q->time_offset, q->mean_time_offset, q->frame_ok_cnt); + q->mean_time_offset = (float) VEC_CMA((float) q->time_offset, q->mean_time_offset, q->frame_total_cnt); q->peak_idx = CURRENT_SFLEN/2 + q->time_offset; q->frame_ok_cnt++; @@ -356,8 +358,8 @@ void ue_sync_reset(ue_sync_t *q) { q->frame_ok_cnt = 0; q->frame_no_cnt = 0; q->frame_total_cnt = 0; - q->cur_cfo = 0; - q->mean_time_offset = 0; + q->cur_cfo = 0.0; + q->mean_time_offset = 0.0; q->time_offset = 0; #ifdef MEASURE_EXEC_TIME q->mean_exec_time = 0; diff --git a/lte/phy/lib/utils/src/vector.c b/lte/phy/lib/utils/src/vector.c index a807f10bf..d78836b33 100644 --- a/lte/phy/lib/utils/src/vector.c +++ b/lte/phy/lib/utils/src/vector.c @@ -475,12 +475,7 @@ float vec_dot_prod_fff(float *x, float *y, uint32_t len) { float vec_avg_power_cf(cf_t *x, uint32_t len) { - int j; - float power = 0; - for (j=0;j Date: Wed, 26 Nov 2014 17:29:33 +0000 Subject: [PATCH 35/55] Fixed memory bug in CP detection --- lte/examples/cell_measurement.c | 2 +- lte/phy/lib/sync/src/sync.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index c59020a1a..c054bee05 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -49,7 +49,7 @@ float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_detect_cfg_t cell_detect_config = { 500, // nof_frames_total 50, // nof_frames_detected - CS_FIND_THRESHOLD // threshold + 0.4 // threshold }; /********************************************************************** diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 710adc7d9..2275880b8 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -199,7 +199,7 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { sss_synch_set_N_id_2(&q->sss, q->N_id_2); if (q->detect_cp) { - if (peak_pos - q->fft_size - CP_EXT(q->fft_size)) { + if (peak_pos - q->fft_size - CP_EXT(q->fft_size) > 0) { q->cp = detect_cp(q, input, peak_pos); } else { INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); From f32ac7b1ab9e3884d019052874dc969c96d0daf5 Mon Sep 17 00:00:00 2001 From: ismagom Date: Wed, 26 Nov 2014 17:30:39 +0000 Subject: [PATCH 36/55] Fixed memory bug in CP detection --- lte/phy/lib/sync/src/sync.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 2275880b8..2cfc0e90c 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -199,7 +199,7 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { sss_synch_set_N_id_2(&q->sss, q->N_id_2); if (q->detect_cp) { - if (peak_pos - q->fft_size - CP_EXT(q->fft_size) > 0) { + if (peak_pos - q->fft_size - CP_EXT(q->fft_size) >= 0) { q->cp = detect_cp(q, input, peak_pos); } else { INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); From 48da6746cd4d8e508e93549aa3a9b8f2b6a25afc Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 1 Dec 2014 21:15:32 +0000 Subject: [PATCH 37/55] Added MEX lib. Added PDCCH test --- CMakeLists.txt | 3 +- cmake/modules/BuildMex.cmake | 7 +- cuhd/lib/cuhd_imp.cpp | 8 +- lte/examples/cell_measurement.c | 4 +- lte/examples/cell_search_utils.c | 2 + .../liblte/phy/ch_estimation/chest_dl.h | 1 + lte/phy/include/liblte/phy/phch/pdcch.h | 1 + lte/phy/lib/CMakeLists.txt | 5 +- lte/phy/lib/ch_estimation/src/chest_dl.c | 76 ++++---- .../ch_estimation/test/chest_test_dl_mex.c | 12 +- lte/phy/lib/phch/src/pdcch.c | 9 +- lte/phy/lib/phch/test/CMakeLists.txt | 2 + lte/phy/lib/phch/test/pdcch_test_mex.c | 163 ++++++++++++++++++ lte/phy/lib/sync/src/sync.c | 2 +- lte/rrc/lib/messages/src/bcch.c | 2 +- matlab/tests/equalizer_test.m | 91 ++++++---- matlab/tests/lteDLChannelEstimate2.m | 2 +- matlab/tests/pdcch_test.m | 105 +++++++++++ matlab/tests/sync_test.m | 32 ++++ mex/CMakeLists.txt | 49 ++++++ mex/include/liblte/mex/mexutils.h | 70 ++++++++ mex/lib/CMakeLists.txt | 63 +++++++ mex/lib/mexutils.c | 128 ++++++++++++++ 23 files changed, 742 insertions(+), 95 deletions(-) create mode 100644 lte/phy/lib/phch/test/pdcch_test_mex.c create mode 100644 matlab/tests/pdcch_test.m create mode 100644 matlab/tests/sync_test.m create mode 100644 mex/CMakeLists.txt create mode 100644 mex/include/liblte/mex/mexutils.h create mode 100644 mex/lib/CMakeLists.txt create mode 100644 mex/lib/mexutils.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 610e96230..0be5f898b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -155,6 +155,7 @@ INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/phy/include/) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/include/) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/asn/) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/cuhd/include) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mex/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/graphics/include) ######################################################################## @@ -164,4 +165,4 @@ ADD_SUBDIRECTORY(common) ADD_SUBDIRECTORY(cuhd) ADD_SUBDIRECTORY(graphics) ADD_SUBDIRECTORY(lte) - +add_subdirectory(mex) diff --git a/cmake/modules/BuildMex.cmake b/cmake/modules/BuildMex.cmake index 124e149a8..03b4a336c 100644 --- a/cmake/modules/BuildMex.cmake +++ b/cmake/modules/BuildMex.cmake @@ -4,6 +4,7 @@ include(CMakeParseArguments) + if(NOT MATLAB_FOUND) find_package(MATLAB) endif() @@ -22,12 +23,6 @@ if(NOT MATLAB_MEX_PATH) ) endif() -IF (MATLAB_FOUND) - message(STATUS "Found MATLAB in ${MATLAB_ROOT}") -ELSE(MATLAB_FOUND) - message(STATUS "Could NOT find MATLAB. MEX files won't be compiled") -ENDIF(MATLAB_FOUND) - # # BuildMex -- arguments # MEXNAME = root of mex library name diff --git a/cuhd/lib/cuhd_imp.cpp b/cuhd/lib/cuhd_imp.cpp index 9608c94a3..33b925b97 100644 --- a/cuhd/lib/cuhd_imp.cpp +++ b/cuhd/lib/cuhd_imp.cpp @@ -147,8 +147,14 @@ int cuhd_close(void *h) double cuhd_set_rx_srate(void *h, double freq) { cuhd_handler *handler = static_cast < cuhd_handler * >(h); - handler->usrp->set_rx_rate(freq); + handler->usrp->set_rx_rate(freq); double ret = handler->usrp->get_rx_rate(); + if ((int) ret != (int) freq) { + printf("Got %f!=%f. setting master clock rate to %f\n",ret, freq, freq); + handler->usrp->set_master_clock_rate(freq); + handler->usrp->set_rx_rate(freq); + double ret = handler->usrp->get_rx_rate(); + } return ret; } diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index c054bee05..8abc905e6 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -42,7 +42,7 @@ #include "cell_search_utils.h" #define B210_DEFAULT_GAIN 40.0 -#define B210_DEFAULT_GAIN_CORREC 76.0 // Gain of the Rx chain when the gain is set to 40 +#define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 float gain_offset = B210_DEFAULT_GAIN_CORREC; @@ -226,7 +226,7 @@ int main(int argc, char **argv) { if (n < 0) { fprintf(stderr, "Error decoding UE MIB\n"); exit(-1); - } else if (n == MIB_FOUND) { + } else if (n == MIB_FOUND) { bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); printf("MIB found SFN: %d, offset: %d\n", sfn, sfn_offset); diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c index 2a83148ed..e50912305 100644 --- a/lte/examples/cell_search_utils.c +++ b/lte/examples/cell_search_utils.c @@ -271,6 +271,8 @@ int detect_and_decode_cell(cell_detect_cfg_t *config, void *uhd, int force_N_id_ cell->nof_ports = nof_tx_ports; bit_unpack_vector(bch_payload, bch_payload_unpacked, BCH_PAYLOAD_LEN); + printf("nof_bits: %d\n", BCH_PAYLOAD_LEN); + vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); bcch_bch_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); /* set sampling frequency */ diff --git a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h index 0feb7180e..145facc41 100644 --- a/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h +++ b/lte/phy/include/liblte/phy/ch_estimation/chest_dl.h @@ -63,6 +63,7 @@ typedef struct { uint32_t filter_time_len; float filter_time[CHEST_MAX_FILTER_TIME_LEN]; + cf_t *tmp_noise; cf_t *tmp_freqavg; cf_t *tmp_timeavg[CHEST_MAX_FILTER_TIME_LEN]; diff --git a/lte/phy/include/liblte/phy/phch/pdcch.h b/lte/phy/include/liblte/phy/phch/pdcch.h index d061f7d0e..3d72295e4 100644 --- a/lte/phy/include/liblte/phy/phch/pdcch.h +++ b/lte/phy/include/liblte/phy/phch/pdcch.h @@ -65,6 +65,7 @@ typedef struct LIBLTE_API { cf_t *pdcch_x[MAX_PORTS]; cf_t *pdcch_d; uint8_t *pdcch_e; + float pdcch_rm_f[3 * (DCI_MAX_BITS + 16)]; float *pdcch_llr; /* tx & rx objects */ diff --git a/lte/phy/lib/CMakeLists.txt b/lte/phy/lib/CMakeLists.txt index bbb80299c..5b5624e5f 100644 --- a/lte/phy/lib/CMakeLists.txt +++ b/lte/phy/lib/CMakeLists.txt @@ -46,7 +46,7 @@ SET(SOURCES_ALL "") FOREACH (_module ${modules}) IF(IS_DIRECTORY ${_module}) FILE(GLOB_RECURSE tmp "${_module}/src/*.c") - LIST(APPEND SOURCES_ALL ${tmp}) + LIST(APPEND SOURCES_ALL ${tmp}) ENDIF(IS_DIRECTORY ${_module}) ENDFOREACH() @@ -57,14 +57,13 @@ LIBLTE_SET_PIC(lte_phy) IF(VOLK_FOUND) INCLUDE_DIRECTORIES(${VOLK_INCLUDE_DIRS}) - SET_TARGET_PROPERTIES(lte_phy PROPERTIES COMPILE_DEFINITIONS "${VOLK_DEFINITIONS}") + SET_TARGET_PROPERTIES(lte_phy PROPERTIES COMPILE_DEFINITIONS "${VOLK_DEFINITIONS}") TARGET_LINK_LIBRARIES(lte_phy ${VOLK_LIBRARIES}) MESSAGE(STATUS " Compiling with VOLK SIMD library.") ELSE(VOLK_FOUND) MESSAGE(STATUS " VOLK SIMD library NOT found. Using generic implementation.") ENDIF(VOLK_FOUND) - ######################################################################## # Recurse subdirectories and find all directories with a CMakeLists.txt file in it ######################################################################## diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index f56f3de15..5aab75e27 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -67,11 +67,16 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) goto clean_exit; } - q->tmp_freqavg = vec_malloc(sizeof(cf_t) * 2*cell.nof_prb); + q->tmp_freqavg = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); if (!q->tmp_freqavg) { perror("malloc"); goto clean_exit; } + q->tmp_noise = vec_malloc(sizeof(cf_t) * REFSIGNAL_MAX_NUM_SF(cell.nof_prb)); + if (!q->tmp_noise) { + perror("malloc"); + goto clean_exit; + } for (int i=0;itmp_timeavg[i] = vec_malloc(sizeof(cf_t) * 2*cell.nof_prb); if (!q->tmp_timeavg[i]) { @@ -135,6 +140,9 @@ void chest_dl_free(chest_dl_t *q) if (q->tmp_freqavg) { free(q->tmp_freqavg); } + if (q->tmp_noise) { + free(q->tmp_noise); + } for (int i=0;itmp_timeavg[i]) { free(q->tmp_timeavg[i]); @@ -181,8 +189,22 @@ int chest_dl_set_filter_time(chest_dl_t *q, float *filter, uint32_t filter_len) } } + +static float estimate_noise_port(chest_dl_t *q, uint32_t port_id, cf_t *avg_pilots) { + /* Use difference between averaged and noisy LS pilot estimates */ + vec_sub_ccc(avg_pilots, q->pilot_estimates[port_id], + q->tmp_noise, REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); + + float noise_var = vec_avg_power_cf(q->tmp_noise, REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); + + /* compute noise power. Correction factor obtained through simulations */ + return 0.75 * sqrtf((float) q->filter_freq_len) * noise_var / sqrt(q->cell.nof_prb); +} + + #define pilot_est(idx) q->pilot_estimates[port_id][REFSIGNAL_PILOT_IDX(idx,l,q->cell)] #define pilot_avg(idx) q->pilot_estimates_average[port_id][REFSIGNAL_PILOT_IDX(idx,l,q->cell)] +#define pilot_tmp(idx) q->tmp_freqavg[REFSIGNAL_PILOT_IDX(idx,l,q->cell)] static void average_pilots(chest_dl_t *q, uint32_t port_id) { @@ -193,17 +215,24 @@ static void average_pilots(chest_dl_t *q, uint32_t port_id) for (l=0;lfilter_freq_len > 0) { /* Filter pilot estimates in frequency */ - conv_same_cf(&pilot_est(0), q->filter_freq, q->tmp_freqavg, nref, q->filter_freq_len); + conv_same_cf(&pilot_est(0), q->filter_freq, &pilot_tmp(0), nref, q->filter_freq_len); /* Adjust extremes using linear interpolation */ - q->tmp_freqavg[0] += interp_linear_onesample(pilot_est(1), pilot_est(0)) + pilot_tmp(0) += interp_linear_onesample(pilot_est(1), pilot_est(0)) * q->filter_freq[q->filter_freq_len/2-1]; - q->tmp_freqavg[nref-1] += interp_linear_onesample(pilot_est(nref-2), pilot_est(nref-1)) + pilot_tmp(nref-1) += interp_linear_onesample(pilot_est(nref-2), pilot_est(nref-1)) * q->filter_freq[q->filter_freq_len/2+1]; } else { - memcpy(q->tmp_freqavg, &pilot_est(0), nref * sizeof(cf_t)); + memcpy(&pilot_tmp(0), &pilot_est(0), nref * sizeof(cf_t)); } + } + + /* Compute noise estimation before time averaging. + * FIXME: Apparently the noise estimation performance is better with frequency averaging only + */ + q->noise_estimate[port_id] = estimate_noise_port(q, port_id, q->tmp_freqavg); + for (l=0;lfilter_time_len > 0) { /* Move last symbols */ @@ -211,7 +240,7 @@ static void average_pilots(chest_dl_t *q, uint32_t port_id) memcpy(q->tmp_timeavg[i], q->tmp_timeavg[i+1], nref*sizeof(cf_t)); } /* Put last symbol to buffer */ - memcpy(q->tmp_timeavg[i], q->tmp_freqavg, nref*sizeof(cf_t)); + memcpy(q->tmp_timeavg[i], &pilot_tmp(0), nref*sizeof(cf_t)); /* Multiply all symbols by filter and add them */ bzero(&pilot_avg(0), nref * sizeof(cf_t)); @@ -220,24 +249,11 @@ static void average_pilots(chest_dl_t *q, uint32_t port_id) vec_sum_ccc(q->tmp_timeavg[i], &pilot_avg(0), &pilot_avg(0), nref); } } else { - memcpy(&pilot_avg(0), q->tmp_freqavg, nref * sizeof(cf_t)); + memcpy(&pilot_avg(0), &pilot_tmp(0), nref * sizeof(cf_t)); } } } -static float estimate_noise_port(chest_dl_t *q, uint32_t port_id) { - /* Use difference between averaged and noisy LS pilot estimates */ - vec_sub_ccc(q->pilot_estimates_average[port_id], q->pilot_estimates[port_id], - q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); - /* compute noise power */ - - float noiseEst = vec_dot_prod_conj_ccc(q->pilot_estimates[port_id], - q->pilot_estimates[port_id], - REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); - - return noiseEst * sqrtf((float) q->filter_freq_len) / REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id); -} - #define cesymb(i) ce[SAMPLE_IDX(q->cell.nof_prb,i,0)] static void interpolate_pilots(chest_dl_t *q, cf_t *ce, uint32_t port_id) @@ -303,12 +319,9 @@ int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx refsignal_cs_get_sf(q->cell, port_id, input, q->pilot_recv_signal[port_id]); /* Compute RSRP for the references in this port */ + q->rsrp[port_id] = chest_dl_rsrp(q, port_id); if (port_id == 0) { - q->rsrp[port_id] = chest_dl_rsrp(q, port_id); - } - - /* compute rssi */ - if (port_id == 0) { + /* compute rssi only for port 0 */ q->rssi[port_id] = chest_dl_rssi(q, input, port_id); } @@ -324,8 +337,6 @@ int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx interpolate_pilots(q, ce, port_id); } - q->noise_estimate[port_id] = estimate_noise_port(q, port_id); - return 0; } @@ -344,12 +355,13 @@ float chest_dl_get_noise_estimate(chest_dl_t *q) { } float chest_dl_get_snr(chest_dl_t *q) { - float noise = chest_dl_get_noise_estimate(q); - if (noise) { - return chest_dl_get_rssi(q)/(noise);//*2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb)); - } else { - return 0.0; + float snr = 0.0; + for (int i=0;icell.nof_ports;i++) { + if (q->noise_estimate[i]) { + snr += q->rsrp[i]/(q->noise_estimate[i]*sqrtf(2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb))); + } } + return snr/q->cell.nof_ports; } float chest_dl_get_rssi(chest_dl_t *q) { diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c index 6d6a4768e..aacf7cbe7 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c @@ -114,9 +114,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) return; } } - - - + uint32_t filter_len = 0; float *filter; double *f; @@ -172,7 +170,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) outr2 = mxGetPr(plhs[2]); outi2 = mxGetPi(plhs[2]); } - + for (int sf=0;sf= 4) { + plhs[3] = mxCreateDoubleScalar(chest_dl_get_snr(&chest)); + } + return; } diff --git a/lte/phy/lib/phch/src/pdcch.c b/lte/phy/lib/phch/src/pdcch.c index 2b0c0af24..353a2c8f3 100644 --- a/lte/phy/lib/phch/src/pdcch.c +++ b/lte/phy/lib/phch/src/pdcch.c @@ -276,7 +276,6 @@ uint32_t pdcch_common_locations(pdcch_t *q, dci_location_t *c, uint32_t max_cand */ static int dci_decode(pdcch_t *q, float *e, uint8_t *data, uint32_t E, uint32_t nof_bits, uint16_t *crc) { - float tmp[3 * (DCI_MAX_BITS + 16)]; uint16_t p_bits, crc_res; uint8_t *x; @@ -292,15 +291,15 @@ static int dci_decode(pdcch_t *q, float *e, uint8_t *data, uint32_t E, uint32_t } /* unrate matching */ - rm_conv_rx(e, E, tmp, 3 * (nof_bits + 16)); + rm_conv_rx(e, E, q->pdcch_rm_f, 3 * (nof_bits + 16)); DEBUG("Viterbi input: ", 0); if (VERBOSE_ISDEBUG()) { - vec_fprint_f(stdout, tmp, 3 * (nof_bits + 16)); + vec_fprint_f(stdout, q->pdcch_rm_f, 3 * (nof_bits + 16)); } /* viterbi decoder */ - viterbi_decode_f(&q->decoder, tmp, data, nof_bits + 16); + viterbi_decode_f(&q->decoder, q->pdcch_rm_f, data, nof_bits + 16); if (VERBOSE_ISDEBUG()) { bit_fprint(stdout, data, nof_bits + 16); @@ -421,7 +420,7 @@ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float n } /* demodulate symbols */ - demod_soft_sigma_set(&q->demod, 1); + demod_soft_sigma_set(&q->demod, sqrtf(2/q->cell.nof_ports)); demod_soft_demodulate(&q->demod, q->pdcch_d, q->pdcch_llr, nof_symbols); /* descramble */ diff --git a/lte/phy/lib/phch/test/CMakeLists.txt b/lte/phy/lib/phch/test/CMakeLists.txt index 328d8128a..8a903710e 100644 --- a/lte/phy/lib/phch/test/CMakeLists.txt +++ b/lte/phy/lib/phch/test/CMakeLists.txt @@ -80,6 +80,8 @@ ADD_TEST(pdcch_test pdcch_test) ADD_EXECUTABLE(dci_unpacking dci_unpacking.c) TARGET_LINK_LIBRARIES(dci_unpacking lte_phy) +BuildMex(MEXNAME pdcch SOURCES pdcch_test_mex.c LIBRARIES lte_phy liblte_mex) + ######################################################################## # PDSCH TEST ######################################################################## diff --git a/lte/phy/lib/phch/test/pdcch_test_mex.c b/lte/phy/lib/phch/test/pdcch_test_mex.c new file mode 100644 index 000000000..a5a1f3c33 --- /dev/null +++ b/lte/phy/lib/phch/test/pdcch_test_mex.c @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2012, Ismael Gomez-Miguelez . + * This file is part of ALOE++ (http://flexnets.upc.edu/) + * + * ALOE++ is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ALOE++ is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with ALOE++. If not, see . + */ + +#include +#include "liblte/phy/phy.h" +#include "liblte/mex/mexutils.h" + +/** MEX function to be called from MATLAB to test the channel estimator + */ + +#define ENBCFG prhs[0] +#define RNTI prhs[1] +#define INPUT prhs[2] +#define NOF_INPUTS 3 + +#define MAX_CANDIDATES 64 + + +dci_format_t ue_formats[] = {Format1A,Format1}; // Format1B should go here also +const uint32_t nof_ue_formats = 2; + +dci_format_t common_formats[] = {Format1A,Format1C}; +const uint32_t nof_common_formats = 2; + + +void help() +{ + mexErrMsgTxt + ("[decoded_ok, llr, rm, bits] = liblte_pdcch(enbConfig, RNTI, inputSignal)\n\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + int i; + lte_cell_t cell; + pdcch_t pdcch; + regs_t regs; + dci_location_t locations[MAX_CANDIDATES]; + uint32_t cfi, sf_idx; + uint16_t rnti; + cf_t *input_symbols; + int nof_re; + uint32_t nof_formats; + dci_format_t *formats = NULL; + + if (nrhs != NOF_INPUTS) { + help(); + return; + } + + if (mexutils_read_cell(ENBCFG, &cell)) { + help(); + return; + } + + if (mexutils_read_uint32_struct(ENBCFG, "CFI", &cfi)) { + help(); + return; + } + if (mexutils_read_uint32_struct(ENBCFG, "NSubframe", &sf_idx)) { + help(); + return; + } + + rnti = (uint16_t) mxGetScalar(RNTI); + + if (regs_init(®s, cell)) { + mexErrMsgTxt("Error initiating regs\n"); + return; + } + + if (regs_set_cfi(®s, cfi)) { + fprintf(stderr, "Error setting CFI\n"); + exit(-1); + } + + if (pdcch_init(&pdcch, ®s, cell)) { + mexErrMsgTxt("Error initiating channel estimator\n"); + return; + } + + /** Allocate input buffers */ + nof_re = mexutils_read_cf(INPUT, &input_symbols); + if (nof_re < 0) { + mexErrMsgTxt("Error reading input symbols\n"); + return; + } + + // Set Channel estimates to 1.0 (ignore fading) + cf_t *ce[MAX_PORTS]; + for (i=0;i= 1) { + plhs[0] = mxCreateLogicalScalar(crc_rem == rnti); + } + int nof_bits = (regs_pdcch_nregs(®s, cfi) / 9) * 72; + if (nlhs >= 2) { + mexutils_write_f(pdcch.pdcch_llr, &plhs[1], nof_bits, 1); + } + if (nlhs >= 3) { + mexutils_write_f(pdcch.pdcch_rm_f, &plhs[2], 3*(dci_msg.nof_bits+16), 1); + } + + pdcch_free(&pdcch); + regs_free(®s); + for (i=0;isss, q->N_id_2); if (q->detect_cp) { - if (peak_pos - q->fft_size - CP_EXT(q->fft_size) >= 0) { + if (peak_pos >= q->fft_size + CP_EXT(q->fft_size)) { q->cp = detect_cp(q, input, peak_pos); } else { INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); diff --git a/lte/rrc/lib/messages/src/bcch.c b/lte/rrc/lib/messages/src/bcch.c index c57d6bb53..7fc671efc 100644 --- a/lte/rrc/lib/messages/src/bcch.c +++ b/lte/rrc/lib/messages/src/bcch.c @@ -158,7 +158,7 @@ int bcch_bch_unpack(uint8_t *buffer, uint32_t msg_nof_bits, lte_cell_t *cell, ui if (sfn) { *sfn=(sfn_i<<2); } else { - asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); + asn_fprint(stdout, &asn_DEF_MasterInformationBlock, req); } return LIBLTE_SUCCESS; } diff --git a/matlab/tests/equalizer_test.m b/matlab/tests/equalizer_test.m index 573493d7b..26e2007ff 100644 --- a/matlab/tests/equalizer_test.m +++ b/matlab/tests/equalizer_test.m @@ -4,7 +4,7 @@ clear -SNR_values_db=[0 1 2];%15;%[5 10 15];%linspace(0,20,8); +SNR_values_db=linspace(0,30,8); Nrealizations=1; preEVM = zeros(length(SNR_values_db),Nrealizations); @@ -14,7 +14,7 @@ postEVM_liblte = zeros(length(SNR_values_db),Nrealizations); enb.NDLRB = 6; % Number of resource blocks -enb.CellRefP = 1; % One transmit antenna port +enb.CellRefP = 2; % One transmit antenna port enb.NCellID = 0; % Cell ID enb.CyclicPrefix = 'Normal'; % Normal cyclic prefix enb.DuplexMode = 'FDD'; % FDD @@ -23,7 +23,7 @@ enb.DuplexMode = 'FDD'; % FDD rng(1); % Configure random number generators cfg.Seed = 2; % Random channel seed -cfg.NRxAnts = 1; % 1 receive antenna +cfg.NRxAnts = 2; % 1 receive antenna cfg.DelayProfile = 'EVA'; % EVA delay spread cfg.DopplerFreq = 5; % 120Hz Doppler frequency cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation @@ -119,15 +119,19 @@ cfg.SamplingRate = info.SamplingRate; % Pass data through the fading channel model rxWaveform = lteFadingChannel(cfg,txWaveform); +rxWaveform = txWaveform; %% Additive Noise +channel_gain = mean(rxWaveform(:).*conj(rxWaveform(:)))/mean(txWaveform(:).*conj(txWaveform(:))); + % Calculate noise gain N0 = 1/(sqrt(2.0*enb.CellRefP*double(info.Nfft))*SNR); % Create additive white Gaussian noise noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform))); +noiseTx(snr_idx) = N0; % Add noise to the received time domain waveform rxWaveform = rxWaveform + noise; @@ -142,46 +146,59 @@ rxGrid = lteOFDMDemodulate(enb,rxWaveform); addpath('../../debug/lte/phy/lib/ch_estimation/test') %% Channel Estimation -[estChannel, noiseEst] = lteDLChannelEstimate(enb,cec,rxGrid); +[estChannel, noiseEst(snr_idx)] = lteDLChannelEstimate(enb,cec,rxGrid); output=[]; +snrest = zeros(10,1); for i=0:9 - [d, a, out] = liblte_chest(enb.NCellID,enb.CellRefP,rxGrid(:,i*14+1:(i+1)*14),[0.15 0.7 0.15],[0.1 0.9],i); +% if (SNR_values_db(snr_idx) < 25) + [d, a, out, snrest(i+1)] = liblte_chest(enb.NCellID,enb.CellRefP,rxGrid(:,i*14+1:(i+1)*14),[0.15 0.7 0.15],[],i); +% else +% [d, a, out, snrest(i+1)] = liblte_chest(enb.NCellID,enb.CellRefP,rxGrid(:,i*14+1:(i+1)*14),[0.05 0.9 0.05],[],i); +% end output = [output out]; end +SNRest(snr_idx)=mean(snrest); +disp(10*log10(SNRest(snr_idx))) %% MMSE Equalization -eqGrid_mmse = lteEqualizeMMSE(rxGrid, estChannel, noiseEst); - -eqGrid_liblte = reshape(output,size(eqGrid_mmse)); - -%% Analysis - -% Compute EVM across all input values -% EVM of pre-equalized receive signal -preEqualisedEVM = lteEVM(txGrid,rxGrid); -fprintf('%d-%d: Pre-EQ: %0.3f%%\n', ... - snr_idx,nreal,preEqualisedEVM.RMS*100); - - -%EVM of post-equalized receive signal -postEqualisedEVM_mmse = lteEVM(txGrid,reshape(eqGrid_mmse,size(txGrid))); -fprintf('%d-%d: MMSE: %0.3f%%\n', ... - snr_idx,nreal,postEqualisedEVM_mmse.RMS*100); - -postEqualisedEVM_liblte = lteEVM(txGrid,reshape(eqGrid_liblte,size(txGrid))); -fprintf('%d-%d: liblte: %0.3f%%\n', ... - snr_idx,nreal,postEqualisedEVM_liblte.RMS*100); - -preEVM(snr_idx,nreal) = preEqualisedEVM.RMS; -postEVM_mmse(snr_idx,nreal) = mean([postEqualisedEVM_mmse.RMS]); -postEVM_liblte(snr_idx,nreal) = mean([postEqualisedEVM_liblte.RMS]); +% eqGrid_mmse = lteEqualizeMMSE(rxGrid, estChannel, noiseEst(snr_idx)); +% +% eqGrid_liblte = reshape(output,size(eqGrid_mmse)); +% +% % Analysis +% +% %Compute EVM across all input values EVM of pre-equalized receive signal +% preEqualisedEVM = lteEVM(txGrid,rxGrid); +% fprintf('%d-%d: Pre-EQ: %0.3f%%\n', ... +% snr_idx,nreal,preEqualisedEVM.RMS*100); +% +% +% %EVM of post-equalized receive signal +% postEqualisedEVM_mmse = lteEVM(txGrid,reshape(eqGrid_mmse,size(txGrid))); +% fprintf('%d-%d: MMSE: %0.3f%%\n', ... +% snr_idx,nreal,postEqualisedEVM_mmse.RMS*100); +% +% postEqualisedEVM_liblte = lteEVM(txGrid,reshape(eqGrid_liblte,size(txGrid))); +% fprintf('%d-%d: liblte: %0.3f%%\n', ... +% snr_idx,nreal,postEqualisedEVM_liblte.RMS*100); +% +% preEVM(snr_idx,nreal) = preEqualisedEVM.RMS; +% postEVM_mmse(snr_idx,nreal) = mean([postEqualisedEVM_mmse.RMS]); +% postEVM_liblte(snr_idx,nreal) = mean([postEqualisedEVM_liblte.RMS]); end end -% plot(SNR_values_db,20*log10(1/sqrt(2.0*enb.CellRefP*double(info.Nfft))./realNoise),SNR_values_db,20*log10(1/sqrt(2.0*enb.CellRefP*double(info.Nfft))./noiseEstimation),SNR_values_db,20*log10(1/sqrt(2.0*enb.CellRefP*double(info.Nfft))./noiseEstimation2)) -% legend('real','seu','meu') -plot(SNR_values_db, mean(preEVM,2), ... - SNR_values_db, mean(postEVM_mmse,2), ... - SNR_values_db, mean(postEVM_liblte,2)) -legend('No Eq','MMSE-cubic','MMSE-lin','MMSE-liblte') -grid on +% subplot(1,2,1) +% plot(SNR_values_db, mean(preEVM,2), ... +% SNR_values_db, mean(postEVM_mmse,2), ... +% SNR_values_db, mean(postEVM_liblte,2)) +% legend('No Eq','MMSE-lin','MMSE-liblte') +% grid on +% +% subplot(1,2,2) +%SNR_liblte = 1./(SNRest*sqrt(2.0*enb.CellRefP*double(info.Nfft))); +SNR_liblte = SNRest; +SNR_matlab = 1./(noiseEst*sqrt(2.0*enb.CellRefP*double(info.Nfft))); +plot(SNR_values_db, SNR_values_db, SNR_values_db, 10*log10(SNR_liblte),SNR_values_db, 10*log10(SNR_matlab)) +%plot(SNR_values_db, 10*log10(noiseTx), SNR_values_db, 10*log10(SNRest),SNR_values_db, 10*log10(noiseEst)) +legend('Theory','libLTE','Matlab') diff --git a/matlab/tests/lteDLChannelEstimate2.m b/matlab/tests/lteDLChannelEstimate2.m index e99744a50..e2d77b4d7 100644 --- a/matlab/tests/lteDLChannelEstimate2.m +++ b/matlab/tests/lteDLChannelEstimate2.m @@ -428,7 +428,7 @@ function [H_EST, NoisePowerEst, AvgEstimates, Estimates] = lteDLChannelEstimate2 % The mean of the noise power across all the transmit/receive antenna % pairs is used as the estimate of the noise power NoisePowerEst = mean(mean(noiseVec)); - + %NoisePowerEst = noiseVec(2); end % GetPilotEstimates Obtain the least squares estimates of the reference diff --git a/matlab/tests/pdcch_test.m b/matlab/tests/pdcch_test.m new file mode 100644 index 000000000..cf8d07232 --- /dev/null +++ b/matlab/tests/pdcch_test.m @@ -0,0 +1,105 @@ +%% PDCCH Blind Search and DCI Decoding + +%% Cell-Wide Settings +% A structure |enbConfig| is used to configure the eNodeB. + +Npackets = 50; +SNR_values =linspace(-5,3,8); + +enbConfig.NDLRB = 15; % No of Downlink RBs in total BW +enbConfig.CyclicPrefix = 'Normal'; % CP length +enbConfig.CFI = 3; ; % 4 PDCCH symbols as NDLRB <= 10 +enbConfig.Ng = 'Sixth'; % HICH groups +enbConfig.CellRefP = 2; % 1-antenna ports +enbConfig.NCellID = 10; % Physical layer cell identity +enbConfig.NSubframe = 0; % Subframe number 0 +enbConfig.DuplexMode = 'FDD'; % Frame structure +enbConfig.PHICHDuration = 'Normal'; + +%% DCI Message Generation +% Generate a DCI message to be mapped to the PDCCH. + +dciConfig.DCIFormat = 'Format1A'; % DCI message format +dciConfig.Allocation.RIV = 26; % Resource indication value + +% Create DCI message for given configuration +[dciMessage, dciMessageBits] = lteDCI(enbConfig, dciConfig); + +%% DCI Channel Coding + +C_RNTI = 65535; % 16-bit UE-specific mask +pdcchConfig.RNTI = C_RNTI; % Radio network temporary identifier +pdcchConfig.PDCCHFormat = 3; % PDCCH format + +% DCI message bits coding to form coded DCI bits +codedDciBits = lteDCIEncode(pdcchConfig, dciMessageBits); + +%% PDCCH Bits Generation + +pdcchDims = ltePDCCHInfo(enbConfig); + +% Initialize elements with -1 to indicate that all the bits are unused +pdcchBits = -1*ones(pdcchDims.MTot, 1); + +% Perform search space for UE-specific control channel candidates. +candidates = ltePDCCHSpace(enbConfig, pdcchConfig, {'bits', '1based'}); + +Ncad=randi(length(candidates),1,1); + +% Map PDCCH payload on available UE-specific candidate. In this example the +% first available candidate is used to map the coded DCI bits. +pdcchBits ( candidates(Ncad, 1) : candidates(Ncad, 2) ) = codedDciBits; + +%% PDCCH Complex-Valued Modulated Symbol Generation + +pdcchSymbols = ltePDCCH(enbConfig, pdcchBits); + +pdcchIndices = ltePDCCHIndices(enbConfig,{'1based'}); + +decoded = zeros(size(SNR_values)); +decoded_liblte = zeros(size(SNR_values)); + +Nports = enbConfig.CellRefP; +ueConfig.RNTI = C_RNTI; + +subframe_tx = lteDLResourceGrid(enbConfig); +subframe_tx(pdcchIndices) = pdcchSymbols; + +addpath('../../debug/lte/phy/lib/phch/test') + +parfor snr_idx=1:length(SNR_values) + SNRdB = SNR_values(snr_idx); + for i=1:Npackets + + %% Noise Addition + SNR = 10^(SNRdB/10); % Linear SNR + + N0 = 1/(sqrt(2.0*Nports)*SNR); + noise = N0*complex(randn(size(subframe_tx)), randn(size(subframe_tx))); % Generate noise + + subframe_rx = sum(subframe_tx + noise,3); % Add noise to PDCCH symbols + + pdcchSymbolsNoisy = subframe_rx(pdcchIndices(:,1)); + + %% PDCCH Decoding + recPdcchBits = ltePDCCHDecode(enbConfig, pdcchSymbolsNoisy); + + %% Blind Decoding using DCI Search + [rxDCI, rxDCIBits] = ltePDCCHSearch(enbConfig, ueConfig, recPdcchBits); + decoded(snr_idx) = decoded(snr_idx) + length(rxDCI); + + [found_liblte, llr, viterbi_in] = liblte_pdcch(enbConfig, ueConfig.RNTI, subframe_rx); + + decoded_liblte(snr_idx) = decoded_liblte(snr_idx)+found_liblte; + end + fprintf('SNR: %.1f\n',SNRdB) +end + +if (Npackets>1) + plot(SNR_values,1-decoded/Npackets,SNR_values,1-decoded_liblte/Npackets) + grid on + legend('Matlab','libLTE') +else + disp(decoded_liblte) +end + diff --git a/matlab/tests/sync_test.m b/matlab/tests/sync_test.m new file mode 100644 index 000000000..d91320aeb --- /dev/null +++ b/matlab/tests/sync_test.m @@ -0,0 +1,32 @@ +enb = lteTestModel('1.1','5MHz'); +Ntrials = 1; +SNR_values =-10;%linspace(-18,-10,8); + +tx_offset = randi(50,Ntrials,1); +tx_offset = 50; +diff=zeros(size(SNR_values)); + +tx_signal = lteTestModelTool(enb); +tx_power = mean(tx_signal.*conj(tx_signal)); + +for snr_idx=1:length(SNR_values) + SNRdB = SNR_values(snr_idx); + rx_offset = zeros(size(tx_offset)); + for i=1:Ntrials + SNR = 10^(SNRdB/10); % Linear SNR + tx = [zeros(tx_offset(i),1); tx_signal]; + N0 = tx_power/(sqrt(2.0)*SNR); + noise = N0*complex(randn(size(tx)), randn(size(tx))); % Generate noise + rx=noise+tx; + [rx_offset(i),corr] = lteDLFrameOffset(enb,rx); + end + diff(snr_idx)=sum(abs(rx_offset-tx_offset)); + disp(SNRdB) +end + +if (Ntrials == 1) + plot(corr) +else + plot(SNR_values,diff); +end + diff --git a/mex/CMakeLists.txt b/mex/CMakeLists.txt new file mode 100644 index 000000000..b87343679 --- /dev/null +++ b/mex/CMakeLists.txt @@ -0,0 +1,49 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + +######################################################################## +# Install headers +######################################################################## +INSTALL(DIRECTORY include/ + DESTINATION "${INCLUDE_DIR}" + FILES_MATCHING PATTERN "*.h" + PATTERN ".svn" EXCLUDE +) + +######################################################################## +# Add headers to cmake project (useful for IDEs) +######################################################################## +SET(HEADERS_ALL "") +FILE(GLOB headers *) +FOREACH (_header ${headers}) + IF(IS_DIRECTORY ${_header}) + FILE(GLOB_RECURSE tmp "${_header}/*.h") + LIST(APPEND HEADERS_ALL ${tmp}) + ENDIF(IS_DIRECTORY ${_header}) +ENDFOREACH() + +ADD_CUSTOM_TARGET (add_mex_headers SOURCES ${HEADERS_ALL}) + +######################################################################## +# Add the subdirectories +######################################################################## +ADD_SUBDIRECTORY(lib) + diff --git a/mex/include/liblte/mex/mexutils.h b/mex/include/liblte/mex/mexutils.h new file mode 100644 index 000000000..c225355cd --- /dev/null +++ b/mex/include/liblte/mex/mexutils.h @@ -0,0 +1,70 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + +#ifndef MEXUTILS_ +#define MEXUTILS_ + + +#include + +#ifdef UNDEF_BOOL +#undef bool +#endif + +#include "mex.h" + +#include "liblte/config.h" + +typedef _Complex float cf_t; + +LIBLTE_API bool mexutils_isScalar(const mxArray *ptr); + +LIBLTE_API int mexutils_read_cell(const mxArray *ptr, + lte_cell_t *cell); + +LIBLTE_API int mexutils_read_uint32_struct(const mxArray *ptr, + const char *field_name, + uint32_t *value); + +LIBLTE_API int mexutils_write_f(float *buffer, + mxArray **ptr, + uint32_t nr, + uint32_t nc); + +LIBLTE_API int mexutils_write_cf(cf_t *buffer, + mxArray **ptr, + uint32_t nr, + uint32_t nc); + +LIBLTE_API int mexutils_read_f(const mxArray *ptr, + float **buffer); + +LIBLTE_API int mexutils_read_cf(const mxArray *ptr, + cf_t **buffer); + +#endif diff --git a/mex/lib/CMakeLists.txt b/mex/lib/CMakeLists.txt new file mode 100644 index 000000000..9eaba77e5 --- /dev/null +++ b/mex/lib/CMakeLists.txt @@ -0,0 +1,63 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + +if(NOT MATLAB_FOUND) + find_package(MATLAB) +endif() + +if(NOT OCTAVE_FOUND) + find_package(OCTAVE) +endif() + +# CMake 2.8.12 & earlier apparently don't define the +# Mex script path, so find it. +if(NOT MATLAB_MEX_PATH) + find_program( MATLAB_MEX_PATH mex + HINTS ${MATLAB_ROOT}/bin + PATHS ${MATLAB_ROOT}/bin + DOC "The mex program path" + ) +endif() + +IF (MATLAB_FOUND) + message(STATUS "Found MATLAB in ${MATLAB_ROOT}") +ENDIF(MATLAB_FOUND) +IF (OCTAVE_FOUND) + message(STATUS "Found OCTAVE in ${OCTAVE_INCLUDE_PATHS}") +ENDIF(OCTAVE_FOUND) + + +IF (MATLAB_FOUND OR OCTAVE_FOUND) + ADD_LIBRARY(liblte_mex SHARED mexutils.c) + INSTALL(TARGETS liblte_mex DESTINATION ${LIBRARY_DIR}) + LIBLTE_SET_PIC(liblte_mex) + if (MATLAB_FOUND) + target_include_directories(liblte_mex PUBLIC ${MATLAB_INCLUDE_DIR}) + endif(MATLAB_FOUND) + if (OCTAVE_FOUND) + target_include_directories(liblte_mex PUBLIC ${OCTAVE_INCLUDE_DIR}) + endif (OCTAVE_FOUND) + +ELSEIF (MATLAB_FOUND OR OCTAVE_FOUND) + message(STATUS "Could NOT find OCTAVE or MATLAB. MEX files won't be compiled") +ENDIF(MATLAB_FOUND OR OCTAVE_FOUND) + + diff --git a/mex/lib/mexutils.c b/mex/lib/mexutils.c new file mode 100644 index 000000000..fb8e96c7d --- /dev/null +++ b/mex/lib/mexutils.c @@ -0,0 +1,128 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include "liblte/phy/common/phy_common.h" +#include "liblte/mex/mexutils.h" +#include "liblte/phy/utils/vector.h" + + +bool mexutils_isScalar(const mxArray *ptr) { + return mxGetM(ptr) == 1 && mxGetN(ptr) == 1; +} + +int mexutils_read_uint32_struct(const mxArray *ptr, const char *field_name, uint32_t *value) +{ + mxArray *p; + p = mxGetField(ptr, 0, field_name); + if (!p) { + mexPrintf("Error field %s not found\n", field_name); + return -1; + } + *value = (uint32_t) mxGetScalar(p); + return 0; +} + +int mexutils_read_cell(const mxArray *ptr, lte_cell_t *cell) { + if (mexutils_read_uint32_struct(ptr, "NCellID", &cell->id)) { + return -1; + } + if (mexutils_read_uint32_struct(ptr, "CellRefP", &cell->nof_ports)) { + return -1; + } + if (mexutils_read_uint32_struct(ptr, "NDLRB", &cell->nof_prb)) { + return -1; + } + // TODO + cell->cp = CPNORM; + cell->phich_length = PHICH_NORM; + cell->phich_resources = R_1_6; + return 0; +} + +int mexutils_read_cf(const mxArray *ptr, cf_t **buffer) { + int numelems = mxGetNumberOfElements(ptr); + cf_t *tmp = vec_malloc(numelems * sizeof(cf_t)); + if (tmp) { + double *inr=mxGetPr(ptr); + double *ini=mxGetPi(ptr); + for (int i=0;i Date: Mon, 1 Dec 2014 22:09:30 +0000 Subject: [PATCH 38/55] Added PSS mex test --- lte/phy/lib/sync/test/CMakeLists.txt | 2 + lte/phy/lib/sync/test/pss_mex.c | 87 ++++++++++++++++++++++++++++ matlab/tests/sync_test.m | 22 +++++-- 3 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 lte/phy/lib/sync/test/pss_mex.c diff --git a/lte/phy/lib/sync/test/CMakeLists.txt b/lte/phy/lib/sync/test/CMakeLists.txt index d9f8c49b3..285bd5a21 100644 --- a/lte/phy/lib/sync/test/CMakeLists.txt +++ b/lte/phy/lib/sync/test/CMakeLists.txt @@ -29,6 +29,8 @@ IF(${CUHD_FIND} GREATER -1) TARGET_LINK_LIBRARIES(pss_usrp lte_phy cuhd) ENDIF(${CUHD_FIND} GREATER -1) +BuildMex(MEXNAME pss SOURCES pss_mex.c LIBRARIES lte_phy liblte_mex) + ######################################################################## # SYNC TEST ######################################################################## diff --git a/lte/phy/lib/sync/test/pss_mex.c b/lte/phy/lib/sync/test/pss_mex.c new file mode 100644 index 000000000..4a1c9dda0 --- /dev/null +++ b/lte/phy/lib/sync/test/pss_mex.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2012, Ismael Gomez-Miguelez . + * This file is part of ALOE++ (http://flexnets.upc.edu/) + * + * ALOE++ is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ALOE++ is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with ALOE++. If not, see . + */ + +#include +#include "liblte/phy/phy.h" +#include "liblte/mex/mexutils.h" + +/** MEX function to be called from MATLAB to test the channel estimator + */ + +#define ENBCFG prhs[0] +#define INPUT prhs[1] +#define NOF_INPUTS 2 + + +void help() +{ + mexErrMsgTxt + ("[offset,corr] = liblte_pss(enbConfig, inputSignal)\n\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + int i; + lte_cell_t cell; + pss_synch_t pss; + cf_t *input_symbols; + int frame_len; + + if (nrhs != NOF_INPUTS) { + help(); + return; + } + + if (mexutils_read_cell(ENBCFG, &cell)) { + help(); + return; + } + + /** Allocate input buffers */ + frame_len = mexutils_read_cf(INPUT, &input_symbols); + if (frame_len < 0) { + mexErrMsgTxt("Error reading input symbols\n"); + return; + } + + if (pss_synch_init_fft(&pss, frame_len, lte_symbol_sz(cell.nof_prb))) { + fprintf(stderr, "Error initiating PSS\n"); + exit(-1); + } + if (pss_synch_set_N_id_2(&pss, cell.id%2)) { + fprintf(stderr, "Error setting N_id_2=%d\n",cell.id%2); + exit(-1); + } + + int peak_idx = pss_synch_find_pss(&pss, input_symbols, NULL); + + if (nlhs >= 1) { + plhs[0] = mxCreateLogicalScalar(peak_idx); + } + if (nlhs >= 2) { + mexutils_write_cf(pss.conv_output, &plhs[1], frame_len, 1); + } + + pss_synch_free(&pss); + free(input_symbols); + + return; +} + diff --git a/matlab/tests/sync_test.m b/matlab/tests/sync_test.m index d91320aeb..005b20b67 100644 --- a/matlab/tests/sync_test.m +++ b/matlab/tests/sync_test.m @@ -1,32 +1,44 @@ enb = lteTestModel('1.1','5MHz'); Ntrials = 1; -SNR_values =-10;%linspace(-18,-10,8); +SNR_values =-20;%linspace(-18,-10,8); tx_offset = randi(50,Ntrials,1); -tx_offset = 50; diff=zeros(size(SNR_values)); +diff_lt=zeros(size(SNR_values)); tx_signal = lteTestModelTool(enb); tx_power = mean(tx_signal.*conj(tx_signal)); +corrcfg.PSS='On'; +corrcfg.SSS='On'; +corrcfg.CellRS='Off'; + +addpath('../../debug/lte/phy/lib/sync/test') + for snr_idx=1:length(SNR_values) SNRdB = SNR_values(snr_idx); rx_offset = zeros(size(tx_offset)); + rx_offset_lt = zeros(size(tx_offset)); for i=1:Ntrials SNR = 10^(SNRdB/10); % Linear SNR tx = [zeros(tx_offset(i),1); tx_signal]; N0 = tx_power/(sqrt(2.0)*SNR); noise = N0*complex(randn(size(tx)), randn(size(tx))); % Generate noise rx=noise+tx; - [rx_offset(i),corr] = lteDLFrameOffset(enb,rx); + [rx_offset(i),corr] = lteDLFrameOffset(enb,rx,corrcfg); + [rx_offset_lt(i),corr_lt] = liblte_pss(enb,rx); end diff(snr_idx)=sum(abs(rx_offset-tx_offset)); + diff_lt(snr_idx)=sum(abs(rx_offset_lt-tx_offset)); disp(SNRdB) end if (Ntrials == 1) - plot(corr) + len=1:length(corr)-rx_offset(i)-3840; + len2=rx_offset(i)+1+3840:length(corr); + plot(len,corr(len)/max(corr(len)),... + len,abs(corr_lt(len2))/max(abs(corr_lt(len2)))); else - plot(SNR_values,diff); + plot(SNR_values,diff,SNR_values,diff_lt); end From 28ab43c6e97f49a3a3047d7ca604209e7cb00f17 Mon Sep 17 00:00:00 2001 From: ismagom Date: Sat, 6 Dec 2014 09:16:11 +0000 Subject: [PATCH 39/55] Added PSS/SSS mex. Added new SSS correlation algorithms. Use PSR in PSS --- lte/examples/synch_file.c | 2 +- .../include/liblte/phy/common/phy_common.h | 5 +- lte/phy/include/liblte/phy/sync/pss.h | 23 +- lte/phy/include/liblte/phy/sync/sss.h | 42 +++- lte/phy/lib/ch_estimation/src/chest_dl.c | 2 +- lte/phy/lib/ch_estimation/src/refsignal_dl.c | 4 +- lte/phy/lib/sync/src/find_sss.c | 163 ++++++++++---- lte/phy/lib/sync/src/gen_sss.c | 2 +- lte/phy/lib/sync/src/pss.c | 128 ++++++++++- lte/phy/lib/sync/src/sss.c | 6 +- lte/phy/lib/sync/src/sync.c | 8 +- lte/phy/lib/sync/test/CMakeLists.txt | 11 +- lte/phy/lib/sync/test/pss_mex.c | 1 - lte/phy/lib/sync/test/pss_usrp.c | 209 +++++++++++++++--- lte/phy/lib/sync/test/sss_mex.c | 119 ++++++++++ matlab/tests/get_sc.m | 111 ++++++++++ matlab/tests/test_sss.m | 143 ++++++++++++ 17 files changed, 872 insertions(+), 107 deletions(-) create mode 100644 lte/phy/lib/sync/test/sss_mex.c create mode 100644 matlab/tests/get_sc.m create mode 100644 matlab/tests/test_sss.m diff --git a/lte/examples/synch_file.c b/lte/examples/synch_file.c index 9580a7176..2c267499f 100644 --- a/lte/examples/synch_file.c +++ b/lte/examples/synch_file.c @@ -221,7 +221,7 @@ int main(int argc, char **argv) { sss_idx = peak_pos[N_id_2]-2*(symbol_sz+CP(symbol_sz,CPNORM_LEN)); if (sss_idx >= 0) { - sss_synch_m0m1(&sss[N_id_2], &input[sss_idx], + sss_synch_m0m1_diff(&sss[N_id_2], &input[sss_idx], &m0, &m0_value, &m1, &m1_value); cfo[frame_cnt] = pss_synch_cfo_compute(&pss[N_id_2], &input[peak_pos[N_id_2]-128]); diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index a1d7e6dd8..30098b46e 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -93,10 +93,11 @@ typedef enum {CPNORM, CPEXT} lte_cp_t; #define SLOT_LEN_RE(nof_prb, cp) (nof_prb*RE_X_RB*CP_NSYMB(cp)) #define SF_LEN_RE(nof_prb, cp) (2*SLOT_LEN_RE(nof_prb, cp)) -#define SLOT_IDX_CPNORM(idx, symbol_sz) (idx==0?(CP(symbol_sz, CPNORM_0_LEN)):(CP(symbol_sz, CPNORM_0_LEN)+idx*(symbol_sz+CP(symbol_sz, CPNORM_LEN)))) +#define SLOT_IDX_CPNORM(symbol_idx, symbol_sz) (symbol_idx==0?0:(symbol_sz + CP(symbol_sz, CPNORM_0_LEN) + \ + (symbol_idx-1)*(symbol_sz+CP(symbol_sz, CPNORM_LEN)))) #define SLOT_IDX_CPEXT(idx, symbol_sz) (idx*(symbol_sz+CP(symbol_sz, CPEXT_LEN))) -#define SAMPLE_IDX(nof_prb, symbol_idx, sample_idx) ((symbol_idx)*(nof_prb)*(RE_X_RB) + sample_idx) +#define RE_IDX(nof_prb, symbol_idx, sample_idx) ((symbol_idx)*(nof_prb)*(RE_X_RB) + sample_idx) #define RS_VSHIFT(cell_id) (cell_id%6) diff --git a/lte/phy/include/liblte/phy/sync/pss.h b/lte/phy/include/liblte/phy/sync/pss.h index 22828240e..8e9c1e0d8 100644 --- a/lte/phy/include/liblte/phy/sync/pss.h +++ b/lte/phy/include/liblte/phy/sync/pss.h @@ -46,6 +46,13 @@ typedef _Complex float cf_t; /* this is only a shortcut */ #define PSS_RE 6*12 +/* PSS processing options */ + +//#define PSS_ACCUMULATE_ABS // If enabled, accumulates the correlation absolute value on consecutive calls to pss_synch_find_pss + +#define PSS_ABS_SQUARE // If enabled, compute abs square, otherwise computes absolute value only + +#define PSS_RETURN_PSR // If enabled returns peak to side-lobe ratio, otherwise returns absolute peak value /** * The pss_synch_t object provides functions for fast computation of the crosscorrelation @@ -61,7 +68,9 @@ typedef _Complex float cf_t; /* this is only a shortcut */ /* Low-level API */ typedef struct LIBLTE_API { - + + dft_plan_t dftp_input; + #ifdef CONVOLUTION_FFT conv_fft_cc_t conv_fft; #endif @@ -70,10 +79,14 @@ typedef struct LIBLTE_API { uint32_t N_id_2; uint32_t fft_size; + cf_t pss_signal_time[3][PSS_LEN]; cf_t *pss_signal_freq[3]; // One sequence for each N_id_2 cf_t *tmp_input; cf_t *conv_output; - +#ifdef PSS_ACCUMULATE_ABS + float *conv_output_abs; +#endif + float *conv_output_avg; }pss_synch_t; typedef enum { PSS_TX, PSS_RX } pss_direction_t; @@ -88,6 +101,8 @@ LIBLTE_API int pss_synch_init(pss_synch_t *q, LIBLTE_API void pss_synch_free(pss_synch_t *q); +LIBLTE_API void pss_synch_reset(pss_synch_t *q); + LIBLTE_API int pss_generate(cf_t *signal, uint32_t N_id_2); @@ -103,6 +118,10 @@ LIBLTE_API int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value); +LIBLTE_API int pss_synch_chest(pss_synch_t *q, + cf_t *input, + cf_t ce[PSS_LEN]); + LIBLTE_API float pss_synch_cfo_compute(pss_synch_t* q, cf_t *pss_recv); diff --git a/lte/phy/include/liblte/phy/sync/sss.h b/lte/phy/include/liblte/phy/sync/sss.h index bdc219542..3dd42a33f 100644 --- a/lte/phy/include/liblte/phy/sync/sss.h +++ b/lte/phy/include/liblte/phy/sync/sss.h @@ -42,8 +42,6 @@ typedef _Complex float cf_t; /* this is only a shortcut */ #define N_SSS 31 #define SSS_LEN 2*N_SSS -#define SSS_MAX_FFT_LEN 2048 - struct sss_tables{ int z1[N_SSS][N_SSS]; int c[2][N_SSS]; @@ -54,9 +52,10 @@ struct sss_tables{ * Should use vec_malloc() to make it platform agnostic. */ struct fc_tables{ - cf_t z1[N_SSS+1][N_SSS+1]; - cf_t c[2][N_SSS+1]; - cf_t s[N_SSS+1][N_SSS+1]; + float z1[N_SSS][N_SSS]; + float c[2][N_SSS]; + float s[N_SSS][N_SSS]; + float sd[N_SSS][N_SSS-1]; }; @@ -75,6 +74,9 @@ typedef struct LIBLTE_API { uint32_t N_id_1_table[30][30]; struct fc_tables fc_tables[3]; // one for each N_id_2 + float corr_output_m0[N_SSS]; + float corr_output_m1[N_SSS]; + }sss_synch_t; @@ -99,12 +101,30 @@ LIBLTE_API void sss_put_slot(float *sss, LIBLTE_API int sss_synch_set_N_id_2(sss_synch_t *q, uint32_t N_id_2); -LIBLTE_API int sss_synch_m0m1(sss_synch_t *q, - cf_t *input, - uint32_t *m0, - float *m0_value, - uint32_t *m1, - float *m1_value); +LIBLTE_API int sss_synch_m0m1_partial(sss_synch_t *q, + cf_t *input, + uint32_t M, + cf_t ce[2*N_SSS], + uint32_t *m0, + float *m0_value, + uint32_t *m1, + float *m1_value); + +LIBLTE_API int sss_synch_m0m1_diff_coh(sss_synch_t *q, + cf_t *input, + cf_t ce[2*N_SSS], + uint32_t *m0, + float *m0_value, + uint32_t *m1, + float *m1_value); + +LIBLTE_API int sss_synch_m0m1_diff(sss_synch_t *q, + cf_t *input, + uint32_t *m0, + float *m0_value, + uint32_t *m1, + float *m1_value); + LIBLTE_API uint32_t sss_synch_subframe(uint32_t m0, uint32_t m1); diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 5aab75e27..8a4c5a79e 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -254,7 +254,7 @@ static void average_pilots(chest_dl_t *q, uint32_t port_id) } } -#define cesymb(i) ce[SAMPLE_IDX(q->cell.nof_prb,i,0)] +#define cesymb(i) ce[RE_IDX(q->cell.nof_prb,i,0)] static void interpolate_pilots(chest_dl_t *q, cf_t *ce, uint32_t port_id) { diff --git a/lte/phy/lib/ch_estimation/src/refsignal_dl.c b/lte/phy/lib/ch_estimation/src/refsignal_dl.c index ee7b3b7f0..124fd4d13 100644 --- a/lte/phy/lib/ch_estimation/src/refsignal_dl.c +++ b/lte/phy/lib/ch_estimation/src/refsignal_dl.c @@ -209,7 +209,7 @@ int refsignal_cs_put_sf(lte_cell_t cell, uint32_t port_id, cf_t *pilots, cf_t *s /* Compute offset frequency index */ fidx = ((refsignal_cs_v(port_id, l) + (cell.id % 6)) % 6); for (i = 0; i < 2*cell.nof_prb; i++) { - sf_symbols[SAMPLE_IDX(cell.nof_prb, nsymbol, fidx)] = pilots[REFSIGNAL_PILOT_IDX(i,l,cell)]; + sf_symbols[RE_IDX(cell.nof_prb, nsymbol, fidx)] = pilots[REFSIGNAL_PILOT_IDX(i,l,cell)]; fidx += RE_X_RB/2; // 1 reference every 6 RE } } @@ -238,7 +238,7 @@ int refsignal_cs_get_sf(lte_cell_t cell, uint32_t port_id, cf_t *sf_symbols, cf_ /* Compute offset frequency index */ fidx = ((refsignal_cs_v(port_id, l) + (cell.id % 6)) % 6); for (i = 0; i < 2*cell.nof_prb; i++) { - pilots[REFSIGNAL_PILOT_IDX(i,l,cell)] = sf_symbols[SAMPLE_IDX(cell.nof_prb, nsymbol, fidx)]; + pilots[REFSIGNAL_PILOT_IDX(i,l,cell)] = sf_symbols[RE_IDX(cell.nof_prb, nsymbol, fidx)]; fidx += RE_X_RB/2; // 2 references per PRB } } diff --git a/lte/phy/lib/sync/src/find_sss.c b/lte/phy/lib/sync/src/find_sss.c index 7bc52d558..14147d166 100644 --- a/lte/phy/lib/sync/src/find_sss.c +++ b/lte/phy/lib/sync/src/find_sss.c @@ -27,30 +27,82 @@ #include +#include +#include #include "liblte/phy/utils/vector.h" #include "liblte/phy/sync/sss.h" -void corr_all_zs(cf_t *z, cf_t s[N_SSS+1][N_SSS+1], cf_t *output) { +#define MAX_M 3 + + +static void corr_all_zs(cf_t z[N_SSS], float s[N_SSS][N_SSS-1], float output[N_SSS]) { uint32_t m; + cf_t tmp[N_SSS]; + for (m = 0; m < N_SSS; m++) { - output[m] = vec_dot_prod_ccc(z, s[m], N_SSS - 1); + tmp[m] = vec_dot_prod_cfc(z, s[m], N_SSS - 1); } + vec_abs_square_cf(tmp, output, N_SSS); } +static void corr_all_sz_partial(cf_t z[N_SSS], float s[N_SSS][N_SSS], uint32_t M, float output[N_SSS]) { + uint32_t Nm = N_SSS/M; + cf_t tmp[N_SSS]; + float tmp_abs[MAX_M-1][N_SSS]; + int j, m; + float *ptr; + + for (j=0;jdftp_input, &input[CP_NORM(5, q->fft_size)], input_fft); + + if (ce) { + vec_prod_conj_ccc(&input_fft[q->fft_size/2-N_SSS], ce, &input_fft[q->fft_size/2-N_SSS], 2*N_SSS); + } + + for (int i = 0; i < N_SSS; i++) { + y[0][i] = input_fft[q->fft_size/2-N_SSS + 2 * i]; + y[1][i] = input_fft[q->fft_size/2-N_SSS + 2 * i + 1]; + } + + vec_prod_cfc(y[0], q->fc_tables[q->N_id_2].c[0], y[0], N_SSS); + vec_prod_cfc(y[1], q->fc_tables[q->N_id_2].c[1], y[1], N_SSS); + +} + +int sss_synch_m0m1_diff(sss_synch_t *q, cf_t *input, uint32_t *m0, float *m0_value, + uint32_t *m1, float *m1_value) { + return sss_synch_m0m1_diff_coh(q, input, NULL, m0, m0_value, m1, m1_value); +} + +/* Differential SSS estimation. + * Returns m0 and m1 estimates * * Source: "SSS Detection Method for Initial Cell Search in 3GPP LTE FDD/TDD Dual Mode Receiver" * Jung-In Kim, Jung-Su Han, Hee-Jin Roh and Hyung-Jin Choi * */ -int sss_synch_m0m1(sss_synch_t *q, cf_t *input, uint32_t *m0, float *m0_value, +int sss_synch_m0m1_diff_coh(sss_synch_t *q, cf_t *input, cf_t ce[2*N_SSS], uint32_t *m0, float *m0_value, uint32_t *m1, float *m1_value) { @@ -62,43 +114,63 @@ int sss_synch_m0m1(sss_synch_t *q, cf_t *input, uint32_t *m0, float *m0_value, m1 != NULL) { - /* Consider moving to sss_synch_t?? */ - cf_t zdelay[N_SSS+1],zconj[N_SSS+1],zprod[N_SSS+1]; - cf_t y[2][N_SSS+1], z[N_SSS+1], tmp[N_SSS+1]; - float tmp_real[N_SSS+1]; - cf_t input_fft[SSS_MAX_FFT_LEN]; - uint32_t i; + cf_t yprod[N_SSS]; + cf_t y[2][N_SSS]; - dft_run_c(&q->dftp_input, input, input_fft); + extract_pair_sss(q, input, ce, y); - for (i = 0; i < N_SSS; i++) { - y[0][i] = input_fft[q->fft_size/2-N_SSS + 2 * i]; - y[1][i] = input_fft[q->fft_size/2-N_SSS + 2 * i + 1]; - } - - vec_prod_ccc(y[0], q->fc_tables[q->N_id_2].c[0], z, N_SSS); - memcpy(zdelay, &z[1], (N_SSS - 1) * sizeof(cf_t)); - vec_conj_cc(z, zconj, N_SSS - 1); - vec_prod_ccc(zdelay, zconj, zprod, N_SSS - 1); - - corr_all_zs(zprod, q->fc_tables[q->N_id_2].s, tmp); - vec_abs_cf(tmp, tmp_real, N_SSS); - *m0 = vec_max_fi(tmp_real, N_SSS); + vec_prod_conj_ccc(&y[0][1], y[0], yprod, N_SSS - 1); + corr_all_zs(yprod, q->fc_tables[q->N_id_2].sd, q->corr_output_m0); + *m0 = vec_max_fi(q->corr_output_m0, N_SSS); if (m0_value) { - *m0_value = tmp_real[*m0]; + *m0_value = q->corr_output_m0[*m0]; } - - vec_prod_ccc(y[1], q->fc_tables[q->N_id_2].c[1], tmp, N_SSS); - vec_prod_ccc(tmp, q->fc_tables[q->N_id_2].z1[*m0], z, N_SSS); - memcpy(zdelay, &z[1], (N_SSS - 1) * sizeof(cf_t)); - vec_conj_cc(z, zconj, N_SSS - 1); - vec_prod_ccc(zdelay, zconj, zprod, N_SSS - 1); - - corr_all_zs(zprod, q->fc_tables[q->N_id_2].s, tmp); - vec_abs_cf(tmp, tmp_real, N_SSS); - *m1 = vec_max_fi(tmp_real, N_SSS); + + vec_prod_cfc(y[1], q->fc_tables[q->N_id_2].z1[*m0], y[1], N_SSS); + vec_prod_conj_ccc(&y[1][1], y[1], yprod, N_SSS - 1); + corr_all_zs(yprod, q->fc_tables[q->N_id_2].sd, q->corr_output_m1); + *m1 = vec_max_fi(q->corr_output_m1, N_SSS); if (m1_value) { - *m1_value = tmp_real[*m1]; + *m1_value = q->corr_output_m1[*m1]; + } + ret = LIBLTE_SUCCESS; + } + return ret; +} + +/* Partial correlation SSS estimation. + * Returns m0 and m1 estimates + * + * Source: "SSS Detection Method for Initial Cell Search in 3GPP LTE FDD/TDD Dual Mode Receiver" + * Jung-In Kim, Jung-Su Han, Hee-Jin Roh and Hyung-Jin Choi + + */ +int sss_synch_m0m1_partial(sss_synch_t *q, cf_t *input, uint32_t M, cf_t ce[2*N_SSS], uint32_t *m0, float *m0_value, + uint32_t *m1, float *m1_value) +{ + + int ret = LIBLTE_ERROR_INVALID_INPUTS; + + if (q != NULL && + input != NULL && + m0 != NULL && + m1 != NULL && + M <= MAX_M) + { + cf_t y[2][N_SSS]; + + extract_pair_sss(q, input, ce, y); + + corr_all_sz_partial(y[0], q->fc_tables[q->N_id_2].s, M, q->corr_output_m0); + *m0 = vec_max_fi(q->corr_output_m0, N_SSS); + if (m0_value) { + *m0_value = q->corr_output_m0[*m0]; + } + vec_prod_cfc(y[1], q->fc_tables[q->N_id_2].z1[*m0], y[1], N_SSS); + corr_all_sz_partial(y[1], q->fc_tables[q->N_id_2].s, M, q->corr_output_m1); + *m1 = vec_max_fi(q->corr_output_m1, N_SSS); + if (m1_value) { + *m1_value = q->corr_output_m1[*m1]; } ret = LIBLTE_SUCCESS; } @@ -110,17 +182,22 @@ void convert_tables(struct fc_tables *fc_tables, struct sss_tables *in) { for (i = 0; i < N_SSS; i++) { for (j = 0; j < N_SSS; j++) { - __real__ fc_tables->z1[i][j] = (float) in->z1[i][j]; + fc_tables->z1[i][j] = (float) in->z1[i][j]; + } + } + for (i = 0; i < N_SSS; i++) { + for (j = 0; j < N_SSS; j++) { + fc_tables->s[i][j] = (float) in->s[i][j]; } } for (i = 0; i < N_SSS; i++) { for (j = 0; j < N_SSS - 1; j++) { - __real__ fc_tables->s[i][j] = (float) in->s[i][j + 1] * in->s[i][j]; + fc_tables->sd[i][j] = (float) in->s[i][j + 1] * in->s[i][j]; } } for (i = 0; i < 2; i++) { for (j = 0; j < N_SSS; j++) { - __real__ fc_tables->c[i][j] = (float) in->c[i][j]; + fc_tables->c[i][j] = (float) in->c[i][j]; } } } diff --git a/lte/phy/lib/sync/src/gen_sss.c b/lte/phy/lib/sync/src/gen_sss.c index da3e895b2..daf408f19 100644 --- a/lte/phy/lib/sync/src/gen_sss.c +++ b/lte/phy/lib/sync/src/gen_sss.c @@ -121,7 +121,7 @@ void generate_sss_all_tables(struct sss_tables *tables, uint32_t N_id_2) { generate_s_all(tables->s, s_t); generate_z_all(tables->z1, z_t); for (i = 0; i < 2; i++) { - generate_c(tables->c[i], c_t, N_id_2, i > 0); + generate_c(tables->c[i], c_t, N_id_2, i != 0); } } diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index f0925891f..222bcddf5 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -39,10 +39,9 @@ #include "liblte/phy/utils/debug.h" -int pss_synch_init_N_id_2(cf_t *pss_signal_freq, uint32_t N_id_2, uint32_t fft_size) { +int pss_synch_init_N_id_2(cf_t *pss_signal_time, cf_t *pss_signal_freq, uint32_t N_id_2, uint32_t fft_size) { dft_plan_t plan; cf_t pss_signal_pad[2048]; - cf_t pss_signal_time[PSS_LEN]; int ret = LIBLTE_ERROR_INVALID_INPUTS; if (lte_N_id_2_isvalid(N_id_2) && @@ -65,7 +64,7 @@ int pss_synch_init_N_id_2(cf_t *pss_signal_freq, uint32_t N_id_2, uint32_t fft_s dft_run_c(&plan, pss_signal_pad, pss_signal_freq); vec_conj_cc(pss_signal_freq, pss_signal_freq, fft_size); - vec_sc_prod_cfc(pss_signal_freq, 1.0/62.0, pss_signal_freq, fft_size); + vec_sc_prod_cfc(pss_signal_freq, 1.0/PSS_LEN, pss_signal_freq, fft_size); dft_plan_free(&plan); @@ -99,16 +98,39 @@ int pss_synch_init_fft(pss_synch_t *q, uint32_t frame_size, uint32_t fft_size) { buffer_size = fft_size + frame_size + 1; + + if (dft_plan(&q->dftp_input, fft_size, FORWARD, COMPLEX)) { + fprintf(stderr, "Error creating DFT plan \n"); + goto clean_and_exit; + } + dft_plan_set_mirror(&q->dftp_input, true); + dft_plan_set_dc(&q->dftp_input, true); + q->tmp_input = vec_malloc(buffer_size * sizeof(cf_t)); if (!q->tmp_input) { fprintf(stderr, "Error allocating memory\n"); goto clean_and_exit; } + + bzero(&q->tmp_input[q->frame_size], q->fft_size * sizeof(cf_t)); + q->conv_output = vec_malloc(buffer_size * sizeof(cf_t)); if (!q->conv_output) { fprintf(stderr, "Error allocating memory\n"); goto clean_and_exit; } + q->conv_output_avg = vec_malloc(buffer_size * sizeof(float)); + if (!q->conv_output_avg) { + fprintf(stderr, "Error allocating memory\n"); + goto clean_and_exit; + } +#ifdef PSS_ACCUMULATE_ABS + q->conv_output_abs = vec_malloc(buffer_size * sizeof(float)); + if (!q->conv_output_abs) { + fprintf(stderr, "Error allocating memory\n"); + goto clean_and_exit; + } +#endif for (N_id_2=0;N_id_2<3;N_id_2++) { q->pss_signal_freq[N_id_2] = vec_malloc(buffer_size * sizeof(cf_t)); if (!q->pss_signal_freq[N_id_2]) { @@ -116,10 +138,12 @@ int pss_synch_init_fft(pss_synch_t *q, uint32_t frame_size, uint32_t fft_size) { goto clean_and_exit; } /* The PSS is translated into the frequency domain for each N_id_2 */ - if (pss_synch_init_N_id_2(q->pss_signal_freq[N_id_2], N_id_2, fft_size)) { + if (pss_synch_init_N_id_2(q->pss_signal_time[N_id_2], q->pss_signal_freq[N_id_2], N_id_2, fft_size)) { fprintf(stderr, "Error initiating PSS detector for N_id_2=%d fft_size=%d\n", N_id_2, fft_size); goto clean_and_exit; } + bzero(&q->pss_signal_freq[N_id_2][q->fft_size], q->frame_size * sizeof(cf_t)); + } #ifdef CONVOLUTION_FFT if (conv_fft_cc_init(&q->conv_fft, frame_size, fft_size)) { @@ -128,6 +152,8 @@ int pss_synch_init_fft(pss_synch_t *q, uint32_t frame_size, uint32_t fft_size) { } #endif + pss_synch_reset(q); + ret = LIBLTE_SUCCESS; } @@ -157,11 +183,27 @@ void pss_synch_free(pss_synch_t *q) { if (q->conv_output) { free(q->conv_output); } +#ifdef PSS_ACCUMULATE_ABS + if (q->conv_output_abs) { + free(q->conv_output_abs); + } +#endif + if (q->conv_output_avg) { + free(q->conv_output_avg); + } bzero(q, sizeof(pss_synch_t)); } } +void pss_synch_reset(pss_synch_t *q) { +#ifdef PSS_ACCUMULATE_ABS + uint32_t buffer_size = q->fft_size + q->frame_size + 1; + bzero(q->conv_output_avg, sizeof(cf_t) * buffer_size); +#endif + +} + /** * This function calculates the Zadoff-Chu sequence. * @param signal Output array. @@ -219,7 +261,8 @@ int pss_synch_set_N_id_2(pss_synch_t *q, uint32_t N_id_2) { } } -/** Returns the index of the PSS correlation peak in a subframe. +/** Performs time-domain PSS correlation. + * Returns the index of the PSS correlation peak in a subframe. * The frame starts at corr_peak_pos-subframe_size/2. * The value of the correlation is stored in corr_peak_value. * @@ -241,9 +284,7 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) return LIBLTE_ERROR; } - bzero(&q->pss_signal_freq[q->N_id_2][q->fft_size], q->frame_size * sizeof(cf_t)); memcpy(q->tmp_input, input, q->frame_size * sizeof(cf_t)); - bzero(&q->tmp_input[q->frame_size], q->fft_size * sizeof(cf_t)); /* Correlate input with PSS sequence */ #ifdef CONVOLUTION_FFT @@ -253,16 +294,85 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) conv_output_len = conv_cc(input, q->pss_signal_freq[q->N_id_2], q->conv_output, q->frame_size, q->fft_size); #endif + +#ifdef PSS_ACCUMULATE_ABS +#ifdef PSS_ABS_SQUARE + vec_abs_square_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); +#else + vec_abs_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); +#endif /* Find maximum of the absolute value of the correlation */ - corr_peak_pos = vec_max_abs_ci(q->conv_output, conv_output_len-1); + corr_peak_pos = vec_max_fi(q->conv_output_abs, conv_output_len-1); + + // Normalize correlation output + vec_sc_prod_fff(q->conv_output_abs, 1/q->conv_output_abs[corr_peak_pos], q->conv_output_abs, conv_output_len-1); + + vec_sum_fff(q->conv_output_abs, q->conv_output_avg, q->conv_output_avg, conv_output_len-1); +#else + +#ifdef PSS_ABS_SQUARE + vec_abs_square_cf(q->conv_output, q->conv_output_avg, conv_output_len-1); +#else + vec_abs_cf(q->conv_output, q->conv_output_avg, conv_output_len-1); +#endif + +#endif + + /* Find maximum of the absolute value of the correlation */ + corr_peak_pos = vec_max_fi(q->conv_output_avg, conv_output_len-1); + +#ifdef PSS_RETURN_PSR + // Find second side lobe + float tmp = q->conv_output_avg[corr_peak_pos]; + q->conv_output_avg[corr_peak_pos] = 0; + int side_lobe_pos = vec_max_fi(q->conv_output_avg, conv_output_len-1); + q->conv_output_avg[corr_peak_pos] = tmp; if (corr_peak_value) { - *corr_peak_value = cabsf(q->conv_output[corr_peak_pos]); + *corr_peak_value = tmp/q->conv_output_avg[side_lobe_pos]; } +#else + if (corr_peak_value) { + *corr_peak_value = q->conv_output_avg[corr_peak_pos]; + } +#endif + ret = (int) corr_peak_pos; } return ret; } +LIBLTE_API cf_t *tmp2; + +/* Computes frequency-domain channel estimation of the PSS symbol + * input signal is in the time-domain. + * ce is the returned frequency-domain channel estimates. + */ +int pss_synch_chest(pss_synch_t *q, cf_t *input, cf_t ce[PSS_LEN]) { + int ret = LIBLTE_ERROR_INVALID_INPUTS; + cf_t input_fft[SYMBOL_SZ_MAX]; + + if (q != NULL && + input != NULL) + { + + if (!lte_N_id_2_isvalid(q->N_id_2)) { + fprintf(stderr, "Error finding PSS peak, Must set N_id_2 first\n"); + return LIBLTE_ERROR; + } + + tmp2 = input_fft; + + /* Transform to frequency-domain */ + dft_run_c(&q->dftp_input, input, input_fft); + + /* Compute channel estimate taking the PSS sequence as reference */ + vec_prod_conj_ccc(q->pss_signal_time[q->N_id_2], &input_fft[(q->fft_size-PSS_LEN)/2], ce, PSS_LEN); + + ret = LIBLTE_SUCCESS; + } + return ret; +} + /* Returns the CFO estimation given a PSS received sequence * * Source: An Efficient CFO Estimation Algorithm for the Downlink of 3GPP-LTE diff --git a/lte/phy/lib/sync/src/sss.c b/lte/phy/lib/sync/src/sss.c index 5755ea18f..c33f13822 100644 --- a/lte/phy/lib/sync/src/sss.c +++ b/lte/phy/lib/sync/src/sss.c @@ -55,11 +55,12 @@ int sss_synch_init(sss_synch_t *q, uint32_t fft_size) { sss_synch_free(q); return LIBLTE_ERROR; } + dft_plan_set_mirror(&q->dftp_input, true); + dft_plan_set_dc(&q->dftp_input, true); + q->fft_size = fft_size; generate_N_id_1_table(q->N_id_1_table); - dft_plan_set_mirror(&q->dftp_input, true); - dft_plan_set_dc(&q->dftp_input, true); for (N_id_2=0;N_id_2<3;N_id_2++) { generate_sss_all_tables(&sss_tables, N_id_2); @@ -81,6 +82,7 @@ int sss_synch_realloc(sss_synch_t *q, uint32_t fft_size) { return LIBLTE_ERROR; } dft_plan_set_mirror(&q->dftp_input, true); + dft_plan_set_norm(&q->dftp_input, true); dft_plan_set_dc(&q->dftp_input, true); q->fft_size = fft_size; diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index ff3e5d8d6..57cdddef9 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -214,7 +214,7 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { return LIBLTE_ERROR; } - sss_synch_m0m1(&q->sss, &input[sss_idx], &q->m0, &q->m0_value, &q->m1, &q->m1_value); + sss_synch_m0m1_diff(&q->sss, &input[sss_idx], &q->m0, &q->m0_value, &q->m1, &q->m1_value); q->sf_idx = sss_synch_subframe(q->m0, q->m1); ret = sss_synch_N_id_1(&q->sss, q->m0, q->m1); @@ -315,8 +315,9 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit ret = 0; } - INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f mean_energy=%.2f threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", - ret, q->N_id_2, peak_pos, peak_unnormalized*1000,energy*1000,q->peak_value, q->mean_energy*1000, + INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f mean_energy=%.2f" + "threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", + ret, q->N_id_2, peak_pos, peak_unnormalized*1000,energy*1000,q->peak_value, q->mean_energy*1000, q->threshold, q->sf_idx, 15*q->cfo); } else if (lte_N_id_2_isvalid(q->N_id_2)) { @@ -328,4 +329,5 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit void sync_reset(sync_t *q) { q->frame_cnt = 0; + pss_synch_reset(&q->pss); } diff --git a/lte/phy/lib/sync/test/CMakeLists.txt b/lte/phy/lib/sync/test/CMakeLists.txt index 285bd5a21..608d4897d 100644 --- a/lte/phy/lib/sync/test/CMakeLists.txt +++ b/lte/phy/lib/sync/test/CMakeLists.txt @@ -24,12 +24,21 @@ ######################################################################## LIST(FIND OPTIONAL_LIBS cuhd CUHD_FIND) -IF(${CUHD_FIND} GREATER -1) +LIST(FIND OPTIONAL_LIBS graphics GRAPHICS_FIND) + IF(${CUHD_FIND} GREATER -1) ADD_EXECUTABLE(pss_usrp pss_usrp.c) TARGET_LINK_LIBRARIES(pss_usrp lte_phy cuhd) ENDIF(${CUHD_FIND} GREATER -1) +IF(${GRAPHICS_FIND} EQUAL -1) + SET_TARGET_PROPERTIES(pss_usrp PROPERTIES COMPILE_DEFINITIONS "DISABLE_GRAPHICS") +ELSE(${GRAPHICS_FIND} EQUAL -1) + target_link_libraries(pss_usrp graphics) +ENDIF(${GRAPHICS_FIND} EQUAL -1) + + BuildMex(MEXNAME pss SOURCES pss_mex.c LIBRARIES lte_phy liblte_mex) +BuildMex(MEXNAME sss SOURCES sss_mex.c LIBRARIES lte_phy liblte_mex) ######################################################################## # SYNC TEST diff --git a/lte/phy/lib/sync/test/pss_mex.c b/lte/phy/lib/sync/test/pss_mex.c index 4a1c9dda0..14c73b6bc 100644 --- a/lte/phy/lib/sync/test/pss_mex.c +++ b/lte/phy/lib/sync/test/pss_mex.c @@ -38,7 +38,6 @@ void help() void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { - int i; lte_cell_t cell; pss_synch_t pss; cf_t *input_symbols; diff --git a/lte/phy/lib/sync/test/pss_usrp.c b/lte/phy/lib/sync/test/pss_usrp.c index b91833d27..f727cad20 100644 --- a/lte/phy/lib/sync/test/pss_usrp.c +++ b/lte/phy/lib/sync/test/pss_usrp.c @@ -38,7 +38,16 @@ #include "liblte/phy/phy.h" #include "liblte/cuhd/cuhd.h" -uint32_t N_id_2 = 100; + +#ifndef DISABLE_GRAPHICS +void init_plots(); +void do_plots(float *corr, float energy, uint32_t size, cf_t ce[PSS_LEN]); +void do_plots_sss(float *corr_m0, float *corr_m1); +#endif + + +bool disable_plots = false; +int cell_id = -1; char *uhd_args=""; float uhd_gain=40.0, uhd_freq=-1.0; int nof_frames = -1; @@ -46,18 +55,23 @@ uint32_t fft_size=64; float threshold = 0.4; void usage(char *prog) { - printf("Usage: %s [agtvnp] -f rx_frequency_hz -i N_id_2\n", prog); + printf("Usage: %s [adgtvnp] -f rx_frequency_hz -i cell_id\n", prog); printf("\t-a UHD args [Default %s]\n", uhd_args); printf("\t-g UHD Gain [Default %.2f dB]\n", uhd_gain); printf("\t-n nof_frames [Default %d]\n", nof_frames); printf("\t-s symbol_sz [Default %d]\n", fft_size); printf("\t-t threshold [Default %.2f]\n", threshold); +#ifndef DISABLE_GRAPHICS + printf("\t-d disable plots [Default enabled]\n"); +#else + printf("\t plots are disabled. Graphics library not available\n"); +#endif printf("\t-v verbose\n"); } void parse_args(int argc, char **argv) { int opt; - while ((opt = getopt(argc, argv, "agtvsfi")) != -1) { + while ((opt = getopt(argc, argv, "adgtvsfi")) != -1) { switch (opt) { case 'a': uhd_args = argv[optind]; @@ -72,7 +86,7 @@ void parse_args(int argc, char **argv) { threshold = atof(argv[optind]); break; case 'i': - N_id_2 = atoi(argv[optind]); + cell_id = atoi(argv[optind]); break; case 's': fft_size = atoi(argv[optind]); @@ -80,6 +94,9 @@ void parse_args(int argc, char **argv) { case 'n': nof_frames = atoi(argv[optind]); break; + case 'd': + disable_plots = true; + break; case 'v': verbose++; break; @@ -88,28 +105,38 @@ void parse_args(int argc, char **argv) { exit(-1); } } - if (N_id_2 > 2 || uhd_freq < 0) { + if (cell_id < 0 || uhd_freq < 0) { usage(argv[0]); exit(-1); } } + float m0_value, m1_value; int main(int argc, char **argv) { cf_t *buffer; int frame_cnt, n; void *uhd; pss_synch_t pss; + cfo_t cfocorr; + sss_synch_t sss; int32_t flen; int peak_idx, last_peak; float peak_value; float mean_peak; uint32_t nof_det, nof_nodet, nof_nopeak, nof_nopeakdet; + cf_t ce[PSS_LEN]; parse_args(argc, argv); + uint32_t N_id_2 = cell_id%3; + uint32_t N_id_1 = cell_id/3; + + if (!disable_plots) + init_plots(); + flen = 4800*(fft_size/64); - buffer = malloc(sizeof(cf_t) * flen); + buffer = malloc(sizeof(cf_t) * flen * 2); if (!buffer) { perror("malloc"); exit(-1); @@ -124,11 +151,21 @@ int main(int argc, char **argv) { exit(-1); } + cfo_init(&cfocorr, flen); + + if (sss_synch_init(&sss, fft_size)) { + fprintf(stderr, "Error initializing SSS object\n"); + return LIBLTE_ERROR; + } + + sss_synch_set_N_id_2(&sss, N_id_2); + printf("Opening UHD device...\n"); if (cuhd_open(uhd_args, &uhd)) { fprintf(stderr, "Error opening uhd\n"); exit(-1); } + printf("N_id_2: %d\n", N_id_2); printf("Set RX rate: %.2f MHz\n", cuhd_set_rx_srate(uhd, flen*2*100) / 1000000); printf("Set RX gain: %.1f dB\n", cuhd_set_rx_gain(uhd, uhd_gain)); printf("Set RX freq: %.2f MHz\n", cuhd_set_rx_freq(uhd, uhd_freq) / 1000000); @@ -142,57 +179,101 @@ int main(int argc, char **argv) { frame_cnt = 0; last_peak = 0; mean_peak = 0; + int peak_offset = 0; + float cfo; + float mean_cfo = 0; + uint32_t m0, m1; + uint32_t sss_error1 = 0, sss_error2 = 0, sss_error3 = 0; + while(frame_cnt < nof_frames || nof_frames == -1) { - n = cuhd_recv(uhd, buffer, flen, 1); + n = cuhd_recv(uhd, buffer, flen - peak_offset, 1); if (n < 0) { fprintf(stderr, "Error receiving samples\n"); exit(-1); } - + peak_idx = pss_synch_find_pss(&pss, buffer, &peak_value); if (peak_idx < 0) { fprintf(stderr, "Error finding PSS peak\n"); exit(-1); } - - float y = sqrtf(crealf(vec_dot_prod_conj_ccc(&buffer[peak_idx-fft_size], - &buffer[peak_idx-fft_size], - fft_size)) / - fft_size); - float x = peak_value/y; - mean_peak = VEC_CMA(x, mean_peak, frame_cnt); + mean_peak = VEC_CMA(peak_value, mean_peak, frame_cnt); - if (x >= threshold) { + if (peak_value >= threshold) { nof_det++; + + if (peak_idx >= fft_size) { + + // Estimate CFO + cfo = pss_synch_cfo_compute(&pss, &buffer[peak_idx-fft_size]); + mean_cfo = VEC_CMA(cfo, mean_cfo, frame_cnt); + + // Correct CFO + cfo_correct(&cfocorr, buffer, buffer, -mean_cfo / fft_size); + + // Estimate channel + if (pss_synch_chest(&pss, &buffer[peak_idx-fft_size], ce)) { + fprintf(stderr, "Error computing channel estimation\n"); + exit(-1); + } + + // Find SSS + int sss_idx = peak_idx-flen/10+SLOT_IDX_CPNORM(5,fft_size); + if (sss_idx >= 0 && sss_idx < flen-fft_size) { + sss_synch_m0m1_diff(&sss, &buffer[sss_idx], &m0, &m0_value, &m1, &m1_value); + if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { + sss_error3++; + } + sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 3, NULL, &m0, &m0_value, &m1, &m1_value); + if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { + sss_error2++; + } + sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 1, NULL, &m0, &m0_value, &m1, &m1_value); + if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { + sss_error1++; + } + } + + + } else { + INFO("No space for CFO computation. Frame starts at \n",peak_idx); + } + + if (!disable_plots && sss_synch_subframe(m0,m1) == 0) + do_plots_sss(sss.corr_output_m0, sss.corr_output_m1); + } else { nof_nodet++; } if (frame_cnt > 100) { if (abs(last_peak-peak_idx) > 10) { - if (x >= threshold) { + if (peak_value >= threshold) { nof_nopeakdet++; - } else { - if (nof_nodet > 0) { - nof_nodet--; - } - } - nof_nopeak++; + } + nof_nopeak++; } } - + frame_cnt++; - - printf("[%5d]: Pos: %5d, En: %.4f Val: %.3f MeanVal: %.3f, Det: %.3f, No-Det: %.3f, NoPeak: %.3f, NoPeakDet: %.3f\r", + + printf("[%5d]: Pos: %5d, PSR: %6.3f MeanPSR: %6.3f, Pdet: %6.3f, Pmiss: %.3f, " + "FP: %d, FPThres: %d, CFO: %+4.1f KHz SSSmiss: %.3f/%.3f/%.3f\r", frame_cnt, - peak_idx, y, x, mean_peak, + peak_idx, + peak_value, mean_peak, (float) nof_det/frame_cnt, (float) nof_nodet/frame_cnt, - (float) nof_nopeak/frame_cnt, (float) nof_nopeakdet/nof_nopeak); + nof_nopeak, nof_nopeakdet, mean_cfo*15, + (float) sss_error1/nof_det,(float) sss_error2/nof_det,(float) sss_error3/nof_det + ); if (VERBOSE_ISINFO()) { printf("\n"); } + + if (!disable_plots) + do_plots(pss.conv_output_avg, pss.conv_output_avg[peak_idx], pss.fft_size+pss.frame_size-1, ce); last_peak = peak_idx; @@ -206,3 +287,75 @@ int main(int argc, char **argv) { exit(0); } +extern cf_t *tmp2; + + +/********************************************************************** + * Plotting Functions + ***********************************************************************/ +#ifndef DISABLE_GRAPHICS + + +#include "liblte/graphics/plot.h" +plot_real_t pssout; +//plot_complex_t pce; + +plot_real_t psss1;//, psss2; + +float tmp[100000]; +cf_t tmpce[PSS_LEN]; + + +void init_plots() { + plot_init(); + plot_real_init(&pssout); + plot_real_setTitle(&pssout, "PSS xCorr"); + plot_real_setLabels(&pssout, "Index", "Absolute value"); + plot_real_setYAxisScale(&pssout, 0, 1); + + /* + plot_complex_init(&pce); + plot_complex_setTitle(&pce, "Channel Estimates"); + plot_complex_setYAxisScale(&pce, Ip, -2, 2); + plot_complex_setYAxisScale(&pce, Q, -2, 2); + plot_complex_setYAxisScale(&pce, Magnitude, 0, 2); + plot_complex_setYAxisScale(&pce, Phase, -M_PI, M_PI); + */ + + plot_real_init(&psss1); + plot_real_setTitle(&psss1, "SSS xCorr m0"); + plot_real_setLabels(&psss1, "Index", "Absolute value"); + plot_real_setYAxisScale(&psss1, 0, 1); + + /* + plot_real_init(&psss2); + plot_real_setTitle(&psss2, "SSS xCorr m1"); + plot_real_setLabels(&psss2, "Index", "Absolute value"); + plot_real_setYAxisScale(&psss2, 0, 1); + */ + + +} + +void do_plots(float *corr, float energy, uint32_t size, cf_t ce[PSS_LEN]) { + vec_sc_prod_fff(corr,1./energy,tmp, size); + plot_real_setNewData(&pssout, tmp, size); + +// float norm = vec_avg_power_cf(ce, PSS_LEN); + // vec_sc_prod_cfc(ce, 1.0/sqrt(norm), tmpce, PSS_LEN); + + //plot_complex_setNewData(&pce, tmpce, PSS_LEN); +} + +void do_plots_sss(float *corr_m0, float *corr_m1) { + if (m0_value > 0) + vec_sc_prod_fff(corr_m0,1./m0_value,corr_m0, N_SSS); + plot_real_setNewData(&psss1, corr_m0, N_SSS); + +// if (m1_value > 0) +// vec_sc_prod_fff(corr_m1,1./m1_value,corr_m1, N_SSS); +// plot_real_setNewData(&psss2, corr_m1, N_SSS); +} + +#endif + diff --git a/lte/phy/lib/sync/test/sss_mex.c b/lte/phy/lib/sync/test/sss_mex.c new file mode 100644 index 000000000..3d34c201a --- /dev/null +++ b/lte/phy/lib/sync/test/sss_mex.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2012, Ismael Gomez-Miguelez . + * This file is part of ALOE++ (http://flexnets.upc.edu/) + * + * ALOE++ is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ALOE++ is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with ALOE++. If not, see . + */ + +#include +#include "liblte/phy/phy.h" +#include "liblte/mex/mexutils.h" + +/** MEX function to be called from MATLAB to test the channel estimator + */ + +#define ENBCFG prhs[0] +#define INPUT prhs[1] +#define ALGO prhs[2] +#define NOF_INPUTS 2 + + +void help() +{ + mexErrMsgTxt + ("[N_id_1,sf_idx,corr_output_m0,corr_output_m1] = liblte_sss(enbConfig, inputSignal, [Algorithm])\n" + "\tinputSignal must be aligned to the subframe. CP length is assumed Normal.\n" + "\tAlgorithm is an optional parameter: Can be 'partial','diff','full'\n\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + lte_cell_t cell; + sss_synch_t sss; + cf_t *input_symbols; + int frame_len; + uint32_t m0, m1; + float m0_value, m1_value; + char alg[64]; + + if (nrhs < NOF_INPUTS) { + help(); + return; + } + + if (mexutils_read_cell(ENBCFG, &cell)) { + help(); + return; + } + + if (nrhs > NOF_INPUTS) { + mxGetString(ALGO, alg, (mwSize)sizeof(alg)); + } else { + strcpy(alg, "full"); + } + + /** Allocate input buffers */ + frame_len = mexutils_read_cf(INPUT, &input_symbols); + if (frame_len < 0) { + mexErrMsgTxt("Error reading input symbols\n"); + return; + } + + if (sss_synch_init(&sss, lte_symbol_sz(cell.nof_prb))) { + mexErrMsgTxt("Error initializing SSS object\n"); + return; + } + + sss_synch_set_N_id_2(&sss, cell.id%3); + + // Find SSS + uint32_t sss_idx = SLOT_IDX_CPNORM(5,lte_symbol_sz(cell.nof_prb)); + if (sss_idx > frame_len) { + mexErrMsgTxt("Error too few samples provided.\n"); + return; + } + //mexPrintf("SSS begins at %d/%d. Running algorithm %s\n", sss_idx, frame_len, alg); + if (!strcmp(alg, "partial")) { + sss_synch_m0m1_partial(&sss, &input_symbols[sss_idx], 3, NULL, &m0, &m0_value, &m1, &m1_value); + } else if (!strcmp(alg, "diff")) { + sss_synch_m0m1_diff(&sss, &input_symbols[sss_idx], &m0, &m0_value, &m1, &m1_value); + } else if (!strcmp(alg, "full")) { + sss_synch_m0m1_partial(&sss, &input_symbols[sss_idx], 1, NULL, &m0, &m0_value, &m1, &m1_value); + } else { + mexErrMsgTxt("Unsupported algorithm type\n"); + return; + } + + //mexPrintf("m0: %d, m1: %d, N_id_1: %d\n", m0, m1, sss_synch_N_id_1(&sss, m0, m1)); + + if (nlhs >= 1) { + plhs[0] = mxCreateDoubleScalar(sss_synch_N_id_1(&sss, m0, m1)); + } + if (nlhs >= 2) { + plhs[1] = mxCreateDoubleScalar(sss_synch_subframe(m0, m1)); + } + if (nlhs >= 3) { + mexutils_write_f(sss.corr_output_m0, &plhs[2], N_SSS, 1); + } + if (nlhs >= 4) { + mexutils_write_f(sss.corr_output_m1, &plhs[3], N_SSS, 1); + } + sss_synch_free(&sss); + free(input_symbols); + + return; +} + diff --git a/matlab/tests/get_sc.m b/matlab/tests/get_sc.m new file mode 100644 index 000000000..2db50dd1f --- /dev/null +++ b/matlab/tests/get_sc.m @@ -0,0 +1,111 @@ +function [ s, c0, c1 ] = get_sc( N_id_2 ) + + if (N_id_2 == 0) + + s(1,:)=[1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, ]; + s(2,:)=[1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, ]; + s(3,:)=[1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, ]; + s(4,:)=[1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, ]; + s(5,:)=[-1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, ]; + s(6,:)=[1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, ]; + s(7,:)=[1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, ]; + s(8,:)=[-1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, ]; + s(9,:)=[1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, ]; + s(10,:)=[-1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, ]; + s(11,:)=[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, ]; + s(12,:)=[1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, ]; + s(13,:)=[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, ]; + s(14,:)=[-1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, ]; + s(15,:)=[-1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, ]; + s(16,:)=[-1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, ]; + s(17,:)=[-1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, ]; + s(18,:)=[-1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, ]; + s(19,:)=[1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, ]; + s(20,:)=[1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, ]; + s(21,:)=[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, ]; + s(22,:)=[-1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, ]; + s(23,:)=[-1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, ]; + s(24,:)=[1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, ]; + s(25,:)=[-1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, ]; + s(26,:)=[-1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, ]; + s(27,:)=[-1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, ]; + s(28,:)=[1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, ]; + s(29,:)=[-1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, ]; + s(30,:)=[1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, ]; + s(31,:)=[-1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, ]; + c0=[1, 1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, ]; + c1=[1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, ]; + elseif (N_id_2 == 1) + s(1,:)=[1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, ]; + s(2,:)=[1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, ]; + s(3,:)=[1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, ]; + s(4,:)=[1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, ]; + s(5,:)=[-1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, ]; + s(6,:)=[1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, ]; + s(7,:)=[1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, ]; + s(8,:)=[-1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, ]; + s(9,:)=[1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, ]; + s(10,:)=[-1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, ]; + s(11,:)=[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, ]; + s(12,:)=[1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, ]; + s(13,:)=[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, ]; + s(14,:)=[-1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, ]; + s(15,:)=[-1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, ]; + s(16,:)=[-1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, ]; + s(17,:)=[-1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, ]; + s(18,:)=[-1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, ]; + s(19,:)=[1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, ]; + s(20,:)=[1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, ]; + s(21,:)=[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, ]; + s(22,:)=[-1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, ]; + s(23,:)=[-1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, ]; + s(24,:)=[1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, ]; + s(25,:)=[-1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, ]; + s(26,:)=[-1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, ]; + s(27,:)=[-1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, ]; + s(28,:)=[1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, ]; + s(29,:)=[-1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, ]; + s(30,:)=[1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, ]; + s(31,:)=[-1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, ]; + c0=[1, 1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, ]; + c1=[-1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, ]; + + else + s(1,:)=[1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, ]; + s(2,:)=[1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, ]; + s(3,:)=[1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, ]; + s(4,:)=[1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, ]; + s(5,:)=[-1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, ]; + s(6,:)=[1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, ]; + s(7,:)=[1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, ]; + s(8,:)=[-1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, ]; + s(9,:)=[1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, ]; + s(10,:)=[-1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, ]; + s(11,:)=[-1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, ]; + s(12,:)=[1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, ]; + s(13,:)=[1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, ]; + s(14,:)=[-1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, ]; + s(15,:)=[-1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, ]; + s(16,:)=[-1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, ]; + s(17,:)=[-1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, ]; + s(18,:)=[-1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, ]; + s(19,:)=[1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, ]; + s(20,:)=[1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, ]; + s(21,:)=[1, -1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, ]; + s(22,:)=[-1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, ]; + s(23,:)=[-1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, ]; + s(24,:)=[1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, ]; + s(25,:)=[-1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, ]; + s(26,:)=[-1, -1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, ]; + s(27,:)=[-1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, ]; + s(28,:)=[1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, ]; + s(29,:)=[-1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, ]; + s(30,:)=[1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, ]; + s(31,:)=[-1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1, 1, ]; + c0=[1, 1, -1, 1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, ]; + c1=[1, -1, 1, -1, -1, -1, 1, -1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, ]; + + end + +end + diff --git a/matlab/tests/test_sss.m b/matlab/tests/test_sss.m new file mode 100644 index 000000000..74402c939 --- /dev/null +++ b/matlab/tests/test_sss.m @@ -0,0 +1,143 @@ + +SNR_values = linspace(-6,4,10); +Npackets = 200; +CFO=4/15; +m0=7; +m1=10; +%m0=26; +%m1=21; + +recordedWaveform = signal; +if (~isempty(recordedWaveform)) + Npackets = floor(length(signal)/19200)-1; + SNR_values = 0; +end + +error = zeros(6,length(SNR_values)); + +enb = struct('NCellID',196,'NSubframe',0,'NDLRB',6,'CellRefP',1,'CyclicPrefix','Normal','DuplexMode','FDD'); +sss=lteSSS(enb); + +cfg.Seed = 2; % Random channel seed +cfg.NRxAnts = 1; % 1 receive antenna +cfg.DelayProfile = 'ETU'; % EVA delay spread +cfg.DopplerFreq = 144; % 120Hz Doppler frequency +cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation +cfg.NTerms = 16; % Oscillators used in fading model +cfg.ModelType = 'GMEDS'; % Rayleigh fading model type +cfg.InitPhase = 'Random'; % Random initial phases +cfg.NormalizePathGains = 'On'; % Normalize delay profile power +cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas % Initialize at time zero + +[s, c0, c1] = get_sc(mod(enb.NCellID,3)); + +subframe = lteDLResourceGrid(enb); +sssSym = lteSSS(enb); +sssInd = lteSSSIndices(enb); +subframe(sssInd) = sssSym; +N_id_1 = floor(enb.NCellID/3); + +[txWaveform,info] = lteOFDMModulate(enb,subframe); +cfg.SamplingRate = info.SamplingRate; +fftSize = info.Nfft; + + +addpath('../../debug/lte/phy/lib/sync/test') + +for snr_idx=1:length(SNR_values) + SNRdB = SNR_values(snr_idx); + for i=1:Npackets + %% Noise Addition + SNR = 10^(SNRdB/10); % Linear SNR + + if (isempty(recordedWaveform)) + cfg.InitTime = i*(10^-3); + [rxWaveform, info]= lteFadingChannel(cfg,txWaveform); + rxWaveform = txWaveform; + + % Add CFO + freq = CFO/double(fftSize); + rxWaveform = rxWaveform.*exp(1i*2*pi*freq*(1:length(txWaveform))'); + + N0 = 1/(sqrt(2.0*enb.CellRefP*double(fftSize))*SNR); + noise = N0*complex(randn(size(rxWaveform)), randn(size(rxWaveform))); % Generate noise + + rxWaveform = rxWaveform + noise; + else + rxWaveform = recordedWaveform(i*19200+1:(i+1)*19200); + end + + offset = lteDLFrameOffset(enb,rxWaveform); + rxWaveform = [rxWaveform(1+offset:end,:); zeros(offset,1)]; + + subframe_rx = lteOFDMDemodulate(enb,rxWaveform,1); + + sss_rx = subframe_rx(lteSSSIndices(enb)); + sss0=sss_rx(1:2:end); + sss1=sss_rx(2:2:end); + + beta0=sss0.*c0'; + beta1=sss1.*c1'; + + corr0=zeros(31,1); + for m=1:31 + corr0(m)=sum(beta0.*s(m,:)'); + end + corr0=abs(corr0).^2; + [m, idx]=max(corr0); + + error(1,snr_idx) = error(1,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + M=2; + Nm=10; + + corr2=zeros(31,1); + for m=1:31 + for j=0:M + idx=1+j*Nm:(j+1)*Nm; + corr2(m)=corr2(m)+abs(sum(beta0(idx).*s(m,idx)')).^2; + end + end + [m, idx]=max(corr2); + + error(2,snr_idx) = error(2,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + corr3=zeros(31,1); + for m=1:31 + corr3(m)=abs(sum(beta0(2:end).*conj(beta0(1:end-1)).*transpose(s(m,2:end).*conj(s(m,1:end-1))))).^2; + end + [m, idx]=max(corr3); + + error(3,snr_idx) = error(3,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + % libLTE results + [n,sf_idx,lt_corr0,lt_corr1,lt_sss0,lt_sss1]=liblte_sss(enb,rxWaveform,'full'); + [m, idx]=max(lt_corr0); + error(4,snr_idx) = error(4,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + [n,sf_idx,lt_corr2]=liblte_sss(enb,rxWaveform,'partial'); + [m, idx]=max(lt_corr2); + error(5,snr_idx) = error(5,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + [n,sf_idx,lt_corr3]=liblte_sss(enb,rxWaveform,'diff'); + [m, idx]=max(lt_corr3); + error(6,snr_idx) = error(6,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + end +end + +if (length(SNR_values) > 1) + plot(SNR_values,1-error/Npackets) + legend('Full','Partial','Differential','Full-lt','Partial-lt','Differential-lt') + grid on +else + e=error/Npackets; + fprintf('Full (mt/lt): \t%f/%f\n',e(1),e(4)); + fprintf('Partial (mt/lt):%f/%f\n',e(2),e(5)); + fprintf('Diff (mt/lt): \t%f/%f\n',e(3),e(6)); +end + + + + + From ecbd3dda2c1d31f1e79aefd820587dfec5f15695 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 9 Dec 2014 23:29:48 +0000 Subject: [PATCH 40/55] Added SIB4. Improved CP detection. --- lte/examples/cell_measurement.c | 102 +++++++++-- lte/examples/cell_search.c | 6 +- lte/examples/cell_search_utils.c | 20 +- lte/examples/cell_search_utils.h | 5 +- lte/examples/pdsch_ue.c | 143 +++++++++------ .../include/liblte/phy/common/phy_common.h | 4 +- lte/phy/include/liblte/phy/phch/pdsch.h | 2 + lte/phy/include/liblte/phy/sync/pss.h | 8 +- lte/phy/include/liblte/phy/sync/sync.h | 39 ++-- lte/phy/include/liblte/phy/ue/ue_celldetect.h | 20 +- lte/phy/include/liblte/phy/ue/ue_dl.h | 22 ++- lte/phy/include/liblte/phy/ue/ue_sync.h | 5 +- lte/phy/include/liblte/phy/utils/vector.h | 3 + lte/phy/lib/phch/src/pbch.c | 8 +- lte/phy/lib/phch/src/pdsch.c | 25 ++- lte/phy/lib/sync/src/find_sss.c | 8 +- lte/phy/lib/sync/src/pss.c | 62 ++++--- lte/phy/lib/sync/src/sync.c | 171 +++++++++++------- lte/phy/lib/sync/test/pss_usrp.c | 55 ++++-- lte/phy/lib/ue/src/ue_celldetect.c | 84 ++++----- lte/phy/lib/ue/src/ue_dl.c | 106 ++++++----- lte/phy/lib/ue/src/ue_mib.c | 13 +- lte/phy/lib/ue/src/ue_sync.c | 52 ++---- .../include/liblte/rrc/common/rrc_common.h | 8 + lte/rrc/include/liblte/rrc/messages/bcch.h | 18 -- lte/rrc/include/liblte/rrc/messages/sib1.h | 5 + lte/rrc/include/liblte/rrc/messages/sib4.h | 45 +++++ lte/rrc/include/liblte/rrc/rrc.h | 1 + lte/rrc/lib/messages/src/bcch.c | 11 +- lte/rrc/lib/messages/src/sib1.c | 56 ++++-- lte/rrc/lib/messages/src/sib4.c | 56 ++++++ matlab/tests/test_sss.m | 9 +- 32 files changed, 739 insertions(+), 433 deletions(-) create mode 100644 lte/rrc/include/liblte/rrc/messages/sib4.h create mode 100644 lte/rrc/lib/messages/src/sib4.c diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 8abc905e6..1e6b2e212 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -47,9 +47,8 @@ float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_detect_cfg_t cell_detect_config = { - 500, // nof_frames_total - 50, // nof_frames_detected - 0.4 // threshold + 100, // nof_frames_total + 3.0 // early-stops cell detection if mean PSR is above this value }; /********************************************************************** @@ -126,7 +125,10 @@ int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { extern float mean_exec_time; -enum receiver_state { DECODE_MIB, DECODE_SIB, MEASURE} state; +enum receiver_state { DECODE_MIB, DECODE_SIB, DECODE_SIB4, MEASURE} state; + +#define MAX_SINFO 10 +#define MAX_NEIGHBOUR_CELLS 128 int main(int argc, char **argv) { int ret; @@ -148,6 +150,11 @@ int main(int argc, char **argv) { uint32_t sfn_offset; float rssi_utra=0,rssi=0, rsrp=0, rsrq=0, snr=0; cf_t *nullce[MAX_PORTS]; + uint32_t si_window_length; + scheduling_info_t sinfo[MAX_SINFO]; + scheduling_info_t *sinfo_sib4 = NULL; + uint32_t neighbour_cell_ids[MAX_NEIGHBOUR_CELLS]; + for (int i=0;iperiod) == sinfo_sib4->n*si_window_length/10) && + ue_sync_get_sfidx(&ue_sync) == (sinfo_sib4->n*si_window_length%10)) { + sib4_window_start = true; + sib4_window_cnt = 0; + } + + /* We are looking for SI Blocks, search only in appropiate places */ + if (sib4_window_start && !(ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) + { +/* printf("[%d/%d]: Trying SIB4 in SF: %d, SFN: %d\n", sib4_window_cnt, si_window_length, + ue_sync_get_sfidx(&ue_sync), sfn); +*/ n = ue_dl_decode_sib(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), + ((int) ceilf((float)3*sib4_window_cnt/2))%4); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + exit(-1); + } else if (n == 0) { + nof_trials++; + } else { + bit_unpack_vector(data, data_unpacked, n); + void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); + int nof_cell = bcch_dlsch_sib4_get_neighbour_cells(dlsch_msg, neighbour_cell_ids, MAX_NEIGHBOUR_CELLS); + + printf("Decoded SIB4. Neighbour cell list (PhyIDs): "); + for (int i=0;inof_frames_detected) { - ue_celldetect_set_nof_frames_detected(&cd, config->nof_frames_detected); - } if (config->nof_frames_total) { ue_celldetect_set_nof_frames_total(&cd, config->nof_frames_total); } @@ -139,12 +136,12 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo ue_celldetect_set_threshold(&cd, config->threshold); } - INFO("Setting sampling frequency 960 KHz for PSS search\n", 0); - cuhd_set_rx_srate(uhd, 960000.0); + INFO("Setting sampling frequency %.2f MHz for PSS search\n", CS_SAMP_FREQ/1000); + cuhd_set_rx_srate(uhd, CS_SAMP_FREQ); INFO("Starting receiver...\n", 0); cuhd_start_rx_stream(uhd); - uint32_t flen = 4800; + uint32_t flen = CS_FLEN; int n; bzero(found_cell, sizeof(ue_celldetect_result_t)); @@ -171,11 +168,10 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo case CS_CELL_DETECTED: ue_celldetect_get_cell(&cd, found_cell); if (found_cell->peak > 0) { - printf("\n\tCELL ID: %d, CP: %s, Peak: %.2f, Mode: %d/%d\n", + printf("\n\tCELL ID: %d, CP: %s, Peak: %.2f, Mode: %.0f%%\n", found_cell->cell_id, lte_cp_string(found_cell->cp), - found_cell->peak, found_cell->mode, - cd.nof_frames_detected); + found_cell->peak, found_cell->mode*100); } ret = 1; @@ -183,7 +179,7 @@ int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *fo break; case CS_CELL_NOT_DETECTED: ret = 0; - DEBUG("No cell found at N_id_2=%d\n",N_id_2); + printf("No cell found at N_id_2=%d. Mean PSR: %.2f\n",N_id_2, sync_get_peak_value(&cd.sfind)); break; case LIBLTE_ERROR: case LIBLTE_ERROR_INVALID_INPUTS: @@ -271,8 +267,6 @@ int detect_and_decode_cell(cell_detect_cfg_t *config, void *uhd, int force_N_id_ cell->nof_ports = nof_tx_ports; bit_unpack_vector(bch_payload, bch_payload_unpacked, BCH_PAYLOAD_LEN); - printf("nof_bits: %d\n", BCH_PAYLOAD_LEN); - vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); bcch_bch_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); /* set sampling frequency */ diff --git a/lte/examples/cell_search_utils.h b/lte/examples/cell_search_utils.h index 03a14f36f..ad8875e3d 100644 --- a/lte/examples/cell_search_utils.h +++ b/lte/examples/cell_search_utils.h @@ -29,9 +29,8 @@ #include "liblte/phy/phy.h" typedef struct LIBLTE_API { - uint32_t nof_frames_total; - uint32_t nof_frames_detected; - float threshold; + uint32_t nof_frames_total; // maximum number of 5ms frames to capture + float threshold; // early-stops cell detection if mean PSR is above this value }cell_detect_cfg_t; int decode_pbch(void *uhd, diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 13a02a91a..e88e889c3 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -47,10 +47,15 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx); #endif +#define B210_DEFAULT_GAIN 40.0 +#define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 + +float gain_offset = B210_DEFAULT_GAIN_CORREC; + + cell_detect_cfg_t cell_detect_config = { - 500, // nof_frames_total - 50, // nof_frames_detected - CS_FIND_THRESHOLD // threshold + 100, // nof_frames_total + 4.0 // threshold }; /********************************************************************** @@ -150,6 +155,9 @@ int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { extern float mean_exec_time; +enum receiver_state { DECODE_MIB, DECODE_SIB} state; + + int main(int argc, char **argv) { int ret; cf_t *sf_buffer; @@ -165,7 +173,6 @@ int main(int argc, char **argv) { int n; uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; - float snr = 0; parse_args(&prog_args, argc, argv); #ifndef DISABLE_GRAPHICS @@ -191,8 +198,10 @@ int main(int argc, char **argv) { fprintf(stderr, "Cell not found\n"); exit(-1); } - - cuhd_start_rx_stream(uhd); + + INFO("Stopping UHD and flushing buffer...\r",0); + cuhd_stop_rx_stream(uhd); + cuhd_flush_buffer(uhd); if (ue_sync_init(&ue_sync, cell, cuhd_recv_wrapper, uhd)) { fprintf(stderr, "Error initiating ue_sync\n"); @@ -207,7 +216,8 @@ int main(int argc, char **argv) { exit(-1); } - pdsch_set_rnti(&ue_dl.pdsch, prog_args.rnti); + /* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */ + ue_dl_set_rnti(&ue_dl, prog_args.rnti); /* Initialize subframe counter */ sf_cnt = 0; @@ -215,74 +225,91 @@ int main(int argc, char **argv) { // Register Ctrl+C handler signal(SIGINT, sig_int_handler); - bool pbch_decoded = false; + cuhd_start_rx_stream(uhd); + // Variables for measurements + uint32_t nframes=0; + float rsrp=0, rsrq=0, snr=0; + /* Main loop */ - while (go_exit == false && - (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1)) - { + while (!go_exit && (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1)) { ret = ue_sync_get_buffer(&ue_sync, &sf_buffer); if (ret < 0) { fprintf(stderr, "Error calling ue_sync_work()\n"); - go_exit=true; } - + /* ue_sync_get_buffer returns 1 if successfully read 1 aligned subframe */ if (ret == 1) { - if (ue_sync_get_sfidx(&ue_sync) == 0) { - pbch_decode_reset(&ue_mib.pbch); - n = ue_mib_decode_aligned_frame(&ue_mib, - sf_buffer, bch_payload_unpacked, - NULL, &sfn_offset); - if (n < 0) { - fprintf(stderr, "Error decoding UE MIB\n"); - go_exit=true; - } else if (n == MIB_FOUND) { - bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); - bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); - sfn = (sfn + sfn_offset)%1024; - pbch_decoded = true; - } + switch (state) { + case DECODE_MIB: + if (ue_sync_get_sfidx(&ue_sync) == 0) { + pbch_decode_reset(&ue_mib.pbch); + n = ue_mib_decode_aligned_frame(&ue_mib, + sf_buffer, bch_payload_unpacked, + NULL, &sfn_offset); + if (n < 0) { + fprintf(stderr, "Error decoding UE MIB\n"); + exit(-1); + } else if (n == MIB_FOUND) { + bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); + bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); + printf("Decoded MIB. SFN: %d, offset: %d\n", sfn, sfn_offset); + sfn = (sfn + sfn_offset)%1024; + state = DECODE_SIB; + } + } + break; + case DECODE_SIB: + /* We are looking for SI Blocks, search only in appropiate places */ + if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { + n = ue_dl_decode_sib(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), + ((int) ceilf((float)3*(((sfn)/2)%4)/2))%4); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + exit(-1); + } + nof_trials++; + } + + rsrq = VEC_EMA(chest_dl_get_rsrq(&ue_dl.chest),rsrq,0.001); + rsrp = VEC_CMA(chest_dl_get_rsrp(&ue_dl.chest),rsrp,nframes); + snr = VEC_CMA(chest_dl_get_snr(&ue_dl.chest),snr,nframes); + nframes++; + + // Plot and Printf + if (ue_sync_get_sfidx(&ue_sync) == 0) { + printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, " + "RSRP: %+5.1f dBm, RSRQ: %5.1f dB, SNR: %4.1f dB, " + "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", + ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, + 10*log10(rsrp*1000)-gain_offset, + 10*log10(rsrq), 10*log10(snr), + 100*(1-(float) ue_dl.nof_pdcch_detected/nof_trials), + (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); + } + break; } - if (pbch_decoded) { - /* We are looking for SI Blocks, search only in appropiate places */ - if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { - n = ue_dl_decode(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), sfn, prog_args.rnti); - if (n < 0) { - fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - } - nof_trials++; - snr = VEC_CMA(chest_dl_get_snr(&ue_dl.chest), snr, nof_trials); - } - } - } - if (ue_sync_get_sfidx(&ue_sync) == 9) { - if (pbch_decoded) { + if (ue_sync_get_sfidx(&ue_sync) == 9) { sfn++; if (sfn == 1024) { sfn = 0; - } + } } + #ifndef DISABLE_GRAPHICS + if (!prog_args.disable_plots && ue_sync_get_sfidx(&ue_sync) == 5) { + do_plots(&ue_dl, 5); + } + #endif + } else if (ret == 0) { + printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", + sync_get_peak_value(&ue_sync.sfind), + ue_sync.frame_total_cnt, ue_sync.state); } - #ifndef DISABLE_GRAPHICS - if (!prog_args.disable_plots && ue_sync_get_sfidx(&ue_sync) == 5) { - do_plots(&ue_dl, 5); - } - #endif - - if ((sf_cnt%10)==0) { - printf("CFO: %+6.2f KHz, SFO: %+6.2f Khz, SNR: %5.1f dB, NOI: %.2f, " - "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", - ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, - 10*log10f(snr), pdsch_average_noi(&ue_dl.pdsch), - 100*(1-(float) ue_dl.nof_pdcch_detected/nof_trials), - (float) 100*ue_dl.pkt_errors/ue_dl.pkts_total,nof_trials, ue_dl.pkts_total); - - } + sf_cnt++; } // Main loop - + ue_dl_free(&ue_dl); ue_mib_free(&ue_mib); ue_sync_free(&ue_sync); diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index 30098b46e..b57f84d48 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -32,6 +32,8 @@ #include #include #include +#include + #include "liblte/config.h" #define NSUBFRAMES_X_FRAME 10 @@ -79,7 +81,7 @@ typedef enum {CPNORM, CPEXT} lte_cp_t; #define CP_ISEXT(cp) (cp==CPEXT) #define CP_NSYMB(cp) (CP_ISNORM(cp)?CPNORM_NSYMB:CPEXT_NSYMB) -#define CP(symbol_sz, c) ((c*symbol_sz)/2048) +#define CP(symbol_sz, c) ((int) ceil((((float) (c)*(symbol_sz))/2048))) #define CP_NORM(symbol, symbol_sz) ((symbol==0)?CP((symbol_sz),CPNORM_0_LEN):CP((symbol_sz),CPNORM_LEN)) #define CP_EXT(symbol_sz) (CP((symbol_sz),CPEXT_LEN)) diff --git a/lte/phy/include/liblte/phy/phch/pdsch.h b/lte/phy/include/liblte/phy/phch/pdsch.h index d09f29d29..826c4a2af 100644 --- a/lte/phy/include/liblte/phy/phch/pdsch.h +++ b/lte/phy/include/liblte/phy/phch/pdsch.h @@ -115,6 +115,8 @@ LIBLTE_API int pdsch_harq_setup(pdsch_harq_t *p, ra_mcs_t mcs, ra_prb_t *prb_alloc); +LIBLTE_API void pdsch_harq_reset(pdsch_harq_t *p); + LIBLTE_API void pdsch_harq_free(pdsch_harq_t *p); LIBLTE_API int pdsch_encode(pdsch_t *q, diff --git a/lte/phy/include/liblte/phy/sync/pss.h b/lte/phy/include/liblte/phy/sync/pss.h index 8e9c1e0d8..1ff0fee5f 100644 --- a/lte/phy/include/liblte/phy/sync/pss.h +++ b/lte/phy/include/liblte/phy/sync/pss.h @@ -48,7 +48,7 @@ typedef _Complex float cf_t; /* this is only a shortcut */ /* PSS processing options */ -//#define PSS_ACCUMULATE_ABS // If enabled, accumulates the correlation absolute value on consecutive calls to pss_synch_find_pss +#define PSS_ACCUMULATE_ABS // If enabled, accumulates the correlation absolute value on consecutive calls to pss_synch_find_pss #define PSS_ABS_SQUARE // If enabled, compute abs square, otherwise computes absolute value only @@ -83,9 +83,8 @@ typedef struct LIBLTE_API { cf_t *pss_signal_freq[3]; // One sequence for each N_id_2 cf_t *tmp_input; cf_t *conv_output; -#ifdef PSS_ACCUMULATE_ABS float *conv_output_abs; -#endif + float ema_alpha; float *conv_output_avg; }pss_synch_t; @@ -111,6 +110,9 @@ LIBLTE_API void pss_put_slot(cf_t *pss_signal, uint32_t nof_prb, lte_cp_t cp); +LIBLTE_API void pss_synch_set_ema_alpha(pss_synch_t *q, + float alpha); + LIBLTE_API int pss_synch_set_N_id_2(pss_synch_t *q, uint32_t N_id_2); diff --git a/lte/phy/include/liblte/phy/sync/sync.h b/lte/phy/include/liblte/phy/sync/sync.h index 917a031b1..52f91920b 100644 --- a/lte/phy/include/liblte/phy/sync/sync.h +++ b/lte/phy/include/liblte/phy/sync/sync.h @@ -35,6 +35,7 @@ #include "liblte/config.h" #include "liblte/phy/sync/pss.h" #include "liblte/phy/sync/sss.h" +#include "liblte/phy/sync/cfo.h" #define FFT_SIZE_MIN 64 #define FFT_SIZE_MAX 2048 @@ -51,11 +52,12 @@ * functions sync_pss_det_absolute() and sync_pss_det_peakmean(). */ +typedef enum {SSS_DIFF=0, SSS_PARTIAL_3=2, SSS_FULL=1} sss_alg_t; + typedef struct LIBLTE_API { pss_synch_t pss; sss_synch_t sss; float threshold; - float mean_energy; float peak_value; float mean_peak_value; uint32_t N_id_2; @@ -63,16 +65,20 @@ typedef struct LIBLTE_API { uint32_t sf_idx; uint32_t fft_size; uint32_t frame_size; - uint64_t frame_cnt; - float cfo; + float mean_cfo; + cfo_t cfocorr; + sss_alg_t sss_alg; bool detect_cp; bool sss_en; - bool normalize_en; + bool correct_cfo; lte_cp_t cp; uint32_t m0; uint32_t m1; float m0_value; float m1_value; + float M_norm_avg; + float M_ext_avg; + }sync_t; @@ -90,6 +96,11 @@ LIBLTE_API int sync_find(sync_t *q, uint32_t find_offset, uint32_t *peak_position); +/* Estimates the CP length */ +LIBLTE_API lte_cp_t sync_detect_cp(sync_t *q, + cf_t *input, + uint32_t peak_pos); + /* Sets the threshold for peak comparison */ LIBLTE_API void sync_set_threshold(sync_t *q, float threshold); @@ -103,12 +114,17 @@ LIBLTE_API float sync_get_last_peak_value(sync_t *q); /* Gets the mean peak value */ LIBLTE_API float sync_get_peak_value(sync_t *q); -/* Gets the last input signal energy estimation value */ -LIBLTE_API float sync_get_input_energy(sync_t *q); +/* Choose SSS detection algorithm */ +LIBLTE_API void sync_set_sss_algorithm(sync_t *q, + sss_alg_t alg); + +/* Sets PSS exponential averaging alpha weight */ +LIBLTE_API void sync_set_em_alpha(sync_t *q, + float alpha); /* Sets the N_id_2 to search for */ LIBLTE_API int sync_set_N_id_2(sync_t *q, - uint32_t N_id_2); + uint32_t N_id_2); /* Gets the Physical CellId from the last call to synch_run() */ LIBLTE_API int sync_get_cell_id(sync_t *q); @@ -122,19 +138,20 @@ LIBLTE_API lte_cp_t sync_get_cp(sync_t *q); /* Sets the CP length estimation (must do it if disabled) */ LIBLTE_API void sync_set_cp(sync_t *q, lte_cp_t cp); -/* Enables/Disables energy normalization every frame. If disabled, uses the mean */ -LIBLTE_API void sync_normalize_en(sync_t *q, - bool enable); - /* Enables/Disables SSS detection */ LIBLTE_API void sync_sss_en(sync_t *q, bool enabled); LIBLTE_API bool sync_sss_detected(sync_t *q); +LIBLTE_API bool sync_sss_is_en(sync_t *q); + /* Enables/Disables CP detection */ LIBLTE_API void sync_cp_en(sync_t *q, bool enabled); +LIBLTE_API void sync_correct_cfo(sync_t *q, + bool enabled); + #endif // SYNC_ diff --git a/lte/phy/include/liblte/phy/ue/ue_celldetect.h b/lte/phy/include/liblte/phy/ue/ue_celldetect.h index 83bd5fa42..e68e2ea47 100644 --- a/lte/phy/include/liblte/phy/ue/ue_celldetect.h +++ b/lte/phy/include/liblte/phy/ue/ue_celldetect.h @@ -63,26 +63,28 @@ #define CS_DEFAULT_NOFFRAMES_TOTAL 100 #define CS_DEFAULT_NOFFRAMES_DETECTED 10 -#define CS_FIND_THRESHOLD 0.6 - #define CS_FRAME_UNALIGNED -3 #define CS_CELL_DETECTED 2 #define CS_CELL_NOT_DETECTED 3 +#define CS_FFTSIZE 128 +#define CS_SAMP_FREQ (960000*(CS_FFTSIZE/64)) +#define CS_FLEN (4800*(CS_FFTSIZE/64)) + typedef struct LIBLTE_API { uint32_t cell_id; lte_cp_t cp; float peak; - uint32_t mode; + float mode; } ue_celldetect_result_t; typedef struct LIBLTE_API { sync_t sfind; + uint32_t max_frames_total; - uint32_t max_frames_detected; - uint32_t nof_frames_total; - uint32_t nof_frames_detected; + uint32_t nof_frames_total; // number of 5 ms frames to scan + float detect_threshold; // early-stops scan if mean PSR above this threshold uint32_t current_nof_detected; uint32_t current_nof_total; @@ -97,8 +99,7 @@ typedef struct LIBLTE_API { LIBLTE_API int ue_celldetect_init(ue_celldetect_t *q); LIBLTE_API int ue_celldetect_init_max(ue_celldetect_t *q, - uint32_t max_frames_total, - uint32_t max_frames_detected); + uint32_t max_frames_total); LIBLTE_API void ue_celldetect_free(ue_celldetect_t *q); @@ -117,9 +118,6 @@ LIBLTE_API void ue_celldetect_get_cell(ue_celldetect_t * q, LIBLTE_API int ue_celldetect_set_nof_frames_total(ue_celldetect_t *q, uint32_t nof_frames); -LIBLTE_API int ue_celldetect_set_nof_frames_detected(ue_celldetect_t *q, - uint32_t nof_frames); - LIBLTE_API void ue_celldetect_set_threshold(ue_celldetect_t *q, float threshold); diff --git a/lte/phy/include/liblte/phy/ue/ue_dl.h b/lte/phy/include/liblte/phy/ue/ue_dl.h index 56e7a4dc7..7fc7556e0 100644 --- a/lte/phy/include/liblte/phy/ue/ue_dl.h +++ b/lte/phy/include/liblte/phy/ue/ue_dl.h @@ -76,6 +76,7 @@ typedef struct LIBLTE_API { uint64_t nof_pdcch_detected; uint16_t user_rnti; + uint16_t current_rnti; }ue_dl_t; /* This function shall be called just after the initial synchronization */ @@ -85,11 +86,20 @@ LIBLTE_API int ue_dl_init(ue_dl_t *q, LIBLTE_API void ue_dl_free(ue_dl_t *q); -LIBLTE_API int ue_dl_decode(ue_dl_t *q, - cf_t *sf_buffer, - uint8_t *data, - uint32_t sf_idx, - uint32_t sfn, - uint16_t rnti); +LIBLTE_API int ue_dl_decode(ue_dl_t * q, + cf_t *input, + uint8_t *data, + uint32_t sf_idx); + +LIBLTE_API int ue_dl_decode_sib(ue_dl_t * q, + cf_t *input, + uint8_t * data, + uint32_t sf_idx, + uint32_t rvidx); + +LIBLTE_API void ue_dl_reset(ue_dl_t *q); + +LIBLTE_API void ue_dl_set_rnti(ue_dl_t *q, + uint16_t rnti); #endif \ No newline at end of file diff --git a/lte/phy/include/liblte/phy/ue/ue_sync.h b/lte/phy/include/liblte/phy/ue/ue_sync.h index 32b0841d9..3e7e92356 100644 --- a/lte/phy/include/liblte/phy/ue/ue_sync.h +++ b/lte/phy/include/liblte/phy/ue/ue_sync.h @@ -76,10 +76,7 @@ typedef struct LIBLTE_API { lte_cell_t cell; uint32_t sf_idx; - - cfo_t cfocorr; - float cur_cfo; - + bool decode_sss_on_track; uint32_t peak_idx; diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index 909b0bb8f..8ba871f8c 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -35,6 +35,9 @@ typedef _Complex float cf_t; + +#define MAX(a,b) ((a)>(b)?(a):(b)) + // Cumulative moving average #define VEC_CMA(data, average, n) ((average) + ((data) - (average)) / ((n)+1)) diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index 1131d5fcb..15e419f9c 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -278,7 +278,7 @@ int pbch_decode_frame(pbch_t *q, uint32_t src, uint32_t dst, uint32_t n, uint32_t nof_bits, uint32_t nof_ports) { int j; - INFO("Trying to decode PBCH %d bits, %d ports, src: %d, dst: %d, n=%d\n", nof_bits, nof_ports, src, dst, n); + DEBUG("Trying to decode PBCH %d bits, %d ports, src: %d, dst: %d, n=%d\n", nof_bits, nof_ports, src, dst, n); memcpy(&q->temp[dst * nof_bits], &q->pbch_llr[src * nof_bits], n * nof_bits * sizeof(float)); @@ -381,7 +381,11 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], float demod_soft_sigma_set(&q->demod, 1.0); demod_soft_demodulate(&q->demod, q->pbch_d, &q->pbch_llr[nof_bits * (q->frame_idx - 1)], q->nof_symbols); - + + if (nant == 2) { + vec_save_file("d",q->pbch_d, q->nof_symbols*sizeof(cf_t)); + } + /* We don't know where the 40 ms begin, so we try all combinations. E.g. if we received * 4 frames, try 1,2,3,4 individually, 12, 23, 34 in pairs, 123, 234 and finally 1234. * We know they are ordered. diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index e66890766..3881d7246 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -399,12 +399,12 @@ int pdsch_harq_init(pdsch_harq_t *p, pdsch_t *pdsch) { // FIXME: Use HARQ buffer limitation based on UE category p->w_buff_size = p->cell.nof_prb * MAX_PDSCH_RE(p->cell.cp) * 6 * 2 / p->max_cb; for (i=0;imax_cb;i++) { - p->pdsch_w_buff_f[i] = malloc(sizeof(float) * p->w_buff_size); + p->pdsch_w_buff_f[i] = vec_malloc(sizeof(float) * p->w_buff_size); if (!p->pdsch_w_buff_f[i]) { perror("malloc"); return LIBLTE_ERROR; } - p->pdsch_w_buff_c[i] = malloc(sizeof(uint8_t) * p->w_buff_size); + p->pdsch_w_buff_c[i] = vec_malloc(sizeof(uint8_t) * p->w_buff_size); if (!p->pdsch_w_buff_c[i]) { perror("malloc"); return LIBLTE_ERROR; @@ -439,6 +439,27 @@ void pdsch_harq_free(pdsch_harq_t *p) { } } +void pdsch_harq_reset(pdsch_harq_t *p) { + int i; + if (p->pdsch_w_buff_f) { + for (i=0;imax_cb;i++) { + if (p->pdsch_w_buff_f[i]) { + bzero(p->pdsch_w_buff_f[i], sizeof(float) * p->w_buff_size); + } + } + } + if (p->pdsch_w_buff_c) { + for (i=0;imax_cb;i++) { + if (p->pdsch_w_buff_c[i]) { + bzero(p->pdsch_w_buff_c[i], sizeof(uint8_t) * p->w_buff_size); + } + } + } + bzero(&p->mcs, sizeof(ra_mcs_t)); + bzero(&p->cb_segm, sizeof(struct cb_segm)); + bzero(&p->prb_alloc, sizeof(ra_prb_t)); +} + int pdsch_harq_setup(pdsch_harq_t *p, ra_mcs_t mcs, ra_prb_t *prb_alloc) { int ret = LIBLTE_ERROR_INVALID_INPUTS; diff --git a/lte/phy/lib/sync/src/find_sss.c b/lte/phy/lib/sync/src/find_sss.c index 14147d166..d3b4371f1 100644 --- a/lte/phy/lib/sync/src/find_sss.c +++ b/lte/phy/lib/sync/src/find_sss.c @@ -72,8 +72,7 @@ static void corr_all_sz_partial(cf_t z[N_SSS], float s[N_SSS][N_SSS], uint32_t M static void extract_pair_sss(sss_synch_t *q, cf_t *input, cf_t *ce, cf_t y[2][N_SSS]) { cf_t input_fft[SYMBOL_SZ_MAX]; - - dft_run_c(&q->dftp_input, &input[CP_NORM(5, q->fft_size)], input_fft); + dft_run_c(&q->dftp_input, input, input_fft); if (ce) { vec_prod_conj_ccc(&input_fft[q->fft_size/2-N_SSS], ce, &input_fft[q->fft_size/2-N_SSS], 2*N_SSS); @@ -90,7 +89,8 @@ static void extract_pair_sss(sss_synch_t *q, cf_t *input, cf_t *ce, cf_t y[2][N_ } int sss_synch_m0m1_diff(sss_synch_t *q, cf_t *input, uint32_t *m0, float *m0_value, - uint32_t *m1, float *m1_value) { + uint32_t *m1, float *m1_value) +{ return sss_synch_m0m1_diff_coh(q, input, NULL, m0, m0_value, m1, m1_value); } @@ -161,7 +161,7 @@ int sss_synch_m0m1_partial(sss_synch_t *q, cf_t *input, uint32_t M, cf_t ce[2*N_ extract_pair_sss(q, input, ce, y); - corr_all_sz_partial(y[0], q->fc_tables[q->N_id_2].s, M, q->corr_output_m0); + corr_all_sz_partial(y[0], q->fc_tables[q->N_id_2].s, M, q->corr_output_m0); *m0 = vec_max_fi(q->corr_output_m0, N_SSS); if (m0_value) { *m0_value = q->corr_output_m0[*m0]; diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index 222bcddf5..ff8e1d288 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -67,7 +67,7 @@ int pss_synch_init_N_id_2(cf_t *pss_signal_time, cf_t *pss_signal_freq, uint32_t vec_sc_prod_cfc(pss_signal_freq, 1.0/PSS_LEN, pss_signal_freq, fft_size); dft_plan_free(&plan); - + ret = LIBLTE_SUCCESS; } return ret; @@ -95,7 +95,8 @@ int pss_synch_init_fft(pss_synch_t *q, uint32_t frame_size, uint32_t fft_size) { q->N_id_2 = 10; q->fft_size = fft_size; q->frame_size = frame_size; - + q->ema_alpha = 0.1; + buffer_size = fft_size + frame_size + 1; @@ -105,6 +106,7 @@ int pss_synch_init_fft(pss_synch_t *q, uint32_t frame_size, uint32_t fft_size) { } dft_plan_set_mirror(&q->dftp_input, true); dft_plan_set_dc(&q->dftp_input, true); + dft_plan_set_norm(&q->dftp_input, true); q->tmp_input = vec_malloc(buffer_size * sizeof(cf_t)); if (!q->tmp_input) { @@ -183,11 +185,9 @@ void pss_synch_free(pss_synch_t *q) { if (q->conv_output) { free(q->conv_output); } -#ifdef PSS_ACCUMULATE_ABS if (q->conv_output_abs) { free(q->conv_output_abs); } -#endif if (q->conv_output_avg) { free(q->conv_output_avg); } @@ -197,11 +197,8 @@ void pss_synch_free(pss_synch_t *q) { } void pss_synch_reset(pss_synch_t *q) { -#ifdef PSS_ACCUMULATE_ABS uint32_t buffer_size = q->fft_size + q->frame_size + 1; - bzero(q->conv_output_avg, sizeof(cf_t) * buffer_size); -#endif - + bzero(q->conv_output_avg, sizeof(float) * buffer_size); } /** @@ -261,6 +258,12 @@ int pss_synch_set_N_id_2(pss_synch_t *q, uint32_t N_id_2) { } } +/* Sets the weight factor alpha for the exponential moving average of the PSS correlation output + */ +void pss_synch_set_ema_alpha(pss_synch_t *q, float alpha) { + q->ema_alpha = alpha; +} + /** Performs time-domain PSS correlation. * Returns the index of the PSS correlation peak in a subframe. * The frame starts at corr_peak_pos-subframe_size/2. @@ -295,40 +298,39 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) #endif -#ifdef PSS_ACCUMULATE_ABS #ifdef PSS_ABS_SQUARE vec_abs_square_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); #else vec_abs_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); #endif - /* Find maximum of the absolute value of the correlation */ - corr_peak_pos = vec_max_fi(q->conv_output_abs, conv_output_len-1); - - // Normalize correlation output - vec_sc_prod_fff(q->conv_output_abs, 1/q->conv_output_abs[corr_peak_pos], q->conv_output_abs, conv_output_len-1); - + + vec_sc_prod_fff(q->conv_output_abs, q->ema_alpha, q->conv_output_abs, conv_output_len-1); + vec_sc_prod_fff(q->conv_output_avg, 1-q->ema_alpha, q->conv_output_avg, conv_output_len-1); + vec_sum_fff(q->conv_output_abs, q->conv_output_avg, q->conv_output_avg, conv_output_len-1); -#else - -#ifdef PSS_ABS_SQUARE - vec_abs_square_cf(q->conv_output, q->conv_output_avg, conv_output_len-1); -#else - vec_abs_cf(q->conv_output, q->conv_output_avg, conv_output_len-1); -#endif - -#endif /* Find maximum of the absolute value of the correlation */ corr_peak_pos = vec_max_fi(q->conv_output_avg, conv_output_len-1); #ifdef PSS_RETURN_PSR // Find second side lobe - float tmp = q->conv_output_avg[corr_peak_pos]; - q->conv_output_avg[corr_peak_pos] = 0; - int side_lobe_pos = vec_max_fi(q->conv_output_avg, conv_output_len-1); - q->conv_output_avg[corr_peak_pos] = tmp; + + // Find end of peak lobe to the right + int pl_ub = corr_peak_pos+1; + while(q->conv_output_avg[pl_ub+1] <= q->conv_output_avg[pl_ub] && pl_ub < conv_output_len) { + pl_ub ++; + } + // Find end of peak lobe to the left + int pl_lb = corr_peak_pos-1; + while(q->conv_output_avg[pl_lb-1] <= q->conv_output_avg[pl_lb] && pl_lb > 1) { + pl_lb --; + } + + int sl_right = pl_ub+vec_max_fi(&q->conv_output_avg[pl_ub], conv_output_len-1 - pl_ub); + int sl_left = vec_max_fi(q->conv_output_avg, pl_lb); + float side_lobe_value = MAX(q->conv_output_avg[sl_right], q->conv_output_avg[sl_left]); if (corr_peak_value) { - *corr_peak_value = tmp/q->conv_output_avg[side_lobe_pos]; + *corr_peak_value = q->conv_output_avg[corr_peak_pos]/side_lobe_value; } #else if (corr_peak_value) { @@ -366,7 +368,7 @@ int pss_synch_chest(pss_synch_t *q, cf_t *input, cf_t ce[PSS_LEN]) { dft_run_c(&q->dftp_input, input, input_fft); /* Compute channel estimate taking the PSS sequence as reference */ - vec_prod_conj_ccc(q->pss_signal_time[q->N_id_2], &input_fft[(q->fft_size-PSS_LEN)/2], ce, PSS_LEN); + vec_prod_conj_ccc(&input_fft[(q->fft_size-PSS_LEN)/2], q->pss_signal_time[q->N_id_2], ce, PSS_LEN); ret = LIBLTE_SUCCESS; } diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 57cdddef9..a9ea8bde1 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -33,10 +33,11 @@ #include "liblte/phy/common/phy_common.h" #include "liblte/phy/sync/sync.h" #include "liblte/phy/utils/vector.h" +#include "liblte/phy/sync/cfo.h" -#define MEANENERGY_EMA_ALPHA 0.5 #define MEANPEAK_EMA_ALPHA 0.2 - +#define CFO_EMA_ALPHA 0.01 +#define CP_EMA_ALPHA 0.2 static bool fft_size_isvalid(uint32_t fft_size) { if (fft_size >= FFT_SIZE_MIN && fft_size <= FFT_SIZE_MAX && (fft_size%64) == 0) { @@ -55,24 +56,31 @@ int sync_init(sync_t *q, uint32_t frame_size, uint32_t fft_size) { frame_size <= 307200 && fft_size_isvalid(fft_size)) { + ret = LIBLTE_ERROR; + bzero(q, sizeof(sync_t)); q->detect_cp = true; - q->normalize_en = true; - q->mean_energy = 0.0; q->mean_peak_value = 0.0; q->sss_en = true; + q->correct_cfo = true; q->N_id_2 = 1000; q->N_id_1 = 1000; q->fft_size = fft_size; q->frame_size = frame_size; + q->sss_alg = SSS_PARTIAL_3; if (pss_synch_init_fft(&q->pss, frame_size, fft_size)) { fprintf(stderr, "Error initializing PSS object\n"); - return LIBLTE_ERROR; + goto clean_exit; } if (sss_synch_init(&q->sss, fft_size)) { fprintf(stderr, "Error initializing SSS object\n"); - return LIBLTE_ERROR; + goto clean_exit; + } + + if (cfo_init(&q->cfocorr, frame_size)) { + fprintf(stderr, "Error initiating CFO\n"); + goto clean_exit; } DEBUG("SYNC init with frame_size=%d and fft_size=%d\n", frame_size, fft_size); @@ -81,6 +89,11 @@ int sync_init(sync_t *q, uint32_t frame_size, uint32_t fft_size) { } else { fprintf(stderr, "Invalid parameters frame_size: %d, fft_size: %d\n", frame_size, fft_size); } + +clean_exit: + if (ret == LIBLTE_ERROR) { + sync_free(q); + } return ret; } @@ -88,6 +101,7 @@ void sync_free(sync_t *q) { if (q) { pss_synch_free(&q->pss); sss_synch_free(&q->sss); + cfo_free(&q->cfocorr); } } @@ -99,10 +113,6 @@ void sync_sss_en(sync_t *q, bool enabled) { q->sss_en = enabled; } -void sync_normalize_en(sync_t *q, bool enable) { - q->normalize_en = enable; -} - bool sync_sss_detected(sync_t *q) { return lte_N_id_1_isvalid(q->N_id_1); } @@ -131,7 +141,7 @@ uint32_t sync_get_sf_idx(sync_t *q) { } float sync_get_cfo(sync_t *q) { - return q->cfo; + return q->mean_cfo; } float sync_get_last_peak_value(sync_t *q) { @@ -142,10 +152,22 @@ float sync_get_peak_value(sync_t *q) { return q->mean_peak_value; } +void sync_correct_cfo(sync_t *q, bool enabled) { + q->correct_cfo = enabled; +} + void sync_cp_en(sync_t *q, bool enabled) { q->detect_cp = enabled; } +bool sync_sss_is_en(sync_t *q) { + return q->sss_en; +} + +void sync_set_em_alpha(sync_t *q, float alpha) { + pss_synch_set_ema_alpha(&q->pss, alpha); +} + lte_cp_t sync_get_cp(sync_t *q) { return q->cp; } @@ -153,33 +175,46 @@ void sync_set_cp(sync_t *q, lte_cp_t cp) { q->cp = cp; } +void sync_set_sss_algorithm(sync_t *q, sss_alg_t alg) { + q->sss_alg = alg; +} + /* CP detection algorithm taken from: * "SSS Detection Method for Initial Cell Search in 3GPP LTE FDD/TDD Dual Mode Receiver" * by Jung-In Kim et al. */ -static lte_cp_t detect_cp(sync_t *q, cf_t *input, uint32_t peak_pos) +lte_cp_t sync_detect_cp(sync_t *q, cf_t *input, uint32_t peak_pos) { float R_norm, R_ext, C_norm, C_ext; - float M_norm, M_ext; + float M_norm=0, M_ext=0; - R_norm = crealf(vec_dot_prod_conj_ccc(&input[peak_pos-q->fft_size-CP_NORM(7, q->fft_size)], - &input[peak_pos-CP_NORM(7, q->fft_size)], - CP_NORM(7, q->fft_size))); - C_norm = cabsf(vec_dot_prod_conj_ccc(&input[peak_pos-q->fft_size-CP_NORM(7, q->fft_size)], - &input[peak_pos-q->fft_size-CP_NORM(7, q->fft_size)], - CP_NORM(7, q->fft_size))); - R_ext = crealf(vec_dot_prod_conj_ccc(&input[peak_pos-q->fft_size-CP_EXT(q->fft_size)], - &input[peak_pos-CP_EXT(q->fft_size)], - CP_EXT(q->fft_size))); - C_ext = cabsf(vec_dot_prod_conj_ccc(&input[peak_pos-q->fft_size-CP_EXT(q->fft_size)], - &input[peak_pos-q->fft_size-CP_EXT(q->fft_size)], - CP_EXT(q->fft_size))); - M_norm = R_norm/C_norm; - M_ext = R_ext/C_ext; + uint32_t cp_norm_len = CP_NORM(7, q->fft_size); + uint32_t cp_ext_len = CP_EXT(q->fft_size); + + cf_t *input_cp_norm = &input[peak_pos-2*(q->fft_size+cp_norm_len)]; + cf_t *input_cp_ext = &input[peak_pos-2*(q->fft_size+cp_ext_len)]; - if (M_norm > M_ext) { + for (int i=0;i<2;i++) { + R_norm = crealf(vec_dot_prod_conj_ccc(&input_cp_norm[q->fft_size], input_cp_norm, cp_norm_len)); + C_norm = cp_norm_len * vec_avg_power_cf(input_cp_norm, cp_norm_len); + input_cp_norm += q->fft_size+cp_norm_len; + M_norm += R_norm/C_norm; + } + + q->M_norm_avg = VEC_EMA(M_norm, q->M_norm_avg, CP_EMA_ALPHA); + + for (int i=0;i<2;i++) { + R_ext = crealf(vec_dot_prod_conj_ccc(&input_cp_ext[q->fft_size], input_cp_ext, cp_ext_len)); + C_ext = cp_ext_len * vec_avg_power_cf(input_cp_ext, cp_ext_len); + input_cp_ext += q->fft_size+cp_ext_len; + M_ext += R_ext/C_ext; + } + + q->M_ext_avg = VEC_EMA(M_ext, q->M_ext_avg, CP_EMA_ALPHA); + + if (q->M_norm_avg > q->M_ext_avg) { return CPNORM; - } else if (M_norm < M_ext) { + } else if (q->M_norm_avg < q->M_ext_avg) { return CPEXT; } else { if (R_norm > R_ext) { @@ -199,8 +234,8 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { sss_synch_set_N_id_2(&q->sss, q->N_id_2); if (q->detect_cp) { - if (peak_pos >= q->fft_size + CP_EXT(q->fft_size)) { - q->cp = detect_cp(q, input, peak_pos); + if (peak_pos >= 2*(q->fft_size + CP_EXT(q->fft_size))) { + q->cp = sync_detect_cp(q, input, peak_pos); } else { INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); return LIBLTE_ERROR; @@ -208,13 +243,23 @@ int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { } /* Make sure we have enough room to find SSS sequence */ - sss_idx = (int) peak_pos - 2*(q->fft_size + CP(q->fft_size, q->cp)); + sss_idx = (int) peak_pos-2*q->fft_size-CP(q->fft_size, (CP_ISNORM(q->cp)?CPNORM_LEN:CPEXT_LEN)); if (sss_idx < 0) { INFO("Not enough room to decode CP SSS (sss_idx=%d, peak_pos=%d)\n", sss_idx, peak_pos); return LIBLTE_ERROR; } - sss_synch_m0m1_diff(&q->sss, &input[sss_idx], &q->m0, &q->m0_value, &q->m1, &q->m1_value); + switch(q->sss_alg) { + case SSS_DIFF: + sss_synch_m0m1_diff(&q->sss, &input[sss_idx], &q->m0, &q->m0_value, &q->m1, &q->m1_value); + break; + case SSS_PARTIAL_3: + sss_synch_m0m1_partial(&q->sss, &input[sss_idx], 3, NULL, &q->m0, &q->m0_value, &q->m1, &q->m1_value); + break; + case SSS_FULL: + sss_synch_m0m1_partial(&q->sss, &input[sss_idx], 1, NULL, &q->m0, &q->m0_value, &q->m1, &q->m1_value); + break; + } q->sf_idx = sss_synch_subframe(q->m0, q->m1); ret = sss_synch_N_id_1(&q->sss, q->m0, q->m1); @@ -242,8 +287,6 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit int ret = LIBLTE_ERROR_INVALID_INPUTS; - float peak_unnormalized=0, energy=1; - if (q != NULL && input != NULL && lte_N_id_2_isvalid(q->N_id_2) && @@ -259,33 +302,12 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit pss_synch_set_N_id_2(&q->pss, q->N_id_2); - peak_pos = pss_synch_find_pss(&q->pss, &input[find_offset], &peak_unnormalized); + peak_pos = pss_synch_find_pss(&q->pss, &input[find_offset], &q->peak_value); if (peak_pos < 0) { fprintf(stderr, "Error calling finding PSS sequence\n"); return LIBLTE_ERROR; } - if (q->normalize_en && - peak_pos + find_offset >= q->fft_size ) - { - /* Compute the energy of the received PSS sequence to normalize */ - energy = sqrtf(vec_avg_power_cf(&input[find_offset+peak_pos-q->fft_size], q->fft_size)); - q->mean_energy = VEC_EMA(energy, q->mean_energy, MEANENERGY_EMA_ALPHA); - } else { - if (q->mean_energy == 0.0) { - energy = 1.0; - } else { - energy = q->mean_energy; - } - } - - /* Normalize and compute mean peak value */ - if (q->mean_energy) { - q->peak_value = peak_unnormalized/q->mean_energy; - } else { - q->peak_value = peak_unnormalized/energy; - } q->mean_peak_value = VEC_EMA(q->peak_value, q->mean_peak_value, MEANPEAK_EMA_ALPHA); - q->frame_cnt++; if (peak_position) { *peak_position = (uint32_t) peak_pos; @@ -294,31 +316,39 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit /* If peak is over threshold, compute CFO and SSS */ if (q->peak_value >= q->threshold) { - // Set an invalid N_id_1 indicating SSS is yet to be detected - q->N_id_1 = 1000; + // Make sure we have enough space to estimate CFO + if (peak_pos + find_offset >= q->fft_size) { + float cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); + + /* compute cumulative moving average CFO */ + q->mean_cfo = VEC_EMA(cfo, q->mean_cfo, CFO_EMA_ALPHA); + + } else { + INFO("No space for CFO computation. Frame starts at \n",peak_pos); + } // Try to detect SSS if (q->sss_en) { + /* Correct CFO with the averaged CFO estimation */ + if (q->mean_cfo && q->correct_cfo) { + cfo_correct(&q->cfocorr, input, input, -q->mean_cfo / q->fft_size); + } + + // Set an invalid N_id_1 indicating SSS is yet to be detected + q->N_id_1 = 1000; + if (sync_sss(q, input, find_offset + peak_pos) < 0) { INFO("No space for SSS processing. Frame starts at %d\n", peak_pos); } } - // Make sure we have enough space to estimate CFO - if (peak_pos + find_offset >= q->fft_size) { - q->cfo = pss_synch_cfo_compute(&q->pss, &input[find_offset+peak_pos-q->fft_size]); - } else { - INFO("No space for CFO computation. Frame starts at \n",peak_pos); - } // Return 1 (peak detected) even if we couldn't estimate CFO and SSS ret = 1; } else { ret = 0; } - INFO("SYNC ret=%d N_id_2=%d pos=%d peak=%.2f/%.2f=%.2f mean_energy=%.2f" - "threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", - ret, q->N_id_2, peak_pos, peak_unnormalized*1000,energy*1000,q->peak_value, q->mean_energy*1000, - q->threshold, q->sf_idx, 15*q->cfo); + INFO("SYNC ret=%d N_id_2=%d frame_size=%d pos=%d peak=%.2f threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", + ret, q->N_id_2, q->frame_size, peak_pos, q->peak_value, q->threshold, q->sf_idx, 15*q->mean_cfo); } else if (lte_N_id_2_isvalid(q->N_id_2)) { fprintf(stderr, "Must call sync_set_N_id_2() first!\n"); @@ -328,6 +358,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit } void sync_reset(sync_t *q) { - q->frame_cnt = 0; + q->M_ext_avg = 0; + q->M_norm_avg = 0; pss_synch_reset(&q->pss); } diff --git a/lte/phy/lib/sync/test/pss_usrp.c b/lte/phy/lib/sync/test/pss_usrp.c index f727cad20..a2cade849 100644 --- a/lte/phy/lib/sync/test/pss_usrp.c +++ b/lte/phy/lib/sync/test/pss_usrp.c @@ -53,12 +53,14 @@ float uhd_gain=40.0, uhd_freq=-1.0; int nof_frames = -1; uint32_t fft_size=64; float threshold = 0.4; +int N_id_2_sync = -1; void usage(char *prog) { printf("Usage: %s [adgtvnp] -f rx_frequency_hz -i cell_id\n", prog); printf("\t-a UHD args [Default %s]\n", uhd_args); printf("\t-g UHD Gain [Default %.2f dB]\n", uhd_gain); printf("\t-n nof_frames [Default %d]\n", nof_frames); + printf("\t-l N_id_2 to sync [Default use cell_id]\n"); printf("\t-s symbol_sz [Default %d]\n", fft_size); printf("\t-t threshold [Default %.2f]\n", threshold); #ifndef DISABLE_GRAPHICS @@ -71,7 +73,7 @@ void usage(char *prog) { void parse_args(int argc, char **argv) { int opt; - while ((opt = getopt(argc, argv, "adgtvsfi")) != -1) { + while ((opt = getopt(argc, argv, "adgtvsfil")) != -1) { switch (opt) { case 'a': uhd_args = argv[optind]; @@ -88,6 +90,9 @@ void parse_args(int argc, char **argv) { case 'i': cell_id = atoi(argv[optind]); break; + case 'l': + N_id_2_sync = atoi(argv[optind]); + break; case 's': fft_size = atoi(argv[optind]); break; @@ -117,7 +122,7 @@ int main(int argc, char **argv) { int frame_cnt, n; void *uhd; pss_synch_t pss; - cfo_t cfocorr; + cfo_t cfocorr, cfocorr64; sss_synch_t sss; int32_t flen; int peak_idx, last_peak; @@ -128,6 +133,9 @@ int main(int argc, char **argv) { parse_args(argc, argv); + if (N_id_2_sync == -1) { + N_id_2_sync = cell_id%3; + } uint32_t N_id_2 = cell_id%3; uint32_t N_id_1 = cell_id/3; @@ -146,12 +154,13 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating PSS\n"); exit(-1); } - if (pss_synch_set_N_id_2(&pss, N_id_2)) { - fprintf(stderr, "Error setting N_id_2=%d\n",N_id_2); + if (pss_synch_set_N_id_2(&pss, N_id_2_sync)) { + fprintf(stderr, "Error setting N_id_2=%d\n",N_id_2_sync); exit(-1); } cfo_init(&cfocorr, flen); + cfo_init(&cfocorr64, flen); if (sss_synch_init(&sss, fft_size)) { fprintf(stderr, "Error initializing SSS object\n"); @@ -184,6 +193,11 @@ int main(int argc, char **argv) { float mean_cfo = 0; uint32_t m0, m1; uint32_t sss_error1 = 0, sss_error2 = 0, sss_error3 = 0; + uint32_t cp_is_norm = 0; + + sync_t ssync; + bzero(&ssync, sizeof(sync_t)); + ssync.fft_size = fft_size; while(frame_cnt < nof_frames || nof_frames == -1) { n = cuhd_recv(uhd, buffer, flen - peak_offset, 1); @@ -197,7 +211,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error finding PSS peak\n"); exit(-1); } - + mean_peak = VEC_CMA(peak_value, mean_peak, frame_cnt); if (peak_value >= threshold) { @@ -219,22 +233,29 @@ int main(int argc, char **argv) { } // Find SSS - int sss_idx = peak_idx-flen/10+SLOT_IDX_CPNORM(5,fft_size); + int sss_idx = peak_idx-2*fft_size-CP(fft_size, CPNORM_LEN); if (sss_idx >= 0 && sss_idx < flen-fft_size) { - sss_synch_m0m1_diff(&sss, &buffer[sss_idx], &m0, &m0_value, &m1, &m1_value); - if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error3++; - } sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 3, NULL, &m0, &m0_value, &m1, &m1_value); if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { sss_error2++; } + sss_synch_m0m1_diff(&sss, &buffer[sss_idx], &m0, &m0_value, &m1, &m1_value); + if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { + sss_error3++; + } sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 1, NULL, &m0, &m0_value, &m1, &m1_value); if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { sss_error1++; } } + // Estimate CP + if (peak_idx > 2*(fft_size + CP_EXT(fft_size))) { + lte_cp_t cp = sync_detect_cp(&ssync, buffer, peak_idx); + if (CP_ISNORM(cp)) { + cp_is_norm++; + } + } } else { INFO("No space for CFO computation. Frame starts at \n",peak_idx); @@ -248,7 +269,7 @@ int main(int argc, char **argv) { } if (frame_cnt > 100) { - if (abs(last_peak-peak_idx) > 10) { + if (abs(last_peak-peak_idx) > 4) { if (peak_value >= threshold) { nof_nopeakdet++; } @@ -258,15 +279,15 @@ int main(int argc, char **argv) { frame_cnt++; - printf("[%5d]: Pos: %5d, PSR: %6.3f MeanPSR: %6.3f, Pdet: %6.3f, Pmiss: %.3f, " - "FP: %d, FPThres: %d, CFO: %+4.1f KHz SSSmiss: %.3f/%.3f/%.3f\r", + printf("[%5d]: Pos: %5d, PSR: %4.1f (~%4.1f) Pdet: %4.2f, " + "FA: %4.2f, CFO: %+4.1f KHz SSSmiss: %4.2f/%4.2f/%4.2f CPNorm: %.0f\%\r", frame_cnt, peak_idx, peak_value, mean_peak, - (float) nof_det/frame_cnt, (float) nof_nodet/frame_cnt, - nof_nopeak, nof_nopeakdet, mean_cfo*15, - (float) sss_error1/nof_det,(float) sss_error2/nof_det,(float) sss_error3/nof_det - ); + (float) nof_det/frame_cnt, + (float) nof_nopeakdet/frame_cnt, mean_cfo*15, + (float) sss_error1/nof_det,(float) sss_error2/nof_det,(float) sss_error3/nof_det, + (float) cp_is_norm/nof_det * 100); if (VERBOSE_ISINFO()) { printf("\n"); diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index e3464f567..4ed86d6f6 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -36,15 +36,15 @@ #include "liblte/phy/utils/debug.h" #include "liblte/phy/utils/vector.h" +#define CS_CELL_DETECT_THRESHOLD 1.2 -#define FIND_FFTSIZE 64 -#define FIND_SFLEN 5*SF_LEN(FIND_FFTSIZE) +#define CS_SFLEN 5*SF_LEN(CS_FFTSIZE) int ue_celldetect_init(ue_celldetect_t * q) { - return ue_celldetect_init_max(q, CS_DEFAULT_MAXFRAMES_TOTAL, CS_DEFAULT_MAXFRAMES_DETECTED); + return ue_celldetect_init_max(q, CS_DEFAULT_MAXFRAMES_TOTAL); } -int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total, uint32_t max_frames_detected) { +int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total) { int ret = LIBLTE_ERROR_INVALID_INPUTS; if (q != NULL) { @@ -52,32 +52,32 @@ int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total, uint3 bzero(q, sizeof(ue_celldetect_t)); - q->candidates = calloc(sizeof(ue_celldetect_result_t), max_frames_detected); + q->candidates = calloc(sizeof(ue_celldetect_result_t), max_frames_total); if (!q->candidates) { perror("malloc"); goto clean_exit; } - if (sync_init(&q->sfind, FIND_SFLEN, FIND_FFTSIZE)) { + if (sync_init(&q->sfind, CS_SFLEN, CS_FFTSIZE)) { goto clean_exit; } - q->mode_ntimes = calloc(sizeof(uint32_t), max_frames_detected); + q->mode_ntimes = calloc(sizeof(uint32_t), max_frames_total); if (!q->mode_ntimes) { perror("malloc"); goto clean_exit; } - q->mode_counted = calloc(sizeof(uint8_t), max_frames_detected); + q->mode_counted = calloc(sizeof(uint8_t), max_frames_total); if (!q->mode_counted) { perror("malloc"); goto clean_exit; } - sync_set_threshold(&q->sfind, CS_FIND_THRESHOLD); + /* Accept all peaks because search space is 5 ms and there is always a peak */ + sync_set_threshold(&q->sfind, 1.0); sync_sss_en(&q->sfind, true); - + sync_set_sss_algorithm(&q->sfind, SSS_PARTIAL_3); + q->max_frames_total = max_frames_total; - q->max_frames_detected = max_frames_detected; q->nof_frames_total = CS_DEFAULT_NOFFRAMES_TOTAL; - q->nof_frames_detected = CS_DEFAULT_NOFFRAMES_DETECTED; ue_celldetect_reset(q); @@ -108,7 +108,6 @@ void ue_celldetect_free(ue_celldetect_t * q) } - void ue_celldetect_reset(ue_celldetect_t * q) { q->current_nof_detected = 0; @@ -117,7 +116,7 @@ void ue_celldetect_reset(ue_celldetect_t * q) void ue_celldetect_set_threshold(ue_celldetect_t * q, float threshold) { - sync_set_threshold(&q->sfind, threshold); + q->detect_threshold = threshold; } int ue_celldetect_set_nof_frames_total(ue_celldetect_t * q, uint32_t nof_frames) @@ -130,28 +129,22 @@ int ue_celldetect_set_nof_frames_total(ue_celldetect_t * q, uint32_t nof_frames) } } -int ue_celldetect_set_nof_frames_detected(ue_celldetect_t * q, uint32_t nof_frames) -{ - if (nof_frames <= q->max_frames_detected) { - q->nof_frames_detected = nof_frames; - return LIBLTE_SUCCESS; - } else { - return LIBLTE_ERROR; - } -} - /* Decide the most likely cell based on the mode */ void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_cell) { uint32_t i, j; - bzero(q->mode_counted, q->nof_frames_detected); - bzero(q->mode_ntimes, sizeof(uint32_t) * q->nof_frames_detected); + if (!q->current_nof_detected) { + return; + } + + bzero(q->mode_counted, q->current_nof_detected); + bzero(q->mode_ntimes, sizeof(uint32_t) * q->current_nof_detected); /* First find mode of CELL IDs */ - for (i = 0; i < q->nof_frames_detected; i++) { + for (i = 0; i < q->current_nof_detected; i++) { uint32_t cnt = 1; - for (j=i+1;jnof_frames_detected;j++) { + for (j=i+1;jcurrent_nof_detected;j++) { if (q->candidates[j].cell_id == q->candidates[i].cell_id && !q->mode_counted[j]) { q->mode_counted[j]=1; cnt++; @@ -160,7 +153,7 @@ void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_c q->mode_ntimes[i] = cnt; } uint32_t max_times=0, mode_pos=0; - for (i=0;inof_frames_detected;i++) { + for (i=0;icurrent_nof_detected;i++) { if (q->mode_ntimes[i] > max_times) { max_times = q->mode_ntimes[i]; mode_pos = i; @@ -169,15 +162,11 @@ void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_c found_cell->cell_id = q->candidates[mode_pos].cell_id; /* Now in all these cell IDs, find most frequent CP */ uint32_t nof_normal = 0; - found_cell->peak = 0; - for (i=0;inof_frames_detected;i++) { + for (i=0;icurrent_nof_detected;i++) { if (q->candidates[i].cell_id == found_cell->cell_id) { if (CP_ISNORM(q->candidates[i].cp)) { nof_normal++; } - if (q->mode_ntimes[mode_pos]) { - found_cell->peak += q->candidates[i].peak/q->mode_ntimes[mode_pos]; - } } } if (nof_normal > q->mode_ntimes[mode_pos]/2) { @@ -185,7 +174,8 @@ void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_c } else { found_cell->cp = CPEXT; } - found_cell->mode = q->mode_ntimes[mode_pos]; + found_cell->mode = (float) q->mode_ntimes[mode_pos]/q->current_nof_detected; + found_cell->peak = q->candidates[q->current_nof_detected-1].peak; q->current_nof_detected = q->current_nof_total = 0; } @@ -204,15 +194,15 @@ int ue_celldetect_scan(ue_celldetect_t * q, if (q != NULL && signal != NULL && - nsamples >= 4800) + nsamples >= CS_FLEN) { ret = LIBLTE_SUCCESS; - if (nsamples % 4800) { - printf("Warning: nsamples must be a multiple of 4800. Some samples will be ignored\n"); - nsamples = (nsamples/4800) * 4800; + if (nsamples % CS_FLEN) { + printf("Warning: nsamples must be a multiple of %d. Some samples will be ignored\n", CS_FLEN); + nsamples = (nsamples/CS_FLEN) * CS_FLEN; } - nof_input_frames = nsamples/4800; + nof_input_frames = nsamples/CS_FLEN; for (uint32_t nf=0;nfcurrent_nof_detected, q->current_nof_total, q->sfind.N_id_2, nof_input_frames); /* Find peak and cell id */ - ret = sync_find(&q->sfind, &signal[nf*4800], 0, &peak_idx); + ret = sync_find(&q->sfind, &signal[nf*CS_FLEN], 0, &peak_idx); if (ret < 0) { fprintf(stderr, "Error finding correlation peak (%d)\n", ret); return LIBLTE_ERROR; @@ -234,7 +224,7 @@ int ue_celldetect_scan(ue_celldetect_t * q, /* Save cell id, cp and peak */ q->candidates[q->current_nof_detected].cell_id = (uint32_t) ret; q->candidates[q->current_nof_detected].cp = sync_get_cp(&q->sfind); - q->candidates[q->current_nof_detected].peak = sync_get_last_peak_value(&q->sfind); + q->candidates[q->current_nof_detected].peak = sync_get_peak_value(&q->sfind); } INFO ("[%3d/%3d]: Found peak at %4d, value %.3f, Cell_id: %d CP: %s\n", @@ -250,11 +240,15 @@ int ue_celldetect_scan(ue_celldetect_t * q, q->current_nof_total++; /* Decide cell ID and CP if we detected up to nof_frames_detected */ - if (q->current_nof_detected == q->nof_frames_detected) { + if (sync_get_peak_value(&q->sfind) > q->detect_threshold) { ret = CS_CELL_DETECTED; } else if (q->current_nof_total == q->nof_frames_total) { - q->current_nof_detected = q->current_nof_total = 0; - ret = CS_CELL_NOT_DETECTED; + if (sync_get_peak_value(&q->sfind) > CS_CELL_DETECT_THRESHOLD) { + ret = CS_CELL_DETECTED; + } else { + ret = CS_CELL_NOT_DETECTED; + q->current_nof_detected = q->current_nof_total = 0; + } } else { ret = 0; } diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 7282dd320..1b0b57154 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -144,6 +144,15 @@ void ue_dl_free(ue_dl_t *q) { } } +void ue_dl_set_rnti(ue_dl_t *q, uint16_t rnti) { + q->current_rnti = rnti; + pdsch_set_rnti(&q->pdsch, SIRNTI); +} + +void ue_dl_reset(ue_dl_t *q) { + pdsch_harq_reset(&q->harq_process[0]); +} + LIBLTE_API float mean_exec_time=0; dci_format_t ue_formats[] = {Format1A,Format1}; // Format1B should go here also @@ -152,7 +161,18 @@ const uint32_t nof_ue_formats = 2; dci_format_t common_formats[] = {Format1A,Format1C}; const uint32_t nof_common_formats = 2; -int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32_t sfn, uint16_t rnti) +/** Applies the following operations to a subframe of synchronized samples: + * - OFDM demodulation + * - Channel estimation + * - PCFICH decoding + * - PDCCH decoding: Find DCI for RNTI given by previous call to ue_dl_set_rnti() + * - PDSCH decoding: Decode TB scrambling with RNTI given by ue_dl_set_rnti() + */ +int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx) { + return ue_dl_decode_sib(q, input, data, sf_idx, 0); +} + +int ue_dl_decode_sib(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32_t rvidx) { uint32_t cfi, cfi_distance, i; ra_pdsch_t ra_dl; @@ -173,8 +193,6 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 /* Get channel estimates for each port */ chest_dl_estimate(&q->chest, q->sf_symbols, q->ce, sf_idx); - - /* First decode PCFICH and obtain CFI */ if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { @@ -190,12 +208,12 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } /* Generate PDCCH candidates */ - if (rnti == SIRNTI) { + if (q->current_rnti == SIRNTI) { nof_locations = pdcch_common_locations(&q->pdcch, locations, MAX_CANDIDATES, cfi); formats = common_formats; nof_formats = nof_common_formats; } else { - nof_locations = pdcch_ue_locations(&q->pdcch, locations, MAX_CANDIDATES, sf_idx, cfi, q->user_rnti); + nof_locations = pdcch_ue_locations(&q->pdcch, locations, MAX_CANDIDATES, sf_idx, cfi, q->current_rnti); formats = ue_formats; nof_formats = nof_ue_formats; } @@ -207,59 +225,59 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32 } /* For all possible locations, try to decode a DCI message */ crc_rem = 0; - for (int f=0;fpdcch, &dci_msg, &locations[i], formats[f], &crc_rem)) { fprintf(stderr, "Error decoding DCI msg\n"); return LIBLTE_ERROR; } INFO("Decoded DCI message RNTI: 0x%x\n", crc_rem); + + if (crc_rem == q->current_rnti) { + found_dci++; + q->nof_pdcch_detected++; + if (dci_msg_to_ra_dl(&dci_msg, q->current_rnti, q->user_rnti, q->cell, cfi, &ra_dl)) { + fprintf(stderr, "Error unpacking PDSCH scheduling DCI message\n"); + return LIBLTE_ERROR; + } + + if (q->current_rnti != SIRNTI) { + rvidx = ra_dl.rv_idx; + } + if (rvidx == 0) { + if (pdsch_harq_setup(&q->harq_process[0], ra_dl.mcs, &ra_dl.prb_alloc)) { + fprintf(stderr, "Error configuring HARQ process\n"); + return LIBLTE_ERROR; + } + } + if (q->harq_process[0].mcs.mod > 0) { + ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, + &q->harq_process[0], rvidx); + if (ret == LIBLTE_ERROR) { + q->pkt_errors++; + } else if (ret == LIBLTE_ERROR_INVALID_INPUTS) { + fprintf(stderr, "Error calling pdsch_decode()\n"); + return LIBLTE_ERROR; + } else if (ret == LIBLTE_SUCCESS) { + if (VERBOSE_ISINFO()) { + INFO("Decoded Message: ", 0); + vec_fprint_hex(stdout, data, ra_dl.mcs.tbs); + } + } + q->pkts_total++; + } + } } } - if (crc_rem == rnti) { - q->nof_pdcch_detected++; - if (dci_msg_to_ra_dl(&dci_msg, rnti, q->user_rnti, q->cell, cfi, &ra_dl)) { - fprintf(stderr, "Error unpacking PDSCH scheduling DCI message\n"); - return LIBLTE_ERROR; - } - uint32_t rvidx; - if (rnti == SIRNTI) { - int k = ((sfn)/2)%4; - rvidx = ((int) ceilf((float)3*k/2))%4; - } else { - rvidx = ra_dl.rv_idx; - } - if (rvidx == 0) { - if (pdsch_harq_setup(&q->harq_process[0], ra_dl.mcs, &ra_dl.prb_alloc)) { - fprintf(stderr, "Error configuring HARQ process\n"); - return LIBLTE_ERROR; - } - } - if (q->harq_process[0].mcs.mod > 0) { - ret = pdsch_decode(&q->pdsch, q->sf_symbols, q->ce, chest_dl_get_noise_estimate(&q->chest), data, sf_idx, - &q->harq_process[0], rvidx); - if (ret == LIBLTE_ERROR) { - q->pkt_errors++; - } else if (ret == LIBLTE_ERROR_INVALID_INPUTS) { - fprintf(stderr, "Error calling pdsch_decode()\n"); - return LIBLTE_ERROR; - } else if (ret == LIBLTE_SUCCESS) { - if (VERBOSE_ISINFO()) { - INFO("Decoded Message: ", 0); - vec_fprint_hex(stdout, data, ra_dl.mcs.tbs); - } - } - q->pkts_total++; - } - } gettimeofday(&t[2], NULL); get_time_interval(t); mean_exec_time = (float) VEC_EMA((float) t[0].tv_usec, mean_exec_time, 0.01); - if (crc_rem == rnti && ret == LIBLTE_SUCCESS) { + if (found_dci > 0 && ret == LIBLTE_SUCCESS) { return ra_dl.mcs.tbs; } else { return 0; diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 2357c30fc..78a1228e5 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -36,8 +36,6 @@ #include "liblte/phy/utils/debug.h" #include "liblte/phy/utils/vector.h" -#define MIB_FIND_THRESHOLD 0.0 - int ue_mib_init_1_92(ue_mib_t * q, uint32_t cell_id, lte_cp_t cp) @@ -83,7 +81,7 @@ int ue_mib_init_1_92(ue_mib_t * q, goto clean_exit; } - sync_set_threshold(&q->sfind, MIB_FIND_THRESHOLD); + sync_set_threshold(&q->sfind, 1.0); // Because we are capturing 5 ms frames and there is always peak sync_sss_en(&q->sfind, true); sync_set_N_id_2(&q->sfind, cell.id % 3); sync_cp_en(&q->sfind, false); @@ -167,8 +165,6 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, if (ret < 0) { return LIBLTE_ERROR; } - INFO("Channel estimated for %d ports, Noise: %f\n", q->chest.cell.nof_ports, - chest_dl_get_noise_estimate(&q->chest)); /* Reset decoder if we missed a frame */ if ((q->last_frame_trial && (abs(q->frame_cnt - q->last_frame_trial) > 2)) || q->frame_cnt > 16) @@ -259,13 +255,6 @@ int ue_mib_sync_and_decode_1_92(ue_mib_t * q, nf*MIB_FRAME_SIZE_SEARCH + peak_idx > MIB_FRAME_SIZE_SEARCH/10) { // PSS and SSS detected and we have space to decode the PBCH. - - // Apply CFO correction - INFO("Correcting CFO: %f\n", sync_get_cfo(&q->sfind)); - cfo_correct(&q->cfocorr, &signal[nf*MIB_FRAME_SIZE_SEARCH], &signal[nf*MIB_FRAME_SIZE_SEARCH], - -sync_get_cfo(&q->sfind) / MIB_FFT_SIZE); - - INFO("Trying to decode PBCH\n",0); ret = ue_mib_decode_aligned_frame(q, &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 4e207a3d3..ab7e196ea 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -46,12 +46,10 @@ cf_t dummy[MAX_TIME_OFFSET]; #define CURRENT_SLOTLEN_RE SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) #define CURRENT_SFLEN_RE SF_LEN_RE(q->cell.nof_prb, q->cell.cp) -#define FIND_THRESHOLD 1.5 -#define TRACK_THRESHOLD 0.8 +#define FIND_THRESHOLD 4.0 +#define TRACK_THRESHOLD 2.0 #define TRACK_MAX_LOST 10 -#define CFO_EMA_ALPHA 0.01 - int ue_sync_init(ue_sync_t *q, lte_cell_t cell, @@ -69,9 +67,7 @@ int ue_sync_init(ue_sync_t *q, bzero(q, sizeof(ue_sync_t)); - ue_sync_reset(q); - - q->decode_sss_on_track = true; + q->decode_sss_on_track = false; q->stream = stream_handler; q->recv_callback = recv_callback; q->cell = cell; @@ -89,23 +85,23 @@ int ue_sync_init(ue_sync_t *q, sync_set_threshold(&q->sfind, FIND_THRESHOLD); q->sfind.cp = cell.cp; sync_cp_en(&q->sfind, false); + sync_correct_cfo(&q->sfind, true); + sync_set_em_alpha(&q->sfind, 1); sync_set_N_id_2(&q->strack, cell.id%3); sync_set_threshold(&q->strack, TRACK_THRESHOLD); q->strack.cp = cell.cp; sync_cp_en(&q->strack, false); - - if (cfo_init(&q->cfocorr, CURRENT_SFLEN)) { - fprintf(stderr, "Error initiating CFO\n"); - goto clean_exit; - } - + sync_correct_cfo(&q->strack, false); + q->input_buffer = vec_malloc(5 * CURRENT_SFLEN * sizeof(cf_t)); if (!q->input_buffer) { perror("malloc"); goto clean_exit; } + ue_sync_reset(q); + ret = LIBLTE_SUCCESS; } @@ -124,7 +120,6 @@ void ue_sync_free(ue_sync_t *q) { if (q->input_buffer) { free(q->input_buffer); } - cfo_free(&q->cfocorr); sync_free(&q->sfind); sync_free(&q->strack); @@ -143,7 +138,7 @@ uint32_t ue_sync_get_sfidx(ue_sync_t *q) { } float ue_sync_get_cfo(ue_sync_t *q) { - return 15000 * q->cur_cfo; + return 15000 * sync_get_cfo(&q->strack); } float ue_sync_get_sfo(ue_sync_t *q) { @@ -176,7 +171,7 @@ static int find_peak_ok(ue_sync_t *q) { q->state = SF_TRACK; INFO("Found peak at %d, value %.3f, SF_idx: %d, Cell_id: %d CP: %s\n", - q->peak_idx, sync_get_peak_value(&q->sfind), q->sf_idx, q->cell.id, lte_cp_string(q->cell.cp)); + q->peak_idx, sync_get_last_peak_value(&q->sfind), q->sf_idx, q->cell.id, lte_cp_string(q->cell.cp)); } else { INFO("Found peak at %d, SSS not detected\n", q->peak_idx); @@ -188,16 +183,12 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { /* Make sure subframe idx is what we expect */ if ((q->sf_idx != sync_get_sf_idx(&q->strack)) && q->decode_sss_on_track) { - INFO("Warning: Expected SF idx %d but got %d (%d,%g - %d,%g)!\n", - q->sf_idx, sync_get_sf_idx(&q->strack), + if (sync_get_cell_id(&q->strack) == q->cell.id) { + INFO("Warning: Expected SF idx %d but got %d (%d,%g - %d,%g)!\n", + q->sf_idx, sync_get_sf_idx(&q->strack), q->strack.m0, q->strack.m0_value, q->strack.m1, q->strack.m1_value); - - /* FIXME: What should we do in this case? - * If the threshold is high enough, an OK peak means it is likely to be true - * Otherwise, maybe we should not trust the new sf_idx. - */ - q->sf_idx = sync_get_sf_idx(&q->strack); - //q->state = SF_FIND; + q->sf_idx = sync_get_sf_idx(&q->strack); + } } else { q->time_offset = ((int) track_idx - (int) CURRENT_FFTSIZE); @@ -210,8 +201,6 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { } } - /* compute cumulative moving average CFO */ - q->cur_cfo = VEC_EMA(sync_get_cfo(&q->strack), q->cur_cfo, CFO_EMA_ALPHA); /* compute cumulative moving average time offset */ q->mean_time_offset = (float) VEC_CMA((float) q->time_offset, q->mean_time_offset, q->frame_total_cnt); @@ -232,7 +221,7 @@ int track_peak_no(ue_sync_t *q) { q->state = SF_FIND; } else { INFO("Tracking peak not found. Peak %.3f, %d lost\n", - sync_get_peak_value(&q->strack), (int) q->frame_no_cnt); + sync_get_last_peak_value(&q->strack), (int) q->frame_no_cnt); } return 1; @@ -301,7 +290,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { case SF_TRACK: ret = 1; - q->strack.sss_en = q->decode_sss_on_track; + sync_sss_en(&q->strack, q->decode_sss_on_track); q->sf_idx = (q->sf_idx + 1) % 10; @@ -343,7 +332,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { } /* Do CFO Correction and deliver the frame */ - cfo_correct(&q->cfocorr, q->input_buffer, q->input_buffer, -q->cur_cfo / CURRENT_FFTSIZE); + cfo_correct(&q->sfind.cfocorr, q->input_buffer, q->input_buffer, -sync_get_cfo(&q->strack) / CURRENT_FFTSIZE); *sf_symbols = q->input_buffer; break; @@ -354,11 +343,10 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { void ue_sync_reset(ue_sync_t *q) { q->state = SF_FIND; - + sync_reset(&q->strack); q->frame_ok_cnt = 0; q->frame_no_cnt = 0; q->frame_total_cnt = 0; - q->cur_cfo = 0.0; q->mean_time_offset = 0.0; q->time_offset = 0; #ifdef MEASURE_EXEC_TIME diff --git a/lte/rrc/include/liblte/rrc/common/rrc_common.h b/lte/rrc/include/liblte/rrc/common/rrc_common.h index d78075bf4..893c70c89 100644 --- a/lte/rrc/include/liblte/rrc/common/rrc_common.h +++ b/lte/rrc/include/liblte/rrc/common/rrc_common.h @@ -32,6 +32,8 @@ #include #include +typedef enum {SIB1=1, SIB2=2, SIB3=3, SIB4=4, SIB5=5, SIB6=6, SIB7=7, SIB8=8, SIB9=9, SIB_ERROR=0} sib_type_t; + typedef struct { uint32_t mcc; // 3 digits in Decimal value uint32_t mnc; // 2 digits @@ -45,4 +47,10 @@ typedef struct { bool intraFreqReselection; } cell_access_info_t; +typedef struct { + sib_type_t type; + uint32_t n; // Order of entry in scheduling info list + uint32_t period; +} scheduling_info_t; + #endif diff --git a/lte/rrc/include/liblte/rrc/messages/bcch.h b/lte/rrc/include/liblte/rrc/messages/bcch.h index 2b2081289..cac30904c 100644 --- a/lte/rrc/include/liblte/rrc/messages/bcch.h +++ b/lte/rrc/include/liblte/rrc/messages/bcch.h @@ -35,22 +35,6 @@ #include -#define SI_PERIODS 10 -#define SI_X_PERIOD 10 - -typedef enum {BCCH_DLSCH_SIB1, BCCH_DLSCH_SIB2, BCCH_DLSCH_SIB3, BCCH_DLSCH_SIB6, BCCH_DLSCH_UNKNOWN} bcch_dlsch_sib_type_t; - -typedef struct { - bcch_dlsch_sib_type_t type[SI_X_PERIOD]; - uint32_t period; -} bcch_si_scheduling_info_t; - -typedef struct { - uint32_t window_length_ms; - uint32_t nof_periods; - bcch_si_scheduling_info_t si_period_list[SI_PERIODS]; -} bcch_si_scheduling_t; - LIBLTE_API int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, @@ -72,8 +56,6 @@ LIBLTE_API int bcch_dlsch_pack(void *bcch_dlsch_msg, LIBLTE_API void* bcch_dlsch_unpack(uint8_t *buffer, uint32_t msg_nof_bits); -LIBLTE_API bcch_dlsch_sib_type_t bcch_dlsch_get_type(void *bcch_dlsch_msg); - LIBLTE_API void bcch_dlsch_fprint(void *bcch_dlsch_msg, FILE *stream); diff --git a/lte/rrc/include/liblte/rrc/messages/sib1.h b/lte/rrc/include/liblte/rrc/messages/sib1.h index ec014525e..c3663a51e 100644 --- a/lte/rrc/include/liblte/rrc/messages/sib1.h +++ b/lte/rrc/include/liblte/rrc/messages/sib1.h @@ -47,6 +47,11 @@ LIBLTE_API void bcch_dlsch_sib1_get_plmns(void *bcch_dlsch_msg, LIBLTE_API void bcch_dlsch_sib1_get_cell_access_info(void *bcch_dlsch_msg, cell_access_info_t *info); +LIBLTE_API int bcch_dlsch_sib1_get_scheduling_info(void *bcch_dlsch_msg, + uint32_t *si_window_length, + scheduling_info_t *info, + uint32_t max_elems); + void bcch_dlsch_sib1(BCCH_DL_SCH_Message_t *sib1, MCC_MNC_Digit_t mcc_val[3], MCC_MNC_Digit_t mnc_val[2], diff --git a/lte/rrc/include/liblte/rrc/messages/sib4.h b/lte/rrc/include/liblte/rrc/messages/sib4.h new file mode 100644 index 000000000..888a32683 --- /dev/null +++ b/lte/rrc/include/liblte/rrc/messages/sib4.h @@ -0,0 +1,45 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + + +#ifndef SIB4_ +#define SIB4_ + + +#include +#include + +#include "liblte/rrc/common/rrc_common.h" +#include "liblte/rrc/messages/bcch.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" + +LIBLTE_API int bcch_dlsch_sib4_get_neighbour_cells(void *bcch_dlsch_msg, + uint32_t *neighbour_cell_ids, + uint32_t max_elems); + +#endif \ No newline at end of file diff --git a/lte/rrc/include/liblte/rrc/rrc.h b/lte/rrc/include/liblte/rrc/rrc.h index 248e76812..513c0c4ed 100644 --- a/lte/rrc/include/liblte/rrc/rrc.h +++ b/lte/rrc/include/liblte/rrc/rrc.h @@ -40,6 +40,7 @@ #include "liblte/rrc/messages/bcch.h" #include "liblte/rrc/messages/sib1.h" +#include "liblte/rrc/messages/sib4.h" #include "liblte/rrc/common/rrc_common.h" #ifdef __cplusplus diff --git a/lte/rrc/lib/messages/src/bcch.c b/lte/rrc/lib/messages/src/bcch.c index 7fc671efc..088305506 100644 --- a/lte/rrc/lib/messages/src/bcch.c +++ b/lte/rrc/lib/messages/src/bcch.c @@ -31,11 +31,9 @@ #include "liblte/rrc/messages/sib1.h" #include "liblte/rrc/messages/bcch.h" #include "liblte/phy/utils/bit.h" +#include "liblte/phy/utils/debug.h" #include "rrc_asn.h" - - - int bcch_bch_pack(lte_cell_t *cell, uint32_t sfn, uint8_t *buffer, uint32_t buffer_size_bytes) { MasterInformationBlock_t req; @@ -201,18 +199,17 @@ void* bcch_dlsch_unpack(uint8_t *buffer, uint32_t msg_nof_bits) { fprintf(stderr, "Decoding failed.\n"); return NULL; } else { - bcch_dlsch_fprint(msg, stdout); return msg; } } -bcch_dlsch_sib_type_t bcch_dlsch_get_type(void *bcch_dlsch_msg) { +sib_type_t bcch_dlsch_get_type(void *bcch_dlsch_msg) { BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; switch(msg->message.present) { case BCCH_DL_SCH_MessageType_PR_c1: switch (msg->message.choice.c1.present) { case BCCH_DL_SCH_MessageType__c1_PR_systemInformationBlockType1: - return BCCH_DLSCH_SIB1; + return SIB1; break; default: fprintf(stderr, "Message type not supported\n"); @@ -224,7 +221,7 @@ bcch_dlsch_sib_type_t bcch_dlsch_get_type(void *bcch_dlsch_msg) { bcch_dlsch_fprint(bcch_dlsch_msg, stderr); break; } - return BCCH_DLSCH_UNKNOWN; + return SIB_ERROR; } void bcch_dlsch_fprint(void *bcch_dlsch_msg, FILE *stream) { diff --git a/lte/rrc/lib/messages/src/sib1.c b/lte/rrc/lib/messages/src/sib1.c index ed015fa43..c81aea3b5 100644 --- a/lte/rrc/lib/messages/src/sib1.c +++ b/lte/rrc/lib/messages/src/sib1.c @@ -74,14 +74,19 @@ void bcch_dlsch_sib1_get_cell_access_info(void *bcch_dlsch_msg, cell_access_info } uint32_t get_si_period(long int period) { - return 8<message.choice.c1.choice.systemInformationBlockType1); - - si_sched->nof_periods = MIN(SI_PERIODS, sib1->schedulingInfoList.list.count); - for (int i=0;inof_periods;i++) { - SchedulingInfo_t *s = sib1->schedulingInfoList.list.array[0]; - si_sched->si_period_list[i].period = get_si_period(s->si_Periodicity); - int jmax = MIN(SI_X_PERIOD, s->sib_MappingInfo.list.count); - for (int j=0;jsi_period_list[i].type[j] = get_si_type(s->sib_MappingInfo.list.array[j]); + + uint32_t nelems = 0; + + if (max_elems > 0 && info != NULL) { + /* First is always SIB2 */ + info[0].type = SIB2; + info[0].n = 0; + info[0].period = get_si_period(sib1->schedulingInfoList.list.array[0]->si_Periodicity); + nelems++; + for (int i=0;ischedulingInfoList.list.count;i++) { + SchedulingInfo_t *s = sib1->schedulingInfoList.list.array[i]; + + for (int j=0;jsib_MappingInfo.list.count;j++) { + if (nelems < max_elems) { + info[nelems].type = get_si_type(s->sib_MappingInfo.list.array[j]); + info[nelems].n = i; + info[nelems].period = get_si_period(s->si_Periodicity); + nelems++; + } + } } + } - si_sched->window_length_ms = get_window(sib1->si_WindowLength); + if (si_window_length) { + *si_window_length = get_window(sib1->si_WindowLength); + } + return nelems; } MCC_MNC_Digit_t *dup_digit(MCC_MNC_Digit_t value) { diff --git a/lte/rrc/lib/messages/src/sib4.c b/lte/rrc/lib/messages/src/sib4.c new file mode 100644 index 000000000..52f76b560 --- /dev/null +++ b/lte/rrc/lib/messages/src/sib4.c @@ -0,0 +1,56 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include + +#include "liblte/rrc/common/rrc_common.h" +#include "liblte/rrc/messages/bcch.h" +#include "liblte/rrc/messages/sib4.h" +#include "liblte/phy/utils/bit.h" +#include "rrc_asn.h" +#include + + +int bcch_dlsch_sib4_get_neighbour_cells(void *bcch_dlsch_msg, uint32_t *neighbour_cell_ids, uint32_t max_elems) +{ + int i = 0; + BCCH_DL_SCH_Message_t *msg = (BCCH_DL_SCH_Message_t*) bcch_dlsch_msg; + SystemInformationBlockType4_t *sib4 = + &(msg->message.choice.c1.choice.systemInformation.criticalExtensions.choice.systemInformation_r8.sib_TypeAndInfo.list.array[0]->choice.sib4); + + if (sib4->intraFreqNeighCellList) { + for (i=0;iintraFreqNeighCellList->list.count && iintraFreqNeighCellList->list.array[i]; + neighbour_cell_ids[i] = cellInfo->physCellId; + } + } + + return i; +} + + diff --git a/matlab/tests/test_sss.m b/matlab/tests/test_sss.m index 74402c939..21c9a0bac 100644 --- a/matlab/tests/test_sss.m +++ b/matlab/tests/test_sss.m @@ -7,15 +7,15 @@ m1=10; %m0=26; %m1=21; -recordedWaveform = signal; +recordedWaveform = x; if (~isempty(recordedWaveform)) - Npackets = floor(length(signal)/19200)-1; + Npackets = floor(length(recordedWaveform)/19200)-1; SNR_values = 0; end error = zeros(6,length(SNR_values)); -enb = struct('NCellID',196,'NSubframe',0,'NDLRB',6,'CellRefP',1,'CyclicPrefix','Normal','DuplexMode','FDD'); +enb = struct('NCellID',2,'NSubframe',0,'NDLRB',6,'CellRefP',1,'CyclicPrefix','Normal','DuplexMode','FDD'); sss=lteSSS(enb); cfg.Seed = 2; % Random channel seed @@ -68,6 +68,7 @@ for snr_idx=1:length(SNR_values) end offset = lteDLFrameOffset(enb,rxWaveform); + offsetVec(i)=offset; rxWaveform = [rxWaveform(1+offset:end,:); zeros(offset,1)]; subframe_rx = lteOFDMDemodulate(enb,rxWaveform,1); @@ -111,7 +112,7 @@ for snr_idx=1:length(SNR_values) error(3,snr_idx) = error(3,snr_idx) + ((idx ~= m0 && idx ~= m1)); % libLTE results - [n,sf_idx,lt_corr0,lt_corr1,lt_sss0,lt_sss1]=liblte_sss(enb,rxWaveform,'full'); + [n,sf_idx,lt_corr0]=liblte_sss(enb,rxWaveform,'full'); [m, idx]=max(lt_corr0); error(4,snr_idx) = error(4,snr_idx) + ((idx ~= m0 && idx ~= m1)); From 5a032c4316308fcd30c3079c98afd6e620357623 Mon Sep 17 00:00:00 2001 From: ismagom Date: Thu, 11 Dec 2014 09:06:58 +0000 Subject: [PATCH 41/55] Using short correlation for peak tracking --- lte/examples/cell_measurement.c | 29 ++++++----- lte/examples/pdsch_ue.c | 43 +++++++++------- lte/phy/include/liblte/phy/sync/pss.h | 2 - lte/phy/include/liblte/phy/utils/vector.h | 1 + lte/phy/lib/ch_estimation/src/chest_dl.c | 1 + lte/phy/lib/sync/src/pss.c | 60 ++++++++++++++++------- lte/phy/lib/sync/src/sync.c | 1 - lte/phy/lib/sync/test/pss_usrp.c | 14 ++++-- lte/phy/lib/ue/src/ue_celldetect.c | 1 + lte/phy/lib/ue/src/ue_sync.c | 7 +-- lte/phy/lib/utils/src/convolution.c | 18 ++++--- 11 files changed, 113 insertions(+), 64 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 1e6b2e212..40f905375 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -48,7 +48,7 @@ float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_detect_cfg_t cell_detect_config = { 100, // nof_frames_total - 3.0 // early-stops cell detection if mean PSR is above this value + 6.0 // early-stops cell detection if mean PSR is above this value }; /********************************************************************** @@ -149,16 +149,11 @@ int main(int argc, char **argv) { uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; float rssi_utra=0,rssi=0, rsrp=0, rsrq=0, snr=0; - cf_t *nullce[MAX_PORTS]; uint32_t si_window_length; scheduling_info_t sinfo[MAX_SINFO]; scheduling_info_t *sinfo_sib4 = NULL; uint32_t neighbour_cell_ids[MAX_NEIGHBOUR_CELLS]; - - - for (int i=0;icell.nof_prb, q->cell.cp); uint32_t nof_symbols = q->harq_process[0].prb_alloc.re_sf[sf_idx]; @@ -386,7 +392,10 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx) { } plot_real_setNewData(&poutfft, tmp_plot, nof_re); plot_real_setNewData(&pce, tmp_plot2, REFSIGNAL_NUM_SF(q->cell.nof_prb,0)); - plot_scatter_setNewData(&pscatrecv, q->pdsch.pdsch_symbols[0], nof_symbols); + int max = vec_max_fi(qs->strack.pss.conv_output_avg, qs->strack.pss.frame_size+qs->strack.pss.fft_size-1); + vec_sc_prod_fff(qs->strack.pss.conv_output_avg, 1/qs->strack.pss.conv_output_avg[max], tmp_plot2, qs->strack.pss.frame_size+qs->strack.pss.fft_size-1); + plot_real_setNewData(&p_sync, tmp_plot2, qs->strack.pss.frame_size); + plot_scatter_setNewData(&pscatequal, q->pdsch.pdsch_d, nof_symbols); plot_scatter_setNewData(&pscatequal_pdcch, q->pdcch.pdcch_d, 36*q->pdcch.nof_cce); } diff --git a/lte/phy/include/liblte/phy/sync/pss.h b/lte/phy/include/liblte/phy/sync/pss.h index 1ff0fee5f..9f5b435cf 100644 --- a/lte/phy/include/liblte/phy/sync/pss.h +++ b/lte/phy/include/liblte/phy/sync/pss.h @@ -39,8 +39,6 @@ typedef _Complex float cf_t; /* this is only a shortcut */ #define CONVOLUTION_FFT -#define DEFAULT_CORRELATION_TH 10000 -#define DEFAULT_NOSYNC_TIMEOUT 5 #define PSS_LEN 62 #define PSS_RE 6*12 diff --git a/lte/phy/include/liblte/phy/utils/vector.h b/lte/phy/include/liblte/phy/utils/vector.h index 8ba871f8c..186329b4b 100644 --- a/lte/phy/include/liblte/phy/utils/vector.h +++ b/lte/phy/include/liblte/phy/utils/vector.h @@ -37,6 +37,7 @@ typedef _Complex float cf_t; #define MAX(a,b) ((a)>(b)?(a):(b)) +#define MIN(a,b) ((a)<(b)?(a):(b)) // Cumulative moving average #define VEC_CMA(data, average, n) ((average) + ((data) - (average)) / ((n)+1)) diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 8a4c5a79e..5a9c2e5b7 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -373,6 +373,7 @@ float chest_dl_get_rssi(chest_dl_t *q) { */ float chest_dl_get_rsrq(chest_dl_t *q) { return q->cell.nof_prb*q->rsrp[0] / q->rssi[0]; + } float chest_dl_get_rsrp(chest_dl_t *q) { diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index ff8e1d288..b183e24b2 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -290,20 +290,27 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) memcpy(q->tmp_input, input, q->frame_size * sizeof(cf_t)); /* Correlate input with PSS sequence */ - #ifdef CONVOLUTION_FFT - conv_output_len = conv_fft_cc_run(&q->conv_fft, q->tmp_input, - q->pss_signal_freq[q->N_id_2], q->conv_output); - #else - conv_output_len = conv_cc(input, q->pss_signal_freq[q->N_id_2], q->conv_output, q->frame_size, q->fft_size); - #endif + if (q->frame_size >= q->fft_size) { + #ifdef CONVOLUTION_FFT + conv_output_len = conv_fft_cc_run(&q->conv_fft, q->tmp_input, + q->pss_signal_freq[q->N_id_2], q->conv_output); + #else + conv_output_len = conv_cc(input, q->pss_signal_freq[q->N_id_2], q->conv_output, q->frame_size, q->fft_size); + #endif + } else { + for (int i=0;iframe_size;i++) { + q->conv_output[i] = vec_dot_prod_ccc(q->pss_signal_freq[q->N_id_2], &input[i], q->fft_size); + } + conv_output_len = q->frame_size; + } -#ifdef PSS_ABS_SQUARE - vec_abs_square_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); -#else - vec_abs_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); -#endif - + #ifdef PSS_ABS_SQUARE + vec_abs_square_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); + #else + vec_abs_cf(q->conv_output, q->conv_output_abs, conv_output_len-1); + #endif + vec_sc_prod_fff(q->conv_output_abs, q->ema_alpha, q->conv_output_abs, conv_output_len-1); vec_sc_prod_fff(q->conv_output_avg, 1-q->ema_alpha, q->conv_output_avg, conv_output_len-1); @@ -321,16 +328,35 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) pl_ub ++; } // Find end of peak lobe to the left - int pl_lb = corr_peak_pos-1; - while(q->conv_output_avg[pl_lb-1] <= q->conv_output_avg[pl_lb] && pl_lb > 1) { - pl_lb --; + int pl_lb; + if (corr_peak_pos > 0) { + pl_lb = corr_peak_pos-1; + while(q->conv_output_avg[pl_lb-1] <= q->conv_output_avg[pl_lb] && pl_lb > 1) { + pl_lb --; + } + } else { + pl_lb = 0; } + + int sl_distance_right = conv_output_len-1-pl_ub; + if (sl_distance_right < 0) { + sl_distance_right = 0; + } + int sl_distance_left = pl_lb; - int sl_right = pl_ub+vec_max_fi(&q->conv_output_avg[pl_ub], conv_output_len-1 - pl_ub); - int sl_left = vec_max_fi(q->conv_output_avg, pl_lb); + int sl_right = pl_ub+vec_max_fi(&q->conv_output_avg[pl_ub], sl_distance_right); + int sl_left = vec_max_fi(q->conv_output_avg, sl_distance_left); float side_lobe_value = MAX(q->conv_output_avg[sl_right], q->conv_output_avg[sl_left]); if (corr_peak_value) { *corr_peak_value = q->conv_output_avg[corr_peak_pos]/side_lobe_value; + + if (*corr_peak_value < 2.0) { + INFO("pl_ub=%d, pl_lb=%d, sl_right: %d (%.2f), sl_left: %d (%.2f), PSR: %.2f/%.2f=%.2f\n", pl_ub, pl_lb, + sl_right, 1000000*q->conv_output_avg[sl_right], + sl_left, 1000000*q->conv_output_avg[sl_left], + 1000000*q->conv_output_avg[corr_peak_pos], 1000000*side_lobe_value,*corr_peak_value + ); + } } #else if (corr_peak_value) { diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index a9ea8bde1..5048c8f4f 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -52,7 +52,6 @@ int sync_init(sync_t *q, uint32_t frame_size, uint32_t fft_size) { int ret = LIBLTE_ERROR_INVALID_INPUTS; if (q != NULL && - frame_size >= fft_size && frame_size <= 307200 && fft_size_isvalid(fft_size)) { diff --git a/lte/phy/lib/sync/test/pss_usrp.c b/lte/phy/lib/sync/test/pss_usrp.c index a2cade849..ea87d887c 100644 --- a/lte/phy/lib/sync/test/pss_usrp.c +++ b/lte/phy/lib/sync/test/pss_usrp.c @@ -53,14 +53,16 @@ float uhd_gain=40.0, uhd_freq=-1.0; int nof_frames = -1; uint32_t fft_size=64; float threshold = 0.4; -int N_id_2_sync = -1; +int N_id_2_sync = -1; +lte_cp_t cp=CPNORM; void usage(char *prog) { - printf("Usage: %s [adgtvnp] -f rx_frequency_hz -i cell_id\n", prog); + printf("Usage: %s [aedgtvnp] -f rx_frequency_hz -i cell_id\n", prog); printf("\t-a UHD args [Default %s]\n", uhd_args); printf("\t-g UHD Gain [Default %.2f dB]\n", uhd_gain); printf("\t-n nof_frames [Default %d]\n", nof_frames); printf("\t-l N_id_2 to sync [Default use cell_id]\n"); + printf("\t-e Extended CP [Default Normal]\n", fft_size); printf("\t-s symbol_sz [Default %d]\n", fft_size); printf("\t-t threshold [Default %.2f]\n", threshold); #ifndef DISABLE_GRAPHICS @@ -73,7 +75,7 @@ void usage(char *prog) { void parse_args(int argc, char **argv) { int opt; - while ((opt = getopt(argc, argv, "adgtvsfil")) != -1) { + while ((opt = getopt(argc, argv, "adgetvsfil")) != -1) { switch (opt) { case 'a': uhd_args = argv[optind]; @@ -87,6 +89,9 @@ void parse_args(int argc, char **argv) { case 't': threshold = atof(argv[optind]); break; + case 'e': + cp = CPEXT; + break; case 'i': cell_id = atoi(argv[optind]); break; @@ -154,6 +159,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating PSS\n"); exit(-1); } + if (pss_synch_set_N_id_2(&pss, N_id_2_sync)) { fprintf(stderr, "Error setting N_id_2=%d\n",N_id_2_sync); exit(-1); @@ -233,7 +239,7 @@ int main(int argc, char **argv) { } // Find SSS - int sss_idx = peak_idx-2*fft_size-CP(fft_size, CPNORM_LEN); + int sss_idx = peak_idx-2*fft_size-(CP_ISNORM(cp)?CP(fft_size, CPNORM_LEN):CP(fft_size, CPEXT_LEN)); if (sss_idx >= 0 && sss_idx < flen-fft_size) { sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 3, NULL, &m0, &m0_value, &m1, &m1_value); if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c index 4ed86d6f6..62ae106e7 100644 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ b/lte/phy/lib/ue/src/ue_celldetect.c @@ -75,6 +75,7 @@ int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total) { sync_set_threshold(&q->sfind, 1.0); sync_sss_en(&q->sfind, true); sync_set_sss_algorithm(&q->sfind, SSS_PARTIAL_3); + sync_set_em_alpha(&q->sfind, 0.01); q->max_frames_total = max_frames_total; q->nof_frames_total = CS_DEFAULT_NOFFRAMES_TOTAL; diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index ab7e196ea..3eb62a419 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -49,6 +49,7 @@ cf_t dummy[MAX_TIME_OFFSET]; #define FIND_THRESHOLD 4.0 #define TRACK_THRESHOLD 2.0 #define TRACK_MAX_LOST 10 +#define TRACK_FRAME_SIZE 32 int ue_sync_init(ue_sync_t *q, @@ -76,7 +77,7 @@ int ue_sync_init(ue_sync_t *q, fprintf(stderr, "Error initiating sync find\n"); goto clean_exit; } - if(sync_init(&q->strack, CURRENT_FFTSIZE, CURRENT_FFTSIZE)) { + if(sync_init(&q->strack, TRACK_FRAME_SIZE, CURRENT_FFTSIZE)) { fprintf(stderr, "Error initiating sync track\n"); goto clean_exit; } @@ -190,7 +191,7 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { q->sf_idx = sync_get_sf_idx(&q->strack); } } else { - q->time_offset = ((int) track_idx - (int) CURRENT_FFTSIZE); + q->time_offset = ((int) track_idx - (int) q->strack.frame_size/2); /* If the PSS peak is beyond the frame (we sample too slowly), discard the offseted samples to align next frame */ @@ -305,7 +306,7 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { track_idx = 0; /* track pss around the middle of the subframe, where the PSS is */ - ret = sync_find(&q->strack, q->input_buffer, CURRENT_SFLEN/2-CURRENT_FFTSIZE, &track_idx); + ret = sync_find(&q->strack, q->input_buffer, CURRENT_SFLEN/2-CURRENT_FFTSIZE-q->strack.frame_size/2, &track_idx); if (ret < 0) { fprintf(stderr, "Error tracking correlation peak\n"); return LIBLTE_ERROR; diff --git a/lte/phy/lib/utils/src/convolution.c b/lte/phy/lib/utils/src/convolution.c index 2dcac6e5f..6630b7354 100644 --- a/lte/phy/lib/utils/src/convolution.c +++ b/lte/phy/lib/utils/src/convolution.c @@ -91,15 +91,17 @@ uint32_t conv_fft_cc_run(conv_fft_cc_t *q, cf_t *input, cf_t *filter, cf_t *outp } uint32_t conv_cc(cf_t *input, cf_t *filter, cf_t *output, uint32_t input_len, uint32_t filter_len) { - uint32_t i,j; - uint32_t output_len; - output_len=input_len+filter_len-1; - for (i=0;i Date: Thu, 11 Dec 2014 23:04:21 +0000 Subject: [PATCH 42/55] Improved cell search algorithm. Using narrow correlation for cell acquisition and MIB decoding --- lte/examples/CMakeLists.txt | 6 +- lte/examples/cell_measurement.c | 35 ++- lte/examples/cell_search.c | 53 +++- lte/examples/cell_search_utils.c | 284 ------------------ lte/examples/cuhd_utils.c | 171 +++++++++++ .../{cell_search_utils.h => cuhd_utils.h} | 31 +- lte/examples/pdsch_ue.c | 33 +- .../include/liblte/phy/common/phy_common.h | 2 + lte/phy/include/liblte/phy/phy.h | 2 +- .../include/liblte/phy/ue/ue_cell_search.h | 118 ++++++++ lte/phy/include/liblte/phy/ue/ue_celldetect.h | 132 -------- lte/phy/include/liblte/phy/ue/ue_mib.h | 65 ++-- lte/phy/include/liblte/phy/ue/ue_sync.h | 17 +- lte/phy/lib/mimo/src/precoding.c | 7 +- lte/phy/lib/phch/src/pbch.c | 4 - lte/phy/lib/phch/src/pdcch.c | 5 +- lte/phy/lib/phch/src/pdsch.c | 4 +- lte/phy/lib/sync/src/pss.c | 18 +- lte/phy/lib/sync/src/sss.c | 14 +- lte/phy/lib/sync/src/sync.c | 41 +-- lte/phy/lib/sync/test/pss_usrp.c | 3 + lte/phy/lib/sync/test/sync_test.c | 3 +- lte/phy/lib/ue/src/ue_cell_search.c | 275 +++++++++++++++++ lte/phy/lib/ue/src/ue_celldetect.c | 260 ---------------- lte/phy/lib/ue/src/ue_mib.c | 196 +++++------- lte/phy/lib/ue/src/ue_sync.c | 186 +++++++----- 26 files changed, 957 insertions(+), 1008 deletions(-) delete mode 100644 lte/examples/cell_search_utils.c create mode 100644 lte/examples/cuhd_utils.c rename lte/examples/{cell_search_utils.h => cuhd_utils.h} (59%) create mode 100644 lte/phy/include/liblte/phy/ue/ue_cell_search.h delete mode 100644 lte/phy/include/liblte/phy/ue/ue_celldetect.h create mode 100644 lte/phy/lib/ue/src/ue_cell_search.c delete mode 100644 lte/phy/lib/ue/src/ue_celldetect.c diff --git a/lte/examples/CMakeLists.txt b/lte/examples/CMakeLists.txt index 2f7374c2e..402f3b0f1 100644 --- a/lte/examples/CMakeLists.txt +++ b/lte/examples/CMakeLists.txt @@ -51,7 +51,7 @@ LIST(FIND OPTIONAL_LIBS graphics GRAPHICS_FIND) # These two can be compiled without UHD or graphics support ################################################################# -add_executable(pdsch_ue pdsch_ue.c cell_search_utils.c) +add_executable(pdsch_ue pdsch_ue.c cuhd_utils.c) target_link_libraries(pdsch_ue lte_rrc lte_phy) add_executable(pdsch_enodeb pdsch_enodeb.c) @@ -81,10 +81,10 @@ ENDIF(${GRAPHICS_FIND} EQUAL -1) IF(${CUHD_FIND} GREATER -1) - add_executable(cell_search cell_search.c cell_search_utils.c) + add_executable(cell_search cell_search.c cuhd_utils.c) target_link_libraries(cell_search lte_rrc lte_phy cuhd ) - add_executable(cell_measurement cell_measurement.c cell_search_utils.c) + add_executable(cell_measurement cell_measurement.c cuhd_utils.c) target_link_libraries(cell_measurement cuhd lte_rrc lte_phy) MESSAGE(STATUS " UHD examples will be installed.") diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 40f905375..8c5a429f6 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -39,16 +39,16 @@ #include "liblte/rrc/rrc.h" #include "liblte/phy/phy.h" #include "liblte/cuhd/cuhd.h" -#include "cell_search_utils.h" +#include "cuhd_utils.h" #define B210_DEFAULT_GAIN 40.0 #define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 float gain_offset = B210_DEFAULT_GAIN_CORREC; -cell_detect_cfg_t cell_detect_config = { - 100, // nof_frames_total - 6.0 // early-stops cell detection if mean PSR is above this value +cell_search_cfg_t cell_detect_config = { + 50, // nof_frames_total + 9.0 // early-stops cell detection if mean PSR is above this value }; /********************************************************************** @@ -170,15 +170,24 @@ int main(int argc, char **argv) { cuhd_rx_wait_lo_locked(uhd); printf("Tunning receiver to %.3f MHz\n", (double ) prog_args.uhd_freq/1000000); - - - - - if (detect_and_decode_cell(&cell_detect_config, uhd, prog_args.force_N_id_2, &cell)) { - fprintf(stderr, "Cell not found\n"); + ret = cuhd_search_and_decode_mib(uhd, &cell_detect_config, prog_args.force_N_id_2, &cell); + if (ret < 0) { + fprintf(stderr, "Error searching cell\n"); exit(-1); + } else if (ret == 0) { + printf("Cell not found\n"); + exit(0); } + /* set sampling frequency */ + int srate = lte_sampling_freq_hz(cell.nof_prb); + if (srate != -1) { + cuhd_set_rx_srate(uhd, (double) srate); + } else { + fprintf(stderr, "Invalid number of PRB %d\n", cell.nof_prb); + return LIBLTE_ERROR; + } + INFO("Stopping UHD and flushing buffer...\n",0); cuhd_stop_rx_stream(uhd); cuhd_flush_buffer(uhd); @@ -191,7 +200,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } - if (ue_mib_init(&ue_mib, cell, false)) { + if (ue_mib_init(&ue_mib, cell)) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } @@ -240,9 +249,7 @@ int main(int argc, char **argv) { case DECODE_MIB: if (ue_sync_get_sfidx(&ue_sync) == 0) { pbch_decode_reset(&ue_mib.pbch); - n = ue_mib_decode_aligned_frame(&ue_mib, - sf_buffer, bch_payload_unpacked, - NULL, &sfn_offset); + n = ue_mib_decode(&ue_mib, sf_buffer, bch_payload_unpacked, NULL, &sfn_offset); if (n < 0) { fprintf(stderr, "Error decoding UE MIB\n"); exit(-1); diff --git a/lte/examples/cell_search.c b/lte/examples/cell_search.c index d8b0f759d..20e0df925 100644 --- a/lte/examples/cell_search.c +++ b/lte/examples/cell_search.c @@ -37,7 +37,7 @@ #include "liblte/phy/phy.h" -#include "cell_search_utils.h" +#include "cuhd_utils.h" #ifndef DISABLE_UHD @@ -55,7 +55,7 @@ int band = -1; int earfcn_start=-1, earfcn_end = -1; -cell_detect_cfg_t config = {50, 1.1}; +cell_search_cfg_t config = {50, 1.1}; float uhd_gain = 60.0; @@ -111,15 +111,19 @@ void parse_args(int argc, char **argv) { } } +int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { + DEBUG(" ---- Receive %d samples ---- \n", nsamples); + return cuhd_recv(h, data, nsamples, 1); +} + int main(int argc, char **argv) { int n; void *uhd; - ue_celldetect_result_t found_cells[3]; + ue_cell_search_t cs; + ue_cell_search_result_t found_cells[3]; int nof_freqs; lte_earfcn_t channels[MAX_EARFCN]; uint32_t freq; - uint8_t bch_payload[BCH_PAYLOAD_LEN]; - uint32_t nof_tx_ports; parse_args(argc, argv); @@ -150,21 +154,44 @@ int main(int argc, char **argv) { if (VERBOSE_ISINFO()) { printf("\n"); } + + bzero(found_cells, 3*sizeof(ue_cell_search_result_t)); + + if (ue_cell_search_init(&cs, cuhd_recv_wrapper, uhd)) { + fprintf(stderr, "Error initiating UE cell detect\n"); + exit(-1); + } - n = detect_all_cells(&config, uhd, found_cells); + if (config.nof_frames_total) { + ue_cell_search_set_nof_frames_to_scan(&cs, config.nof_frames_total); + } + if (config.threshold) { + ue_cell_search_set_threshold(&cs, config.threshold); + } + + INFO("Setting sampling frequency %.2f MHz for PSS search\n", CS_SAMP_FREQ/1000); + cuhd_set_rx_srate(uhd, CS_SAMP_FREQ); + INFO("Starting receiver...\n", 0); + cuhd_start_rx_stream(uhd); + + n = ue_cell_search_scan(&cs, found_cells, NULL); if (n < 0) { fprintf(stderr, "Error searching cell\n"); exit(-1); - } - if (n == CS_CELL_DETECTED) { + } else if (n == 1) { for (int i=0;i<3;i++) { if (found_cells[i].peak > config.threshold/2) { - if (decode_pbch(uhd, &found_cells[i], config.nof_frames_total, bch_payload, &nof_tx_ports, NULL)) { - fprintf(stderr, "Error decoding PBCH\n"); + lte_cell_t cell; + cell.id = found_cells[i].cell_id; + cell.cp = found_cells[i].cp; + int ret = cuhd_mib_decoder(uhd, 100, &cell); + if (ret < 0) { + fprintf(stderr, "Error decoding MIB\n"); exit(-1); - } else { - printf("Cell found with %d ports. Decoded MIB: \n", nof_tx_ports); - vec_fprint_hex(stdout, bch_payload, BCH_PAYLOAD_LEN); + } + if (ret == MIB_FOUND) { + printf("Found CELL ID %d. %d PRB, %d ports\n", + cell.id, cell.nof_prb, cell.nof_ports); } } } diff --git a/lte/examples/cell_search_utils.c b/lte/examples/cell_search_utils.c deleted file mode 100644 index e2aa5164c..000000000 --- a/lte/examples/cell_search_utils.c +++ /dev/null @@ -1,284 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "liblte/phy/phy.h" -#include "liblte/rrc/rrc.h" -#include "cell_search_utils.h" - - -#ifndef DISABLE_UHD -#include "liblte/cuhd/cuhd.h" - -int decode_pbch(void *uhd, ue_celldetect_result_t *found_cell, uint32_t nof_frames_total, - uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) -{ - ue_mib_t uemib; - int n; - int ret = LIBLTE_ERROR; - - uint32_t nof_frames = 0; - uint32_t flen = MIB_FRAME_SIZE_SEARCH; - - cf_t *buffer = vec_malloc(sizeof(cf_t) * flen); - if (!buffer) { - perror("malloc"); - goto free_and_exit; - } - - if (ue_mib_init_1_92(&uemib, found_cell->cell_id, found_cell->cp)) { - fprintf(stderr, "Error initiating PBCH decoder\n"); - goto free_and_exit; - } - - INFO("Setting sampling frequency 1.92 MHz for PBCH decoding\n", 0); - cuhd_set_rx_srate(uhd, 1920000.0); - INFO("Starting receiver...\n", 0); - cuhd_start_rx_stream(uhd); - - do { - if (cuhd_recv(uhd, buffer, flen, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - goto free_and_exit; - } - - DEBUG("Calling ue_mib_decode() %d/%d\n", nof_frames, nof_frames_total); - - n = ue_mib_sync_and_decode_1_92(&uemib, buffer, flen); - if (n == LIBLTE_ERROR || n == LIBLTE_ERROR_INVALID_INPUTS) { - fprintf(stderr, "Error calling ue_mib_decode()\n"); - goto free_and_exit; - } - if (n == MIB_FRAME_UNALIGNED) { - INFO("Realigning frame\n",0); - // Receive some randon number of samples to try to resynchronise the frame. - if (cuhd_recv(uhd, buffer, 1500, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - goto free_and_exit; - } - bzero(buffer, flen * sizeof(cf_t)); - } - nof_frames++; - } while (n != MIB_FOUND && nof_frames < 2*nof_frames_total); - - if (n == MIB_FOUND) { - printf("\n\nMIB decoded in %d ms (%d half frames)\n", nof_frames*5, nof_frames); - ue_mib_get_payload(&uemib, bch_payload, nof_tx_ports, sfn_offset); - ret = LIBLTE_SUCCESS; - } else { - ret = LIBLTE_ERROR; - } - -free_and_exit: - free(buffer); - - cuhd_stop_rx_stream(uhd); - cuhd_flush_buffer(uhd); - - ue_mib_free(&uemib); - - return ret; -} - -int detect_cell(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t *found_cell, uint32_t N_id_2) -{ - int ret = LIBLTE_ERROR; - ue_celldetect_t cd; - - cf_t *buffer = vec_malloc(sizeof(cf_t) * CS_FLEN); - if (!buffer) { - perror("malloc"); - goto free_and_exit; - } - - if (ue_celldetect_init(&cd)) { - fprintf(stderr, "Error initiating UE cell detect\n"); - goto free_and_exit; - } - - if (config->nof_frames_total) { - ue_celldetect_set_nof_frames_total(&cd, config->nof_frames_total); - } - if (config->threshold) { - ue_celldetect_set_threshold(&cd, config->threshold); - } - - INFO("Setting sampling frequency %.2f MHz for PSS search\n", CS_SAMP_FREQ/1000); - cuhd_set_rx_srate(uhd, CS_SAMP_FREQ); - INFO("Starting receiver...\n", 0); - cuhd_start_rx_stream(uhd); - - uint32_t flen = CS_FLEN; - int n; - - bzero(found_cell, sizeof(ue_celldetect_result_t)); - - ue_celldetect_set_N_id_2(&cd, N_id_2); - - do { - if (cuhd_recv(uhd, buffer, flen, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - goto free_and_exit; - } - - DEBUG("Scanning cell at N_id_2=%d\n",N_id_2); - - n = ue_celldetect_scan(&cd, buffer, flen); - switch(n) { - case CS_FRAME_UNALIGNED: - INFO("Realigning frame\n",0); - if (cuhd_recv(uhd, buffer, flen/2, 1)<0) { - fprintf(stderr, "Error receiving from USRP\n"); - goto free_and_exit; - } - break; - case CS_CELL_DETECTED: - ue_celldetect_get_cell(&cd, found_cell); - if (found_cell->peak > 0) { - printf("\n\tCELL ID: %d, CP: %s, Peak: %.2f, Mode: %.0f%%\n", - found_cell->cell_id, - lte_cp_string(found_cell->cp), - found_cell->peak, found_cell->mode*100); - } - - ret = 1; - INFO("Cell found at N_id_2=%d\n",N_id_2); - break; - case CS_CELL_NOT_DETECTED: - ret = 0; - printf("No cell found at N_id_2=%d. Mean PSR: %.2f\n",N_id_2, sync_get_peak_value(&cd.sfind)); - break; - case LIBLTE_ERROR: - case LIBLTE_ERROR_INVALID_INPUTS: - ret = LIBLTE_ERROR; - fprintf(stderr, "Error calling cellsearch_scan()\n"); - goto free_and_exit; - } - - } while(n == 0 || n == CS_FRAME_UNALIGNED); - -free_and_exit: - free(buffer); - ue_celldetect_free(&cd); - INFO("Stopping receiver...\n", 0); - cuhd_stop_rx_stream(uhd); - cuhd_flush_buffer(uhd); - - return ret; -} - - -int detect_all_cells(cell_detect_cfg_t *config, void *uhd, ue_celldetect_result_t found_cell[3]) -{ - - uint32_t N_id_2; - int ret; - int nof_detected_cells = 0; - - for (N_id_2=0;N_id_2<3;N_id_2++) { - ret = detect_cell(config, uhd, &found_cell[N_id_2], N_id_2); - if (ret == 1) { - nof_detected_cells++; - } else if (ret == LIBLTE_ERROR) { - return LIBLTE_ERROR; - } - } - return nof_detected_cells; -} - -int detect_and_decode_cell(cell_detect_cfg_t *config, void *uhd, int force_N_id_2, lte_cell_t *cell) -{ - int ret; - uint32_t nof_tx_ports; - uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; - - ue_celldetect_result_t found_cells[3]; - bzero(found_cells, 3*sizeof(ue_celldetect_result_t)); - - if (force_N_id_2 >= 0) { - ret = detect_cell(config, uhd, &found_cells[force_N_id_2], force_N_id_2); - } else { - ret = detect_all_cells(config, uhd, found_cells); - } - if (ret < 0) { - fprintf(stderr, "Error searching cell\n"); - exit(-1); - } - - int max_peak_cell = 0; - float max_peak_value = -1.0; - if (ret > 0) { - if (force_N_id_2 >= 0) { - max_peak_cell = force_N_id_2; - } else { - for (int i=0;i<3;i++) { - if (found_cells[i].peak > max_peak_value) { - max_peak_value = found_cells[i].peak; - max_peak_cell = i; - } - } - } - - printf("Decoding PBCH for cell %d (N_id_2=%d)\n", found_cells[max_peak_cell].cell_id, max_peak_cell); - if (decode_pbch(uhd, &found_cells[max_peak_cell], 400, bch_payload, &nof_tx_ports, NULL)) { - fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", found_cells[max_peak_cell].cell_id); - return LIBLTE_ERROR; - } - } else { - fprintf(stderr, "Could not find any cell in this frequency\n"); - return LIBLTE_ERROR; - } - - cell->cp = found_cells[max_peak_cell].cp; - cell->id = found_cells[max_peak_cell].cell_id; - cell->nof_ports = nof_tx_ports; - - bit_unpack_vector(bch_payload, bch_payload_unpacked, BCH_PAYLOAD_LEN); - bcch_bch_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); - - /* set sampling frequency */ - int srate = lte_sampling_freq_hz(cell->nof_prb); - if (srate != -1) { - cuhd_set_rx_srate(uhd, (double) srate); - } else { - fprintf(stderr, "Invalid number of PRB %d\n", cell->nof_prb); - return LIBLTE_ERROR; - } - return LIBLTE_SUCCESS; -} - - -#endif diff --git a/lte/examples/cuhd_utils.c b/lte/examples/cuhd_utils.c new file mode 100644 index 000000000..1ccf5e0c4 --- /dev/null +++ b/lte/examples/cuhd_utils.c @@ -0,0 +1,171 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "liblte/phy/phy.h" +#include "liblte/rrc/rrc.h" +#include "cuhd_utils.h" + + +#ifndef DISABLE_UHD +#include "liblte/cuhd/cuhd.h" + +int cuhd_recv_wrapper_cs(void *h, void *data, uint32_t nsamples) { + DEBUG(" ---- Receive %d samples ---- \n", nsamples); + return cuhd_recv(h, data, nsamples, 1); +} + +/** This function is simply a wrapper to the ue_cell_search module for cuhd devices + * Return 1 if the MIB is decoded, 0 if not or -1 on error. + */ +int cuhd_mib_decoder(void *uhd, uint32_t max_nof_frames, lte_cell_t *cell) { + int ret = LIBLTE_ERROR; + ue_mib_sync_t ue_mib; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; + + if (ue_mib_sync_init(&ue_mib, cell->id, cell->cp, cuhd_recv_wrapper_cs, uhd)) { + fprintf(stderr, "Error initiating ue_mib_sync\n"); + goto clean_exit; + } + + int srate = lte_sampling_freq_hz(MIB_NOF_PRB); + INFO("Setting sampling frequency %.2f MHz for PSS search\n", (float) srate/1000000); + cuhd_set_rx_srate(uhd, (float) srate); + + INFO("Starting receiver...\n", 0); + cuhd_start_rx_stream(uhd); + + /* Find and decody MIB */ + ret = ue_mib_sync_decode(&ue_mib, max_nof_frames, bch_payload, &cell->nof_ports, NULL); + if (ret < 0) { + fprintf(stderr, "Error decoding MIB\n"); + goto clean_exit; + } + if (ret == 1) { + bit_unpack_vector(bch_payload, bch_payload_unpacked, BCH_PAYLOAD_LEN); + bcch_bch_unpack(bch_payload_unpacked, BCH_PAYLOAD_LEN, cell, NULL); + } + +clean_exit: + + cuhd_stop_rx_stream(uhd); + ue_mib_sync_free(&ue_mib); + + return ret; +} + +/** This function is simply a wrapper to the ue_cell_search module for cuhd devices + */ +int cuhd_cell_search(void *uhd, cell_search_cfg_t *config, + int force_N_id_2, lte_cell_t *cell) +{ + int ret = LIBLTE_ERROR; + ue_cell_search_t cs; + ue_cell_search_result_t found_cells[3]; + + bzero(found_cells, 3*sizeof(ue_cell_search_result_t)); + + if (ue_cell_search_init(&cs, cuhd_recv_wrapper_cs, uhd)) { + fprintf(stderr, "Error initiating UE cell detect\n"); + return LIBLTE_ERROR; + } + + if (config->nof_frames_total) { + ue_cell_search_set_nof_frames_to_scan(&cs, config->nof_frames_total); + } + if (config->threshold) { + ue_cell_search_set_threshold(&cs, config->threshold); + } + + INFO("Setting sampling frequency %.2f MHz for PSS search\n", CS_SAMP_FREQ/1000000); + cuhd_set_rx_srate(uhd, CS_SAMP_FREQ); + + INFO("Starting receiver...\n", 0); + cuhd_start_rx_stream(uhd); + + /* Find a cell in the given N_id_2 or go through the 3 of them to find the strongest */ + uint32_t max_peak_cell = 0; + if (force_N_id_2 >= 0) { + ret = ue_cell_search_scan_N_id_2(&cs, force_N_id_2, &found_cells[force_N_id_2]); + max_peak_cell = force_N_id_2; + } else { + ret = ue_cell_search_scan(&cs, found_cells, &max_peak_cell); + } + if (ret < 0) { + fprintf(stderr, "Error searching cell\n"); + return LIBLTE_ERROR; + } else if (ret == 0) { + fprintf(stderr, "Could not find any cell in this frequency\n"); + return LIBLTE_SUCCESS; + } + + // Save result + if (cell) { + cell->id = found_cells[max_peak_cell].cell_id; + cell->cp = found_cells[max_peak_cell].cp; + } + + cuhd_stop_rx_stream(uhd); + ue_cell_search_free(&cs); + + return ret; +} + + +/* Finds a cell and decodes MIB from the PBCH. + * Returns 1 if the cell is found and MIB is decoded successfully. + * 0 if no cell was found or MIB could not be decoded, + * -1 on error + */ +int cuhd_search_and_decode_mib(void *uhd, cell_search_cfg_t *config, int force_N_id_2, lte_cell_t *cell) +{ + int ret = LIBLTE_ERROR; + + printf("Searching for cell...\n"); + ret = cuhd_cell_search(uhd, config, force_N_id_2, cell); + if (ret > 0) { + printf("Decoding PBCH for cell %d (N_id_2=%d)\n", cell->id, cell->id%3); + ret = cuhd_mib_decoder(uhd, 50, cell); + if (ret < 0) { + fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", cell->id); + return LIBLTE_ERROR; + } + } + return ret; +} + + +#endif diff --git a/lte/examples/cell_search_utils.h b/lte/examples/cuhd_utils.h similarity index 59% rename from lte/examples/cell_search_utils.h rename to lte/examples/cuhd_utils.h index ad8875e3d..fed662ca0 100644 --- a/lte/examples/cell_search_utils.h +++ b/lte/examples/cuhd_utils.h @@ -31,25 +31,20 @@ typedef struct LIBLTE_API { uint32_t nof_frames_total; // maximum number of 5ms frames to capture float threshold; // early-stops cell detection if mean PSR is above this value -}cell_detect_cfg_t; +}cell_search_cfg_t; -int decode_pbch(void *uhd, - ue_celldetect_result_t *found_cell, - uint32_t nof_frames_total, - uint8_t bch_payload[BCH_PAYLOAD_LEN], - uint32_t *nof_tx_ports, - uint32_t *sfn_offset); +int cuhd_mib_decoder(void *uhd, + uint32_t max_nof_frames, + lte_cell_t *cell); -int detect_all_cells(cell_detect_cfg_t *config, - void *uhd, - ue_celldetect_result_t found_cell[3]); +int cuhd_cell_search(void *uhd, + cell_search_cfg_t *config, + int force_N_id_2, + lte_cell_t *cell); + +int cuhd_search_and_decode_mib(void *uhd, + cell_search_cfg_t *config, + int force_N_id_2, + lte_cell_t *cell); -int detect_cell(cell_detect_cfg_t *config, - void *uhd, - ue_celldetect_result_t *found_cell, - uint32_t N_id_2); -int detect_and_decode_cell(cell_detect_cfg_t *config, - void *uhd, - int force_N_id_2, - lte_cell_t *cell); \ No newline at end of file diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 07b6e587c..01f4196bd 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -39,7 +39,7 @@ #include "liblte/rrc/rrc.h" #include "liblte/phy/phy.h" #include "liblte/cuhd/cuhd.h" -#include "cell_search_utils.h" +#include "cuhd_utils.h" #ifndef DISABLE_GRAPHICS void init_plots(); @@ -53,7 +53,7 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx, ue_sync_t *qs); float gain_offset = B210_DEFAULT_GAIN_CORREC; -cell_detect_cfg_t cell_detect_config = { +cell_search_cfg_t cell_detect_config = { 100, // nof_frames_total 4.0 // threshold }; @@ -188,10 +188,24 @@ int main(int argc, char **argv) { cuhd_rx_wait_lo_locked(uhd); printf("Tunning receiver to %.3f MHz\n", (double ) prog_args.uhd_freq/1000000); - if (detect_and_decode_cell(&cell_detect_config, uhd, prog_args.force_N_id_2, &cell)) { - fprintf(stderr, "Cell not found\n"); + ret = cuhd_search_and_decode_mib(uhd, &cell_detect_config, prog_args.force_N_id_2, &cell); + if (ret < 0) { + fprintf(stderr, "Error searching for cell\n"); exit(-1); + } else if (ret == 0) { + printf("Cell not found\n"); + exit(0); } + + /* set sampling frequency */ + int srate = lte_sampling_freq_hz(cell.nof_prb); + if (srate != -1) { + cuhd_set_rx_srate(uhd, (double) srate); + } else { + fprintf(stderr, "Invalid number of PRB %d\n", cell.nof_prb); + return LIBLTE_ERROR; + } + INFO("Stopping UHD and flushing buffer...\r",0); cuhd_stop_rx_stream(uhd); @@ -205,7 +219,7 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initiating UE downlink processing module\n"); exit(-1); } - if (ue_mib_init(&ue_mib, cell, false)) { + if (ue_mib_init(&ue_mib, cell)) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); exit(-1); } @@ -247,9 +261,7 @@ int main(int argc, char **argv) { case DECODE_MIB: if (ue_sync_get_sfidx(&ue_sync) == 0) { pbch_decode_reset(&ue_mib.pbch); - n = ue_mib_decode_aligned_frame(&ue_mib, - sf_buffer, bch_payload_unpacked, - NULL, &sfn_offset); + n = ue_mib_decode(&ue_mib, sf_buffer, bch_payload_unpacked, NULL, &sfn_offset); if (n < 0) { fprintf(stderr, "Error decoding UE MIB\n"); exit(-1); @@ -393,7 +405,10 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx, ue_sync_t *qs) { plot_real_setNewData(&poutfft, tmp_plot, nof_re); plot_real_setNewData(&pce, tmp_plot2, REFSIGNAL_NUM_SF(q->cell.nof_prb,0)); int max = vec_max_fi(qs->strack.pss.conv_output_avg, qs->strack.pss.frame_size+qs->strack.pss.fft_size-1); - vec_sc_prod_fff(qs->strack.pss.conv_output_avg, 1/qs->strack.pss.conv_output_avg[max], tmp_plot2, qs->strack.pss.frame_size+qs->strack.pss.fft_size-1); + vec_sc_prod_fff(qs->strack.pss.conv_output_avg, + 1/qs->strack.pss.conv_output_avg[max], + tmp_plot2, + qs->strack.pss.frame_size+qs->strack.pss.fft_size-1); plot_real_setNewData(&p_sync, tmp_plot2, qs->strack.pss.frame_size); plot_scatter_setNewData(&pscatequal, q->pdsch.pdsch_d, nof_symbols); diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index b57f84d48..a01f6e5ef 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -60,6 +60,8 @@ typedef enum {CPNORM, CPEXT} lte_cp_t; #define PRNTI 0xFFFE #define MRNTI 0xFFFD +#define CELL_ID_UNKNOWN 1000 + #define MAX_NSYMB 7 #define MAX_PRB 110 diff --git a/lte/phy/include/liblte/phy/phy.h b/lte/phy/include/liblte/phy/phy.h index 5709496f0..4e145614a 100644 --- a/lte/phy/include/liblte/phy/phy.h +++ b/lte/phy/include/liblte/phy/phy.h @@ -95,7 +95,7 @@ #include "liblte/phy/ue/ue_sync.h" #include "liblte/phy/ue/ue_mib.h" -#include "liblte/phy/ue/ue_celldetect.h" +#include "liblte/phy/ue/ue_cell_search.h" #include "liblte/phy/ue/ue_dl.h" #include "liblte/phy/scrambling/scrambling.h" diff --git a/lte/phy/include/liblte/phy/ue/ue_cell_search.h b/lte/phy/include/liblte/phy/ue/ue_cell_search.h new file mode 100644 index 000000000..6ad4bc419 --- /dev/null +++ b/lte/phy/include/liblte/phy/ue/ue_cell_search.h @@ -0,0 +1,118 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#ifndef UE_CELLSEARCH_ +#define UE_CELLSEARCH_ + +#include + +#include "liblte/config.h" +#include "liblte/phy/ue/ue_sync.h" +#include "liblte/phy/ue/ue_mib.h" +#include "liblte/phy/sync/cfo.h" +#include "liblte/phy/ch_estimation/chest_dl.h" +#include "liblte/phy/phch/pbch.h" +#include "liblte/phy/common/fft.h" + +/************************************************************ + * + * This object is a wrapper to the ue_sync object. It receives + * several synchronized frames and obtains the most common cell_id + * and cp length. + * + * The I/O stream device sampling frequency must be set to 1.92 MHz (CS_SAMP_FREQ constant) + * before calling to ue_cell_search_scan() functions. + * + ************************************************************/ + +/** + * TODO: Check also peak offset + */ + +#define CS_DEFAULT_MAXFRAMES_TOTAL 500 +#define CS_DEFAULT_MAXFRAMES_DETECTED 50 + +#define CS_DEFAULT_NOFFRAMES_TOTAL 50 +#define CS_DEFAULT_NOFFRAMES_DETECTED 10 + +#define CS_NOF_PRB 6 +#define CS_SAMP_FREQ 1920000.0 + +typedef struct LIBLTE_API { + uint32_t cell_id; + lte_cp_t cp; + float peak; + float mode; +} ue_cell_search_result_t; + + +typedef struct LIBLTE_API { + ue_sync_t ue_sync; + + uint32_t max_frames; + uint32_t nof_frames_to_scan; // number of 5 ms frames to scan + float detect_threshold; // early-stops scan if mean PSR above this threshold + + uint32_t *mode_ntimes; + uint8_t *mode_counted; + + ue_cell_search_result_t *candidates; +} ue_cell_search_t; + + +LIBLTE_API int ue_cell_search_init(ue_cell_search_t *q, + int (recv_callback)(void*, void*, uint32_t), + void *stream_handler); + +LIBLTE_API int ue_cell_search_init_max(ue_cell_search_t *q, + uint32_t max_frames_total, + int (recv_callback)(void*, void*, uint32_t), + void *stream_handler); + +LIBLTE_API void ue_cell_search_free(ue_cell_search_t *q); + +LIBLTE_API int ue_cell_search_scan_N_id_2(ue_cell_search_t *q, + uint32_t N_id_2, + ue_cell_search_result_t *found_cell); + +LIBLTE_API int ue_cell_search_scan(ue_cell_search_t * q, + ue_cell_search_result_t found_cells[3], + uint32_t *max_N_id_2); + +LIBLTE_API int ue_cell_search_set_nof_frames_to_scan(ue_cell_search_t *q, + uint32_t nof_frames); + +LIBLTE_API void ue_cell_search_set_threshold(ue_cell_search_t *q, + float threshold); + + + + + + +#endif // SYNC_FRAME_ + diff --git a/lte/phy/include/liblte/phy/ue/ue_celldetect.h b/lte/phy/include/liblte/phy/ue/ue_celldetect.h deleted file mode 100644 index e68e2ea47..000000000 --- a/lte/phy/include/liblte/phy/ue/ue_celldetect.h +++ /dev/null @@ -1,132 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#ifndef UE_CELLSEARCH_ -#define UE_CELLSEARCH_ - -#include - -#include "liblte/config.h" -#include "liblte/phy/sync/sync.h" -#include "liblte/phy/sync/cfo.h" -#include "liblte/phy/ch_estimation/chest_dl.h" -#include "liblte/phy/phch/pbch.h" -#include "liblte/phy/common/fft.h" - -/************************************************************ - * - * This object scans a signal for LTE cells using the known PSS - * and SSS sequences. - * - * The function ue_celldetect_scan() shall be called multiple times, - * each passing a number of samples multiple of 4800, sampled at 960 KHz - * (that is, 5 ms of samples). - * - * The function returns 0 until a signal is found nof_frames_detected times or - * after nof_frames_total with no signal detected. - * - * See ue_cell_detect.c for an example. - * - ************************************************************/ - -/** - * TODO: Check also peak offset - */ - -#define CS_DEFAULT_MAXFRAMES_TOTAL 500 -#define CS_DEFAULT_MAXFRAMES_DETECTED 50 - -#define CS_DEFAULT_NOFFRAMES_TOTAL 100 -#define CS_DEFAULT_NOFFRAMES_DETECTED 10 - -#define CS_FRAME_UNALIGNED -3 -#define CS_CELL_DETECTED 2 -#define CS_CELL_NOT_DETECTED 3 - -#define CS_FFTSIZE 128 -#define CS_SAMP_FREQ (960000*(CS_FFTSIZE/64)) -#define CS_FLEN (4800*(CS_FFTSIZE/64)) - -typedef struct LIBLTE_API { - uint32_t cell_id; - lte_cp_t cp; - float peak; - float mode; -} ue_celldetect_result_t; - - -typedef struct LIBLTE_API { - sync_t sfind; - - uint32_t max_frames_total; - uint32_t nof_frames_total; // number of 5 ms frames to scan - float detect_threshold; // early-stops scan if mean PSR above this threshold - - uint32_t current_nof_detected; - uint32_t current_nof_total; - - uint32_t *mode_ntimes; - uint8_t *mode_counted; - - ue_celldetect_result_t *candidates; -} ue_celldetect_t; - - -LIBLTE_API int ue_celldetect_init(ue_celldetect_t *q); - -LIBLTE_API int ue_celldetect_init_max(ue_celldetect_t *q, - uint32_t max_frames_total); - -LIBLTE_API void ue_celldetect_free(ue_celldetect_t *q); - -LIBLTE_API void ue_celldetect_reset(ue_celldetect_t *q); - -LIBLTE_API int ue_celldetect_scan(ue_celldetect_t *q, - cf_t *signal, - uint32_t nsamples); - -LIBLTE_API int ue_celldetect_set_N_id_2(ue_celldetect_t *q, - uint32_t N_id_2); - -LIBLTE_API void ue_celldetect_get_cell(ue_celldetect_t * q, - ue_celldetect_result_t *found_cell); - -LIBLTE_API int ue_celldetect_set_nof_frames_total(ue_celldetect_t *q, - uint32_t nof_frames); - -LIBLTE_API void ue_celldetect_set_threshold(ue_celldetect_t *q, - float threshold); - -LIBLTE_API void ue_celldetect_reset(ue_celldetect_t *q); - - - - - - -#endif // SYNC_FRAME_ - diff --git a/lte/phy/include/liblte/phy/ue/ue_mib.h b/lte/phy/include/liblte/phy/ue/ue_mib.h index 0b85bbb75..836f014c8 100644 --- a/lte/phy/include/liblte/phy/ue/ue_mib.h +++ b/lte/phy/include/liblte/phy/ue/ue_mib.h @@ -49,7 +49,7 @@ #include #include "liblte/config.h" -#include "liblte/phy/sync/sync.h" +#include "liblte/phy/ue/ue_sync.h" #include "liblte/phy/sync/cfo.h" #include "liblte/phy/ch_estimation/chest_dl.h" #include "liblte/phy/phch/pbch.h" @@ -57,10 +57,8 @@ #define MIB_MAX_PORTS 4 -#define MIB_FRAME_SIZE_SEARCH 9600 -#define MIB_FFT_SIZE 128 +#define MIB_NOF_PRB 6 -#define MIB_FRAME_UNALIGNED -3 #define MIB_FOUND 1 #define MIB_NOTFOUND 0 @@ -70,7 +68,6 @@ typedef struct LIBLTE_API { cf_t *sf_symbols; cf_t *ce[MIB_MAX_PORTS]; - cfo_t cfocorr; lte_fft_t fft; chest_dl_t chest; pbch_t pbch; @@ -80,43 +77,45 @@ typedef struct LIBLTE_API { uint32_t sfn_offset; uint32_t frame_cnt; - uint32_t last_frame_trial; } ue_mib_t; - -LIBLTE_API int ue_mib_init_1_92(ue_mib_t *q, - uint32_t cell_id, - lte_cp_t cp); - LIBLTE_API int ue_mib_init(ue_mib_t *q, - lte_cell_t cell, - bool do_sync); + lte_cell_t cell); LIBLTE_API void ue_mib_free(ue_mib_t *q); -LIBLTE_API void ue_mib_reset(ue_mib_t *q); +LIBLTE_API void ue_mib_reset(ue_mib_t * q); -LIBLTE_API int ue_mib_sync_and_decode_1_92(ue_mib_t *q, - cf_t *signal, - uint32_t nsamples); - -LIBLTE_API int ue_mib_decode_aligned_frame(ue_mib_t * q, - cf_t *input, - uint8_t bch_payload[BCH_PAYLOAD_LEN], - uint32_t *nof_tx_ports, - uint32_t *sfn_offset); - -LIBLTE_API void ue_mib_get_payload(ue_mib_t *q, - uint8_t bch_payload[BCH_PAYLOAD_LEN], - uint32_t *nof_tx_ports, - uint32_t *sfn_offset); - -LIBLTE_API void ue_mib_set_threshold(ue_mib_t *q, - float threshold); - -LIBLTE_API void ue_mib_reset(ue_mib_t *q); +LIBLTE_API int ue_mib_decode(ue_mib_t * q, + cf_t *input, + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); +/* This interface uses ue_mib and ue_sync to first get synchronized subframes + * and then decode MIB +*/ +typedef struct { + ue_mib_t ue_mib; + ue_sync_t ue_sync; +} ue_mib_sync_t; + +LIBLTE_API int ue_mib_sync_init(ue_mib_sync_t *q, + uint32_t cell_id, + lte_cp_t cp, + int (recv_callback)(void*, void*, uint32_t), + void *stream_handler); + +LIBLTE_API void ue_mib_sync_free(ue_mib_sync_t *q); + +LIBLTE_API void ue_mib_sync_reset(ue_mib_sync_t * q); + +LIBLTE_API int ue_mib_sync_decode(ue_mib_sync_t * q, + uint32_t max_frames_timeout, + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset); diff --git a/lte/phy/include/liblte/phy/ue/ue_sync.h b/lte/phy/include/liblte/phy/ue/ue_sync.h index 3e7e92356..0ea31dad0 100644 --- a/lte/phy/include/liblte/phy/ue/ue_sync.h +++ b/lte/phy/include/liblte/phy/ue/ue_sync.h @@ -66,6 +66,13 @@ typedef struct LIBLTE_API { cf_t *input_buffer; + uint32_t frame_len; + uint32_t fft_size; + uint32_t nof_recv_sf; // Number of subframes received each call to ue_sync_get_buffer + uint32_t nof_avg_find_frames; + uint32_t frame_find_cnt; + uint32_t sf_len; + /* These count half frames (5ms) */ uint64_t frame_ok_cnt; uint32_t frame_no_cnt; @@ -82,6 +89,7 @@ typedef struct LIBLTE_API { uint32_t peak_idx; int time_offset; float mean_time_offset; + #ifdef MEASURE_EXEC_TIME float mean_exec_time; #endif @@ -89,9 +97,9 @@ typedef struct LIBLTE_API { LIBLTE_API int ue_sync_init(ue_sync_t *q, - lte_cell_t cell, - int (recv_callback)(void*, void*, uint32_t), - void *stream_handler); + lte_cell_t cell, + int (recv_callback)(void*, void*, uint32_t), + void *stream_handler); LIBLTE_API void ue_sync_free(ue_sync_t *q); @@ -102,6 +110,9 @@ LIBLTE_API int ue_sync_get_buffer(ue_sync_t *q, LIBLTE_API void ue_sync_reset(ue_sync_t *q); +LIBLTE_API void ue_sync_set_N_id_2(ue_sync_t *q, + uint32_t N_id_2); + LIBLTE_API void ue_sync_decode_sss_on_track(ue_sync_t *q, bool enabled); diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index f3dd41af5..b45b6fcb3 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -138,7 +138,9 @@ int predecoding_single(precoding_t *q, cf_t *y, cf_t *h, cf_t *x, int nof_symbol /* ZF/MMSE STBC equalizer x=y(H'H+n0·I)^(-1)H' (ZF is n0=0.0) */ -int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], int nof_ports, int nof_symbols, float noise_estimate) { +int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[MAX_LAYERS], + int nof_ports, int nof_symbols, float noise_estimate) +{ int i; if (nof_ports == 2) { @@ -171,8 +173,7 @@ int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[M // (H'H + n0) vec_sc_add_fff(modhh, noise_estimate, modhh, nof_symbols/2); } - //vec_sc_prod_fff(modhh, 1.0/sqrt(2), modhh, nof_symbols/2); - + // x[0] = r0·h0*/(|h0|+|h1|)+r1*·h1/(|h0|+|h1|) vec_prod_conj_ccc(r0,h0,q->tmp1, nof_symbols/2); vec_prod_conj_ccc(h1,r1,q->tmp2, nof_symbols/2); diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index 15e419f9c..5beaf56d8 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -382,10 +382,6 @@ int pbch_decode(pbch_t *q, cf_t *slot1_symbols, cf_t *ce_slot1[MAX_PORTS], float demod_soft_demodulate(&q->demod, q->pbch_d, &q->pbch_llr[nof_bits * (q->frame_idx - 1)], q->nof_symbols); - if (nant == 2) { - vec_save_file("d",q->pbch_d, q->nof_symbols*sizeof(cf_t)); - } - /* We don't know where the 40 ms begin, so we try all combinations. E.g. if we received * 4 frames, try 1,2,3,4 individually, 12, 23, 34 in pairs, 123, 234 and finally 1234. * We know they are ordered. diff --git a/lte/phy/lib/phch/src/pdcch.c b/lte/phy/lib/phch/src/pdcch.c index 353a2c8f3..af38fb4b9 100644 --- a/lte/phy/lib/phch/src/pdcch.c +++ b/lte/phy/lib/phch/src/pdcch.c @@ -46,9 +46,6 @@ #define PDCCH_FORMAT_NOF_REGS(i) ((1<b)?b:a) - static void set_cfi(pdcch_t *q, uint32_t cfi) { if (cfi > 0 && cfi < 4) { q->nof_regs = (regs_pdcch_nregs(q->regs, cfi) / 9) * 9; @@ -420,7 +417,7 @@ int pdcch_extract_llr(pdcch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float n } /* demodulate symbols */ - demod_soft_sigma_set(&q->demod, sqrtf(2/q->cell.nof_ports)); + demod_soft_sigma_set(&q->demod, 1.0); demod_soft_demodulate(&q->demod, q->pdcch_d, q->pdcch_llr, nof_symbols); /* descramble */ diff --git a/lte/phy/lib/phch/src/pdsch.c b/lte/phy/lib/phch/src/pdsch.c index 3881d7246..8d7ebc433 100644 --- a/lte/phy/lib/phch/src/pdsch.c +++ b/lte/phy/lib/phch/src/pdsch.c @@ -702,12 +702,12 @@ int pdsch_decode(pdsch_t *q, cf_t *sf_symbols, cf_t *ce[MAX_PORTS], float noise_ layerdemap_diversity(x, q->pdsch_d, q->cell.nof_ports, nof_symbols / q->cell.nof_ports); } - + /* demodulate symbols * The MAX-log-MAP algorithm used in turbo decoding is unsensitive to SNR estimation, * thus we don't need tot set it in the LLRs normalization */ - demod_soft_sigma_set(&q->demod, 1);//q->mod[harq_process->mcs.mod - 1].nbits_x_symbol); + demod_soft_sigma_set(&q->demod, sqrt(q->mod[harq_process->mcs.mod - 1].nbits_x_symbol/2)); demod_soft_table_set(&q->demod, &q->mod[harq_process->mcs.mod - 1]); demod_soft_demodulate(&q->demod, q->pdsch_d, q->pdsch_e, nof_symbols); diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index b183e24b2..ac27ca59b 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -121,18 +121,22 @@ int pss_synch_init_fft(pss_synch_t *q, uint32_t frame_size, uint32_t fft_size) { fprintf(stderr, "Error allocating memory\n"); goto clean_and_exit; } + bzero(q->conv_output, sizeof(cf_t) * buffer_size); q->conv_output_avg = vec_malloc(buffer_size * sizeof(float)); if (!q->conv_output_avg) { fprintf(stderr, "Error allocating memory\n"); goto clean_and_exit; } + bzero(q->conv_output_avg, sizeof(float) * buffer_size); #ifdef PSS_ACCUMULATE_ABS q->conv_output_abs = vec_malloc(buffer_size * sizeof(float)); if (!q->conv_output_abs) { fprintf(stderr, "Error allocating memory\n"); goto clean_and_exit; } + bzero(q->conv_output_abs, sizeof(float) * buffer_size); #endif + for (N_id_2=0;N_id_2<3;N_id_2++) { q->pss_signal_freq[N_id_2] = vec_malloc(buffer_size * sizeof(cf_t)); if (!q->pss_signal_freq[N_id_2]) { @@ -286,22 +290,22 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) fprintf(stderr, "Error finding PSS peak, Must set N_id_2 first\n"); return LIBLTE_ERROR; } - - memcpy(q->tmp_input, input, q->frame_size * sizeof(cf_t)); /* Correlate input with PSS sequence */ if (q->frame_size >= q->fft_size) { #ifdef CONVOLUTION_FFT + memcpy(q->tmp_input, input, q->frame_size * sizeof(cf_t)); + conv_output_len = conv_fft_cc_run(&q->conv_fft, q->tmp_input, q->pss_signal_freq[q->N_id_2], q->conv_output); #else conv_output_len = conv_cc(input, q->pss_signal_freq[q->N_id_2], q->conv_output, q->frame_size, q->fft_size); #endif } else { - for (int i=0;iframe_size;i++) { - q->conv_output[i] = vec_dot_prod_ccc(q->pss_signal_freq[q->N_id_2], &input[i], q->fft_size); - } - conv_output_len = q->frame_size; + for (int i=q->fft_size;ifft_size+q->frame_size-1;i++) { + q->conv_output[i] = vec_dot_prod_ccc(q->pss_signal_freq[q->N_id_2], &input[i-q->fft_size], q->fft_size); + } + conv_output_len = q->fft_size+q->frame_size-1; } @@ -351,7 +355,7 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) *corr_peak_value = q->conv_output_avg[corr_peak_pos]/side_lobe_value; if (*corr_peak_value < 2.0) { - INFO("pl_ub=%d, pl_lb=%d, sl_right: %d (%.2f), sl_left: %d (%.2f), PSR: %.2f/%.2f=%.2f\n", pl_ub, pl_lb, + DEBUG("pl_ub=%d, pl_lb=%d, sl_right: %d (%.2f), sl_left: %d (%.2f), PSR: %.2f/%.2f=%.2f\n", pl_ub, pl_lb, sl_right, 1000000*q->conv_output_avg[sl_right], sl_left, 1000000*q->conv_output_avg[sl_left], 1000000*q->conv_output_avg[corr_peak_pos], 1000000*side_lobe_value,*corr_peak_value diff --git a/lte/phy/lib/sync/src/sss.c b/lte/phy/lib/sync/src/sss.c index c33f13822..fbbd517e2 100644 --- a/lte/phy/lib/sync/src/sss.c +++ b/lte/phy/lib/sync/src/sss.c @@ -143,11 +143,21 @@ int sss_synch_N_id_1(sss_synch_t *q, uint32_t m0, uint32_t m1) { if (m0==m1 || m0 > 29 || m1 > 29) { return LIBLTE_ERROR; } + int N_id_1; if (m1 > m0) { - return q->N_id_1_table[m0][m1 - 1]; + N_id_1 = q->N_id_1_table[m0][m1 - 1]; } else { - return q->N_id_1_table[m1][m0 - 1]; + N_id_1 = q->N_id_1_table[m1][m0 - 1]; } + if (N_id_1 == 0) { + if (m0 == 0 && m1 == 1) { + return N_id_1; + } else { + return LIBLTE_ERROR; + } + } else { + return N_id_1; + } } /** High-level API */ diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 5048c8f4f..61de9203c 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -59,9 +59,11 @@ int sync_init(sync_t *q, uint32_t frame_size, uint32_t fft_size) { bzero(q, sizeof(sync_t)); q->detect_cp = true; + q->cp = CPNORM; q->mean_peak_value = 0.0; q->sss_en = true; q->correct_cfo = true; + q->mean_cfo = 0; q->N_id_2 = 1000; q->N_id_1 = 1000; q->fft_size = fft_size; @@ -120,8 +122,7 @@ int sync_get_cell_id(sync_t *q) { if (lte_N_id_2_isvalid(q->N_id_2) && lte_N_id_1_isvalid(q->N_id_1)) { return q->N_id_1*3 + q->N_id_2; } else { - fprintf(stderr, "Error getting cell_id, invalid N_id_1 or N_id_2\n"); - return LIBLTE_ERROR; + return -1; } } @@ -200,16 +201,18 @@ lte_cp_t sync_detect_cp(sync_t *q, cf_t *input, uint32_t peak_pos) M_norm += R_norm/C_norm; } - q->M_norm_avg = VEC_EMA(M_norm, q->M_norm_avg, CP_EMA_ALPHA); + q->M_norm_avg = VEC_EMA(M_norm/2, q->M_norm_avg, CP_EMA_ALPHA); for (int i=0;i<2;i++) { R_ext = crealf(vec_dot_prod_conj_ccc(&input_cp_ext[q->fft_size], input_cp_ext, cp_ext_len)); C_ext = cp_ext_len * vec_avg_power_cf(input_cp_ext, cp_ext_len); input_cp_ext += q->fft_size+cp_ext_len; - M_ext += R_ext/C_ext; + if (C_ext > 0) { + M_ext += R_ext/C_ext; + } } - q->M_ext_avg = VEC_EMA(M_ext, q->M_ext_avg, CP_EMA_ALPHA); + q->M_ext_avg = VEC_EMA(M_ext/2, q->M_ext_avg, CP_EMA_ALPHA); if (q->M_norm_avg > q->M_ext_avg) { return CPNORM; @@ -227,26 +230,18 @@ lte_cp_t sync_detect_cp(sync_t *q, cf_t *input, uint32_t peak_pos) /* Returns 1 if the SSS is found, 0 if not and -1 if there is not enough space * to correlate */ -int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos) { +int sync_sss(sync_t *q, cf_t *input, uint32_t peak_pos, lte_cp_t cp) { int sss_idx, ret; sss_synch_set_N_id_2(&q->sss, q->N_id_2); - if (q->detect_cp) { - if (peak_pos >= 2*(q->fft_size + CP_EXT(q->fft_size))) { - q->cp = sync_detect_cp(q, input, peak_pos); - } else { - INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); - return LIBLTE_ERROR; - } - } - /* Make sure we have enough room to find SSS sequence */ sss_idx = (int) peak_pos-2*q->fft_size-CP(q->fft_size, (CP_ISNORM(q->cp)?CPNORM_LEN:CPEXT_LEN)); if (sss_idx < 0) { INFO("Not enough room to decode CP SSS (sss_idx=%d, peak_pos=%d)\n", sss_idx, peak_pos); return LIBLTE_ERROR; } + DEBUG("Searching SSS around sss_idx: %d, peak_pos: %d\n", sss_idx, peak_pos); switch(q->sss_alg) { case SSS_DIFF: @@ -325,7 +320,15 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit } else { INFO("No space for CFO computation. Frame starts at \n",peak_pos); } - + + if (q->detect_cp) { + if (peak_pos + find_offset >= 2*(q->fft_size + CP_EXT(q->fft_size))) { + q->cp = sync_detect_cp(q, input, peak_pos + find_offset); + } else { + INFO("Not enough room to detect CP length. Peak position: %d\n", peak_pos); + } + } + // Try to detect SSS if (q->sss_en) { /* Correct CFO with the averaged CFO estimation */ @@ -336,7 +339,7 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit // Set an invalid N_id_1 indicating SSS is yet to be detected q->N_id_1 = 1000; - if (sync_sss(q, input, find_offset + peak_pos) < 0) { + if (sync_sss(q, input, find_offset + peak_pos, q->cp) < 0) { INFO("No space for SSS processing. Frame starts at %d\n", peak_pos); } } @@ -346,8 +349,8 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit ret = 0; } - INFO("SYNC ret=%d N_id_2=%d frame_size=%d pos=%d peak=%.2f threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", - ret, q->N_id_2, q->frame_size, peak_pos, q->peak_value, q->threshold, q->sf_idx, 15*q->mean_cfo); + INFO("SYNC ret=%d N_id_2=%d find_offset=%d pos=%d peak=%.2f threshold=%.2f sf_idx=%d, CFO=%.3f KHz\n", + ret, q->N_id_2, find_offset, peak_pos, q->peak_value, q->threshold, q->sf_idx, 15*q->mean_cfo); } else if (lte_N_id_2_isvalid(q->N_id_2)) { fprintf(stderr, "Must call sync_set_N_id_2() first!\n"); diff --git a/lte/phy/lib/sync/test/pss_usrp.c b/lte/phy/lib/sync/test/pss_usrp.c index ea87d887c..fac32e19e 100644 --- a/lte/phy/lib/sync/test/pss_usrp.c +++ b/lte/phy/lib/sync/test/pss_usrp.c @@ -245,14 +245,17 @@ int main(int argc, char **argv) { if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { sss_error2++; } + INFO("Partial N_id_1: %d\n", sss_synch_N_id_1(&sss, m0, m1)); sss_synch_m0m1_diff(&sss, &buffer[sss_idx], &m0, &m0_value, &m1, &m1_value); if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { sss_error3++; } + INFO("Diff N_id_1: %d\n", sss_synch_N_id_1(&sss, m0, m1)); sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 1, NULL, &m0, &m0_value, &m1, &m1_value); if (sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { sss_error1++; } + INFO("Full N_id_1: %d\n", sss_synch_N_id_1(&sss, m0, m1)); } // Estimate CP diff --git a/lte/phy/lib/sync/test/sync_test.c b/lte/phy/lib/sync/test/sync_test.c index 27ed917f2..d007485d6 100644 --- a/lte/phy/lib/sync/test/sync_test.c +++ b/lte/phy/lib/sync/test/sync_test.c @@ -121,7 +121,8 @@ int main(int argc, char **argv) { } /* Set a very high threshold to make sure the correlation is ok */ - sync_set_threshold(&sync, 1.4); + sync_set_threshold(&sync, 5.0); + sync_set_sss_algorithm(&sync, SSS_PARTIAL_3); if (cell_id == -1) { cid = 0; diff --git a/lte/phy/lib/ue/src/ue_cell_search.c b/lte/phy/lib/ue/src/ue_cell_search.c new file mode 100644 index 000000000..c8b05e217 --- /dev/null +++ b/lte/phy/lib/ue/src/ue_cell_search.c @@ -0,0 +1,275 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include +#include +#include +#include + +#include "liblte/phy/ue/ue_cell_search.h" + +#include "liblte/phy/utils/debug.h" +#include "liblte/phy/utils/vector.h" + +float tmp_pss_corr[32*10000]; +float tmp_sss_corr[31*10000]; + +int ue_cell_search_init(ue_cell_search_t * q, int (recv_callback)(void*, void*, uint32_t), void *stream_handler) +{ + return ue_cell_search_init_max(q, CS_DEFAULT_MAXFRAMES_TOTAL, recv_callback, stream_handler); +} + +int ue_cell_search_init_max(ue_cell_search_t * q, uint32_t max_frames, + int (recv_callback)(void*, void*, uint32_t), void *stream_handler) +{ + int ret = LIBLTE_ERROR_INVALID_INPUTS; + + if (q != NULL) { + ret = LIBLTE_ERROR; + lte_cell_t cell; + + bzero(q, sizeof(ue_cell_search_t)); + + bzero(&cell, sizeof(lte_cell_t)); + cell.id = CELL_ID_UNKNOWN; + cell.nof_prb = CS_NOF_PRB; + + if (ue_sync_init(&q->ue_sync, cell, recv_callback, stream_handler)) { + fprintf(stderr, "Error initiating ue_sync\n"); + goto clean_exit; + } + + q->candidates = calloc(sizeof(ue_cell_search_result_t), max_frames); + if (!q->candidates) { + perror("malloc"); + goto clean_exit; + } + q->mode_ntimes = calloc(sizeof(uint32_t), max_frames); + if (!q->mode_ntimes) { + perror("malloc"); + goto clean_exit; + } + q->mode_counted = calloc(sizeof(uint8_t), max_frames); + if (!q->mode_counted) { + perror("malloc"); + goto clean_exit; + } + + q->max_frames = max_frames; + q->nof_frames_to_scan = CS_DEFAULT_NOFFRAMES_TOTAL; + + ret = LIBLTE_SUCCESS; + } + +clean_exit: + if (ret == LIBLTE_ERROR) { + ue_cell_search_free(q); + } + return ret; +} + +void ue_cell_search_free(ue_cell_search_t * q) +{ + if (q->candidates) { + free(q->candidates); + } + if (q->mode_counted) { + free(q->mode_counted); + } + if (q->mode_ntimes) { + free(q->mode_ntimes); + } + ue_sync_free(&q->ue_sync); + + bzero(q, sizeof(ue_cell_search_t)); + +} + +void ue_cell_search_set_threshold(ue_cell_search_t * q, float threshold) +{ + q->detect_threshold = threshold; +} + +int ue_cell_search_set_nof_frames_to_scan(ue_cell_search_t * q, uint32_t nof_frames) +{ + if (nof_frames <= q->max_frames) { + q->nof_frames_to_scan = nof_frames; + return LIBLTE_SUCCESS; + } else { + return LIBLTE_ERROR; + } +} + +/* Decide the most likely cell based on the mode */ +static void get_cell(ue_cell_search_t * q, uint32_t nof_detected_frames, ue_cell_search_result_t *found_cell) +{ + uint32_t i, j; + + bzero(q->mode_counted, nof_detected_frames); + bzero(q->mode_ntimes, sizeof(uint32_t) * nof_detected_frames); + + /* First find mode of CELL IDs */ + for (i = 0; i < nof_detected_frames; i++) { + uint32_t cnt = 1; + for (j=i+1;jcandidates[j].cell_id == q->candidates[i].cell_id && !q->mode_counted[j]) { + q->mode_counted[j]=1; + cnt++; + } + } + q->mode_ntimes[i] = cnt; + } + uint32_t max_times=0, mode_pos=0; + for (i=0;imode_ntimes[i] > max_times) { + max_times = q->mode_ntimes[i]; + mode_pos = i; + } + } + found_cell->cell_id = q->candidates[mode_pos].cell_id; + /* Now in all these cell IDs, find most frequent CP */ + uint32_t nof_normal = 0; + for (i=0;icandidates[i].cell_id == found_cell->cell_id) { + if (CP_ISNORM(q->candidates[i].cp)) { + nof_normal++; + } + } + } + if (nof_normal > q->mode_ntimes[mode_pos]/2) { + found_cell->cp = CPNORM; + } else { + found_cell->cp = CPEXT; + } + found_cell->mode = (float) q->mode_ntimes[mode_pos]/nof_detected_frames; + found_cell->peak = q->candidates[nof_detected_frames-1].peak; +} + +/** Finds up to 3 cells, one per each N_id_2=0,1,2 and stores ID and CP in the structure pointed by found_cell. + * Each position in found_cell corresponds to a different N_id_2. + * Saves in the pointer max_N_id_2 the N_id_2 index of the cell with the highest PSR + * Returns the number of found cells or a negative number if error + */ +int ue_cell_search_scan(ue_cell_search_t * q, ue_cell_search_result_t found_cells[3], uint32_t *max_N_id_2) +{ + int ret = 0; + float max_peak_value = -1.0; + uint32_t nof_detected_cells = 0; + for (uint32_t N_id_2=0;N_id_2<3 && ret >= 0;N_id_2++) { + ret = ue_cell_search_scan_N_id_2(q, N_id_2, &found_cells[N_id_2]); + if (ret < 0) { + fprintf(stderr, "Error searching cell\n"); + return ret; + } + nof_detected_cells += ret; + if (max_N_id_2) { + if (found_cells[N_id_2].peak > max_peak_value) { + max_peak_value = found_cells[N_id_2].peak; + *max_N_id_2 = N_id_2; + } + } + } + return nof_detected_cells; +} + +/** Finds a cell for a given N_id_2 and stores ID and CP in the structure pointed by found_cell. + * Returns 1 if the cell is found, 0 if not or -1 on error + */ +int ue_cell_search_scan_N_id_2(ue_cell_search_t * q, uint32_t N_id_2, ue_cell_search_result_t *found_cell) +{ + int ret = LIBLTE_ERROR_INVALID_INPUTS; + cf_t *sf_buffer = NULL; + uint32_t nof_detected_frames = 0; + uint32_t nof_scanned_frames = 0; + + if (q != NULL) + { + ret = LIBLTE_SUCCESS; + + ue_sync_set_N_id_2(&q->ue_sync, N_id_2); + + do { + + ret = ue_sync_get_buffer(&q->ue_sync, &sf_buffer); + if (ret < 0) { + fprintf(stderr, "Error calling ue_sync_work()\n"); + break; + } else if (ret == 1) { + /* This means a peak was found and ue_sync is now in tracking state */ + ret = sync_get_cell_id(&q->ue_sync.strack); + if (ret >= 0) { + /* Save cell id, cp and peak */ + q->candidates[nof_detected_frames].cell_id = (uint32_t) ret; + q->candidates[nof_detected_frames].cp = sync_get_cp(&q->ue_sync.strack); + q->candidates[nof_detected_frames].peak = sync_get_peak_value(&q->ue_sync.strack); + INFO + ("CELL SEARCH: [%3d/%3d/%d]: Found peak PSR=%.3f, Cell_id: %d CP: %s\n", + nof_detected_frames, nof_scanned_frames, q->nof_frames_to_scan, + q->candidates[nof_detected_frames].peak, q->candidates[nof_detected_frames].cell_id, + lte_cp_string(q->candidates[nof_detected_frames].cp)); + memcpy(&tmp_pss_corr[nof_detected_frames*32], + &q->ue_sync.strack.pss.conv_output_avg[128], 32*sizeof(float)); + memcpy(&tmp_sss_corr[nof_detected_frames*31], + &q->ue_sync.strack.sss.corr_output_m0, 31*sizeof(float)); + nof_detected_frames++; + } + } else if (ret == 0) { + /* This means a peak is not yet found and ue_sync is in find state + * Do nothing, just wait and increase nof_scanned_frames counter. + */ + } + + nof_scanned_frames++; + + } while ((sync_get_peak_value(&q->ue_sync.strack) < q->detect_threshold || + nof_detected_frames < 4) && + nof_scanned_frames < q->nof_frames_to_scan); + + /* + vec_save_file("sss_corr",tmp_sss_corr, nof_detected_frames*sizeof(float)*31); + vec_save_file("track_corr",tmp_pss_corr, nof_detected_frames*sizeof(float)*32); + vec_save_file("find_corr",q->ue_sync.sfind.pss.conv_output_avg, + sizeof(float)*(9600+127)); + */ + + /* In either case, check if the mean PSR is above the minimum threshold */ + if (nof_detected_frames > 0) { + ret = 1; // A cell has been found. + if (found_cell) { + get_cell(q, nof_detected_frames, found_cell); + printf("Found CELL PHYID: %d, CP: %s, PSR: %.1f, Reliability: %.0f \%\n", + found_cell->cell_id, lte_cp_string(found_cell->cp), + found_cell->peak, 100*found_cell->mode); + } + } else { + ret = 0; // A cell was not found. + } + } + + return ret; +} diff --git a/lte/phy/lib/ue/src/ue_celldetect.c b/lte/phy/lib/ue/src/ue_celldetect.c deleted file mode 100644 index 62ae106e7..000000000 --- a/lte/phy/lib/ue/src/ue_celldetect.c +++ /dev/null @@ -1,260 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include - -#include "liblte/phy/ue/ue_celldetect.h" - -#include "liblte/phy/utils/debug.h" -#include "liblte/phy/utils/vector.h" - -#define CS_CELL_DETECT_THRESHOLD 1.2 - -#define CS_SFLEN 5*SF_LEN(CS_FFTSIZE) - -int ue_celldetect_init(ue_celldetect_t * q) { - return ue_celldetect_init_max(q, CS_DEFAULT_MAXFRAMES_TOTAL); -} - -int ue_celldetect_init_max(ue_celldetect_t * q, uint32_t max_frames_total) { - int ret = LIBLTE_ERROR_INVALID_INPUTS; - - if (q != NULL) { - ret = LIBLTE_ERROR; - - bzero(q, sizeof(ue_celldetect_t)); - - q->candidates = calloc(sizeof(ue_celldetect_result_t), max_frames_total); - if (!q->candidates) { - perror("malloc"); - goto clean_exit; - } - if (sync_init(&q->sfind, CS_SFLEN, CS_FFTSIZE)) { - goto clean_exit; - } - q->mode_ntimes = calloc(sizeof(uint32_t), max_frames_total); - if (!q->mode_ntimes) { - perror("malloc"); - goto clean_exit; - } - q->mode_counted = calloc(sizeof(uint8_t), max_frames_total); - if (!q->mode_counted) { - perror("malloc"); - goto clean_exit; - } - - /* Accept all peaks because search space is 5 ms and there is always a peak */ - sync_set_threshold(&q->sfind, 1.0); - sync_sss_en(&q->sfind, true); - sync_set_sss_algorithm(&q->sfind, SSS_PARTIAL_3); - sync_set_em_alpha(&q->sfind, 0.01); - - q->max_frames_total = max_frames_total; - q->nof_frames_total = CS_DEFAULT_NOFFRAMES_TOTAL; - - ue_celldetect_reset(q); - - ret = LIBLTE_SUCCESS; - } - -clean_exit: - if (ret == LIBLTE_ERROR) { - ue_celldetect_free(q); - } - return ret; -} - -void ue_celldetect_free(ue_celldetect_t * q) -{ - if (q->candidates) { - free(q->candidates); - } - if (q->mode_counted) { - free(q->mode_counted); - } - if (q->mode_ntimes) { - free(q->mode_ntimes); - } - sync_free(&q->sfind); - - bzero(q, sizeof(ue_celldetect_t)); - -} - -void ue_celldetect_reset(ue_celldetect_t * q) -{ - q->current_nof_detected = 0; - q->current_nof_total = 0; -} - -void ue_celldetect_set_threshold(ue_celldetect_t * q, float threshold) -{ - q->detect_threshold = threshold; -} - -int ue_celldetect_set_nof_frames_total(ue_celldetect_t * q, uint32_t nof_frames) -{ - if (nof_frames <= q->max_frames_total) { - q->nof_frames_total = nof_frames; - return LIBLTE_SUCCESS; - } else { - return LIBLTE_ERROR; - } -} - -/* Decide the most likely cell based on the mode */ -void ue_celldetect_get_cell(ue_celldetect_t * q, ue_celldetect_result_t *found_cell) -{ - uint32_t i, j; - - if (!q->current_nof_detected) { - return; - } - - bzero(q->mode_counted, q->current_nof_detected); - bzero(q->mode_ntimes, sizeof(uint32_t) * q->current_nof_detected); - - /* First find mode of CELL IDs */ - for (i = 0; i < q->current_nof_detected; i++) { - uint32_t cnt = 1; - for (j=i+1;jcurrent_nof_detected;j++) { - if (q->candidates[j].cell_id == q->candidates[i].cell_id && !q->mode_counted[j]) { - q->mode_counted[j]=1; - cnt++; - } - } - q->mode_ntimes[i] = cnt; - } - uint32_t max_times=0, mode_pos=0; - for (i=0;icurrent_nof_detected;i++) { - if (q->mode_ntimes[i] > max_times) { - max_times = q->mode_ntimes[i]; - mode_pos = i; - } - } - found_cell->cell_id = q->candidates[mode_pos].cell_id; - /* Now in all these cell IDs, find most frequent CP */ - uint32_t nof_normal = 0; - for (i=0;icurrent_nof_detected;i++) { - if (q->candidates[i].cell_id == found_cell->cell_id) { - if (CP_ISNORM(q->candidates[i].cp)) { - nof_normal++; - } - } - } - if (nof_normal > q->mode_ntimes[mode_pos]/2) { - found_cell->cp = CPNORM; - } else { - found_cell->cp = CPEXT; - } - found_cell->mode = (float) q->mode_ntimes[mode_pos]/q->current_nof_detected; - found_cell->peak = q->candidates[q->current_nof_detected-1].peak; - q->current_nof_detected = q->current_nof_total = 0; -} - -int ue_celldetect_set_N_id_2(ue_celldetect_t *q, uint32_t N_id_2) { - return sync_set_N_id_2(&q->sfind, N_id_2); -} - -int ue_celldetect_scan(ue_celldetect_t * q, - cf_t *signal, - uint32_t nsamples) -{ - int ret = LIBLTE_ERROR_INVALID_INPUTS; - uint32_t peak_idx; - uint32_t nof_input_frames; - - - if (q != NULL && - signal != NULL && - nsamples >= CS_FLEN) - { - ret = LIBLTE_SUCCESS; - - if (nsamples % CS_FLEN) { - printf("Warning: nsamples must be a multiple of %d. Some samples will be ignored\n", CS_FLEN); - nsamples = (nsamples/CS_FLEN) * CS_FLEN; - } - nof_input_frames = nsamples/CS_FLEN; - - for (uint32_t nf=0;nfcurrent_nof_detected, q->current_nof_total, q->sfind.N_id_2, nof_input_frames); - - /* Find peak and cell id */ - ret = sync_find(&q->sfind, &signal[nf*CS_FLEN], 0, &peak_idx); - if (ret < 0) { - fprintf(stderr, "Error finding correlation peak (%d)\n", ret); - return LIBLTE_ERROR; - } - - /* Process the peak result */ - if (ret == 1) { - if (sync_sss_detected(&q->sfind)) { - ret = sync_get_cell_id(&q->sfind); - if (ret >= 0) { - /* Save cell id, cp and peak */ - q->candidates[q->current_nof_detected].cell_id = (uint32_t) ret; - q->candidates[q->current_nof_detected].cp = sync_get_cp(&q->sfind); - q->candidates[q->current_nof_detected].peak = sync_get_peak_value(&q->sfind); - } - INFO - ("[%3d/%3d]: Found peak at %4d, value %.3f, Cell_id: %d CP: %s\n", - q->current_nof_detected, q->current_nof_total, peak_idx, - q->candidates[q->current_nof_detected].peak, q->candidates[q->current_nof_detected].cell_id, - lte_cp_string(q->candidates[q->current_nof_detected].cp)); - q->current_nof_detected++; - } else { - /* If peak position does not allow to read SSS, return error -3 */ - return CS_FRAME_UNALIGNED; - } - } - q->current_nof_total++; - - /* Decide cell ID and CP if we detected up to nof_frames_detected */ - if (sync_get_peak_value(&q->sfind) > q->detect_threshold) { - ret = CS_CELL_DETECTED; - } else if (q->current_nof_total == q->nof_frames_total) { - if (sync_get_peak_value(&q->sfind) > CS_CELL_DETECT_THRESHOLD) { - ret = CS_CELL_DETECTED; - } else { - ret = CS_CELL_NOT_DETECTED; - q->current_nof_detected = q->current_nof_total = 0; - } - } else { - ret = 0; - } - } - } - - return ret; -} diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 78a1228e5..b88fc20c9 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -36,21 +36,8 @@ #include "liblte/phy/utils/debug.h" #include "liblte/phy/utils/vector.h" -int ue_mib_init_1_92(ue_mib_t * q, - uint32_t cell_id, - lte_cp_t cp) -{ - lte_cell_t cell; - cell.nof_ports = MIB_MAX_PORTS; - cell.nof_prb = 6; - cell.id = cell_id; - cell.cp = cp; - return ue_mib_init(q, cell, true); -} - - int ue_mib_init(ue_mib_t * q, - lte_cell_t cell, - bool do_sync) +int ue_mib_init(ue_mib_t * q, + lte_cell_t cell) { int ret = LIBLTE_ERROR_INVALID_INPUTS; @@ -58,8 +45,7 @@ int ue_mib_init_1_92(ue_mib_t * q, cell.nof_ports <= MIB_MAX_PORTS) { - ret = LIBLTE_ERROR; - + ret = LIBLTE_ERROR; bzero(q, sizeof(ue_mib_t)); q->sf_symbols = vec_malloc(SF_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); @@ -76,23 +62,6 @@ int ue_mib_init_1_92(ue_mib_t * q, } } - if (do_sync) { - if (sync_init(&q->sfind, 5*SF_LEN_PRB(cell.nof_prb), lte_symbol_sz(cell.nof_prb))) { - goto clean_exit; - } - - sync_set_threshold(&q->sfind, 1.0); // Because we are capturing 5 ms frames and there is always peak - sync_sss_en(&q->sfind, true); - sync_set_N_id_2(&q->sfind, cell.id % 3); - sync_cp_en(&q->sfind, false); - sync_set_cp(&q->sfind, cell.cp); - } - - if (cfo_init(&q->cfocorr, 5*SF_LEN_PRB(cell.nof_prb))) { - fprintf(stderr, "Error initiating CFO\n"); - goto clean_exit; - } - if (lte_fft_init(&q->fft, cell.cp, cell.nof_prb)) { fprintf(stderr, "Error initializing FFT\n"); goto clean_exit; @@ -127,7 +96,6 @@ void ue_mib_free(ue_mib_t * q) free(q->ce[i]); } } - cfo_free(&q->cfocorr); sync_free(&q->sfind); chest_dl_free(&q->chest); pbch_free(&q->pbch); @@ -140,19 +108,12 @@ void ue_mib_free(ue_mib_t * q) void ue_mib_reset(ue_mib_t * q) { - q->frame_cnt = 0; - q->last_frame_trial = 0; - + q->frame_cnt = 0; pbch_decode_reset(&q->pbch); } -void ue_mib_set_threshold(ue_mib_t * q, float threshold) -{ - sync_set_threshold(&q->sfind, threshold); -} - -int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, - uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) +int ue_mib_decode(ue_mib_t * q, cf_t *input, + uint8_t bch_payload[BCH_PAYLOAD_LEN], uint32_t *nof_tx_ports, uint32_t *sfn_offset) { int ret = LIBLTE_SUCCESS; cf_t *ce_slot1[MAX_PORTS]; @@ -166,11 +127,8 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, return LIBLTE_ERROR; } /* Reset decoder if we missed a frame */ - if ((q->last_frame_trial && (abs(q->frame_cnt - q->last_frame_trial) > 2)) || - q->frame_cnt > 16) - { - INFO("Resetting PBCH decoder: last trial %u, now is %u\n", - q->last_frame_trial, q->frame_cnt); + if (q->frame_cnt > 16) { + INFO("Resetting PBCH decoder after %d frames\n", q->frame_cnt); ue_mib_reset(q); } @@ -185,102 +143,90 @@ int ue_mib_decode_aligned_frame(ue_mib_t * q, cf_t *input, if (ret < 0) { fprintf(stderr, "Error decoding PBCH (%d)\n", ret); } else if (ret == 1) { - INFO("MIB decoded: %u\n", q->frame_cnt/2); + INFO("MIB decoded: %u\n", q->frame_cnt); ue_mib_reset(q); ret = MIB_FOUND; } else { - INFO("MIB not decoded: %u\n", q->frame_cnt / 2); - q->last_frame_trial = q->frame_cnt; - ret = LIBLTE_SUCCESS; + INFO("MIB not decoded: %u\n", q->frame_cnt); + q->frame_cnt++; + ret = MIB_NOTFOUND; } return ret; } -void ue_mib_get_payload(ue_mib_t *q, - uint8_t bch_payload[BCH_PAYLOAD_LEN], - uint32_t *nof_tx_ports, - uint32_t *sfn_offset) + + +int ue_mib_sync_init(ue_mib_sync_t *q, + uint32_t cell_id, + lte_cp_t cp, + int (recv_callback)(void*, void*, uint32_t), + void *stream_handler) { - memcpy(bch_payload, q->bch_payload, sizeof(uint8_t) * BCH_PAYLOAD_LEN); - if (nof_tx_ports) { - *nof_tx_ports = q->nof_tx_ports; + lte_cell_t cell; + cell.nof_ports = MIB_MAX_PORTS; + cell.id = cell_id; + cell.cp = cp; + cell.nof_prb = MIB_NOF_PRB; + + if (ue_mib_init(&q->ue_mib, cell)) { + fprintf(stderr, "Error initiating ue_mib\n"); + return LIBLTE_ERROR; } - if (sfn_offset) { - *sfn_offset = q->sfn_offset; + if (ue_sync_init(&q->ue_sync, cell, recv_callback, stream_handler)) { + fprintf(stderr, "Error initiating ue_sync\n"); + ue_mib_free(&q->ue_mib); + return LIBLTE_ERROR; } + ue_sync_decode_sss_on_track(&q->ue_sync, true); + return LIBLTE_SUCCESS; } -int ue_mib_sync_and_decode_1_92(ue_mib_t * q, - cf_t *signal, - uint32_t nsamples) +void ue_mib_sync_free(ue_mib_sync_t *q) { + ue_mib_free(&q->ue_mib); + ue_sync_free(&q->ue_sync); +} + +void ue_mib_sync_reset(ue_mib_sync_t * q) { + ue_mib_reset(&q->ue_mib); + ue_sync_reset(&q->ue_sync); +} + +int ue_mib_sync_decode(ue_mib_sync_t * q, + uint32_t max_frames_timeout, + uint8_t bch_payload[BCH_PAYLOAD_LEN], + uint32_t *nof_tx_ports, + uint32_t *sfn_offset) { + int ret = LIBLTE_ERROR_INVALID_INPUTS; - uint32_t peak_idx=0; - uint32_t nof_input_frames; + cf_t *sf_buffer = NULL; + uint32_t nof_frames = 0; + int mib_ret; - - if (q != NULL && - signal != NULL) + if (q != NULL) { - if (nsamples < MIB_FRAME_SIZE_SEARCH) { - fprintf(stderr, "Error: nsamples must be greater than %d\n", MIB_FRAME_SIZE_SEARCH); - return LIBLTE_ERROR; - } - - ret = LIBLTE_SUCCESS; - - if (nsamples % MIB_FRAME_SIZE_SEARCH) { - printf("Warning: nsamples must be a multiple of %d. Some samples will be ignored\n", MIB_FRAME_SIZE_SEARCH); - nsamples = (nsamples/MIB_FRAME_SIZE_SEARCH) * MIB_FRAME_SIZE_SEARCH; - } - nof_input_frames = nsamples/MIB_FRAME_SIZE_SEARCH; - - for (int nf=0;nfsfind, signal, nf*MIB_FRAME_SIZE_SEARCH, &peak_idx); + ret = LIBLTE_SUCCESS; + do { + mib_ret = MIB_NOTFOUND; + ret = ue_sync_get_buffer(&q->ue_sync, &sf_buffer); if (ret < 0) { - fprintf(stderr, "Error finding correlation peak (%d)\n", ret); - return -1; - } - - /* Check if we have space for reading the MIB and we are in Subframe #0 */ - if (ret == 1) - { - if (sync_sss_detected(&q->sfind)) - { - if (sync_get_sf_idx(&q->sfind) == 0) - { - if (nf*MIB_FRAME_SIZE_SEARCH + peak_idx + MIB_FRAME_SIZE_SEARCH/10 <= nsamples && - nf*MIB_FRAME_SIZE_SEARCH + peak_idx > MIB_FRAME_SIZE_SEARCH/10) - { - // PSS and SSS detected and we have space to decode the PBCH. - INFO("Trying to decode PBCH\n",0); - ret = ue_mib_decode_aligned_frame(q, - &signal[nf*MIB_FRAME_SIZE_SEARCH+peak_idx-MIB_FRAME_SIZE_SEARCH/10], - q->bch_payload, &q->nof_tx_ports, &q->sfn_offset); - } else { - printf("Not enough space for PBCH: PSS signal is at offset %d\n",peak_idx); - ret = MIB_FRAME_UNALIGNED; - } - } else { - // Wait for subframe 0 - ret = 0; - } + fprintf(stderr, "Error calling ue_sync_work()\n"); + break; + } else if (ue_sync_get_sfidx(&q->ue_sync) == 0) { + if (ret == 1) { + mib_ret = ue_mib_decode(&q->ue_mib, sf_buffer, bch_payload, nof_tx_ports, sfn_offset); } else { - INFO("SSS not detected\n",0); - ret = 0; // wait to detect it + INFO("Resetting PBCH decoder after %d frames\n", q->ue_mib.frame_cnt); + ue_mib_reset(&q->ue_mib); } - } else { - INFO("PSS not detected\n",0); - ret = 0; // wait to detect it? + nof_frames++; } - q->frame_cnt++; - } + } while (mib_ret == MIB_NOTFOUND && ret >= 0 && nof_frames < max_frames_timeout); + if (mib_ret < 0) { + ret = mib_ret; + } } - return ret; + return mib_ret; } - - diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 3eb62a419..356ba20a1 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -40,17 +40,9 @@ #define MAX_TIME_OFFSET 128 cf_t dummy[MAX_TIME_OFFSET]; -#define CURRENT_FFTSIZE lte_symbol_sz(q->cell.nof_prb) -#define CURRENT_SFLEN SF_LEN(CURRENT_FFTSIZE) - -#define CURRENT_SLOTLEN_RE SLOT_LEN_RE(q->cell.nof_prb, q->cell.cp) -#define CURRENT_SFLEN_RE SF_LEN_RE(q->cell.nof_prb, q->cell.cp) - -#define FIND_THRESHOLD 4.0 -#define TRACK_THRESHOLD 2.0 #define TRACK_MAX_LOST 10 #define TRACK_FRAME_SIZE 32 - +#define FIND_NOF_AVG_FRAMES 4 int ue_sync_init(ue_sync_t *q, lte_cell_t cell, @@ -59,43 +51,85 @@ int ue_sync_init(ue_sync_t *q, { int ret = LIBLTE_ERROR_INVALID_INPUTS; - if (q != NULL && - stream_handler != NULL && - lte_cell_isvalid(&cell) && - recv_callback != NULL) + if (q != NULL && + stream_handler != NULL && + lte_nofprb_isvalid(cell.nof_prb) && + recv_callback != NULL) { ret = LIBLTE_ERROR; bzero(q, sizeof(ue_sync_t)); - q->decode_sss_on_track = false; q->stream = stream_handler; q->recv_callback = recv_callback; q->cell = cell; - - if(sync_init(&q->sfind, CURRENT_SFLEN, CURRENT_FFTSIZE)) { + q->fft_size = lte_symbol_sz(q->cell.nof_prb); + q->sf_len = SF_LEN(q->fft_size); + + if (cell.id == 1000) { + /* If the cell is unkown, decode SSS on track state */ + q->decode_sss_on_track = true; + + /* If the cell is unkown, we search PSS/SSS in 5 ms */ + q->nof_recv_sf = 5; + } else { + q->decode_sss_on_track = false; + + /* If the cell is known, we work on a 1ms basis */ + q->nof_recv_sf = 1; + } + + q->frame_len = q->nof_recv_sf*q->sf_len; + + if(sync_init(&q->sfind, q->frame_len, q->fft_size)) { fprintf(stderr, "Error initiating sync find\n"); goto clean_exit; } - if(sync_init(&q->strack, TRACK_FRAME_SIZE, CURRENT_FFTSIZE)) { + if(sync_init(&q->strack, TRACK_FRAME_SIZE, q->fft_size)) { fprintf(stderr, "Error initiating sync track\n"); goto clean_exit; } - sync_set_N_id_2(&q->sfind, cell.id%3); - sync_set_threshold(&q->sfind, FIND_THRESHOLD); - q->sfind.cp = cell.cp; - sync_cp_en(&q->sfind, false); - sync_correct_cfo(&q->sfind, true); - sync_set_em_alpha(&q->sfind, 1); + if (cell.id == 1000) { + /* If the cell id is unknown, enable CP detection on find */ + sync_cp_en(&q->sfind, true); + sync_cp_en(&q->strack, true); + + /* Correct CFO in all cases because both states are called always. + */ + sync_correct_cfo(&q->sfind, true); + sync_correct_cfo(&q->strack, true); + + sync_set_threshold(&q->sfind, 1.1); + sync_set_em_alpha(&q->sfind, 0.01); + q->nof_avg_find_frames = FIND_NOF_AVG_FRAMES; + sync_set_threshold(&q->strack, 2.0); + + } else { + sync_set_N_id_2(&q->sfind, cell.id%3); + sync_set_N_id_2(&q->strack, cell.id%3); + q->sfind.cp = cell.cp; + q->strack.cp = cell.cp; + sync_cp_en(&q->sfind, false); + sync_cp_en(&q->strack, false); - sync_set_N_id_2(&q->strack, cell.id%3); - sync_set_threshold(&q->strack, TRACK_THRESHOLD); - q->strack.cp = cell.cp; - sync_cp_en(&q->strack, false); - sync_correct_cfo(&q->strack, false); - - q->input_buffer = vec_malloc(5 * CURRENT_SFLEN * sizeof(cf_t)); + /* In find phase and if the cell is known, do not average pss correlation + * because we only capture 1 subframe and do not know where the peak is. + */ + sync_set_em_alpha(&q->sfind, 1); + q->nof_avg_find_frames = 1; + sync_set_threshold(&q->sfind, 2.0); + sync_set_threshold(&q->strack, 6.0); + + /* Correct CFO in the find state but not in the track state, since is called only + * 1 every 5 subframes. Will do it in the ue_sync_get_buffer() function. + */ + sync_correct_cfo(&q->sfind, true); + sync_correct_cfo(&q->strack, false); + + } + + q->input_buffer = vec_malloc(2*q->frame_len * sizeof(cf_t)); if (!q->input_buffer) { perror("malloc"); goto clean_exit; @@ -114,7 +148,7 @@ clean_exit: } uint32_t ue_sync_sf_len(ue_sync_t *q) { - return CURRENT_SFLEN; + return q->frame_len; } void ue_sync_free(ue_sync_t *q) { @@ -150,33 +184,45 @@ void ue_sync_decode_sss_on_track(ue_sync_t *q, bool enabled) { q->decode_sss_on_track = enabled; } +void ue_sync_set_N_id_2(ue_sync_t *q, uint32_t N_id_2) { + ue_sync_reset(q); + sync_set_N_id_2(&q->strack, N_id_2); + sync_set_N_id_2(&q->sfind, N_id_2); +} static int find_peak_ok(ue_sync_t *q) { - /* Receive the rest of the next subframe */ - if (q->recv_callback(q->stream, q->input_buffer, q->peak_idx+CURRENT_SFLEN/2) < 0) { - return LIBLTE_ERROR; + + if (sync_sss_detected(&q->sfind)) { + /* Get the subframe index (0 or 5) */ + q->sf_idx = sync_get_sf_idx(&q->sfind) + q->nof_recv_sf; + } else { + INFO("Found peak at %d, SSS not detected\n", q->peak_idx); } - if (sync_sss_detected(&q->sfind)) { + q->frame_find_cnt++; + INFO("Found peak %d at %d, value %.3f, Cell_id: %d CP: %s\n", + q->frame_find_cnt, q->peak_idx, + sync_get_last_peak_value(&q->sfind), q->cell.id, lte_cp_string(q->cell.cp)); + + if (q->frame_find_cnt >= q->nof_avg_find_frames || q->peak_idx < 2*q->fft_size) { + INFO("Realigning frame, reading %d samples\n", q->peak_idx+q->sf_len/2); + /* Receive the rest of the subframe so that we are subframe aligned*/ + if (q->recv_callback(q->stream, q->input_buffer, q->peak_idx+q->sf_len/2) < 0) { + return LIBLTE_ERROR; + } - /* Get the subframe index (0 or 5) */ - q->sf_idx = sync_get_sf_idx(&q->sfind) + 1; - /* Reset variables */ q->frame_ok_cnt = 0; q->frame_no_cnt = 0; q->frame_total_cnt = 0; + q->frame_find_cnt = 0; /* Goto Tracking state */ - q->state = SF_TRACK; - - INFO("Found peak at %d, value %.3f, SF_idx: %d, Cell_id: %d CP: %s\n", - q->peak_idx, sync_get_last_peak_value(&q->sfind), q->sf_idx, q->cell.id, lte_cp_string(q->cell.cp)); - - } else { - INFO("Found peak at %d, SSS not detected\n", q->peak_idx); + q->state = SF_TRACK; } + + return 0; } @@ -191,7 +237,12 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { q->sf_idx = sync_get_sf_idx(&q->strack); } } else { - q->time_offset = ((int) track_idx - (int) q->strack.frame_size/2); + // Adjust time offset + q->time_offset = ((int) track_idx - (int) q->strack.frame_size/2 - (int) q->strack.fft_size); + + if (q->time_offset) { + INFO("Time offset adjustment: %d samples\n", q->time_offset); + } /* If the PSS peak is beyond the frame (we sample too slowly), discard the offseted samples to align next frame */ @@ -205,7 +256,7 @@ int track_peak_ok(ue_sync_t *q, uint32_t track_idx) { /* compute cumulative moving average time offset */ q->mean_time_offset = (float) VEC_CMA((float) q->time_offset, q->mean_time_offset, q->frame_total_cnt); - q->peak_idx = CURRENT_SFLEN/2 + q->time_offset; + q->peak_idx = q->sf_len/2 + q->time_offset; q->frame_ok_cnt++; q->frame_no_cnt = 0; } @@ -218,7 +269,7 @@ int track_peak_no(ue_sync_t *q) { /* if we missed too many PSS go back to FIND */ q->frame_no_cnt++; if (q->frame_no_cnt >= TRACK_MAX_LOST) { - printf("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); + INFO("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); q->state = SF_FIND; } else { INFO("Tracking peak not found. Peak %.3f, %d lost\n", @@ -237,11 +288,8 @@ static int receive_samples(ue_sync_t *q) { q->time_offset = -q->time_offset; } - /* copy last part of the last subframe (use move since there could be overlapping) */ - //memcpy(q->input_buffer, &q->input_buffer[CURRENT_SFLEN-q->time_offset], q->time_offset*sizeof(cf_t)); - - /* Get 1 subframe from the USRP getting more samples and keeping the previous samples, if any */ - if (q->recv_callback(q->stream, &q->input_buffer[q->time_offset], CURRENT_SFLEN - q->time_offset) < 0) { + /* Get N subframes from the USRP getting more samples and keeping the previous samples, if any */ + if (q->recv_callback(q->stream, &q->input_buffer[q->time_offset], q->frame_len - q->time_offset) < 0) { return LIBLTE_ERROR; } @@ -251,6 +299,8 @@ static int receive_samples(ue_sync_t *q) { return LIBLTE_SUCCESS; } +bool first_track = true; + int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { int ret = LIBLTE_ERROR_INVALID_INPUTS; uint32_t track_idx; @@ -275,25 +325,14 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { if (ret == 1) { ret = find_peak_ok(q); - } else if (q->peak_idx != 0) { - uint32_t rlen; - if (q->peak_idx < CURRENT_SFLEN/2) { - rlen = CURRENT_SFLEN/2-q->peak_idx; - } else { - rlen = q->peak_idx; - } - if (q->recv_callback(q->stream, q->input_buffer, rlen) < 0) { - fprintf(stderr, "Error calling recv callback function\n"); - return LIBLTE_ERROR; - } - } + } break; case SF_TRACK: ret = 1; sync_sss_en(&q->strack, q->decode_sss_on_track); - q->sf_idx = (q->sf_idx + 1) % 10; + q->sf_idx = (q->sf_idx + q->nof_recv_sf) % 10; /* Every SF idx 0 and 5, find peak around known position q->peak_idx */ if (q->sf_idx == 0 || q->sf_idx == 5) { @@ -305,8 +344,10 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { track_idx = 0; - /* track pss around the middle of the subframe, where the PSS is */ - ret = sync_find(&q->strack, q->input_buffer, CURRENT_SFLEN/2-CURRENT_FFTSIZE-q->strack.frame_size/2, &track_idx); + /* track PSS/SSS around the expected PSS position */ + ret = sync_find(&q->strack, q->input_buffer, + q->frame_len - q->sf_len/2 - q->fft_size - q->strack.frame_size/2, + &track_idx); if (ret < 0) { fprintf(stderr, "Error tracking correlation peak\n"); return LIBLTE_ERROR; @@ -329,11 +370,13 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { return LIBLTE_SUCCESS; } - q->frame_total_cnt++; + q->frame_total_cnt++; } - /* Do CFO Correction and deliver the frame */ - cfo_correct(&q->sfind.cfocorr, q->input_buffer, q->input_buffer, -sync_get_cfo(&q->strack) / CURRENT_FFTSIZE); + /* Do CFO Correction if not done in track and deliver the frame */ + if (!q->strack.correct_cfo) { + cfo_correct(&q->sfind.cfocorr, q->input_buffer, q->input_buffer, -sync_get_cfo(&q->strack) / q->fft_size); + } *sf_symbols = q->input_buffer; break; @@ -350,6 +393,7 @@ void ue_sync_reset(ue_sync_t *q) { q->frame_total_cnt = 0; q->mean_time_offset = 0.0; q->time_offset = 0; + q->frame_find_cnt = 0; #ifdef MEASURE_EXEC_TIME q->mean_exec_time = 0; #endif From 856a899ff00a4474d6af17f72f57129686ac6024 Mon Sep 17 00:00:00 2001 From: ismagom Date: Fri, 12 Dec 2014 01:03:32 +0000 Subject: [PATCH 43/55] Added cell_scanner API and test example --- lte/examples/CMakeLists.txt | 2 + lte/examples/cell_measurement.c | 29 +- lte/examples/cell_scanner/CMakeLists.txt | 28 ++ lte/examples/cell_scanner/cell_scanner.c | 282 ++++++++++++++++++ lte/examples/cell_scanner/cell_scanner.h | 63 ++++ lte/examples/cell_scanner/cell_scanner_test.c | 139 +++++++++ lte/examples/cuhd_utils.c | 2 +- .../include/liblte/phy/common/phy_common.h | 2 + lte/phy/include/liblte/phy/sync/pss.h | 1 + .../include/liblte/phy/ue/ue_cell_search.h | 1 + lte/phy/lib/sync/src/pss.c | 3 + lte/phy/lib/ue/src/ue_cell_search.c | 18 +- matlab/tests/neighbour_cell_search.m | 61 ++++ 13 files changed, 612 insertions(+), 19 deletions(-) create mode 100644 lte/examples/cell_scanner/CMakeLists.txt create mode 100644 lte/examples/cell_scanner/cell_scanner.c create mode 100644 lte/examples/cell_scanner/cell_scanner.h create mode 100644 lte/examples/cell_scanner/cell_scanner_test.c create mode 100644 matlab/tests/neighbour_cell_search.m diff --git a/lte/examples/CMakeLists.txt b/lte/examples/CMakeLists.txt index 402f3b0f1..72bcda270 100644 --- a/lte/examples/CMakeLists.txt +++ b/lte/examples/CMakeLists.txt @@ -92,3 +92,5 @@ IF(${CUHD_FIND} GREATER -1) ELSE(${CUHD_FIND} GREATER -1) MESSAGE(STATUS " UHD examples NOT INSTALLED: CUHD library not compiled.") ENDIF(${CUHD_FIND} GREATER -1) + +add_subdirectory(cell_scanner) \ No newline at end of file diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 8c5a429f6..e5c9991a9 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -80,7 +80,7 @@ void usage(prog_args_t *args, char *prog) { printf("\t-v [set verbose to debug, default none]\n"); } -void parse_args(prog_args_t *args, int argc, char **argv) { +int parse_args(prog_args_t *args, int argc, char **argv) { int opt; args_default(args); while ((opt = getopt(argc, argv, "aglnvf")) != -1) { @@ -105,13 +105,14 @@ void parse_args(prog_args_t *args, int argc, char **argv) { break; default: usage(args, argv[0]); - exit(-1); + return -1; } } if (args->uhd_freq < 0) { usage(args, argv[0]); - exit(-1); + return -1; } + return 0; } /**********************************************************************/ @@ -155,12 +156,14 @@ int main(int argc, char **argv) { uint32_t neighbour_cell_ids[MAX_NEIGHBOUR_CELLS]; cf_t *ce[MAX_PORTS]; - parse_args(&prog_args, argc, argv); + if (parse_args(&prog_args, argc, argv)) { + exit(-1); + } printf("Opening UHD device...\n"); if (cuhd_open(prog_args.uhd_args, &uhd)) { fprintf(stderr, "Error opening uhd\n"); - exit(-1); + return -1; } /* Set receiver gain */ cuhd_set_rx_gain(uhd, prog_args.uhd_gain); @@ -173,7 +176,7 @@ int main(int argc, char **argv) { ret = cuhd_search_and_decode_mib(uhd, &cell_detect_config, prog_args.force_N_id_2, &cell); if (ret < 0) { fprintf(stderr, "Error searching cell\n"); - exit(-1); + return -1; } else if (ret == 0) { printf("Cell not found\n"); exit(0); @@ -194,15 +197,15 @@ int main(int argc, char **argv) { if (ue_sync_init(&ue_sync, cell, cuhd_recv_wrapper, uhd)) { fprintf(stderr, "Error initiating ue_sync\n"); - exit(-1); + return -1; } if (ue_dl_init(&ue_dl, cell, 1234)) { fprintf(stderr, "Error initiating UE downlink processing module\n"); - exit(-1); + return -1; } if (ue_mib_init(&ue_mib, cell)) { fprintf(stderr, "Error initaiting UE MIB decoder\n"); - exit(-1); + return -1; } /* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */ @@ -252,7 +255,7 @@ int main(int argc, char **argv) { n = ue_mib_decode(&ue_mib, sf_buffer, bch_payload_unpacked, NULL, &sfn_offset); if (n < 0) { fprintf(stderr, "Error decoding UE MIB\n"); - exit(-1); + return -1; } else if (n == MIB_FOUND) { bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); @@ -269,7 +272,7 @@ int main(int argc, char **argv) { ((int) ceilf((float)3*(((sfn)/2)%4)/2))%4); if (n < 0) { fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - exit(-1); + return -1; } else if (n == 0) { printf("CFO: %+6.4f KHz, SFO: %+6.4f Khz, ExecTime: %5.1f us, NOI: %.2f, PDCCH-Det: %.3f\r", ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, @@ -322,7 +325,7 @@ int main(int argc, char **argv) { ((int) ceilf((float)3*sib4_window_cnt/2))%4); if (n < 0) { fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - exit(-1); + return -1; } else if (n == 0) { nof_trials++; } else { @@ -340,7 +343,7 @@ int main(int argc, char **argv) { sib4_window_cnt++; if (sib4_window_cnt == si_window_length) { sib4_window_start = false; - exit(-1); + return -1; } } diff --git a/lte/examples/cell_scanner/CMakeLists.txt b/lte/examples/cell_scanner/CMakeLists.txt new file mode 100644 index 000000000..502745fe1 --- /dev/null +++ b/lte/examples/cell_scanner/CMakeLists.txt @@ -0,0 +1,28 @@ +# +# Copyright 2012-2013 The libLTE Developers. See the +# COPYRIGHT file at the top-level directory of this distribution. +# +# This file is part of the libLTE library. +# +# libLTE is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# libLTE is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# A copy of the GNU Lesser General Public License can be found in +# the LICENSE file in the top-level directory of this distribution +# and at http://www.gnu.org/licenses/. +# + + +################################################################# +# CELL SCANNER TEST +################################################################# + +add_executable(cell_scanner_test cell_scanner_test.c cell_scanner.c ../cuhd_utils.c) +target_link_libraries(cell_scanner_test lte_phy lte_rrc cuhd) diff --git a/lte/examples/cell_scanner/cell_scanner.c b/lte/examples/cell_scanner/cell_scanner.c new file mode 100644 index 000000000..4b6ef4e4a --- /dev/null +++ b/lte/examples/cell_scanner/cell_scanner.c @@ -0,0 +1,282 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liblte/rrc/rrc.h" +#include "liblte/phy/phy.h" +#include "liblte/cuhd/cuhd.h" +#include "../cuhd_utils.h" +#include "cell_scanner.h" + +#define B210_DEFAULT_GAIN 40.0 +#define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 + +int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { + DEBUG(" ---- Receive %d samples ---- \n", nsamples); + return cuhd_recv(h, data, nsamples, 1); +} + +int cell_scanner_init(cell_scanner_t *q, cell_scanner_config_t *config) +{ + bzero(q, sizeof(cell_scanner_t)); + + memcpy(&q->config, config, sizeof(cell_scanner_config_t)); + + printf("Opening UHD device...\n"); + if (cuhd_open(q->config.uhd_args, &q->uhd)) { + fprintf(stderr, "Error opening uhd\n"); + return -1; + } + /* Set receiver gain */ + cuhd_set_rx_gain(q->uhd, B210_DEFAULT_GAIN); + + return 0; +} + +void cell_scanner_close(cell_scanner_t *q) { + cuhd_close(q->uhd); +} + +int cell_scanner_all_cells(cell_scanner_t *q, float frequency, cell_scanner_result_t *result) +{ + return cell_scanner_cell(q, frequency, -1, result); +} + +#define MAX_SINFO 10 + +int cell_scanner_cell(cell_scanner_t *q, float frequency, int N_id_2, cell_scanner_result_t *result) +{ + int ret; + cf_t *sf_buffer; + lte_cell_t cell; + int64_t sf_cnt; + ue_sync_t ue_sync; + ue_mib_t ue_mib; + ue_dl_t ue_dl; + lte_fft_t fft; + chest_dl_t chest; + uint32_t nframes_measure=0; + uint32_t nof_trials = 0; + uint32_t sfn = 0; // system frame number + int n; + uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; + uint32_t sfn_offset; + uint8_t data[1024]; + uint8_t data_unpacked[1024]; + + bzero(result, sizeof(cell_scanner_result_t)); + + /* set receiver frequency */ + cuhd_set_rx_freq(q->uhd, (double) frequency); + cuhd_rx_wait_lo_locked(q->uhd); + printf("Tunning receiver to %.3f MHz\n", (double ) frequency/1000000); + + cell_search_cfg_t cfg; + cfg.nof_frames_total = q->config.cell_detect_max_frames; + cfg.threshold = q->config.cell_detect_early_stop_threshold; + + ret = cuhd_search_and_decode_mib(q->uhd, &cfg, N_id_2, &cell); + if (ret < 0) { + fprintf(stderr, "Error searching cell\n"); + exit(-1); + } else if (ret == 0) { + printf("Cell not found\n"); + exit(0); + } + + /* set sampling frequency */ + int srate = lte_sampling_freq_hz(cell.nof_prb); + if (srate != -1) { + cuhd_set_rx_srate(q->uhd, (double) srate); + } else { + fprintf(stderr, "Invalid number of PRB %d\n", cell.nof_prb); + return LIBLTE_ERROR; + } + + INFO("Stopping UHD and flushing buffer...\n",0); + cuhd_stop_rx_stream(q->uhd); + cuhd_flush_buffer(q->uhd); + + if (ue_sync_init(&ue_sync, cell, cuhd_recv_wrapper, q->uhd)) { + fprintf(stderr, "Error initiating ue_sync\n"); + exit(-1); + } + if (ue_dl_init(&ue_dl, cell, 1234)) { + fprintf(stderr, "Error initiating UE downlink processing module\n"); + exit(-1); + } + if (ue_mib_init(&ue_mib, cell)) { + fprintf(stderr, "Error initaiting UE MIB decoder\n"); + exit(-1); + } + + /* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */ + ue_dl_set_rnti(&ue_dl, SIRNTI); + + /* Initialize subframe counter */ + sf_cnt = 0; + + if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { + fprintf(stderr, "Error initiating FFT\n"); + return -1; + } + if (chest_dl_init(&chest, cell)) { + fprintf(stderr, "Error initiating channel estimator\n"); + return -1; + } + + int sf_re = SF_LEN_RE(cell.nof_prb, cell.cp); + cf_t *sf_symbols = vec_malloc(sf_re * sizeof(cf_t)); + + cf_t *ce[MAX_PORTS]; + for (int i=0;iuhd); + + memcpy(&result->phy_cell, &cell, sizeof(lte_cell_t)); + + chest_dl_t *chest_ptr = &ue_dl.chest; + bool mib_decoded = false; + bool sib_decoded = false; + + /* Main loop */ + while (sf_cnt < q->config.measure_avg_nof_frames) { + + ret = ue_sync_get_buffer(&ue_sync, &sf_buffer); + if (ret < 0) { + fprintf(stderr, "Error calling ue_sync_work()\n"); + } + + /* ue_sync_get_buffer returns 1 if successfully read 1 aligned subframe */ + if (ret == 1) { + if (!mib_decoded) { + if (ue_sync_get_sfidx(&ue_sync) == 0) { + pbch_decode_reset(&ue_mib.pbch); + n = ue_mib_decode(&ue_mib, sf_buffer, bch_payload_unpacked, NULL, &sfn_offset); + if (n < 0) { + fprintf(stderr, "Error decoding UE MIB\n"); + exit(-1); + } else if (n == MIB_FOUND) { + bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); + bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); + printf("Decoded MIB. SFN: %d, offset: %d\n", sfn, sfn_offset); + sfn = (sfn + sfn_offset)%1024; + mib_decoded = true; + } + } + } + + /* We are looking for SI Blocks, search only in appropiate places */ + if (mib_decoded && !sib_decoded && + (ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) + { + n = ue_dl_decode_sib(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), + ((int) ceilf((float)3*(((sfn)/2)%4)/2))%4); + if (n < 0) { + fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); + exit(-1); + } else if (n == 0) { + nof_trials++; + } else { + bit_unpack_vector(data, data_unpacked, n); + void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); + if (dlsch_msg) { + printf("\n");fflush(stdout); + cell_access_info_t cell_info; + bcch_dlsch_sib1_get_cell_access_info(dlsch_msg, &cell_info); + printf("Decoded SIB1. Cell ID: 0x%x\n", cell_info.cell_id); + + result->cell_id = cell_info.cell_id; + + bcch_dlsch_fprint(dlsch_msg, stdout); + + sib_decoded = true; + } + } + } else { + chest_ptr = &chest; + /* Run FFT for all subframe data */ + lte_fft_run_sf(&fft, sf_buffer, sf_symbols); + chest_dl_estimate(&chest, sf_symbols, ce, ue_sync_get_sfidx(&ue_sync)); + } + + result->rssi = VEC_CMA(vec_avg_power_cf(sf_buffer,SF_LEN(lte_symbol_sz(cell.nof_prb))), + result->rssi,nframes_measure); + result->rsrq = VEC_EMA(chest_dl_get_rsrq(chest_ptr),result->rsrq,0.01); + result->rsrp = VEC_CMA(chest_dl_get_rsrp(chest_ptr),result->rsrp,nframes_measure); + result->snr = VEC_CMA(chest_dl_get_snr(chest_ptr),result->snr,nframes_measure); + nframes_measure++; + + // Plot and Printf + if ((nframes_measure%10) == 0) { + printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, RSSI: %5.1f dBm, " + "RSRP: %+5.1f dBm, RSRQ: %5.1f dB, SNR: %5.1f dB\r", + ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, + 10*log10(result->rssi*1000)-B210_DEFAULT_GAIN_CORREC, + 10*log10(result->rsrp*1000)-B210_DEFAULT_GAIN_CORREC, + 10*log10(result->rsrq), 10*log10(result->snr)); + if (verbose != VERBOSE_NONE) { + printf("\n"); + } + } + if (ue_sync_get_sfidx(&ue_sync) == 9) { + sfn++; + if (sfn == 1024) { + sfn = 0; + } + } + } else if (ret == 0) { + printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", + sync_get_peak_value(&ue_sync.sfind), + ue_sync.frame_total_cnt, ue_sync.state); + } + sf_cnt++; + } // Main loop + + // Correct RSRP and RSSI measurements + result->rssi /= pow(10, 8); + result->rsrp /= pow(10, 8); + + ue_sync_free(&ue_sync); + + return 0; +} + + + diff --git a/lte/examples/cell_scanner/cell_scanner.h b/lte/examples/cell_scanner/cell_scanner.h new file mode 100644 index 000000000..3856733e5 --- /dev/null +++ b/lte/examples/cell_scanner/cell_scanner.h @@ -0,0 +1,63 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include "liblte/phy/phy.h" + +typedef struct { + int cell_detect_max_frames; + float cell_detect_early_stop_threshold; + int measure_avg_nof_frames; + char *uhd_args; +} cell_scanner_config_t; + +typedef struct { + lte_cell_t phy_cell; + uint32_t cell_id; + float rsrp; + float rsrq; + float rssi; + float snr; +} cell_scanner_result_t; + +typedef struct { + cell_scanner_config_t config; + void *uhd; +} cell_scanner_t; + +int cell_scanner_init(cell_scanner_t *q, + cell_scanner_config_t *config); + +void cell_scanner_close(cell_scanner_t *q); + +int cell_scanner_all_cells(cell_scanner_t *q, + float frequency, + cell_scanner_result_t *result); + +int cell_scanner_cell(cell_scanner_t *q, + float frequency, + int N_id_2, + cell_scanner_result_t *result); diff --git a/lte/examples/cell_scanner/cell_scanner_test.c b/lte/examples/cell_scanner/cell_scanner_test.c new file mode 100644 index 000000000..31d303bd9 --- /dev/null +++ b/lte/examples/cell_scanner/cell_scanner_test.c @@ -0,0 +1,139 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "liblte/rrc/rrc.h" +#include "liblte/phy/phy.h" +#include "liblte/cuhd/cuhd.h" +#include "cell_scanner.h" + + +/********************************************************************** + * Program arguments processing + ***********************************************************************/ +typedef struct { + int nof_subframes; + int force_N_id_2; + char *uhd_args; + float uhd_freq; +}prog_args_t; + +void args_default(prog_args_t *args) { + args->nof_subframes = -1; + args->force_N_id_2 = -1; // Pick the best + args->uhd_args = ""; + args->uhd_freq = -1.0; +} + +void usage(prog_args_t *args, char *prog) { + printf("Usage: %s [alnv] -f rx_frequency (in Hz)\n", prog); + printf("\t-a UHD args [Default %s]\n", args->uhd_args); + printf("\t-l Force N_id_2 [Default best]\n"); + printf("\t-n nof_subframes [Default %d]\n", args->nof_subframes); + printf("\t-v [set verbose to debug, default none]\n"); +} + +void parse_args(prog_args_t *args, int argc, char **argv) { + int opt; + args_default(args); + while ((opt = getopt(argc, argv, "alnvf")) != -1) { + switch (opt) { + case 'a': + args->uhd_args = argv[optind]; + break; + case 'f': + args->uhd_freq = atof(argv[optind]); + break; + case 'n': + args->nof_subframes = atoi(argv[optind]); + break; + case 'l': + args->force_N_id_2 = atoi(argv[optind]); + break; + case 'v': + verbose++; + break; + default: + usage(args, argv[0]); + exit(-1); + } + } + if (args->uhd_freq < 0) { + usage(args, argv[0]); + exit(-1); + } +} +/**********************************************************************/ + +int main(int argc, char **argv) { + prog_args_t prog_args; + cell_scanner_result_t result; + cell_scanner_config_t cfg; + cell_scanner_t cs; + + parse_args(&prog_args, argc, argv); + + // Peak-to-sidelobe ratio (PSR) threshold for cell detection early stopping. + cfg.cell_detect_early_stop_threshold = 20.0; // This is a normal value. + // maximum 5 ms frames that will be scanned maximum in the case the threshold is not exceed + // ie for bad cells + cfg.cell_detect_max_frames = 50; // this is 250 ms + + // Number of 1 ms subframes that will be used to compute rsrp, rsrq, snr, etc average + cfg.measure_avg_nof_frames = 1000; // 1 sec + + cfg.uhd_args = prog_args.uhd_args; + + // Init USRP + if (cell_scanner_init(&cs, &cfg)) { + fprintf(stderr, "Error initiating cell scanner\n"); + exit(-1); + } + + // Scan for a frequency + if (prog_args.force_N_id_2 < 0) { + // We have 2 options, either we scan for the three possible N_id_2 root sequences... + cell_scanner_all_cells(&cs, prog_args.uhd_freq, &result); + } else { + // or we scan for a single one. + cell_scanner_cell(&cs, prog_args.uhd_freq, prog_args.force_N_id_2, &result); + } + + printf("\nResult: CellID: %d, PHYID: %d, RSRP: %.1f dBm, RSRQ: %.1f dB, SNR: %.1f dB\n", + result.cell_id, result.phy_cell.id, + 10*log10(result.rsrp*1000), 10*log10(result.rsrq), 10*log10(result.snr)); +} diff --git a/lte/examples/cuhd_utils.c b/lte/examples/cuhd_utils.c index 1ccf5e0c4..7c2c44923 100644 --- a/lte/examples/cuhd_utils.c +++ b/lte/examples/cuhd_utils.c @@ -158,7 +158,7 @@ int cuhd_search_and_decode_mib(void *uhd, cell_search_cfg_t *config, int force_N ret = cuhd_cell_search(uhd, config, force_N_id_2, cell); if (ret > 0) { printf("Decoding PBCH for cell %d (N_id_2=%d)\n", cell->id, cell->id%3); - ret = cuhd_mib_decoder(uhd, 50, cell); + ret = cuhd_mib_decoder(uhd, config->nof_frames_total, cell); if (ret < 0) { fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", cell->id); return LIBLTE_ERROR; diff --git a/lte/phy/include/liblte/phy/common/phy_common.h b/lte/phy/include/liblte/phy/common/phy_common.h index a01f6e5ef..4603019ea 100644 --- a/lte/phy/include/liblte/phy/common/phy_common.h +++ b/lte/phy/include/liblte/phy/common/phy_common.h @@ -116,6 +116,8 @@ typedef enum {CPNORM, CPEXT} lte_cp_t; #define NOF_TC_CB_SIZES 188 +typedef _Complex float cf_t; + typedef enum LIBLTE_API { PHICH_NORM, PHICH_EXT} phich_length_t; typedef enum LIBLTE_API { R_1_6, R_1_2, R_1, R_2} phich_resources_t; diff --git a/lte/phy/include/liblte/phy/sync/pss.h b/lte/phy/include/liblte/phy/sync/pss.h index 9f5b435cf..7c0ed7044 100644 --- a/lte/phy/include/liblte/phy/sync/pss.h +++ b/lte/phy/include/liblte/phy/sync/pss.h @@ -84,6 +84,7 @@ typedef struct LIBLTE_API { float *conv_output_abs; float ema_alpha; float *conv_output_avg; + float peak_value; }pss_synch_t; typedef enum { PSS_TX, PSS_RX } pss_direction_t; diff --git a/lte/phy/include/liblte/phy/ue/ue_cell_search.h b/lte/phy/include/liblte/phy/ue/ue_cell_search.h index 6ad4bc419..644ed955a 100644 --- a/lte/phy/include/liblte/phy/ue/ue_cell_search.h +++ b/lte/phy/include/liblte/phy/ue/ue_cell_search.h @@ -67,6 +67,7 @@ typedef struct LIBLTE_API { lte_cp_t cp; float peak; float mode; + float psr; } ue_cell_search_result_t; diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index ac27ca59b..57937f3d6 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -323,6 +323,9 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) /* Find maximum of the absolute value of the correlation */ corr_peak_pos = vec_max_fi(q->conv_output_avg, conv_output_len-1); + // save absolute value + q->peak_value = q->conv_output_avg[corr_peak_pos]; + #ifdef PSS_RETURN_PSR // Find second side lobe diff --git a/lte/phy/lib/ue/src/ue_cell_search.c b/lte/phy/lib/ue/src/ue_cell_search.c index c8b05e217..5cab42fb8 100644 --- a/lte/phy/lib/ue/src/ue_cell_search.c +++ b/lte/phy/lib/ue/src/ue_cell_search.c @@ -154,20 +154,27 @@ static void get_cell(ue_cell_search_t * q, uint32_t nof_detected_frames, ue_cell found_cell->cell_id = q->candidates[mode_pos].cell_id; /* Now in all these cell IDs, find most frequent CP */ uint32_t nof_normal = 0; + found_cell->peak = 0; for (i=0;icandidates[i].cell_id == found_cell->cell_id) { if (CP_ISNORM(q->candidates[i].cp)) { nof_normal++; } } + // average absolute peak value + found_cell->peak += q->candidates[i].peak; } + found_cell->peak /= nof_detected_frames; + if (nof_normal > q->mode_ntimes[mode_pos]/2) { found_cell->cp = CPNORM; } else { found_cell->cp = CPEXT; } found_cell->mode = (float) q->mode_ntimes[mode_pos]/nof_detected_frames; - found_cell->peak = q->candidates[nof_detected_frames-1].peak; + + // PSR is already averaged so take the last value + found_cell->psr = q->candidates[nof_detected_frames-1].psr; } /** Finds up to 3 cells, one per each N_id_2=0,1,2 and stores ID and CP in the structure pointed by found_cell. @@ -212,7 +219,7 @@ int ue_cell_search_scan_N_id_2(ue_cell_search_t * q, uint32_t N_id_2, ue_cell_se ret = LIBLTE_SUCCESS; ue_sync_set_N_id_2(&q->ue_sync, N_id_2); - + ue_sync_reset(&q->ue_sync); do { ret = ue_sync_get_buffer(&q->ue_sync, &sf_buffer); @@ -226,7 +233,8 @@ int ue_cell_search_scan_N_id_2(ue_cell_search_t * q, uint32_t N_id_2, ue_cell_se /* Save cell id, cp and peak */ q->candidates[nof_detected_frames].cell_id = (uint32_t) ret; q->candidates[nof_detected_frames].cp = sync_get_cp(&q->ue_sync.strack); - q->candidates[nof_detected_frames].peak = sync_get_peak_value(&q->ue_sync.strack); + q->candidates[nof_detected_frames].peak = q->ue_sync.strack.pss.peak_value; + q->candidates[nof_detected_frames].psr = sync_get_peak_value(&q->ue_sync.strack); INFO ("CELL SEARCH: [%3d/%3d/%d]: Found peak PSR=%.3f, Cell_id: %d CP: %s\n", nof_detected_frames, nof_scanned_frames, q->nof_frames_to_scan, @@ -262,9 +270,9 @@ int ue_cell_search_scan_N_id_2(ue_cell_search_t * q, uint32_t N_id_2, ue_cell_se ret = 1; // A cell has been found. if (found_cell) { get_cell(q, nof_detected_frames, found_cell); - printf("Found CELL PHYID: %d, CP: %s, PSR: %.1f, Reliability: %.0f \%\n", + printf("Found CELL PHYID: %d, CP: %s, PSR: %.1f, Absolute Peak: %.1f dBm, Reliability: %.0f \%\n", found_cell->cell_id, lte_cp_string(found_cell->cp), - found_cell->peak, 100*found_cell->mode); + found_cell->psr, 10*log10(found_cell->peak*1000), 100*found_cell->mode); } } else { ret = 0; // A cell was not found. diff --git a/matlab/tests/neighbour_cell_search.m b/matlab/tests/neighbour_cell_search.m new file mode 100644 index 000000000..881a53650 --- /dev/null +++ b/matlab/tests/neighbour_cell_search.m @@ -0,0 +1,61 @@ + +clear +NofENB = 1; + +for i=1:NofENB + enb = lteTestModel('1.1','5MHz'); + enb.TotSubframes = 10; + if (i == 1) + tx_signal = lteTestModelTool(enb); + else + tx_signal = tx_signal + lteTestModelTool(enb); + end +end + +corrcfg.PSS='On'; +corrcfg.SSS='On'; +corrcfg.CellRS='On'; + +cec = struct; % Channel estimation config structure +cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging +cec.FreqWindow = 9; % Frequency window size +cec.TimeWindow = 9; % Time window size +cec.InterpType = 'Linear'; % 2D interpolation type +cec.InterpWindow = 'Centered'; % Interpolation window type +cec.InterpWinSize = 1; % Interpolation window size + + +addpath('../../debug/lte/phy/lib/sync/test') +addpath('../../debug/lte/phy/lib/ch_estimation/test') + +%tx_signal = signal; + +enb = struct('NDLRB',6,'CyclicPrefix','Normal','DuplexMode','FDD'); +[cellid, offset] = lteCellSearch(enb, tx_signal,1); + +enb.NCellID=cellid; +disp(offset) +enb.NSubframe = 0; + +rxWaveform = tx_signal(1+offset:end,:); +rxGrid = lteOFDMDemodulate(enb,rxWaveform); + +enb.CellRefP = 4; + +[hest, nest] = lteDLChannelEstimate(enb,cec,rxGrid); + +griddims = lteResourceGridSize(enb); % Resource grid dimensions +L = griddims(2); + +pbchIndices = ltePBCHIndices(enb); +[pbchRx, pbchHest] = lteExtractResources( ... + pbchIndices, rxGrid(:,1:L,:), hest(:,1:L,:,:)); + +% Decode PBCH +[bchBits, pbchSymbols, nfmod4, mib, enb.CellRefP] = ltePBCHDecode( ... + enb, pbchRx, pbchHest, nest); + +% Parse MIB bits +enb = lteMIB(mib, enb) + +%plot(angle(hest(:,[1 4],1,1))); From e98f7188061bbd01fc7c1423631f547f50c6f742 Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 15 Dec 2014 13:43:54 +0000 Subject: [PATCH 44/55] Fixed issue with PSS correlation --- lte/examples/cell_measurement.c | 3 ++- lte/examples/cell_scanner/cell_scanner.c | 3 ++- lte/examples/cell_scanner/cell_scanner.h | 3 ++- lte/examples/cell_scanner/cell_scanner_test.c | 6 +++++- lte/examples/cell_search.c | 8 ++++---- lte/examples/cuhd_utils.c | 6 +++--- lte/examples/cuhd_utils.h | 3 ++- lte/phy/lib/sync/src/pss.c | 19 +++++++++++++++---- lte/phy/lib/sync/src/sync.c | 1 - lte/phy/lib/ue/src/ue_mib.c | 2 +- lte/phy/lib/ue/src/ue_sync.c | 10 ++++++++-- 11 files changed, 44 insertions(+), 20 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index e5c9991a9..42614f38d 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -47,7 +47,8 @@ float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_search_cfg_t cell_detect_config = { - 50, // nof_frames_total + 500, // maximum number of frames to receive for MIB decoding + 50, // maximum number of frames to receive for PSS correlation 9.0 // early-stops cell detection if mean PSR is above this value }; diff --git a/lte/examples/cell_scanner/cell_scanner.c b/lte/examples/cell_scanner/cell_scanner.c index 4b6ef4e4a..9c62c0900 100644 --- a/lte/examples/cell_scanner/cell_scanner.c +++ b/lte/examples/cell_scanner/cell_scanner.c @@ -106,7 +106,8 @@ int cell_scanner_cell(cell_scanner_t *q, float frequency, int N_id_2, cell_scann printf("Tunning receiver to %.3f MHz\n", (double ) frequency/1000000); cell_search_cfg_t cfg; - cfg.nof_frames_total = q->config.cell_detect_max_frames; + cfg.max_frames_pss = q->config.pss_max_frames; + cfg.max_frames_pbch = q->config.pbch_max_frames; cfg.threshold = q->config.cell_detect_early_stop_threshold; ret = cuhd_search_and_decode_mib(q->uhd, &cfg, N_id_2, &cell); diff --git a/lte/examples/cell_scanner/cell_scanner.h b/lte/examples/cell_scanner/cell_scanner.h index 3856733e5..faf5b890a 100644 --- a/lte/examples/cell_scanner/cell_scanner.h +++ b/lte/examples/cell_scanner/cell_scanner.h @@ -28,7 +28,8 @@ #include "liblte/phy/phy.h" typedef struct { - int cell_detect_max_frames; + int pss_max_frames; + int pbch_max_frames; float cell_detect_early_stop_threshold; int measure_avg_nof_frames; char *uhd_args; diff --git a/lte/examples/cell_scanner/cell_scanner_test.c b/lte/examples/cell_scanner/cell_scanner_test.c index 31d303bd9..52a40cb8d 100644 --- a/lte/examples/cell_scanner/cell_scanner_test.c +++ b/lte/examples/cell_scanner/cell_scanner_test.c @@ -111,7 +111,11 @@ int main(int argc, char **argv) { cfg.cell_detect_early_stop_threshold = 20.0; // This is a normal value. // maximum 5 ms frames that will be scanned maximum in the case the threshold is not exceed // ie for bad cells - cfg.cell_detect_max_frames = 50; // this is 250 ms + cfg.pss_max_frames = 50; // this is 250 ms + + // maximum 5 ms frames that will be received to decode the PBCH + // ie for bad cells + cfg.pbch_max_frames = 500; // this is 2500 ms // Number of 1 ms subframes that will be used to compute rsrp, rsrq, snr, etc average cfg.measure_avg_nof_frames = 1000; // 1 sec diff --git a/lte/examples/cell_search.c b/lte/examples/cell_search.c index 20e0df925..30ea2f4bf 100644 --- a/lte/examples/cell_search.c +++ b/lte/examples/cell_search.c @@ -55,7 +55,7 @@ int band = -1; int earfcn_start=-1, earfcn_end = -1; -cell_search_cfg_t config = {50, 1.1}; +cell_search_cfg_t config = {500, 50, 1.1}; float uhd_gain = 60.0; @@ -89,7 +89,7 @@ void parse_args(int argc, char **argv) { earfcn_end = atoi(argv[optind]); break; case 'n': - config.nof_frames_total = atoi(argv[optind]); + config.max_frames_pss = atoi(argv[optind]); break; case 't': config.threshold = atof(argv[optind]); @@ -162,8 +162,8 @@ int main(int argc, char **argv) { exit(-1); } - if (config.nof_frames_total) { - ue_cell_search_set_nof_frames_to_scan(&cs, config.nof_frames_total); + if (config.max_frames_pss) { + ue_cell_search_set_nof_frames_to_scan(&cs, config.max_frames_pss); } if (config.threshold) { ue_cell_search_set_threshold(&cs, config.threshold); diff --git a/lte/examples/cuhd_utils.c b/lte/examples/cuhd_utils.c index 7c2c44923..3199e3ec7 100644 --- a/lte/examples/cuhd_utils.c +++ b/lte/examples/cuhd_utils.c @@ -103,8 +103,8 @@ int cuhd_cell_search(void *uhd, cell_search_cfg_t *config, return LIBLTE_ERROR; } - if (config->nof_frames_total) { - ue_cell_search_set_nof_frames_to_scan(&cs, config->nof_frames_total); + if (config->max_frames_pss) { + ue_cell_search_set_nof_frames_to_scan(&cs, config->max_frames_pss); } if (config->threshold) { ue_cell_search_set_threshold(&cs, config->threshold); @@ -158,7 +158,7 @@ int cuhd_search_and_decode_mib(void *uhd, cell_search_cfg_t *config, int force_N ret = cuhd_cell_search(uhd, config, force_N_id_2, cell); if (ret > 0) { printf("Decoding PBCH for cell %d (N_id_2=%d)\n", cell->id, cell->id%3); - ret = cuhd_mib_decoder(uhd, config->nof_frames_total, cell); + ret = cuhd_mib_decoder(uhd, config->max_frames_pbch, cell); if (ret < 0) { fprintf(stderr, "Could not decode PBCH from CELL ID %d\n", cell->id); return LIBLTE_ERROR; diff --git a/lte/examples/cuhd_utils.h b/lte/examples/cuhd_utils.h index fed662ca0..0e17965d8 100644 --- a/lte/examples/cuhd_utils.h +++ b/lte/examples/cuhd_utils.h @@ -29,7 +29,8 @@ #include "liblte/phy/phy.h" typedef struct LIBLTE_API { - uint32_t nof_frames_total; // maximum number of 5ms frames to capture + uint32_t max_frames_pbch; // maximum number of 5ms frames to capture for MIB decoding + uint32_t max_frames_pss; // maximum number of 5ms frames to capture for PSS correlation float threshold; // early-stops cell detection if mean PSR is above this value }cell_search_cfg_t; diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index 57937f3d6..22c8710b1 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -302,10 +302,10 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) conv_output_len = conv_cc(input, q->pss_signal_freq[q->N_id_2], q->conv_output, q->frame_size, q->fft_size); #endif } else { - for (int i=q->fft_size;ifft_size+q->frame_size-1;i++) { - q->conv_output[i] = vec_dot_prod_ccc(q->pss_signal_freq[q->N_id_2], &input[i-q->fft_size], q->fft_size); + for (int i=0;iframe_size-1;i++) { + q->conv_output[i] = vec_dot_prod_ccc(q->pss_signal_freq[q->N_id_2], &input[i], q->fft_size); } - conv_output_len = q->fft_size+q->frame_size-1; + conv_output_len = q->frame_size-1; } @@ -364,6 +364,13 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) 1000000*q->conv_output_avg[corr_peak_pos], 1000000*side_lobe_value,*corr_peak_value ); } + + if (isnan(*corr_peak_value) || isinf(*corr_peak_value)) { + int i=0; + vec_save_file("corrout", q->conv_output_avg, conv_output_len*sizeof(float)); + exit(-1); + } + } #else if (corr_peak_value) { @@ -371,7 +378,11 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) } #endif - ret = (int) corr_peak_pos; + if (q->frame_size >= q->fft_size) { + ret = (int) corr_peak_pos; + } else { + ret = (int) corr_peak_pos + q->fft_size; + } } return ret; } diff --git a/lte/phy/lib/sync/src/sync.c b/lte/phy/lib/sync/src/sync.c index 61de9203c..6a6dfae4c 100644 --- a/lte/phy/lib/sync/src/sync.c +++ b/lte/phy/lib/sync/src/sync.c @@ -316,7 +316,6 @@ int sync_find(sync_t *q, cf_t *input, uint32_t find_offset, uint32_t *peak_posit /* compute cumulative moving average CFO */ q->mean_cfo = VEC_EMA(cfo, q->mean_cfo, CFO_EMA_ALPHA); - } else { INFO("No space for CFO computation. Frame starts at \n",peak_pos); } diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index b88fc20c9..239b6b91f 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -127,7 +127,7 @@ int ue_mib_decode(ue_mib_t * q, cf_t *input, return LIBLTE_ERROR; } /* Reset decoder if we missed a frame */ - if (q->frame_cnt > 16) { + if (q->frame_cnt > 8) { INFO("Resetting PBCH decoder after %d frames\n", q->frame_cnt); ue_mib_reset(q); } diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 356ba20a1..8d8b0b300 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -217,6 +217,9 @@ static int find_peak_ok(ue_sync_t *q) { q->frame_no_cnt = 0; q->frame_total_cnt = 0; q->frame_find_cnt = 0; + + /* Set tracking CFO average to find CFO */ + q->strack.mean_cfo = q->sfind.mean_cfo; /* Goto Tracking state */ q->state = SF_TRACK; @@ -269,7 +272,7 @@ int track_peak_no(ue_sync_t *q) { /* if we missed too many PSS go back to FIND */ q->frame_no_cnt++; if (q->frame_no_cnt >= TRACK_MAX_LOST) { - INFO("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); + printf("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); q->state = SF_FIND; } else { INFO("Tracking peak not found. Peak %.3f, %d lost\n", @@ -375,7 +378,10 @@ int ue_sync_get_buffer(ue_sync_t *q, cf_t **sf_symbols) { /* Do CFO Correction if not done in track and deliver the frame */ if (!q->strack.correct_cfo) { - cfo_correct(&q->sfind.cfocorr, q->input_buffer, q->input_buffer, -sync_get_cfo(&q->strack) / q->fft_size); + cfo_correct(&q->sfind.cfocorr, + q->input_buffer, + q->input_buffer, + -sync_get_cfo(&q->strack) / q->fft_size); } *sf_symbols = q->input_buffer; From 204fa8514438a85e56f4a4af6ab1e265196ea45a Mon Sep 17 00:00:00 2001 From: ismagom Date: Mon, 15 Dec 2014 23:34:44 +0000 Subject: [PATCH 45/55] Added MEX tests for PBCH and Viterbi --- lte/phy/include/liblte/phy/common/fft.h | 2 ++ lte/phy/include/liblte/phy/fec/viterbi.h | 4 ++++ lte/phy/lib/ch_estimation/src/chest_dl.c | 3 ++- lte/phy/lib/common/src/fft.c | 4 +++- lte/phy/lib/fec/src/viterbi.c | 8 +++++++- lte/phy/lib/fec/src/viterbi37_port.c | 3 +-- lte/phy/lib/fec/test/CMakeLists.txt | 2 ++ lte/phy/lib/mimo/src/precoding.c | 2 ++ lte/phy/lib/phch/test/CMakeLists.txt | 2 ++ matlab/tests/pdcch_test.m | 6 +++--- mex/include/liblte/mex/mexutils.h | 5 +++++ mex/lib/mexutils.c | 12 ++++++++++++ 12 files changed, 45 insertions(+), 8 deletions(-) diff --git a/lte/phy/include/liblte/phy/common/fft.h b/lte/phy/include/liblte/phy/common/fft.h index 3e20c475f..e9e2f781e 100644 --- a/lte/phy/include/liblte/phy/common/fft.h +++ b/lte/phy/include/liblte/phy/common/fft.h @@ -37,6 +37,8 @@ #include "liblte/phy/common/phy_common.h" #include "liblte/phy/utils/dft.h" +//#define LTE_FFT_NORMALIZE + typedef _Complex float cf_t; /* this is only a shortcut */ /* This is common for both directions */ diff --git a/lte/phy/include/liblte/phy/fec/viterbi.h b/lte/phy/include/liblte/phy/fec/viterbi.h index e3d8a9f59..5141ccf1a 100644 --- a/lte/phy/include/liblte/phy/fec/viterbi.h +++ b/lte/phy/include/liblte/phy/fec/viterbi.h @@ -42,6 +42,7 @@ typedef struct LIBLTE_API{ uint32_t K; uint32_t framebits; bool tail_biting; + float gain_quant; uint32_t poly[3]; int (*decode) (void*, uint8_t*, uint8_t*, uint32_t); void (*free) (void*); @@ -55,6 +56,9 @@ LIBLTE_API int viterbi_init(viterbi_t *q, uint32_t max_frame_length, bool tail_bitting); +LIBLTE_API void viterbi_set_gain_quant(viterbi_t *q, + float gain_quant); + LIBLTE_API void viterbi_free(viterbi_t *q); LIBLTE_API int viterbi_decode_f(viterbi_t *q, diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 5a9c2e5b7..b8fed7838 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -115,7 +115,8 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) } /* Set default time/freq filters */ - float f[3]={0.15, 0.7, 0.15}; + //float f[3]={0.15, 0.7, 0.15}; + float f[3]={0.2, 0.6, 0.2}; chest_dl_set_filter_freq(q, f, 3); float t[2]={0.1, 0.9}; diff --git a/lte/phy/lib/common/src/fft.c b/lte/phy/lib/common/src/fft.c index b5818c979..3a13782b4 100644 --- a/lte/phy/lib/common/src/fft.c +++ b/lte/phy/lib/common/src/fft.c @@ -53,8 +53,10 @@ int lte_fft_init_(lte_fft_t *q, lte_cp_t cp, uint32_t nof_prb, dft_dir_t dir) { } dft_plan_set_mirror(&q->fft_plan, true); - dft_plan_set_norm(&q->fft_plan, true); dft_plan_set_dc(&q->fft_plan, true); +#ifdef LTE_FFT_NORMALIZE + dft_plan_set_norm(&q->fft_plan, true); +#endif q->symbol_sz = (uint32_t) symbol_sz; q->nof_symbols = CP_NSYMB(cp); diff --git a/lte/phy/lib/fec/src/viterbi.c b/lte/phy/lib/fec/src/viterbi.c index cb334bd33..ed7f5e924 100644 --- a/lte/phy/lib/fec/src/viterbi.c +++ b/lte/phy/lib/fec/src/viterbi.c @@ -119,6 +119,7 @@ int init37(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) q->K = 7; q->R = 3; q->framebits = framebits; + q->gain_quant = 32; q->tail_biting = tail_biting; q->decode = decode37; q->free = free37; @@ -152,6 +153,7 @@ int init39(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) q->R = 3; q->framebits = framebits; q->tail_biting = tail_biting; + q->gain_quant = 32; q->decode = decode39; q->free = free39; if (q->tail_biting) { @@ -173,6 +175,10 @@ int init39(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) } } +void viterbi_set_gain_quant(viterbi_t *q, float gain_quant) { + q->gain_quant = gain_quant; +} + int viterbi_init(viterbi_t *q, viterbi_type_t type, uint32_t poly[3], uint32_t max_frame_length, bool tail_bitting) { switch (type) { @@ -206,7 +212,7 @@ int viterbi_decode_f(viterbi_t *q, float *symbols, uint8_t *data, uint32_t frame } else { len = 3 * (frame_length + q->K - 1); } - vec_quant_fuc(symbols, q->symbols_uc, 32, 127.5, 255, len); + vec_quant_fuc(symbols, q->symbols_uc, q->gain_quant, 127.5, 255, len); return q->decode(q, q->symbols_uc, data, frame_length); } diff --git a/lte/phy/lib/fec/src/viterbi37_port.c b/lte/phy/lib/fec/src/viterbi37_port.c index 37070268a..3a530e2f3 100644 --- a/lte/phy/lib/fec/src/viterbi37_port.c +++ b/lte/phy/lib/fec/src/viterbi37_port.c @@ -77,7 +77,6 @@ void *create_viterbi37_port(uint32_t polys[3], uint32_t len) { free(vp); return NULL ; } - init_viterbi37_port(vp, 0); return vp; } @@ -179,7 +178,7 @@ int update_viterbi37_blk_port(void *p, uint8_t *syms, uint32_t nbits, uint32_t * uint32_t i, bst=0; uint32_t minmetric=UINT_MAX; for (i=0;i<64;i++) { - if (vp->old_metrics->w[i] < minmetric) { + if (vp->old_metrics->w[i] <= minmetric) { bst = i; minmetric = vp->old_metrics->w[i]; } diff --git a/lte/phy/lib/fec/test/CMakeLists.txt b/lte/phy/lib/fec/test/CMakeLists.txt index 0a7064c3e..2a6ff52c9 100644 --- a/lte/phy/lib/fec/test/CMakeLists.txt +++ b/lte/phy/lib/fec/test/CMakeLists.txt @@ -67,6 +67,8 @@ ADD_TEST(viterbi_1000_2 viterbi_test -n 100 -s 1 -l 1000 -k 7 -t -e 2.0) ADD_TEST(viterbi_1000_3 viterbi_test -n 100 -s 1 -l 1000 -k 7 -t -e 3.0) ADD_TEST(viterbi_1000_4 viterbi_test -n 100 -s 1 -l 1000 -k 7 -t -e 4.5) +BuildMex(MEXNAME viterbi SOURCES viterbi_test_mex.c LIBRARIES lte_phy liblte_mex) + ######################################################################## # CRC TEST ######################################################################## diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index b45b6fcb3..46c035ebc 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -174,6 +174,8 @@ int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[M vec_sc_add_fff(modhh, noise_estimate, modhh, nof_symbols/2); } + vec_sc_prod_fff(modhh, 1/sqrt(2), modhh, nof_symbols/2); + // x[0] = r0·h0*/(|h0|+|h1|)+r1*·h1/(|h0|+|h1|) vec_prod_conj_ccc(r0,h0,q->tmp1, nof_symbols/2); vec_prod_conj_ccc(h1,r1,q->tmp2, nof_symbols/2); diff --git a/lte/phy/lib/phch/test/CMakeLists.txt b/lte/phy/lib/phch/test/CMakeLists.txt index 8a903710e..abc85bc61 100644 --- a/lte/phy/lib/phch/test/CMakeLists.txt +++ b/lte/phy/lib/phch/test/CMakeLists.txt @@ -33,6 +33,8 @@ ADD_TEST(pbch_test_50 pbch_test -p 1 -n 50 -c 50) ADD_TEST(pbch_test_502 pbch_test -p 2 -n 50 -c 50) ADD_TEST(pbch_test_504 pbch_test -p 4 -n 50 -c 50) + BuildMex(MEXNAME pbch SOURCES pbch_test_mex.c LIBRARIES lte_phy liblte_mex) + ######################################################################## # PCFICH TEST diff --git a/matlab/tests/pdcch_test.m b/matlab/tests/pdcch_test.m index cf8d07232..1a9a21a3a 100644 --- a/matlab/tests/pdcch_test.m +++ b/matlab/tests/pdcch_test.m @@ -3,8 +3,8 @@ %% Cell-Wide Settings % A structure |enbConfig| is used to configure the eNodeB. -Npackets = 50; -SNR_values =linspace(-5,3,8); +Npackets = 1; +SNR_values =20;%linspace(-5,3,8); enbConfig.NDLRB = 15; % No of Downlink RBs in total BW enbConfig.CyclicPrefix = 'Normal'; % CP length @@ -67,7 +67,7 @@ subframe_tx(pdcchIndices) = pdcchSymbols; addpath('../../debug/lte/phy/lib/phch/test') -parfor snr_idx=1:length(SNR_values) +for snr_idx=1:length(SNR_values) SNRdB = SNR_values(snr_idx); for i=1:Npackets diff --git a/mex/include/liblte/mex/mexutils.h b/mex/include/liblte/mex/mexutils.h index c225355cd..0c2aef266 100644 --- a/mex/include/liblte/mex/mexutils.h +++ b/mex/include/liblte/mex/mexutils.h @@ -61,6 +61,11 @@ LIBLTE_API int mexutils_write_cf(cf_t *buffer, uint32_t nr, uint32_t nc); +LIBLTE_API int mexutils_write_uint8(uint8_t *buffer, + mxArray **ptr, + uint32_t nr, + uint32_t nc); + LIBLTE_API int mexutils_read_f(const mxArray *ptr, float **buffer); diff --git a/mex/lib/mexutils.c b/mex/lib/mexutils.c index fb8e96c7d..7706917a4 100644 --- a/mex/lib/mexutils.c +++ b/mex/lib/mexutils.c @@ -25,6 +25,7 @@ * */ +#include #include #include "liblte/phy/common/phy_common.h" #include "liblte/mex/mexutils.h" @@ -126,3 +127,14 @@ int mexutils_write_f(float *buffer, mxArray **ptr, uint32_t nr, uint32_t nc) { } } + +int mexutils_write_uint8(uint8_t *buffer, mxArray **ptr, uint32_t nr, uint32_t nc) { + *ptr = mxCreateNumericMatrix(nr, nc, mxUINT8_CLASS, mxREAL); + if (*ptr) { + uint8_t *outr = (uint8_t*) mxGetPr(*ptr); + memcpy(outr, buffer, nr*nc*sizeof(uint8_t)); + return nc*nr; + } else { + return -1; + } +} From f6e4aa18c86f478dcefee19d60cdcf132a077c26 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 16 Dec 2014 10:27:08 +0000 Subject: [PATCH 46/55] Decreased ue_sync tracking threshold --- lte/phy/include/liblte/phy/fec/viterbi.h | 1 + lte/phy/lib/fec/src/viterbi.c | 17 ++++++++++++++--- lte/phy/lib/ue/src/ue_sync.c | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lte/phy/include/liblte/phy/fec/viterbi.h b/lte/phy/include/liblte/phy/fec/viterbi.h index 5141ccf1a..25f56a1e9 100644 --- a/lte/phy/include/liblte/phy/fec/viterbi.h +++ b/lte/phy/include/liblte/phy/fec/viterbi.h @@ -45,6 +45,7 @@ typedef struct LIBLTE_API{ float gain_quant; uint32_t poly[3]; int (*decode) (void*, uint8_t*, uint8_t*, uint32_t); + int (*decode_f) (void*, float*, uint8_t*, uint32_t); void (*free) (void*); uint8_t *tmp; uint8_t *symbols_uc; diff --git a/lte/phy/lib/fec/src/viterbi.c b/lte/phy/lib/fec/src/viterbi.c index ed7f5e924..7d9a93c33 100644 --- a/lte/phy/lib/fec/src/viterbi.c +++ b/lte/phy/lib/fec/src/viterbi.c @@ -96,6 +96,7 @@ int decode39(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length) { return q->framebits; } + void free37(void *o) { viterbi_t *q = o; if (q->symbols_uc) { @@ -123,6 +124,7 @@ int init37(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) q->tail_biting = tail_biting; q->decode = decode37; q->free = free37; + q->decode_f = NULL; q->symbols_uc = malloc(3 * (q->framebits + q->K - 1) * sizeof(uint8_t)); if (!q->symbols_uc) { perror("malloc"); @@ -145,7 +147,7 @@ int init37(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) return -1; } else { return 0; - } + } } int init39(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) { @@ -156,6 +158,7 @@ int init39(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) q->gain_quant = 32; q->decode = decode39; q->free = free39; + q->decode_f = NULL; if (q->tail_biting) { fprintf(stderr, "Error: Tailbitting not supported in 1/3 K=9 decoder\n"); @@ -175,6 +178,8 @@ int init39(viterbi_t *q, uint32_t poly[3], uint32_t framebits, bool tail_biting) } } + + void viterbi_set_gain_quant(viterbi_t *q, float gain_quant) { q->gain_quant = gain_quant; } @@ -212,8 +217,14 @@ int viterbi_decode_f(viterbi_t *q, float *symbols, uint8_t *data, uint32_t frame } else { len = 3 * (frame_length + q->K - 1); } - vec_quant_fuc(symbols, q->symbols_uc, q->gain_quant, 127.5, 255, len); - return q->decode(q, q->symbols_uc, data, frame_length); + if (!q->decode_f) { + vec_quant_fuc(symbols, q->symbols_uc, q->gain_quant, 127.5, 255, len); + return q->decode(q, q->symbols_uc, data, frame_length); + } else { + return q->decode_f(q, symbols, data, frame_length); + } + + } int viterbi_decode_uc(viterbi_t *q, uint8_t *symbols, uint8_t *data, diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 8d8b0b300..9370056e0 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -119,7 +119,7 @@ int ue_sync_init(ue_sync_t *q, sync_set_em_alpha(&q->sfind, 1); q->nof_avg_find_frames = 1; sync_set_threshold(&q->sfind, 2.0); - sync_set_threshold(&q->strack, 6.0); + sync_set_threshold(&q->strack, 1.4); /* Correct CFO in the find state but not in the track state, since is called only * 1 every 5 subframes. Will do it in the ue_sync_get_buffer() function. From f067d984822ef48f868dccd87e88ad6680dee930 Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 16 Dec 2014 15:15:03 +0000 Subject: [PATCH 47/55] Fine tune in cell measurement --- lte/examples/cell_measurement.c | 4 ++-- lte/examples/pdsch_ue.c | 3 ++- lte/phy/lib/ue/src/ue_mib.c | 2 ++ lte/phy/lib/ue/src/ue_sync.c | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index 42614f38d..c9f19a0c6 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -42,12 +42,12 @@ #include "cuhd_utils.h" #define B210_DEFAULT_GAIN 40.0 -#define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 +#define B210_DEFAULT_GAIN_CORREC 110.0 // Gain of the Rx chain when the gain is set to 40 float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_search_cfg_t cell_detect_config = { - 500, // maximum number of frames to receive for MIB decoding + 5000, // maximum number of frames to receive for MIB decoding 50, // maximum number of frames to receive for PSS correlation 9.0 // early-stops cell detection if mean PSR is above this value }; diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 01f4196bd..afa0dfed2 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -48,12 +48,13 @@ void do_plots(ue_dl_t *q, uint32_t sf_idx, ue_sync_t *qs); #define B210_DEFAULT_GAIN 40.0 -#define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 +#define B210_DEFAULT_GAIN_CORREC 110.0 // Gain of the Rx chain when the gain is set to 40 float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_search_cfg_t cell_detect_config = { + 5000, 100, // nof_frames_total 4.0 // threshold }; diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 239b6b91f..644b4289a 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -214,7 +214,9 @@ int ue_mib_sync_decode(ue_mib_sync_t * q, break; } else if (ue_sync_get_sfidx(&q->ue_sync) == 0) { if (ret == 1) { + ue_mib_reset(&q->ue_mib); mib_ret = ue_mib_decode(&q->ue_mib, sf_buffer, bch_payload, nof_tx_ports, sfn_offset); + } else { INFO("Resetting PBCH decoder after %d frames\n", q->ue_mib.frame_cnt); ue_mib_reset(&q->ue_mib); diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 9370056e0..9a6ec8b0a 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -42,7 +42,7 @@ cf_t dummy[MAX_TIME_OFFSET]; #define TRACK_MAX_LOST 10 #define TRACK_FRAME_SIZE 32 -#define FIND_NOF_AVG_FRAMES 4 +#define FIND_NOF_AVG_FRAMES 2 int ue_sync_init(ue_sync_t *q, lte_cell_t cell, @@ -119,7 +119,7 @@ int ue_sync_init(ue_sync_t *q, sync_set_em_alpha(&q->sfind, 1); q->nof_avg_find_frames = 1; sync_set_threshold(&q->sfind, 2.0); - sync_set_threshold(&q->strack, 1.4); + sync_set_threshold(&q->strack, 1.2); /* Correct CFO in the find state but not in the track state, since is called only * 1 every 5 subframes. Will do it in the ue_sync_get_buffer() function. From d56fc6d26d5fe939172936b6c06a7c7bca3c9baa Mon Sep 17 00:00:00 2001 From: ismagom Date: Tue, 16 Dec 2014 17:30:37 +0000 Subject: [PATCH 48/55] Patch to install rrc ASN headers --- lte/phy/lib/fec/test/viterbi_test_mex.c | 81 +++++++++++++++ lte/phy/lib/phch/test/pbch_test_mex.c | 130 ++++++++++++++++++++++++ lte/rrc/CMakeLists.txt | 30 ++++++ lte/rrc/asn/CMakeLists.txt | 3 +- matlab/tests/test_pbch.m | 104 +++++++++++++++++++ matlab/tests/test_viterbi.m | 49 +++++++++ 6 files changed, 395 insertions(+), 2 deletions(-) create mode 100644 lte/phy/lib/fec/test/viterbi_test_mex.c create mode 100644 lte/phy/lib/phch/test/pbch_test_mex.c create mode 100644 matlab/tests/test_pbch.m create mode 100644 matlab/tests/test_viterbi.m diff --git a/lte/phy/lib/fec/test/viterbi_test_mex.c b/lte/phy/lib/fec/test/viterbi_test_mex.c new file mode 100644 index 000000000..6d4b2d82c --- /dev/null +++ b/lte/phy/lib/fec/test/viterbi_test_mex.c @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2012, Ismael Gomez-Miguelez . + * This file is part of ALOE++ (http://flexnets.upc.edu/) + * + * ALOE++ is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ALOE++ is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with ALOE++. If not, see . + */ + +#include +#include "liblte/phy/phy.h" +#include "liblte/mex/mexutils.h" + +/** MEX function to be called from MATLAB to test the channel estimator + */ + +#define INPUT prhs[0] +#define NOF_INPUTS 1 + + +void help() +{ + mexErrMsgTxt + ("[decoded_bits] = liblte_viterbi(input_llr, type)\n\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + viterbi_t viterbi; + float *input_llr; + uint8_t *output_data; + int nof_bits; + + if (nrhs < NOF_INPUTS) { + help(); + return; + } + + // Read input symbols + nof_bits = mexutils_read_f(INPUT, &input_llr); + + output_data = vec_malloc(nof_bits * sizeof(uint8_t)); + + uint32_t poly[3] = { 0x6D, 0x4F, 0x57 }; + if (viterbi_init(&viterbi, viterbi_37, poly, nof_bits/3, true)) { + return; + } + + if (nrhs >= 2) { + float gain_quant = mxGetScalar(prhs[1]); + viterbi_set_gain_quant(&viterbi, gain_quant); + } + + viterbi_decode_f(&viterbi, input_llr, output_data, nof_bits/3); + + if (nlhs >= 1) { + mexutils_write_uint8(output_data, &plhs[0], nof_bits/3, 1); + } + if (nlhs >= 2) { + mexutils_write_uint8(viterbi.symbols_uc, &plhs[1], nof_bits/3, 1); + } + + viterbi_free(&viterbi); + + free(input_llr); + free(output_data); + + return; +} + diff --git a/lte/phy/lib/phch/test/pbch_test_mex.c b/lte/phy/lib/phch/test/pbch_test_mex.c new file mode 100644 index 000000000..0679ea69d --- /dev/null +++ b/lte/phy/lib/phch/test/pbch_test_mex.c @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2012, Ismael Gomez-Miguelez . + * This file is part of ALOE++ (http://flexnets.upc.edu/) + * + * ALOE++ is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * ALOE++ is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with ALOE++. If not, see . + */ + +#include +#include "liblte/phy/phy.h" +#include "liblte/mex/mexutils.h" + +/** MEX function to be called from MATLAB to test the channel estimator + */ + +#define ENBCFG prhs[0] +#define INPUT prhs[1] +#define NOF_INPUTS 2 + + +void help() +{ + mexErrMsgTxt + ("[decoded_ok, symbols, bits] = liblte_pbch(enbConfig, inputSignal)\n\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + + int i; + lte_cell_t cell; + pbch_t pbch; + chest_dl_t chest; + lte_fft_t fft; + cf_t *input_symbols, *input_fft; + int nof_re; + cf_t *ce[MAX_PORTS], *ce_slot[MAX_PORTS]; + + if (nrhs != NOF_INPUTS) { + help(); + return; + } + + if (mexutils_read_cell(ENBCFG, &cell)) { + help(); + return; + } + + // Read input symbols + mexutils_read_cf(INPUT, &input_symbols); + + nof_re = SF_LEN_RE(cell.nof_prb, cell.cp); + + // Allocate memory + input_fft = vec_malloc(nof_re * sizeof(cf_t)); + for (i=0;i= 1) { + if (n == 1) { + plhs[0] = mxCreateDoubleScalar(nof_ports); + } else { + plhs[0] = mxCreateDoubleScalar(0); + } + } + if (nlhs >= 2) { + mexutils_write_cf(pbch.pbch_d, &plhs[1], pbch.nof_symbols, 1); + } + if (nlhs >= 3) { + mexutils_write_f(pbch.pbch_llr, &plhs[2], 2*pbch.nof_symbols, 1); + } + if (nlhs >= 4) { + mexutils_write_cf(ce[0], &plhs[3], SF_LEN_RE(cell.nof_prb,cell.cp)/14, 14); + } + if (nlhs >= 5) { + mexutils_write_cf(ce[1], &plhs[4], SF_LEN_RE(cell.nof_prb,cell.cp)/14, 14); + } + + chest_dl_free(&chest); + lte_fft_free(&fft); + pbch_free(&pbch); + + for (i=0;i 1) + plot(SNR_values_db, 1-error/Nrealizations) + grid on + xlabel('SNR (dB)'); + ylabel('Pdet') + legend('Matlab','libLTE') +else + disp(error) +end + diff --git a/matlab/tests/test_viterbi.m b/matlab/tests/test_viterbi.m new file mode 100644 index 000000000..06b49c82f --- /dev/null +++ b/matlab/tests/test_viterbi.m @@ -0,0 +1,49 @@ + +clear +blen=40; +SNR_values_db=linspace(-6,4,8); +Nrealizations=5000; + +addpath('../../debug/lte/phy/lib/fec/test') + +errors1=zeros(1,length(SNR_values_db)); +errors2=zeros(1,length(SNR_values_db)); +for snr_idx=1:length(SNR_values_db) + SNRdB = SNR_values_db(snr_idx); % Desired SNR in dB + SNR = 10^(SNRdB/20); % Linear SNR + + for i=1:Nrealizations + Data = randi(2,blen,1)==1; + codedData = lteConvolutionalEncode(Data); + + codedsymbols = 2*double(codedData)-1; + + %% Additive Noise + N0 = 1/SNR; + + % Create additive white Gaussian noise + noise = N0*randn(size(codedsymbols)); + + noisysymbols = noise + codedsymbols; + + decodedData = lteConvolutionalDecode(noisysymbols); + interleavedSymbols = reshape(reshape(noisysymbols,[],3)',1,[]); + [decodedData2, quant] = liblte_viterbi(interleavedSymbols); + + errors1(snr_idx) = errors1(snr_idx) + any(decodedData ~= Data); + errors2(snr_idx) = errors2(snr_idx) + any(decodedData2 ~= Data); + end +end + +if (length(SNR_values_db) > 1) + semilogy(SNR_values_db, errors1/Nrealizations, ... + SNR_values_db, errors2/Nrealizations) + grid on + xlabel('SNR (dB)') + ylabel('BLER') + legend('Matlab','libLTE'); +else + disp(errors1); + disp(errors2); + disp(errors3); +end \ No newline at end of file From 92e0db231c02775f292080e88daf8dc437cfcb06 Mon Sep 17 00:00:00 2001 From: ismagom Date: Wed, 17 Dec 2014 08:26:58 +0000 Subject: [PATCH 49/55] Fixed issue in PBCH decoding N_id_2=2. Changed measurements average to exponential. Moved MMSE diversity equalizer to ZF. --- lte/examples/cell_measurement.c | 23 ++++++++------- lte/examples/cell_scanner/cell_scanner.c | 2 +- lte/examples/pdsch_ue.c | 22 +++++++-------- lte/phy/lib/ch_estimation/src/chest_dl.c | 3 +- lte/phy/lib/mimo/src/precoding.c | 6 ++-- lte/phy/lib/phch/src/pbch.c | 10 +++++-- lte/phy/lib/phch/src/prb.c | 7 +++-- lte/phy/lib/phch/test/pbch_test_mex.c | 36 +++++++++++++++++++++--- lte/phy/lib/sync/src/pss.c | 13 ++------- lte/phy/lib/ue/src/ue_sync.c | 2 +- matlab/tests/test_pbch.m | 30 +++++++++----------- mex/include/liblte/mex/mexutils.h | 5 ++++ mex/lib/mexutils.c | 11 ++++++++ 13 files changed, 108 insertions(+), 62 deletions(-) diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index c9f19a0c6..f1ba543c0 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -350,17 +350,20 @@ int main(int argc, char **argv) { } break; case MEASURE: - /* Run FFT for all subframe data */ - lte_fft_run_sf(&fft, sf_buffer, sf_symbols); - chest_dl_estimate(&chest, sf_symbols, ce, ue_sync_get_sfidx(&ue_sync)); - - rssi = VEC_CMA(vec_avg_power_cf(sf_buffer,SF_LEN(lte_symbol_sz(cell.nof_prb))),rssi,nframes); - rssi_utra = VEC_CMA(chest_dl_get_rssi(&chest),rssi_utra,nframes); - rsrq = VEC_EMA(chest_dl_get_rsrq(&chest),rsrq,0.001); - rsrp = VEC_CMA(chest_dl_get_rsrp(&chest),rsrp,nframes); - snr = VEC_CMA(chest_dl_get_snr(&chest),snr,nframes); - nframes++; + if (ue_sync_get_sfidx(&ue_sync) == 5) { + /* Run FFT for all subframe data */ + lte_fft_run_sf(&fft, sf_buffer, sf_symbols); + + chest_dl_estimate(&chest, sf_symbols, ce, ue_sync_get_sfidx(&ue_sync)); + + rssi = VEC_CMA(vec_avg_power_cf(sf_buffer,SF_LEN(lte_symbol_sz(cell.nof_prb))),rssi,nframes); + rssi_utra = VEC_CMA(chest_dl_get_rssi(&chest),rssi_utra,nframes); + rsrq = VEC_EMA(chest_dl_get_rsrq(&chest),rsrq,0.001); + rsrp = VEC_EMA(chest_dl_get_rsrp(&chest),rsrp,0.001); + snr = VEC_EMA(chest_dl_get_snr(&chest),snr,0.001); + nframes++; + } // Plot and Printf if ((nframes%10) == 0) { diff --git a/lte/examples/cell_scanner/cell_scanner.c b/lte/examples/cell_scanner/cell_scanner.c index 9c62c0900..ff5e5ffe1 100644 --- a/lte/examples/cell_scanner/cell_scanner.c +++ b/lte/examples/cell_scanner/cell_scanner.c @@ -241,7 +241,7 @@ int cell_scanner_cell(cell_scanner_t *q, float frequency, int N_id_2, cell_scann result->rssi,nframes_measure); result->rsrq = VEC_EMA(chest_dl_get_rsrq(chest_ptr),result->rsrq,0.01); result->rsrp = VEC_CMA(chest_dl_get_rsrp(chest_ptr),result->rsrp,nframes_measure); - result->snr = VEC_CMA(chest_dl_get_snr(chest_ptr),result->snr,nframes_measure); + result->snr = VEC_EMA(chest_dl_get_snr(chest_ptr),result->snr,0.01); nframes_measure++; // Plot and Printf diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index afa0dfed2..6a945a9a1 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -246,7 +246,7 @@ int main(int argc, char **argv) { // Variables for measurements uint32_t nframes=0; - float rsrp=1.0, rsrq=1.0, snr=1.0; + float rsrp=0.0, rsrq=0.0, snr=0.0; /* Main loop */ while (!go_exit && (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1)) { @@ -276,6 +276,7 @@ int main(int argc, char **argv) { } break; case DECODE_SIB: + sfn=0; /* We are looking for SI Blocks, search only in appropiate places */ if ((ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { n = ue_dl_decode_sib(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), @@ -285,19 +286,18 @@ int main(int argc, char **argv) { exit(-1); } nof_trials++; - } - - rsrq = VEC_EMA(chest_dl_get_rsrq(&ue_dl.chest),rsrq,0.001); - rsrp = VEC_CMA(chest_dl_get_rsrp(&ue_dl.chest),rsrp,nframes); - snr = VEC_CMA(chest_dl_get_snr(&ue_dl.chest),snr,nframes); - nframes++; - - if (isnan(rsrq)) { - rsrq = 0; + + rsrq = VEC_EMA(chest_dl_get_rsrq(&ue_dl.chest),rsrq,0.001); + rsrp = VEC_EMA(chest_dl_get_rsrp(&ue_dl.chest),rsrp,0.001); + snr = VEC_EMA(chest_dl_get_snr(&ue_dl.chest),snr,0.001); + nframes++; + if (isnan(rsrq)) { + rsrq = 0; + } } // Plot and Printf - if (ue_sync_get_sfidx(&ue_sync) == 0) { + if (ue_sync_get_sfidx(&ue_sync) == 5) { printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, " "RSRP: %+5.1f dBm, RSRQ: %5.1f dB, SNR: %4.1f dB, " "PDCCH-Miss: %5.2f%%, PDSCH-BLER: %5.2f%% (%d blocks)\r", diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index b8fed7838..213ba7dac 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -359,7 +359,8 @@ float chest_dl_get_snr(chest_dl_t *q) { float snr = 0.0; for (int i=0;icell.nof_ports;i++) { if (q->noise_estimate[i]) { - snr += q->rsrp[i]/(q->noise_estimate[i]*sqrtf(2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb))); + float snr_i = q->rsrp[i]/(q->noise_estimate[i]*sqrtf(2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb))); + snr += snr_i; } } return snr/q->cell.nof_ports; diff --git a/lte/phy/lib/mimo/src/precoding.c b/lte/phy/lib/mimo/src/precoding.c index 46c035ebc..e0725ecc6 100644 --- a/lte/phy/lib/mimo/src/precoding.c +++ b/lte/phy/lib/mimo/src/precoding.c @@ -169,10 +169,10 @@ int predecoding_diversity(precoding_t *q, cf_t *y, cf_t *h[MAX_PORTS], cf_t *x[M vec_abs_square_cf(h0, modh0, nof_symbols/2); vec_abs_square_cf(h1, modh1, nof_symbols/2); vec_sum_fff(modh0, modh1, modhh, nof_symbols/2); - if (noise_estimate > 0.0) { + //if (noise_estimate > 0.0) { // (H'H + n0) - vec_sc_add_fff(modhh, noise_estimate, modhh, nof_symbols/2); - } + //vec_sc_add_fff(modhh, noise_estimate, modhh, nof_symbols/2); + //} vec_sc_prod_fff(modhh, 1/sqrt(2), modhh, nof_symbols/2); diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index 5beaf56d8..579aea90b 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -50,10 +50,14 @@ bool pbch_exists(int nframe, int nslot) { return (!(nframe % 5) && nslot == 1); } +cf_t *offset_original; + int pbch_cp(cf_t *input, cf_t *output, lte_cell_t cell, bool put) { int i; cf_t *ptr; - + + offset_original = input; + if (put) { ptr = input; output += cell.nof_prb * RE_X_RB / 2 - 36; @@ -66,9 +70,9 @@ int pbch_cp(cf_t *input, cf_t *output, lte_cell_t cell, bool put) { for (i = 0; i < 2; i++) { prb_cp_ref(&input, &output, cell.id % 3, 4, 4*6, put); if (put) { - output += cell.nof_prb * RE_X_RB - 2*36; + output += cell.nof_prb * RE_X_RB - 2*36 + (cell.id%3==2?1:0); } else { - input += cell.nof_prb * RE_X_RB - 2*36; + input += cell.nof_prb * RE_X_RB - 2*36 + (cell.id%3==2?1:0); } } /* symbols 2 & 3 */ diff --git a/lte/phy/lib/phch/src/prb.c b/lte/phy/lib/phch/src/prb.c index 40bac2014..a1e0fd729 100644 --- a/lte/phy/lib/phch/src/prb.c +++ b/lte/phy/lib/phch/src/prb.c @@ -32,17 +32,20 @@ #include "prb.h" #include "liblte/phy/common/phy_common.h" -//#define DEBUG_IDX +#define DEBUG_IDX #ifdef DEBUG_IDX extern cf_t *offset_original; +LIBLTE_API int indices[2048]; +int indices_ptr=0; #endif void print_indexes(cf_t *offset, int len) { #ifdef DEBUG_IDX for (int i=0;i NOF_INPUTS) { + cf_t *cearray; + mexutils_read_cf(prhs[NOF_INPUTS], &cearray); + for (i=0;i NOF_INPUTS + 1) { + noise_power = mxGetScalar(prhs[NOF_INPUTS+1]); + } else { + noise_power = chest_dl_get_noise_estimate(&chest); + } + for (int i=0;i= 1) { @@ -114,6 +133,15 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) if (nlhs >= 5) { mexutils_write_cf(ce[1], &plhs[4], SF_LEN_RE(cell.nof_prb,cell.cp)/14, 14); } + if (nlhs >= 6) { + mexutils_write_cf(pbch.pbch_symbols[0], &plhs[5], pbch.nof_symbols, 1); + } + if (nlhs >= 7) { + mexutils_write_cf(pbch.ce[0], &plhs[6], pbch.nof_symbols, 1); + } + if (nlhs >= 7) { + mexutils_write_int(indices, &plhs[7], 2048, 1); + } chest_dl_free(&chest); lte_fft_free(&fft); diff --git a/lte/phy/lib/sync/src/pss.c b/lte/phy/lib/sync/src/pss.c index 22c8710b1..62e7f4e23 100644 --- a/lte/phy/lib/sync/src/pss.c +++ b/lte/phy/lib/sync/src/pss.c @@ -302,10 +302,10 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) conv_output_len = conv_cc(input, q->pss_signal_freq[q->N_id_2], q->conv_output, q->frame_size, q->fft_size); #endif } else { - for (int i=0;iframe_size-1;i++) { + for (int i=0;iframe_size;i++) { q->conv_output[i] = vec_dot_prod_ccc(q->pss_signal_freq[q->N_id_2], &input[i], q->fft_size); } - conv_output_len = q->frame_size-1; + conv_output_len = q->frame_size; } @@ -363,14 +363,7 @@ int pss_synch_find_pss(pss_synch_t *q, cf_t *input, float *corr_peak_value) sl_left, 1000000*q->conv_output_avg[sl_left], 1000000*q->conv_output_avg[corr_peak_pos], 1000000*side_lobe_value,*corr_peak_value ); - } - - if (isnan(*corr_peak_value) || isinf(*corr_peak_value)) { - int i=0; - vec_save_file("corrout", q->conv_output_avg, conv_output_len*sizeof(float)); - exit(-1); - } - + } } #else if (corr_peak_value) { diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index 9a6ec8b0a..f38f5e4ce 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -103,7 +103,7 @@ int ue_sync_init(ue_sync_t *q, sync_set_threshold(&q->sfind, 1.1); sync_set_em_alpha(&q->sfind, 0.01); q->nof_avg_find_frames = FIND_NOF_AVG_FRAMES; - sync_set_threshold(&q->strack, 2.0); + sync_set_threshold(&q->strack, 1.2); } else { sync_set_N_id_2(&q->sfind, cell.id%3); diff --git a/matlab/tests/test_pbch.m b/matlab/tests/test_pbch.m index c15aa0a4b..47972e6c7 100644 --- a/matlab/tests/test_pbch.m +++ b/matlab/tests/test_pbch.m @@ -3,8 +3,9 @@ rmc = lteRMCDL('R.10'); NofPortsTx=2; -SNR_values_db=1;%linspace(-6,5,8); -Nrealizations=1; +SNR_values_db=linspace(-6,0,4); +Nrealizations=50; +enb = struct('NCellID',0,'NDLRB',50,'CellRefP',NofPortsTx,'CyclicPrefix','Normal','DuplexMode','FDD','NSubframe',0); cfg.Seed = 8; % Random channel seed @@ -42,22 +43,20 @@ for snr_idx=1:length(SNR_values_db) errorReal = zeros(Nrealizations,2); for i=1:Nrealizations - enb = struct('NCellID',311,'NDLRB',6,'CellRefP',NofPortsTx,'CyclicPrefix','Normal','DuplexMode','FDD','NSubframe',0); griddims = lteResourceGridSize(enb); % Resource grid dimensions L = griddims(2); - %rxWaveform = lteFadingChannel(cfg,waveform(:,1)); - %rxWaveform = waveform(:,1); + rxWaveform = lteFadingChannel(cfg,waveform(:,1)); %% Additive Noise - %N0 = 1/(sqrt(2.0*double(enb.CellRefP)*double(info.Nfft))*SNR); + N0 = 1/(sqrt(2.0*double(enb.CellRefP)*double(info.Nfft))*SNR); % Create additive white Gaussian noise - %noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform))); + noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform))); - %rxWaveform = noise + rxWaveform; + rxWaveform = noise + rxWaveform; - rxWaveform = downsampled; + % rxWaveform = downsampled; % Number of OFDM symbols in a subframe % OFDM demodulate signal @@ -71,17 +70,16 @@ for snr_idx=1:length(SNR_values_db) pbchIndices, rxgrid(:,1:L,:), hest(:,1:L,:,:)); % Decode PBCH - [bchBits, pbchSymbols, nfmod4, mib, enb.CellRefP] = ltePBCHDecode( ... + [bchBits, pbchSymbols, nfmod4, mib, nof_ports] = ltePBCHDecode( ... enb, pbchRx, pbchHest, nest); - % Parse MIB bits - enb = lteMIB(mib, enb); - if (enb.CellRefP ~= NofPortsTx) + if (nof_ports ~= NofPortsTx) errorReal(i,1)=1; end - enb = struct('NCellID',311,'NDLRB',6,'CellRefP',NofPortsTx,'CyclicPrefix','Normal','DuplexMode','FDD','NSubframe',0); - [nof_ports, pbchSymbols2, pbchBits, ce, ce2]=liblte_pbch(enb, rxWaveform); - if (nof_ports ~= NofPortsTx) + + [nof_ports2, pbchSymbols2, pbchBits, ce, ce2, pbchRx2, pbchHest2,indices]=... + liblte_pbch(enb, rxWaveform, hest, nest); + if (nof_ports2 ~= NofPortsTx) errorReal(i,2)=1; end % if (errorReal(i,1) ~= errorReal(i,2)) diff --git a/mex/include/liblte/mex/mexutils.h b/mex/include/liblte/mex/mexutils.h index 0c2aef266..c3cccda56 100644 --- a/mex/include/liblte/mex/mexutils.h +++ b/mex/include/liblte/mex/mexutils.h @@ -66,6 +66,11 @@ LIBLTE_API int mexutils_write_uint8(uint8_t *buffer, uint32_t nr, uint32_t nc); +LIBLTE_API int mexutils_write_int(int *buffer, + mxArray **ptr, + uint32_t nr, + uint32_t nc); + LIBLTE_API int mexutils_read_f(const mxArray *ptr, float **buffer); diff --git a/mex/lib/mexutils.c b/mex/lib/mexutils.c index 7706917a4..6297e4c60 100644 --- a/mex/lib/mexutils.c +++ b/mex/lib/mexutils.c @@ -138,3 +138,14 @@ int mexutils_write_uint8(uint8_t *buffer, mxArray **ptr, uint32_t nr, uint32_t n return -1; } } + +int mexutils_write_int(int *buffer, mxArray **ptr, uint32_t nr, uint32_t nc) { + *ptr = mxCreateNumericMatrix(nr, nc, mxINT32_CLASS, mxREAL); + if (*ptr) { + int *outr = (int*) mxGetPr(*ptr); + memcpy(outr, buffer, nr*nc*sizeof(int)); + return nc*nr; + } else { + return -1; + } +} From d6797964a5760feeff57114eed3acc3d627d60a8 Mon Sep 17 00:00:00 2001 From: ismagom Date: Wed, 17 Dec 2014 20:52:58 +0000 Subject: [PATCH 50/55] Scanner version working correctly --- lte/examples/cell_measurement.c | 72 +- lte/examples/pdsch_ue.c | 13 +- lte/phy/lib/ch_estimation/src/chest_dl.c | 33 +- .../ch_estimation/test/chest_test_dl_mex.c | 35 +- lte/phy/lib/fec/test/viterbi_test_mex.c | 35 +- lte/phy/lib/phch/test/CMakeLists.txt | 6 +- lte/phy/lib/phch/test/pbch_test_mex.c | 37 +- lte/phy/lib/phch/test/pdcch_test_mex.c | 107 +- lte/phy/lib/sync/test/pss_mex.c | 35 +- lte/phy/lib/sync/test/sss_mex.c | 35 +- matlab/tests/lteDLChannelEstimate2.m | 1202 ---------------- matlab/tests/lteDLChannelEstimate3.m | 1204 ----------------- matlab/tests/neighbour_cell_search.m | 61 - matlab/tests/pdcch_test.m | 105 -- matlab/tests/test_pbch.m | 102 -- matlab/tests/test_pdsch_resalloc.m | 76 -- matlab/tests/test_sss.m | 144 -- matlab/tests/test_viterbi.m | 49 - 18 files changed, 214 insertions(+), 3137 deletions(-) delete mode 100644 matlab/tests/lteDLChannelEstimate2.m delete mode 100644 matlab/tests/lteDLChannelEstimate3.m delete mode 100644 matlab/tests/neighbour_cell_search.m delete mode 100644 matlab/tests/pdcch_test.m delete mode 100644 matlab/tests/test_pbch.m delete mode 100644 matlab/tests/test_pdsch_resalloc.m delete mode 100644 matlab/tests/test_sss.m delete mode 100644 matlab/tests/test_viterbi.m diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index f1ba543c0..c82be280e 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -127,7 +127,7 @@ int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { extern float mean_exec_time; -enum receiver_state { DECODE_MIB, DECODE_SIB, DECODE_SIB4, MEASURE} state; +enum receiver_state { DECODE_MIB, DECODE_SIB, MEASURE} state; #define MAX_SINFO 10 #define MAX_NEIGHBOUR_CELLS 128 @@ -151,10 +151,6 @@ int main(int argc, char **argv) { uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; uint32_t sfn_offset; float rssi_utra=0,rssi=0, rsrp=0, rsrq=0, snr=0; - uint32_t si_window_length; - scheduling_info_t sinfo[MAX_SINFO]; - scheduling_info_t *sinfo_sib4 = NULL; - uint32_t neighbour_cell_ids[MAX_NEIGHBOUR_CELLS]; cf_t *ce[MAX_PORTS]; if (parse_args(&prog_args, argc, argv)) { @@ -234,10 +230,6 @@ int main(int argc, char **argv) { cuhd_start_rx_stream(uhd); - bool sib4_window_start = false; - uint32_t sib4_window_cnt = 0; - - /* Main loop */ while (sf_cnt < prog_args.nof_subframes || prog_args.nof_subframes == -1) { @@ -289,66 +281,12 @@ int main(int argc, char **argv) { bcch_dlsch_sib1_get_cell_access_info(dlsch_msg, &cell_info); printf("Decoded SIB1. Cell ID: 0x%x\n", cell_info.cell_id); bcch_dlsch_fprint(dlsch_msg, stdout); - /* Get SIB4 scheduling */ - int nsinfo = bcch_dlsch_sib1_get_scheduling_info(dlsch_msg, &si_window_length, sinfo, MAX_SINFO); - /* find SIB4 */ - for (int i=0;iperiod) == sinfo_sib4->n*si_window_length/10) && - ue_sync_get_sfidx(&ue_sync) == (sinfo_sib4->n*si_window_length%10)) { - sib4_window_start = true; - sib4_window_cnt = 0; - } - - /* We are looking for SI Blocks, search only in appropiate places */ - if (sib4_window_start && !(ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) - { - n = ue_dl_decode_sib(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), - ((int) ceilf((float)3*sib4_window_cnt/2))%4); - if (n < 0) { - fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - return -1; - } else if (n == 0) { - nof_trials++; - } else { - bit_unpack_vector(data, data_unpacked, n); - void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); - int nof_cell = bcch_dlsch_sib4_get_neighbour_cells(dlsch_msg, neighbour_cell_ids, MAX_NEIGHBOUR_CELLS); - - printf("Decoded SIB4. Neighbour cell list (PhyIDs): "); - for (int i=0;ipilot_estimates[port_id], q->tmp_noise, REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); - float noise_var = vec_avg_power_cf(q->tmp_noise, REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); - - /* compute noise power. Correction factor obtained through simulations */ - return 0.75 * sqrtf((float) q->filter_freq_len) * noise_var / sqrt(q->cell.nof_prb); + return vec_avg_power_cf(q->tmp_noise, REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); } - #define pilot_est(idx) q->pilot_estimates[port_id][REFSIGNAL_PILOT_IDX(idx,l,q->cell)] #define pilot_avg(idx) q->pilot_estimates_average[port_id][REFSIGNAL_PILOT_IDX(idx,l,q->cell)] #define pilot_tmp(idx) q->tmp_freqavg[REFSIGNAL_PILOT_IDX(idx,l,q->cell)] @@ -310,8 +308,13 @@ float chest_dl_rssi(chest_dl_t *q, cf_t *input, uint32_t port_id) { } float chest_dl_rsrp(chest_dl_t *q, uint32_t port_id) { - return vec_avg_power_cf(q->pilot_recv_signal[port_id], +#ifdef RSRP_FROM_ESTIMATES + return vec_avg_power_cf(q->pilot_estimates[port_id], REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); +#else + return vec_avg_power_cf(q->pilot_estimates_average[port_id], + REFSIGNAL_NUM_SF(q->cell.nof_prb, port_id)); +#endif } int chest_dl_estimate_port(chest_dl_t *q, cf_t *input, cf_t *ce, uint32_t sf_idx, uint32_t port_id) @@ -356,14 +359,8 @@ float chest_dl_get_noise_estimate(chest_dl_t *q) { } float chest_dl_get_snr(chest_dl_t *q) { - float snr = 0.0; - for (int i=0;icell.nof_ports;i++) { - if (q->noise_estimate[i]) { - float snr_i = q->rsrp[i]/(q->noise_estimate[i]*sqrtf(2*q->cell.nof_ports*lte_symbol_sz(q->cell.nof_prb))); - snr += snr_i; - } - } - return snr/q->cell.nof_ports; + // Uses RSRP as an estimation of the useful signal power + return chest_dl_get_rsrp(q)/chest_dl_get_noise_estimate(q); } float chest_dl_get_rssi(chest_dl_t *q) { @@ -380,9 +377,9 @@ float chest_dl_get_rsrq(chest_dl_t *q) { float chest_dl_get_rsrp(chest_dl_t *q) { // return linear average from port 0 only - return q->rsrp[0]; + //return q->rsrp[0]; // return linear average from all ports - //return vec_acc_ff(q->rsrp, q->cell.nof_ports)/q->cell.nof_ports; + return vec_acc_ff(q->rsrp, q->cell.nof_ports)/q->cell.nof_ports; } diff --git a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c index aacf7cbe7..165677538 100644 --- a/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c +++ b/lte/phy/lib/ch_estimation/test/chest_test_dl_mex.c @@ -1,19 +1,28 @@ -/* - * Copyright (c) 2012, Ismael Gomez-Miguelez . - * This file is part of ALOE++ (http://flexnets.upc.edu/) - * - * ALOE++ is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ALOE++ is distributed in the hope that it will be useful, +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ALOE++. If not, see . + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * */ #include diff --git a/lte/phy/lib/fec/test/viterbi_test_mex.c b/lte/phy/lib/fec/test/viterbi_test_mex.c index 6d4b2d82c..1a59785e7 100644 --- a/lte/phy/lib/fec/test/viterbi_test_mex.c +++ b/lte/phy/lib/fec/test/viterbi_test_mex.c @@ -1,19 +1,28 @@ -/* - * Copyright (c) 2012, Ismael Gomez-Miguelez . - * This file is part of ALOE++ (http://flexnets.upc.edu/) - * - * ALOE++ is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ALOE++ is distributed in the hope that it will be useful, +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ALOE++. If not, see . + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * */ #include diff --git a/lte/phy/lib/phch/test/CMakeLists.txt b/lte/phy/lib/phch/test/CMakeLists.txt index abc85bc61..0d8e30950 100644 --- a/lte/phy/lib/phch/test/CMakeLists.txt +++ b/lte/phy/lib/phch/test/CMakeLists.txt @@ -33,7 +33,7 @@ ADD_TEST(pbch_test_50 pbch_test -p 1 -n 50 -c 50) ADD_TEST(pbch_test_502 pbch_test -p 2 -n 50 -c 50) ADD_TEST(pbch_test_504 pbch_test -p 4 -n 50 -c 50) - BuildMex(MEXNAME pbch SOURCES pbch_test_mex.c LIBRARIES lte_phy liblte_mex) +BuildMex(MEXNAME pbch SOURCES pbch_test_mex.c LIBRARIES lte_phy liblte_mex) ######################################################################## @@ -49,7 +49,9 @@ ADD_TEST(pcfich_test_64 pcfich_test -p 4 -n 6) ADD_TEST(pcfich_test_10 pcfich_test -p 1 -n 10) ADD_TEST(pcfich_test_102 pcfich_test -p 2 -n 10) ADD_TEST(pcfich_test_104 pcfich_test -p 4 -n 10) - + +BuildMex(MEXNAME pcfich SOURCES pcfich_test_mex.c LIBRARIES lte_phy liblte_mex) + ######################################################################## # PHICH TEST ######################################################################## diff --git a/lte/phy/lib/phch/test/pbch_test_mex.c b/lte/phy/lib/phch/test/pbch_test_mex.c index 4de2167a9..88620d7e8 100644 --- a/lte/phy/lib/phch/test/pbch_test_mex.c +++ b/lte/phy/lib/phch/test/pbch_test_mex.c @@ -1,19 +1,28 @@ -/* - * Copyright (c) 2012, Ismael Gomez-Miguelez . - * This file is part of ALOE++ (http://flexnets.upc.edu/) - * - * ALOE++ is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ALOE++ is distributed in the hope that it will be useful, +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ALOE++. If not, see . + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * */ #include @@ -32,7 +41,7 @@ extern int indices[2048]; void help() { mexErrMsgTxt - ("[decoded_ok, symbols, bits] = liblte_pbch(enbConfig, inputSignal)\n\n"); + ("[decoded_ok, symbols, bits] = liblte_pbch(enbConfig, rxWaveform)\n\n"); } /* the gateway function */ diff --git a/lte/phy/lib/phch/test/pdcch_test_mex.c b/lte/phy/lib/phch/test/pdcch_test_mex.c index a5a1f3c33..0b96a8113 100644 --- a/lte/phy/lib/phch/test/pdcch_test_mex.c +++ b/lte/phy/lib/phch/test/pdcch_test_mex.c @@ -1,19 +1,28 @@ -/* - * Copyright (c) 2012, Ismael Gomez-Miguelez . - * This file is part of ALOE++ (http://flexnets.upc.edu/) - * - * ALOE++ is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ALOE++ is distributed in the hope that it will be useful, +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ALOE++. If not, see . + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * */ #include @@ -41,21 +50,22 @@ const uint32_t nof_common_formats = 2; void help() { mexErrMsgTxt - ("[decoded_ok, llr, rm, bits] = liblte_pdcch(enbConfig, RNTI, inputSignal)\n\n"); + ("[decoded_ok, llr, rm, bits, symbols] = liblte_pdcch(enbConfig, RNTI, rxWaveform)\n\n"); } /* the gateway function */ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { - - int i; + int i; lte_cell_t cell; pdcch_t pdcch; + chest_dl_t chest; + lte_fft_t fft; regs_t regs; dci_location_t locations[MAX_CANDIDATES]; uint32_t cfi, sf_idx; uint16_t rnti; - cf_t *input_symbols; + cf_t *input_fft, *input_signal; int nof_re; uint32_t nof_formats; dci_format_t *formats = NULL; @@ -78,6 +88,16 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) help(); return; } + + if (chest_dl_init(&chest, cell)) { + fprintf(stderr, "Error initializing equalizer\n"); + return; + } + + if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { + fprintf(stderr, "Error initializing FFT\n"); + return; + } rnti = (uint16_t) mxGetScalar(RNTI); @@ -97,23 +117,40 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) } /** Allocate input buffers */ - nof_re = mexutils_read_cf(INPUT, &input_symbols); - if (nof_re < 0) { - mexErrMsgTxt("Error reading input symbols\n"); - return; + if (mexutils_read_cf(INPUT, &input_signal) < 0) { + mexErrMsgTxt("Error reading input signal\n"); + return; } + input_fft = vec_malloc(SF_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); // Set Channel estimates to 1.0 (ignore fading) cf_t *ce[MAX_PORTS]; for (i=0;i NOF_INPUTS) { + cf_t *cearray; + mexutils_read_cf(prhs[NOF_INPUTS], &cearray); + for (i=0;i NOF_INPUTS + 1) { + noise_power = mxGetScalar(prhs[NOF_INPUTS+1]); + } else { + noise_power = chest_dl_get_noise_estimate(&chest); + } + + pdcch_extract_llr(&pdcch, input_fft, ce, noise_power, sf_idx, cfi); uint32_t nof_locations; if (rnti == SIRNTI) { @@ -125,8 +162,9 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) formats = ue_formats; nof_formats = nof_ue_formats; } - uint16_t crc_rem; + uint16_t crc_rem=0; dci_msg_t dci_msg; + bzero(&dci_msg, sizeof(dci_msg_t)); for (int f=0;f= 3) { - mexutils_write_f(pdcch.pdcch_rm_f, &plhs[2], 3*(dci_msg.nof_bits+16), 1); + mexutils_write_cf(pdcch.pdcch_symbols[0], &plhs[2], 36*pdcch.nof_cce, 1); } + chest_dl_free(&chest); + lte_fft_free(&fft); pdcch_free(&pdcch); regs_free(®s); + for (i=0;i. - * This file is part of ALOE++ (http://flexnets.upc.edu/) - * - * ALOE++ is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ALOE++ is distributed in the hope that it will be useful, +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ALOE++. If not, see . + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * */ #include diff --git a/lte/phy/lib/sync/test/sss_mex.c b/lte/phy/lib/sync/test/sss_mex.c index 3d34c201a..67ba089d8 100644 --- a/lte/phy/lib/sync/test/sss_mex.c +++ b/lte/phy/lib/sync/test/sss_mex.c @@ -1,19 +1,28 @@ -/* - * Copyright (c) 2012, Ismael Gomez-Miguelez . - * This file is part of ALOE++ (http://flexnets.upc.edu/) - * - * ALOE++ is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ALOE++ is distributed in the hope that it will be useful, +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with ALOE++. If not, see . + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * */ #include diff --git a/matlab/tests/lteDLChannelEstimate2.m b/matlab/tests/lteDLChannelEstimate2.m deleted file mode 100644 index e2d77b4d7..000000000 --- a/matlab/tests/lteDLChannelEstimate2.m +++ /dev/null @@ -1,1202 +0,0 @@ -%lteDLChannelEstimate Downlink channel estimation -% [HEST NOISEEST] = lteDLChannelEstimate(...) returns HEST, the estimated -% channel between each transmit and receive antenna and NOISEEST, an -% estimate of the noise power spectral density on the reference signal -% subcarriers. -% -% HEST is an M-by-N-by-NRxAnts-by-CellRefP (optionally -% M-by-N-by-NRxAnts-by-NLayers for UE-specific beamforming transmission -% schemes) array where M is the number of subcarriers, N is the number of -% OFDM symbols, NRxAnts is the number of receive antennas, CellRefP is -% the number of cell-specific reference signal antenna ports and NLayers -% is the number of transmission layers. Using the reference signals, an -% estimate of the power spectral density of the noise present on the -% estimated channel response coefficients is returned. -% -% [HEST NOISEEST] = lteDLChannelEstimate(ENB, RXGRID) returns the -% estimated channel coefficients using the method described in -% TS36.104/TS36.141 Annex E/F for the purposes of transmitter EVM -% testing. -% -% ENB is a structure and must contain the following fields: -% NDLRB - Number of downlink resource blocks -% CellRefP - Number of cell-specific reference signal antenna ports -% (1,2,4) -% NCellID - Physical layer cell identity -% NSubframe - Subframe number -% CyclicPrefix - Optional. Cyclic prefix length -% ('Normal'(default),'Extended') -% DuplexMode - Optional. Duplex mode ('FDD'(default),'TDD') -% Only required for 'TDD' duplex mode: -% TDDConfig - Optional. Uplink/Downlink Configuration (0...6) -% (default 0) -% SSC - Optional. Special Subframe Configuration (0...9) -% (default 0) -% Only required for CEC.Reference='CSIRS' below: -% CSIRefP - Number of CSI-RS antenna ports (1,2,4,8) -% CSIRSConfig - CSI-RS configuration index (TS 36.211 Table -% 6.10.5.2-1) -% CSIRSPeriod - Optional. CSI-RS subframe configuration: -% ('On'(default),'Off',Icsi-rs,[Tcsi-rs Dcsi-rs]) -% -% RXGRID is a 3-dimensional M-by-N-by-NRxAnts array of resource elements. -% The second dimension of RXGRID can contain any whole number of -% subframes worth of OFDM symbols i.e. for normal cyclic prefix each -% subframe contains 14 OFDM symbols, therefore N is a multiple of 14. -% Note: to adhere to the estimation method defined in TS36.104/TS36.141, -% RXGRID must contain 10 subframes. -% -% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CEC, RXGRID) returns the -% estimated channel using the method and parameters defined by the -% configuration structure CEC. -% -% CEC is a structure which defines the type of channel estimation -% performed. CEC must contain a set of the following fields: -% PilotAverage - Type of pilot averaging ('TestEVM', 'UserDefined') -% FreqWindow - Size of window in resource elements used to average -% over frequency. -% TimeWindow - Size of window in resource elements used to average -% over time -% InterpType - Type of 2D interpolation used(see griddata for types) -% InterpWindow - Interpolation window type: ('Causal','Non-causal', -% 'Centred','Centered'). Note: 'Centred' and 'Centered' -% are equivalent -% InterpWinSize - Interpolation window size: -% 'Causal','Non-causal' - any number >=1 -% 'Centred','Centered' - odd numbers >=1 -% -% The 'TestEVM' pilot averaging will ignore other structure fields in -% CEC, and the method follows that described in TS36.104/TS36.141 Annex -% E/F for the purposes of transmitter EVM testing. -% -% The 'UserDefined' pilot averaging uses a rectangular kernel of size -% CEC.FreqWindow-by-CEC.TimeWindow and performs a 2D filtering operation -% upon the pilots. Note that pilots near the edge of the resource grid -% will be averaged less as they have no neighbors outside of the grid, -% or a limited number of neighbors outside of the grid obtained by the -% creation of virtual pilots. -% -% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CHS, CEC, RXGRID) returns -% the estimated channel given cell-wide settings structure ENB, PDSCH -% transmission configuration CHS and channel estimator configuration CEC. -% CHS must include the following fields: -% TxScheme - Transmission scheme, one of: -% 'Port0' - Single-antenna port, Port 0 -% 'TxDiversity' - Transmit diversity scheme -% 'CDD' - Large delay CDD scheme -% 'SpatialMux' - Closed-loop spatial multiplexing scheme -% 'MultiUser' - Multi-user MIMO scheme -% 'Port5' - Single-antenna port, Port 5 -% 'Port7-8' - Single-antenna port, port 7 (when -% NLayers=1); Dual layer transmission, port 7 -% and 8 (when NLayers=2) -% 'Port8' - Single-antenna port, Port 8 -% 'Port7-14' - Up to 8 layer transmission, ports 7-14 -% PRBSet - A 1- or 2-column matrix, containing the 0-based Physical -% Resource Block indices (PRBs) corresponding to the resource -% allocations for this PDSCH. -% RNTI - Radio Network Temporary Identifier (16-bit) -% -% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission -% schemes, the channel estimator configuration structure CEC contains the -% following additional field: -% Reference - Optional. Specifies point of reference (signals to -% internally generate) for channel estimation. -% ('DMRS'(default), 'CSIRS') -% -% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission -% schemes, with Reference='DMRS', the channel estimation is performed -% using UE-specific reference signals and the returned channel estimate -% will be of size M-by-N-by-NRxAnts-by-NLayers. Alternatively, with -% Reference='CSIRS' the channel estimation is performed using the CSI -% reference signals (CSI) and the returned channel estimate will be of -% size M-by-N-by-NRxAnts-by-CSIRefP. For other transmission schemes the -% channel estimation is performed using cell-specific reference signals -% and the channel estimate will be of size M-by-N-by-NRxAnts-by-CellRefP. -% Note that CSI-RS based channel estimation and hence Reference='CSIRS' -% is strictly only valid within the standard for the 'Port7-14' -% transmission scheme. The optional CSIRSPeriod parameter controls the -% downlink subframes in which CSI-RS will be present, either always 'On' -% or 'Off', or defined by the scalar subframe configuration index Icsi-rs -% (0...154) or the explicit subframe periodicity and offset pair [Tcsi-rs -% Dcsi-rs] (TS 36.211 Section 6.10.5.3). -% -% For the 'Port7-8' and 'Port7-14' transmission schemes with -% 'UserDefined' pilot averaging, if CEC.TimeWindow = 2 or 4 and -% CEC.FreqWindow=1 the estimator will enter a special case where an -% averaging window of 2 or 4 pilots in time will be used to average the -% pilot estimates; the averaging is always applied across 2 or 4 pilots, -% regardless of their separation in OFDM symbols. This operation ensures -% that averaging is always done on 2 or 4 pilots. This provides the -% appropriate "despreading" operation required for the case of UE RS -% ports / CSI-RS ports which occupy the same time/frequency locations but -% use different orthogonal covers to allow them to be differentiated at -% the receiver. For the CSI-RS and any number of configured CSI-RS ports -% (given by ENB.CSIRefP), the pilot REs occur in pairs, one pair per -% subframe, that require averaging with CEC.TimeWindow=2 and will result -% in a single estimate per subframe. For the UE RS with between 1 and 4 -% layers (given by CHS.NLayers), the pilot REs occur in pairs, repeated -% in each slot, that require averaging with CEC.TimeWindow=2 and will -% result in two estimates per subframe, one for each slot; for between 5 -% and 8 layers, the pairs are distinct between the slots of the subframe -% and the required averaging is CEC.TimeWindow=4, resulting in one -% estimate per subframe. -% -% Example: -% Transmit RMC R.12 (4-antenna transmit diversity), model the propagation -% channel by combining all transmit antennas onto one receive antenna, -% OFDM demodulate and finally channel estimate. -% -% enb = lteRMCDL('R.12'); -% cec = struct('FreqWindow',1,'TimeWindow',1,'InterpType','cubic',... -% 'PilotAverage','UserDefined','InterpWinSize',3,... -% 'InterpWindow','Causal'); -% txWaveform = lteRMCDLTool(enb,[1;0;0;1]); -% rxWaveform = sum(txWaveform,2); -% rxGrid = lteOFDMDemodulate(enb,rxWaveform); -% hest = lteDLChannelEstimate(enb,cec,rxGrid); -% -% See also lteOFDMDemodulate, lteEqualizeMMSE, lteEqualizeZF, -% lteDLPerfectChannelEstimate, griddata. - -% Copyright 2009-2013 The MathWorks, Inc. - -function [H_EST, NoisePowerEst, AvgEstimates, Estimates] = lteDLChannelEstimate2(varargin) - - if(isstruct(varargin{2})) - if(isstruct(varargin{3})) - PDSCH = varargin{2}; - CEC = varargin{3}; - RXGRID = varargin{4}; - else - PDSCH = []; - CEC = varargin{2}; - RXGRID = varargin{3}; - end - else - % If no configuration structure then use the TestEVM method - PDSCH = []; - CEC.PilotAverage = 'TestEVM'; - RXGRID = varargin{2}; - end - - ENB = varargin{1}; - % Get dimensions of resource grid - Dims = lteDLResourceGridSize(ENB); - K = Dims(1); - Lsf = Dims(2); - - % Determine number of subframes - nsfs = size(RXGRID,2)/Dims(2); - - % Determine number of Tx- and RxAntennas - NRxAnts = size(RXGRID,3); - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) - if (~isfield(CEC,'Reference')) - CEC.Reference='DMRS'; - end - if (strcmpi(CEC.Reference,'DMRS')==1) - NTx = PDSCH.NLayers; - elseif (strcmpi(CEC.Reference,'CSIRS')==1) - NTx = ENB.CSIRefP; - else - error('lte:error','Reference must be "DMRS" or "CSIRS", see help for details.'); - end - else - if (~isfield(CEC,'Reference')) - CEC.Reference='CellRS'; - end - NTx = ENB.CellRefP; - end - - % Initialize size of estimated channel grid - H_EST = zeros([size(RXGRID,1) size(RXGRID,2) size(RXGRID,3) NTx]); - - % Preallocate noise power estimate vector for speed - noiseVec = zeros(size(NRxAnts,NTx)); - - if (NTx == 4) - nn=3; - else - nn=NTx; - end - RefEstimates=zeros(nn,2*2*2*ENB.NDLRB*10); - - for rxANT = 1:NRxAnts - for nTxAntLayer = 1:NTx - - % Extract pilot symbols from received grid and calculate least - % squares estimate - [ls_estimates,specialvec,DwPTS]= GetPilotEstimates(ENB,nTxAntLayer-1,RXGRID(:,:,rxANT),PDSCH,CEC); - - Estimates(nTxAntLayer,1:length(ls_estimates(3,:))) = ls_estimates(3,:); - - % Average the pilots as defined by CEC.PilotAverage, this can - % be 'UserDefined' or 'TestEVM'. - % Note: Setting the window size to 1x1 is equivalent to no - % averaging. It is recommended that no averaging should be - % carried out when a high SNR is present, as this would have an - % adverse effect on the least squares estimates - if strcmpi(CEC.PilotAverage,'UserDefined')&&(CEC.FreqWindow==1)&&(CEC.TimeWindow==1) - P_EST = ls_estimates; - ScalingVec = 0; - else - [P_EST, ScalingVec]= PilotAverage(PDSCH,CEC,H_EST,ls_estimates); - end - - AvgEstimates(nTxAntLayer,1:length(P_EST(3,:))) = P_EST(3,:); - - if strcmpi(CEC.PilotAverage,'TestEVM') - % Channel estimation as defined in TS36.141 Annex F.3.4 is - % performed, the pilots are averaged in time and frequency - % and the resulting vector is linearly interpolated. - %---------------------- - % Interpolate eq coefficients extrapolating to account for - % missing pilots at the edges - interpEqCoeff = interp1(find(P_EST~=0),P_EST(P_EST~=0),(1:length(P_EST)).','linear','extrap'); - % --------------------- - % The DC carrier needs to be accounted for during - % interpolation - % Get pilot symbol index values - ind = lteCellRSIndices(ENB,0); - % Using initial index value calculate position of pilot - % symbols within interpolated coefficients - if ind(1)-3>0 - vec = (ind(1)-3):3:K; - else - vec = ind(1):3:K; - end - % Determine the index values of the pilots either side of - % the DC carrier - preDC = vec(length(vec)/2); - postDC = vec(1+length(vec)/2); - % Interpolate the section using the DC carrier and insert - % this into the interpolated vector containing the - % coefficients - interpEqCoeffTemp = interp1(1:4:5,[interpEqCoeff(preDC) interpEqCoeff(postDC)],1:5,'linear'); - interpEqCoeff(preDC:K/2) = interpEqCoeffTemp(1:length(interpEqCoeff(preDC:K/2))); - interpEqCoeff(1+K/2:postDC) = interpEqCoeffTemp(2+length(interpEqCoeff(preDC:K/2)):end); - %---------------------- - % Generate grid by replicating estimated equalizer channel - % coefficients - H_EST(:,:,rxANT,nTxAntLayer) = repmat(interpEqCoeff,1,Lsf*nsfs); - % The value of the noise averaged pilot symbols are placed - % into P_EST(3,:) matrix and these are used to determine - % the noise power present on the pilot symbol estimates of - % the channel. - P_EST = ls_estimates; - tempGrid = squeeze(H_EST(:,:,rxANT,nTxAntLayer)); - P_EST(3,:) = tempGrid(sub2ind(size(H_EST),P_EST(1,:),P_EST(2,:))); - - else - % Channel estimation is performed by analyzing up to - % 'CEC.InterpWinSize' subframes together and estimating - % virtual pilots outwith the bounds of the subframe. - % Averaging window can be set to Causal, Non-causal or - % Centred, Centered. - - % Using the desired subframeAveraging type the initial - % position of the window is determined - if(CEC.InterpWinSize>=1) - if strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered') - % For Centered averaging the window size must be odd - if ~mod(CEC.InterpWinSize,2) - error('lte:error','Window size must be odd for centered window type'); - end - % For Centered windowing both current,future and past - % data are used to estimate current channel coefficients - x = floor(CEC.InterpWinSize/2); - y = floor(CEC.InterpWinSize/2); - elseif strcmpi(CEC.InterpWindow,'Causal') - % For causal windowing current and past data are used - % to estimate current subframe channel coefficients - x = 0; - y = CEC.InterpWinSize-1; - elseif strcmpi(CEC.InterpWindow,'Non-causal') - % For non-causal windowing current and future data are - % used to estimate current subframe channel - % coefficients - x = CEC.InterpWinSize-1; - y = 0; - else - error('lte:error','Channel estimation structure field InterpWindow must be one of the following: Causal,Non-causal,Centred,Centered'); - end - else - error('lte:error','InterpWinSize cannot be less than 1'); - end - - % Interpolate using averaged pilot estimates and defined - % interpolation settings - for sf = 0:nsfs-1 - if specialvec(sf+1)=='U' - H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = NaN; - else - % Extract the pilots from required subframes - p_use = P_EST; - p_use(:,p_use(4,:)>(sf+1)+x)=[]; - p_use(:,p_use(4,:)<(sf+1)-y)=[]; - - % Account for DC offset - p_use(1,(p_use(1,:)>K/2)) = p_use(1,(p_use(1,:)>K/2))+1; - - if strcmpi(CEC.InterpType,'Cubic')||strcmpi(CEC.InterpType,'Linear') - % VPVEC is used to determine if virtual pilots are - % needed at the beginning or end of the - % interpolation window, if the current subframe,sf, - % is located at beginning or end of the window then - % virtual pilots are created accordingly - vpvec = unique(p_use(4,:)); - - if (strcmp(CEC.Reference,'CellRS')==1) - % Create virtual pilots and append to vector - % containing pilots using cell-specific RS - % methodology. - vps = createVirtualPilots(ENB,p_use(1:3,:),1,1,(sf+1==min(vpvec)),(sf+1==max(vpvec))); - p_use = [p_use(1:3,:) vps]; - else - % Create edge virtual pilots suitable for - % UE RS which can have partial bandwidth, - % or CSI-RS. - if (~isempty(p_use)) - vps = createEdgeVirtualPilots(ENB,p_use(1:3,:)); - p_use = [p_use(1:3,:) vps]; - end - end - end - % Perform 2D interpolation - % Interpolation is carried out on a (K+1)-by-L - % matrix to account for DC offset being added in - if (~isempty(p_use)) - Htemp = griddata(p_use(2,:)-Lsf*sf,p_use(1,:),p_use(3,:),1:Lsf,(1:K+1)',CEC.InterpType); %#ok - % Remove DC offset - Htemp(1+(K/2),:) = []; - - if specialvec(sf+1)=='S' - Htemp(:,DwPTS+1:Lsf) = NaN; - end - H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = Htemp; - - if isnan(H_EST) - error('lte:error','H_EST NaN'); - end - end - end - end - end - if nTxAntLayer<3 || (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'}))) - % The noise level present can be determined using the noisy - % least squares estimates of the channel at pilot symbol - % locations and the noise averaged pilot symbol estimates of the - % channel - noise = ls_estimates(3,~isnan(ls_estimates(3,:))) - P_EST(3,~isnan(P_EST(3,:))); - if strcmpi(CEC.PilotAverage,'UserDefined') - noise = sqrt(ScalingVec./(ScalingVec+1)).*noise; - end - - % Additional averaging for noise estimation in LTE-A case, - % to suppress interference from orthogonal sequences on - % other antennas in same time-frequency locations. - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... - (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) - if (~isempty(ls_estimates)) - if (strcmpi(CEC.Reference,'DMRS')==1) - temp=[]; - pilotSC = unique(ls_estimates(1,:)); - for i = pilotSC - x=find(ls_estimates(1,:)==i); - x=[x(1) x(end)]; - temp=[temp mean(noise(x))*2]; %#ok - end - noise=temp; - end - end - end - - % Taking the variance of the noise present on the pilot symbols - % results in a value of the noise power for each transmit and - % receive antenna pair - if (isempty(noise)) - noiseVec(rxANT,nTxAntLayer)=NaN; - else - noiseVec(rxANT,nTxAntLayer) = mean(noise.*conj(noise)); - end - end - end - end - - % The mean of the noise power across all the transmit/receive antenna - % pairs is used as the estimate of the noise power - NoisePowerEst = mean(mean(noiseVec)); - %NoisePowerEst = noiseVec(2); -end - -% GetPilotEstimates Obtain the least squares estimates of the reference -% signals -% [ls_estimates] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID) Extracts the -% reference signals for a specific transmit/receive antenna pair and -% calculates their least squares estimate. The results are placed in a -% 3xNp matrix containing the subcarrier and OFDM symbol location, row and -% column subscripts, and value. Np is the number of cell specific -% reference (pilot) symbols per resource grid -% -% RXGRID is an MxN array where M is the number of subcarriers, -% N is the number of OFDM symbols. Dimension M must be -% 12*NDLRB where NDLRB must be {6,15,25,50,75,100}. -% Dimension N must be a multiple of number of symbols in a subframe L, -% where L=14 for normal cyclic prefix and L=12 for extended cyclic -% prefix. -% -% nTxAntLayer defines which transmit antennas' or layers' pilot symbols to extract -% -% ENB is a structure and must contain the following fields: -% NDLRB - Number of downlink resource blocks -% NCellID - Physical layer cell identity -% CellRefP - Number of transmit antenna ports {1,2,4} -% CyclicPrefix - Optional. Cyclic prefix length{'Normal'(default),'Extended'} -% -% -% Example -% Return the least squares estimate of the pilots symbols in a 3xNp array -% where the first row is the subcarrier index,k the second row is the OFDM -% symbol,l and the third row defines the least squares estimate of the -% pilot located at that position. -% -% enb=struct('NDLRB',6,'CellRefP',1,'NCellID',0,'CyclicPrefix','Normal'); -% rxGrid=ones(lteDLResourceGridSize(enb)); -% nTxAntLayer=0; -% ls_estimates = GetPilotEstimates(enb,nTxAntLayer,rxGrid).' -% ans = -% 1.0000 1.0000 -0.7071 - 0.7071i -% 7.0000 1.0000 -0.7071 - 0.7071i -% 13.0000 1.0000 -0.7071 - 0.7071i -% . . . -% . . . -% . . . -% 58.0000 12.0000 -0.7071 + 0.7071i -% 64.0000 12.0000 0.7071 - 0.7071i -% 70.0000 12.0000 0.7071 - 0.7071i - -% Copyright 2009-2010 The MathWorks, Inc. -function [ls_estimates,specialvec,DwPTS] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID,PDSCH,CEC) - -% Get dimensions of resource grid -Dims = lteDLResourceGridSize(ENB); -nsfs = size(RXGRID,2)/Dims(2); -K = Dims(1); -L = Dims(2); - -if (rem(nsfs,1)~=0) - error('lte:error','The received grid input must contain a whole number of subframes.'); -end - -if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) - if (strcmp(CEC.Reference,'DMRS')==1) - % create UE RS indices - PDSCH.NTxAnts=0; - PDSCH.W=[]; - linearIndSF = lteDMRSIndices(ENB,PDSCH,'mat'); - else - % create CSI-RS indices and symbols and deal with zero removal - linearIndSF = lteCSIRSIndices(ENB,'mat'); - CsiRS = lteCSIRS(ENB,'mat'); - CsiRS = CsiRS(:,nTxAntLayer+1); - linearIndSF(CsiRS==0,:)=[]; - CsiRS(CsiRS==0)=[]; - end - % If more than one TxAntenna is used we need to adjust indices values so that - % they start in first antenna plane - linearIndSF = linearIndSF(:,nTxAntLayer+1) - (K*L*nTxAntLayer); -else - % Extract linear indices of reference signals for particular TxAntenna - dumENB = ENB; - dumENB.NSubframe = 0; - linearIndSF = lteCellRSIndices(dumENB,nTxAntLayer); - % If more than one TxAntenna is used we need to adjust indices values so that - % they start in first antenna plane - linearIndSF = linearIndSF - (K*L*nTxAntLayer); -end - -% Create grid for pilot symbols -linearIndGrid = zeros(size(linearIndSF,1),nsfs); -idealPilotGrid = zeros(size(linearIndSF,1),nsfs); -offset = double(ENB.NSubframe); -specialvec = char(zeros(1,0)); -DwPTS = 0; -for sf = ENB.NSubframe:ENB.NSubframe+nsfs-1 - ENB.NSubframe = mod(sf,10); - linearIndGrid(:,sf-offset+1) = (linearIndSF+(sf*K*L)); - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) - if (strcmp(CEC.Reference,'DMRS')==1) - % create UE RS symbols - DMRS = lteDMRS(ENB,PDSCH,'mat'); - idealPilotGrid(1:length(DMRS),sf-offset+1) = DMRS(:,nTxAntLayer+1); - else - % use CSI-RS symbols created earlier - idealPilotGrid(1:length(CsiRS),sf-offset+1) = CsiRS; - end - else - CellRS = lteCellRS(ENB, nTxAntLayer); - idealPilotGrid(1:length(CellRS),sf-offset+1) = CellRS; - end - dupinfo = lteDuplexingInfo(ENB); - if strcmpi(dupinfo.SubframeType,'Special') - specialvec = [specialvec 'S']; %#ok - DwPTS = dupinfo.NSymbolsDL; - elseif strcmpi(dupinfo.SubframeType,'Uplink') - specialvec = [specialvec 'U']; %#ok - elseif strcmpi(dupinfo.SubframeType,'Downlink') - specialvec = [specialvec 'D']; %#ok - else - error('lte:error','Invalid SubframeType, in structure dupinfo'); - end -end - -if (~isempty(idealPilotGrid)) - ulvec = find(idealPilotGrid(size(idealPilotGrid,1),:)==0); - linearIndGrid(:,ulvec) = []; - idealPilotGrid(:,ulvec) = []; -else - ulvec = []; -end - -linearIndGrid = linearIndGrid - (offset*K*L); -% Extract the row and column subscripts of the pilot symbols for entire -% grid -[p_estSC, p_estSym] = ind2sub(size(RXGRID),linearIndGrid); - -% Calculate least squares channel estimates at pilot locations -p_est = RXGRID(linearIndGrid)./idealPilotGrid; - -% Create a vector - [k;l;p_est] -sfref = repmat((1:nsfs),length(linearIndSF),1); -sfref(:,ulvec) = []; -ls_estimates = [double(p_estSC(:).') ; double(p_estSym(:).') ; p_est(:).';double(sfref(:)).']; - -end - -%PilotAverage Average reference signals -% [P_EST] = PilotAverage(PDSCH,CEC,H_EST,LS_EST) performs a moving average of pilot -% symbols -% -% LS_EST is a 3xNp matrix containing the least square estimates of the -% pilots symbols and their column and row indices within the received -% grid. -% LS_EST = [k;l;p_est] -% H_EST is an MxN matrix and defines the size of the grid that the -% averaging will be performed on -% -% CEC is a structure which defines the type of channel estimation -% performed. CEC must contain a set of the following fields: -% PilotAverage - Type of pilot averaging {'TestEVM', 'UserDefined'} -% FreqWindow - Size of window used to average in frequency in -% resource elements. -% TimeWindow - Size of window used to average in time in resource -% elements -% InterpType - Type of 2D interpolation used(see griddata for types) -% -% The dimensions of the averaging window are defined in structure CEC. -% The window is defined in terms of Resource Elements, and depending on -% the size of the averaging window, averaging will be performed in either -% the time or frequency direction only, or a combination of both creating -% a square/rectangular window. The pilot to be averaged will always be -% placed at the center of the window, therefore the window size must be -% an odd number. -% -% Frequency Direction: 9x1 Time Direction: 1x9 -% -% x -% x -% x -% x -% P x x x x P x x x x -% x -% x -% x -% x -% -% -% Square window: 9x9 -% x x x x x x x x x -% P x x x x x x P x -% x x x x x x x x x -% x x x x x x x x x -% x x x x P x x x x -% x x x x x x x x x -% x x x x x x x x x -% P x x x x x x P x -% x x x x x x x x x -% -% Performing EVM compliance testing as per TS36.141 AnnexF.3.4, requires -% time averaging be done over 10 subframes(i.e. 1 Frame) across each -% pilot symbol carrying subcarrier creating a TotalNumberPilotsx1 vector. -% This is then frequency averaged using a moving window average with a window -% size of 19. This type of averaging can be performed by setting the -% PilotAverage type in structure CEC to 'TestEVM'. - -% Copyright 2009-2013 The MathWorks, Inc. - -function [P_EST, scalingVec] = PilotAverage(PDSCH,CEC,H_EST,P_EST) - - switch lower(CEC.PilotAverage) - - case 'userdefined' - if(CEC.FreqWindow<1)||(CEC.TimeWindow<1) - error('lte:error','Frequency and time averaging window size cannot be less than 1'); - end - - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... - (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) - - % Perform averaging in time direction using a moving window - % of size N = CEC.TimeWindow - N = CEC.TimeWindow; - - if (~isempty(P_EST)) - % Average only subcarriers which contain RS symbols. Extract RS - % symbols on a per subcarrier basis and use window to average. - for subcarrier = unique(P_EST(1,:)) - - % Store DRS symbols from relevant slot in vector for easy access - symbVec = (P_EST(3,P_EST(1,:)==subcarrier)).'; - - % Define temporary vector to store the averaged values - avgVec = zeros(size(symbVec)); - - % Check length of input at least equal to size of window; - % if not, reduce window size. Despreading will be incomplete - % here - if (length(symbVec) < N) - N = length(symbVec); - end - - % Determines position of window w.r.t element being averaged, - % and performs the averaging - for symbNo = 1:length(symbVec) - if (symbNo-(N/2+1)<=0) - avgVec(symbNo)= sum(symbVec(1:N))/N; - else - avgVec(symbNo) = sum(symbVec(end-(N-1):end))/N; - end - end - - % Update P_EST with averaged values - P_EST(3,P_EST(1,:)==subcarrier)= avgVec; - end - - end - - % This vector is used to scale the noise by the number of averaging - % elements in the window - scalingVec = ones(size(P_EST(3,:)))*N; - - else - - if (strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered')) - if (~mod(CEC.FreqWindow,2)||~mod(CEC.TimeWindow,2)) - error('lte:error','Window size must be odd in time and frequency for centred/centered window type'); - end - end - - % Define number of subcarriers - K = size(H_EST,1); - - % Define an empty resource grid with the DC offset subcarrier - % inserted - grid = zeros(size(H_EST,1)+1,size(H_EST,2)); - - % Account for DC offset - P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))+1; - - % Place the pilot symbols back into the received grid with the - % DC offset subcarrier in place - grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = P_EST(3,:); - - % Define convolution window - kernel = ones(CEC.FreqWindow,CEC.TimeWindow); - - % Perform convolution - grid2=grid; - grid = conv2(grid,kernel,'same'); - - % Extract only pilot symbol location values and set the rest of - % the grid to zero - tempGrid = zeros(size(grid)); - tempGrid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))); - grid = tempGrid; - - % Normalize pilot symbol values after convolution - [grid, scalingVec] = normalisePilotAverage(CEC,P_EST,grid); - - % Place averaged values back into pilot symbol matrix - P_EST(3,:) = grid(sub2ind(size(tempGrid),P_EST(1,:),P_EST(2,:))); - - % Remove DC offset - P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))-1; - - end - - - case 'testevm' - % As defined in TS36.141 Annex F.3.4 pilots are averaged in - % time across all pilot carrying subcarriers. The resulting - % vector is averaged in frequency direction with a moving - % averaging window of 19. - - % Get phase (theta) and magnitude(radius) of complex estimates - [theta,radius] = cart2pol(real(P_EST(3,:)),imag(P_EST(3,:))); - - % Declare vector to temporarily store averaged phase and - % magnitude - phasemagVec = zeros(size(H_EST,1),2); - - % Perform averaging in time and frequency for phase and - % magnitude separately and recombine at end - for phaseOrMag = 1:2 - % Define temporary P_EST vector and set estimates row to - % phase then magnitude - P_EST_temp = P_EST; - if phaseOrMag==1 - P_EST_temp(3,:) = theta; - elseif phaseOrMag==2 - P_EST_temp (3,:) = radius; - end - - % Declare averaging vector - avgVec = zeros(size(H_EST,1),1); - vec = []; - - % Average across pilot symbol carrying subcarriers in time, - % unwrapping performed on a subcarrier basis - for i = 1:size(H_EST,1) - if ~isempty(P_EST(3,(P_EST(1,:)==i))) - if phaseOrMag==1 - avgVec(i) = mean(unwrap(P_EST_temp(3,(P_EST(1,:)==i)))); - - elseif phaseOrMag==2 - avgVec(i) = mean(P_EST_temp(3,(P_EST(1,:)==i))); - end - vec = [vec i]; %#ok - end - end - - % Remove subcarriers which contained no pilot symbols, then - % perform frequency averaging - avgVec = avgVec(vec); - - % Perform averaging in frequency direction using a moving - % window of size N, N = 19 in TS36.141 Annex F.3.4 - % Performs a moving average of window size N. At the edges, where less than - % N samples are span the window size is reduce to span 1, 3, 5, 7 ... - % samples. - N = 19; - - % avgVec must be a column vector - if (size(avgVec,2) > 1) - error('lte:error','Input to moving average function must be a column vector.') - end - - % N max window size 19 as defined in Annex F.3.4 - if ~mod(N,2) - error('lte:error','Window size N must be odd'); - end - - if (length(avgVec) < N) - % sprintf ('Input signal must have at least %d elements',N); - error('lte:error','Input signal must have at least %d elements',N); - end - - % Use filter to perform part of the averaging (not normalized) - zeroPad = zeros(N-1,1); - data = [avgVec; zeroPad]; - weights = ones(N,1); - freqAvg = filter(weights,1,data); - - % Remove unwanted elements - removeIdx = [ 2:2:N ( length(data)-(2:2:N)+1 )]; - freqAvg(removeIdx) = []; - - % Normalization factor - normFactor = [1:2:N-2 N*ones(1,length(freqAvg)-(N-1)) N-2:-2:1]'; - freqAvg = freqAvg./normFactor; - - % Place frequency averaged pilots into temporary storage - % vector - phasemagVec(vec,phaseOrMag) = freqAvg; - - end - % Convert averaged symbols back to Cartesian coordinates - [X,Y] = pol2cart(phasemagVec(:,1),phasemagVec(:,2)); - P_EST = complex(X,Y); - scalingVec = []; - - otherwise - error('lte:error','Channel estimation structure field PilotAverage must be one of the following: "UserDefined" or "TestEVM"'); - - end -end - -function [avgGrid, scalingVec] = normalisePilotAverage(CEC,p_est,grid) - - % Determine total number of pilots within half a subframe - nPilots = length(p_est); - - avgGrid = zeros(size(grid)); - scalingVec = zeros(1,size(p_est,2)); - - for n = 1:nPilots - % Determine in which subcarrier and OFDM symbol pilot is located - sc = p_est(1,n); - sym = p_est(2,n); - % Determine number of REs to look at either side of pilot - % symbol in time and frequency - half_freq_window = floor(CEC.FreqWindow/2); - half_time_window = floor(CEC.TimeWindow/2); - % Set the location of the window at the back of the pilot - % to be averaged in frequency direction - upperSC = sc-half_freq_window; - % If this location is outwith the grid dimensions set it to - % lowest subcarrier value - if upperSC<1 - upperSC = 1; - end - % Set the location of the window in front of the pilot to - % be averaged in frequency direction - lowerSC = sc+half_freq_window; - % If this location is outwith the grid dimensions set it to - % highest subcarrier value - if lowerSC>size(grid,1) - lowerSC = size(grid,1); - end - % Set the location of the window in front of the pilot to - % be averaged in time direction - leftSYM = sym-half_time_window; - % If this location is outwith the grid dimensions set it to - % lowest OFDM symbol value - if leftSYM<1 - leftSYM = 1; - end - % Set the location of the window at the back of the pilot - % to be averaged in time direction - rightSYM = sym+half_time_window; - % If this location is outwith the grid dimensions set it to - % highest OFDM symbol value - if rightSYM>size(grid,2) - rightSYM = size(grid,2); - end - - % Define the window to average using the determined - % subcarrier and OFDM symbol values - avgVec = grid(upperSC:lowerSC,leftSYM:rightSYM); - - % Remove the zero values from the window so that the average is - % calculated using only valid pilots - avgVec = avgVec(avgVec~=0); - % Average the desired pilot using all pilots within - % averaging window - if isempty(avgVec) - avgVec = 0; - end - - avgGrid(sc,sym) = grid(sc,sym)/numel(avgVec); - scalingVec(n) = numel(avgVec); - end -end - -%createVirtualPilots Create virtual pilots. -% [VP] = createVirtualPilots(..) returns a 3xNvp matrix which contains -% the time/frequency and least squares estimate of virtual pilots. -% Nvp is the number of virtual pilots. -% -% The inputs are: -% -% ENB structure which must contain the following fields: -% NDLRB - Number of downlink resource blocks -% CyclicPrefix - Optional. Cyclic prefix length {'Normal'(default),'Extended'} -% -% P_EST - A matrix containing the pilots within the grid. The matrix must -% have three rows. Each column contains the information for each pilot: -% [subcarrier_indices symbol_indices pilot_channel_estimate] -% -% ANTENNA - The current antenna port -% CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END - a value {0 or 1} -% indicating whether to return virtual pilots in each position. A 1 -% indicates virtual pilots should be returned, a 0 indicates they should -% not be returned. -% -% Example: -% -% Create virtual pilots on the top of a grid of pilots (estimates) -% VP_TOP = createVirtualPilots(ENB,estimates,0,1,0,0,0); -% -% Add virtual pilots to current pilot estimates for interpolation -% estimates = [estimates VP_TOP]; - -% Copyright 2009-2010 The MathWorks, Inc. -function VP = createVirtualPilots(ENB,P_EST,CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END) - - % Initialize outputs - VP = zeros(3,0); - - % Get resource grid dimensions - dims = lteDLResourceGridSize(ENB); - K = dims(1); - - % Virtual pilot cut-off values - indices in time or frequency at which - % the virtual pilot shall be discarded. As the symbol indices of the - % pilots passed in may be positive and negative the start and end of - % the effective grid varies therefore affecting the front and end pilot - % cut-off values - coTop = -6; % - coBottom = K+6; % - coFront = min(P_EST(2,:))-7; % floor(min(P_EST(2,:))/L)*L-5; % - coEnd = max(P_EST(2,:))+7; % ceil(max(P_EST(2,:))/L)*L+5; - - % Number of pilots in a subcarrier is dependent upon antenna -% noPilotinSC = (2-floor(ANTENNA/2))*nSF; - noPilotinSC = numel(P_EST(P_EST(1,:)==P_EST(1,1))); - - % Number of pilots in a symbol - noPilotinSym = K/6; - - % Sort by subcarrier - [~, indices] = sortrows(P_EST(1,:).'); - p_est_sorted_sc = P_EST(:,indices).'; - - if CREATE_TOP - % Repeat first and second SC containing pilots - p_est_rep_above = p_est_sorted_sc(1+noPilotinSC:noPilotinSC*2,:); - p_est_rep_above = [p_est_rep_above.' p_est_sorted_sc(1:noPilotinSC,:).'].'; - - % Subtract six to normalize subcarrier indices - p_est_rep_above(:,1) = p_est_rep_above(:,1) - 6; - - % Remove virtual pilots which are too far - p_est_rep_above(p_est_rep_above(:,1) < coTop,:) = []; - - % Initialize vp vector - VP_TOP = zeros(size(p_est_rep_above)); - - % Create virtual pilots on top - for p = 1:size(p_est_rep_above) - VP_TOP(p,:) = calculatePilot(p_est_rep_above(p,:), p_est_sorted_sc); - end - - % Transpose to make suitable for output - VP = [VP VP_TOP.']; - end - - if CREATE_BOTTOM - % Repeat last and second last SC containing pilots - p_est_rep_below = p_est_sorted_sc(end-noPilotinSC*2+1:end-noPilotinSC,:); - p_est_rep_below = [p_est_rep_below.' p_est_sorted_sc(end-noPilotinSC+1:end,:).'].'; - - % Add six to normalize subcarrier indices - p_est_rep_below(:,1) = p_est_rep_below(:,1) + 6; - - % Remove virtual pilots which are too far - p_est_rep_below(p_est_rep_below(:,1) > coBottom,:) = []; - - % Initialize vp vector - VP_BOTTOM = zeros(size(p_est_rep_below)); - - % Create virtual pilots on bottom - for p = 1:size(p_est_rep_below) - VP_BOTTOM(p,:) = calculatePilot(p_est_rep_below(p,:), p_est_sorted_sc); - end - - % Transpose to make suitable for output - VP = [VP VP_BOTTOM.']; - end - - % Sort by symbol - [~, indices] = sortrows(P_EST(2,:).'); - p_est_sorted_sym = P_EST(:,indices).'; - - if CREATE_FRONT - % Repeat first symbol containing pilots - p_est_rep_front = p_est_sorted_sym(noPilotinSym+1:(noPilotinSym*2),:); - - % Add subcarrier above and below - p_est_rep_front = addSCs(p_est_rep_front,noPilotinSym); - - % Repeat second symbol containing pilots - p_est_rep_front_second = p_est_sorted_sym(1:noPilotinSym,:); - - % Add subcarrier above and below - p_est_rep_front_second = addSCs(p_est_rep_front_second,noPilotinSym); - - % Concatenate to create virtual pilots - p_est_rep_front = [p_est_rep_front.' p_est_rep_front_second.'].'; - - % Subtract seven to normalize symbol indices - p_est_rep_front(:,2) = p_est_rep_front(:,2) - 7; - - % Remove virtual pilots which are too far - p_est_rep_front = removeTooFar(p_est_rep_front,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); - - % Initialize vp vector - VP_FRONT = zeros(size(p_est_rep_front)); - - % Create virtual pilots on front - for p = 1:length(p_est_rep_front) - VP_FRONT(p,:) = calculatePilot(p_est_rep_front(p,:), p_est_sorted_sc); - end - - % Transpose for output - VP = [VP VP_FRONT.']; - end - - if CREATE_END - % Repeat last symbol containing pilots - p_est_rep_end = p_est_sorted_sym(end-(noPilotinSym*2)+1:end-noPilotinSym,:); - - % Add subcarrier above and below - p_est_rep_end = addSCs(p_est_rep_end,noPilotinSym); - - % Repeat second symbol containing pilots - p_est_rep_end_second = p_est_sorted_sym(end-noPilotinSym+1:end,:); - - % Add subcarrier above and below - p_est_rep_end_second = addSCs(p_est_rep_end_second,noPilotinSym); - - % Concatenate to create virtual pilots - p_est_rep_end = [p_est_rep_end.' p_est_rep_end_second.'].'; - - % Add seven to normalize symbol indices, mod controls case when - % only 2 pilots per subcarrier - p_est_rep_end(:,2) = p_est_rep_end(:,2) + 7; - - % Remove virtual pilots which are too far - p_est_rep_end = removeTooFar(p_est_rep_end,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); - - % Initialize vp vector - VP_END = zeros(size(p_est_rep_end)); - - % Create virtual pilots on front - for p = 1:length(p_est_rep_end) - VP_END(p,:) = calculatePilot(p_est_rep_end(p,:), p_est_sorted_sc); - end - - % Transpose for output - VP = [VP VP_END.']; - end -end - -function vp = calculatePilot(p_est_rep, p_est_sorted) - % Calculate Euclidean distance between virtual pilot and other - % pilots - ind = sqrt((p_est_rep(1)-p_est_sorted(:,1)).^2+ (p_est_rep(2)-p_est_sorted(:,2)).^2); - % ind = (abs(p_est_rep(1)-p_est_sorted(:,1))+ abs(p_est_rep(2)-p_est_sorted(:,2))); - - % Sort from shortest to longest distance - [~, ind] = sortrows(ind); - - % Take three closest pilots - ind = ind(1:10); - pilots_use = p_est_sorted(ind,:); - - % If first 3 pilots used are in the same subcarrier or symbol then use 4th instead of 3rd - while ((pilots_use(3,1) == pilots_use(2,1)) && (pilots_use(2,1) == pilots_use(1,1)) || (pilots_use(3,2) == pilots_use(2,2)) && (pilots_use(2,2) == pilots_use(1,2))) - pilots_use(3,:) = []; - end - - % Calculate virtual pilot value - vp = calculateVirtualValue(pilots_use(3,:),pilots_use(1,:),pilots_use(2,:),p_est_rep(1),p_est_rep(2)); -end - -function new = calculateVirtualValue(a,b,c,xnew,ynew) - % Calculate vectors - AB = b-a; - AC = c-a; - - % Perform cross product - cro = cross(AB,AC); - - % Break out X, Y and Z plane coeffs - x = cro(1); - y = cro(2); - z = cro(3); - - % Calculate normal in equation - c = sum(cro.*a); - - % Calculate new z value - znew = (c - xnew*x - ynew*y)/z; - - % Return new point - new = [xnew ynew znew]; -end - -function pilots = addSCs(pilots, noPilotinSym) - % Add on extra subcarrier above - pilots(end+1,:) = pilots(1,:); - pilots(end,1) = pilots(end,1) - 6; - - % Add on extra subcarrier below - pilots(end+1,:) = pilots(noPilotinSym,:); - pilots(end,1) = pilots(end,1) + 6; -end - -function pilots = removeTooFar(pilots,p_est_sorted_sym,coTop,coBottom,coFront,coEnd) - pilots((pilots(:,2) < coFront) | (pilots(:,1) < coTop) | (pilots(:,2)> coEnd) | (pilots(:,1) > coBottom),:) = []; - - % Remove virtual pilots which fall within resource grid - removeInd = []; - for i = 1:size(pilots) - if (find(p_est_sorted_sym(:,2) == pilots(i,2))) - removeInd = [removeInd i]; %#ok - end - end - pilots(removeInd,:) = []; -end - -%CreateEdgeVirtualPilots -% Creates virtual pilots on the edges of the resource grid to improve -% interpolation results. Also adds virtual pilots around the current pilot -% estimates. -function vps = createEdgeVirtualPilots(enb,p_est) - - % Determine dimensions of current subframe - dims=lteDLResourceGridSize(enb); - K=dims(1); - L=dims(2); - - % Calculate virtual pilots beyond upper and lower bandwidth edge based - % on pilots present on subcarriers. Also create virtual pilots 1/2 RB - % above and below extent of current pilots. - vps=createDimensionVirtualPilots(p_est,2,unique([-6 min(p_est(1,:)-6) max(p_est(1,:)+6) K+6])); - - % Combine these frequency-direction VPs with original pilots. - temp = [p_est vps]; - - % Calculate virtual pilots beyond start and end of subframe based on - % pilots and frequency-direction VPs present in symbols. Also create - % virtual 1 OFDM symbol before and after extent of current pilots. - vps = [vps createDimensionVirtualPilots(temp,1,unique([-1 min(p_est(2,:)-1) max(p_est(2,:)+1) L+1]))]; - -end - -% dim=1 adds VPs in time -% dim=2 adds VPs in frequency -function vps = createDimensionVirtualPilots(p_est,dim,points) - - vps=[]; - - pilots = unique(p_est(dim,:)); - for i = pilots - x=find(p_est(dim,:)==i); - rep=1+double(length(x)==1); - adj=(1:rep)-rep; - pil = interp1(p_est(3-dim,x)+adj,repmat(p_est(3,x),1,rep),points,'linear','extrap'); - for j=1:length(points) - vps = [ vps [i;points(j);pil(j)] ]; %#ok - end - end - - if (dim==2) - vps = vps([2 1 3],:); - end - -end - diff --git a/matlab/tests/lteDLChannelEstimate3.m b/matlab/tests/lteDLChannelEstimate3.m deleted file mode 100644 index 7b0618002..000000000 --- a/matlab/tests/lteDLChannelEstimate3.m +++ /dev/null @@ -1,1204 +0,0 @@ -%lteDLChannelEstimate Downlink channel estimation -% [HEST NOISEEST] = lteDLChannelEstimate(...) returns HEST, the estimated -% channel between each transmit and receive antenna and NOISEEST, an -% estimate of the noise power spectral density on the reference signal -% subcarriers. -% -% HEST is an M-by-N-by-NRxAnts-by-CellRefP (optionally -% M-by-N-by-NRxAnts-by-NLayers for UE-specific beamforming transmission -% schemes) array where M is the number of subcarriers, N is the number of -% OFDM symbols, NRxAnts is the number of receive antennas, CellRefP is -% the number of cell-specific reference signal antenna ports and NLayers -% is the number of transmission layers. Using the reference signals, an -% estimate of the power spectral density of the noise present on the -% estimated channel response coefficients is returned. -% -% [HEST NOISEEST] = lteDLChannelEstimate(ENB, RXGRID) returns the -% estimated channel coefficients using the method described in -% TS36.104/TS36.141 Annex E/F for the purposes of transmitter EVM -% testing. -% -% ENB is a structure and must contain the following fields: -% NDLRB - Number of downlink resource blocks -% CellRefP - Number of cell-specific reference signal antenna ports -% (1,2,4) -% NCellID - Physical layer cell identity -% NSubframe - Subframe number -% CyclicPrefix - Optional. Cyclic prefix length -% ('Normal'(default),'Extended') -% DuplexMode - Optional. Duplex mode ('FDD'(default),'TDD') -% Only required for 'TDD' duplex mode: -% TDDConfig - Optional. Uplink/Downlink Configuration (0...6) -% (default 0) -% SSC - Optional. Special Subframe Configuration (0...9) -% (default 0) -% Only required for CEC.Reference='CSIRS' below: -% CSIRefP - Number of CSI-RS antenna ports (1,2,4,8) -% CSIRSConfig - CSI-RS configuration index (TS 36.211 Table -% 6.10.5.2-1) -% CSIRSPeriod - Optional. CSI-RS subframe configuration: -% ('On'(default),'Off',Icsi-rs,[Tcsi-rs Dcsi-rs]) -% -% RXGRID is a 3-dimensional M-by-N-by-NRxAnts array of resource elements. -% The second dimension of RXGRID can contain any whole number of -% subframes worth of OFDM symbols i.e. for normal cyclic prefix each -% subframe contains 14 OFDM symbols, therefore N is a multiple of 14. -% Note: to adhere to the estimation method defined in TS36.104/TS36.141, -% RXGRID must contain 10 subframes. -% -% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CEC, RXGRID) returns the -% estimated channel using the method and parameters defined by the -% configuration structure CEC. -% -% CEC is a structure which defines the type of channel estimation -% performed. CEC must contain a set of the following fields: -% PilotAverage - Type of pilot averaging ('TestEVM', 'UserDefined') -% FreqWindow - Size of window in resource elements used to average -% over frequency. -% TimeWindow - Size of window in resource elements used to average -% over time -% InterpType - Type of 2D interpolation used(see griddata for types) -% InterpWindow - Interpolation window type: ('Causal','Non-causal', -% 'Centred','Centered'). Note: 'Centred' and 'Centered' -% are equivalent -% InterpWinSize - Interpolation window size: -% 'Causal','Non-causal' - any number >=1 -% 'Centred','Centered' - odd numbers >=1 -% -% The 'TestEVM' pilot averaging will ignore other structure fields in -% CEC, and the method follows that described in TS36.104/TS36.141 Annex -% E/F for the purposes of transmitter EVM testing. -% -% The 'UserDefined' pilot averaging uses a rectangular kernel of size -% CEC.FreqWindow-by-CEC.TimeWindow and performs a 2D filtering operation -% upon the pilots. Note that pilots near the edge of the resource grid -% will be averaged less as they have no neighbors outside of the grid, -% or a limited number of neighbors outside of the grid obtained by the -% creation of virtual pilots. -% -% [HEST NOISEEST] = lteDLChannelEstimate(ENB, CHS, CEC, RXGRID) returns -% the estimated channel given cell-wide settings structure ENB, PDSCH -% transmission configuration CHS and channel estimator configuration CEC. -% CHS must include the following fields: -% TxScheme - Transmission scheme, one of: -% 'Port0' - Single-antenna port, Port 0 -% 'TxDiversity' - Transmit diversity scheme -% 'CDD' - Large delay CDD scheme -% 'SpatialMux' - Closed-loop spatial multiplexing scheme -% 'MultiUser' - Multi-user MIMO scheme -% 'Port5' - Single-antenna port, Port 5 -% 'Port7-8' - Single-antenna port, port 7 (when -% NLayers=1); Dual layer transmission, port 7 -% and 8 (when NLayers=2) -% 'Port8' - Single-antenna port, Port 8 -% 'Port7-14' - Up to 8 layer transmission, ports 7-14 -% PRBSet - A 1- or 2-column matrix, containing the 0-based Physical -% Resource Block indices (PRBs) corresponding to the resource -% allocations for this PDSCH. -% RNTI - Radio Network Temporary Identifier (16-bit) -% -% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission -% schemes, the channel estimator configuration structure CEC contains the -% following additional field: -% Reference - Optional. Specifies point of reference (signals to -% internally generate) for channel estimation. -% ('DMRS'(default), 'CSIRS') -% -% For the 'Port5', 'Port7-8', 'Port8' and 'Port7-14' transmission -% schemes, with Reference='DMRS', the channel estimation is performed -% using UE-specific reference signals and the returned channel estimate -% will be of size M-by-N-by-NRxAnts-by-NLayers. Alternatively, with -% Reference='CSIRS' the channel estimation is performed using the CSI -% reference signals (CSI) and the returned channel estimate will be of -% size M-by-N-by-NRxAnts-by-CSIRefP. For other transmission schemes the -% channel estimation is performed using cell-specific reference signals -% and the channel estimate will be of size M-by-N-by-NRxAnts-by-CellRefP. -% Note that CSI-RS based channel estimation and hence Reference='CSIRS' -% is strictly only valid within the standard for the 'Port7-14' -% transmission scheme. The optional CSIRSPeriod parameter controls the -% downlink subframes in which CSI-RS will be present, either always 'On' -% or 'Off', or defined by the scalar subframe configuration index Icsi-rs -% (0...154) or the explicit subframe periodicity and offset pair [Tcsi-rs -% Dcsi-rs] (TS 36.211 Section 6.10.5.3). -% -% For the 'Port7-8' and 'Port7-14' transmission schemes with -% 'UserDefined' pilot averaging, if CEC.TimeWindow = 2 or 4 and -% CEC.FreqWindow=1 the estimator will enter a special case where an -% averaging window of 2 or 4 pilots in time will be used to average the -% pilot estimates; the averaging is always applied across 2 or 4 pilots, -% regardless of their separation in OFDM symbols. This operation ensures -% that averaging is always done on 2 or 4 pilots. This provides the -% appropriate "despreading" operation required for the case of UE RS -% ports / CSI-RS ports which occupy the same time/frequency locations but -% use different orthogonal covers to allow them to be differentiated at -% the receiver. For the CSI-RS and any number of configured CSI-RS ports -% (given by ENB.CSIRefP), the pilot REs occur in pairs, one pair per -% subframe, that require averaging with CEC.TimeWindow=2 and will result -% in a single estimate per subframe. For the UE RS with between 1 and 4 -% layers (given by CHS.NLayers), the pilot REs occur in pairs, repeated -% in each slot, that require averaging with CEC.TimeWindow=2 and will -% result in two estimates per subframe, one for each slot; for between 5 -% and 8 layers, the pairs are distinct between the slots of the subframe -% and the required averaging is CEC.TimeWindow=4, resulting in one -% estimate per subframe. -% -% Example: -% Transmit RMC R.12 (4-antenna transmit diversity), model the propagation -% channel by combining all transmit antennas onto one receive antenna, -% OFDM demodulate and finally channel estimate. -% -% enb = lteRMCDL('R.12'); -% cec = struct('FreqWindow',1,'TimeWindow',1,'InterpType','cubic',... -% 'PilotAverage','UserDefined','InterpWinSize',3,... -% 'InterpWindow','Causal'); -% txWaveform = lteRMCDLTool(enb,[1;0;0;1]); -% rxWaveform = sum(txWaveform,2); -% rxGrid = lteOFDMDemodulate(enb,rxWaveform); -% hest = lteDLChannelEstimate(enb,cec,rxGrid); -% -% See also lteOFDMDemodulate, lteEqualizeMMSE, lteEqualizeZF, -% lteDLPerfectChannelEstimate, griddata. - -% Copyright 2009-2013 The MathWorks, Inc. - -function [H_EST, NoisePowerEst, AvgEstimates, Estimates] = lteDLChannelEstimate2(varargin) - - if(isstruct(varargin{2})) - if(isstruct(varargin{3})) - PDSCH = varargin{2}; - CEC = varargin{3}; - RXGRID = varargin{4}; - else - PDSCH = []; - CEC = varargin{2}; - RXGRID = varargin{3}; - avgrefs = varargin{4}; - end - else - % If no configuration structure then use the TestEVM method - PDSCH = []; - CEC.PilotAverage = 'TestEVM'; - RXGRID = varargin{2}; - end - - ENB = varargin{1}; - % Get dimensions of resource grid - Dims = lteDLResourceGridSize(ENB); - K = Dims(1); - Lsf = Dims(2); - - % Determine number of subframes - nsfs = size(RXGRID,2)/Dims(2); - - % Determine number of Tx- and RxAntennas - NRxAnts = size(RXGRID,3); - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) - if (~isfield(CEC,'Reference')) - CEC.Reference='DMRS'; - end - if (strcmpi(CEC.Reference,'DMRS')==1) - NTx = PDSCH.NLayers; - elseif (strcmpi(CEC.Reference,'CSIRS')==1) - NTx = ENB.CSIRefP; - else - error('lte:error','Reference must be "DMRS" or "CSIRS", see help for details.'); - end - else - if (~isfield(CEC,'Reference')) - CEC.Reference='CellRS'; - end - NTx = ENB.CellRefP; - end - - % Initialize size of estimated channel grid - H_EST = zeros([size(RXGRID,1) size(RXGRID,2) size(RXGRID,3) NTx]); - - % Preallocate noise power estimate vector for speed - noiseVec = zeros(size(NRxAnts,NTx)); - - if (NTx == 4) - nn=3; - else - nn=NTx; - end - RefEstimates=zeros(nn,2*2*2*ENB.NDLRB*10); - - for rxANT = 1:NRxAnts - for nTxAntLayer = 1:NTx - - % Extract pilot symbols from received grid and calculate least - % squares estimate - [ls_estimates,specialvec,DwPTS]= GetPilotEstimates(ENB,nTxAntLayer-1,RXGRID(:,:,rxANT),PDSCH,CEC); - - Estimates(nTxAntLayer,1:length(ls_estimates(3,:))) = ls_estimates(3,:); - - % Average the pilots as defined by CEC.PilotAverage, this can - % be 'UserDefined' or 'TestEVM'. - % Note: Setting the window size to 1x1 is equivalent to no - % averaging. It is recommended that no averaging should be - % carried out when a high SNR is present, as this would have an - % adverse effect on the least squares estimates - if strcmpi(CEC.PilotAverage,'UserDefined')&&(CEC.FreqWindow==1)&&(CEC.TimeWindow==1) - P_EST = ls_estimates; - ScalingVec = 0; - else - [P_EST, ScalingVec]= PilotAverage(PDSCH,CEC,H_EST,ls_estimates); - end - - %AvgEstimates(nTxAntLayer,1:length(P_EST(3,:))) = P_EST(3,:); - - P_EST(3,:)=avgrefs; - - if strcmpi(CEC.PilotAverage,'TestEVM') - % Channel estimation as defined in TS36.141 Annex F.3.4 is - % performed, the pilots are averaged in time and frequency - % and the resulting vector is linearly interpolated. - %---------------------- - % Interpolate eq coefficients extrapolating to account for - % missing pilots at the edges - interpEqCoeff = interp1(find(P_EST~=0),P_EST(P_EST~=0),(1:length(P_EST)).','linear','extrap'); - % --------------------- - % The DC carrier needs to be accounted for during - % interpolation - % Get pilot symbol index values - ind = lteCellRSIndices(ENB,0); - % Using initial index value calculate position of pilot - % symbols within interpolated coefficients - if ind(1)-3>0 - vec = (ind(1)-3):3:K; - else - vec = ind(1):3:K; - end - % Determine the index values of the pilots either side of - % the DC carrier - preDC = vec(length(vec)/2); - postDC = vec(1+length(vec)/2); - % Interpolate the section using the DC carrier and insert - % this into the interpolated vector containing the - % coefficients - interpEqCoeffTemp = interp1(1:4:5,[interpEqCoeff(preDC) interpEqCoeff(postDC)],1:5,'linear'); - interpEqCoeff(preDC:K/2) = interpEqCoeffTemp(1:length(interpEqCoeff(preDC:K/2))); - interpEqCoeff(1+K/2:postDC) = interpEqCoeffTemp(2+length(interpEqCoeff(preDC:K/2)):end); - %---------------------- - % Generate grid by replicating estimated equalizer channel - % coefficients - H_EST(:,:,rxANT,nTxAntLayer) = repmat(interpEqCoeff,1,Lsf*nsfs); - % The value of the noise averaged pilot symbols are placed - % into P_EST(3,:) matrix and these are used to determine - % the noise power present on the pilot symbol estimates of - % the channel. - P_EST = ls_estimates; - tempGrid = squeeze(H_EST(:,:,rxANT,nTxAntLayer)); - P_EST(3,:) = tempGrid(sub2ind(size(H_EST),P_EST(1,:),P_EST(2,:))); - - else - % Channel estimation is performed by analyzing up to - % 'CEC.InterpWinSize' subframes together and estimating - % virtual pilots outwith the bounds of the subframe. - % Averaging window can be set to Causal, Non-causal or - % Centred, Centered. - - % Using the desired subframeAveraging type the initial - % position of the window is determined - if(CEC.InterpWinSize>=1) - if strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered') - % For Centered averaging the window size must be odd - if ~mod(CEC.InterpWinSize,2) - error('lte:error','Window size must be odd for centered window type'); - end - % For Centered windowing both current,future and past - % data are used to estimate current channel coefficients - x = floor(CEC.InterpWinSize/2); - y = floor(CEC.InterpWinSize/2); - elseif strcmpi(CEC.InterpWindow,'Causal') - % For causal windowing current and past data are used - % to estimate current subframe channel coefficients - x = 0; - y = CEC.InterpWinSize-1; - elseif strcmpi(CEC.InterpWindow,'Non-causal') - % For non-causal windowing current and future data are - % used to estimate current subframe channel - % coefficients - x = CEC.InterpWinSize-1; - y = 0; - else - error('lte:error','Channel estimation structure field InterpWindow must be one of the following: Causal,Non-causal,Centred,Centered'); - end - else - error('lte:error','InterpWinSize cannot be less than 1'); - end - - % Interpolate using averaged pilot estimates and defined - % interpolation settings - for sf = 0:nsfs-1 - if specialvec(sf+1)=='U' - H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = NaN; - else - % Extract the pilots from required subframes - p_use = P_EST; - p_use(:,p_use(4,:)>(sf+1)+x)=[]; - p_use(:,p_use(4,:)<(sf+1)-y)=[]; - - % Account for DC offset - p_use(1,(p_use(1,:)>K/2)) = p_use(1,(p_use(1,:)>K/2))+1; - - if strcmpi(CEC.InterpType,'Cubic')||strcmpi(CEC.InterpType,'Linear') - % VPVEC is used to determine if virtual pilots are - % needed at the beginning or end of the - % interpolation window, if the current subframe,sf, - % is located at beginning or end of the window then - % virtual pilots are created accordingly - vpvec = unique(p_use(4,:)); - - if (strcmp(CEC.Reference,'CellRS')==1) - % Create virtual pilots and append to vector - % containing pilots using cell-specific RS - % methodology. - vps = createVirtualPilots(ENB,p_use(1:3,:),1,1,(sf+1==min(vpvec)),(sf+1==max(vpvec))); - p_use = [p_use(1:3,:) vps]; - else - % Create edge virtual pilots suitable for - % UE RS which can have partial bandwidth, - % or CSI-RS. - if (~isempty(p_use)) - vps = createEdgeVirtualPilots(ENB,p_use(1:3,:)); - p_use = [p_use(1:3,:) vps]; - end - end - end - % Perform 2D interpolation - % Interpolation is carried out on a (K+1)-by-L - % matrix to account for DC offset being added in - if (~isempty(p_use)) - Htemp = griddata(p_use(2,:)-Lsf*sf,p_use(1,:),p_use(3,:),1:Lsf,(1:K+1)',CEC.InterpType); %#ok - % Remove DC offset - Htemp(1+(K/2),:) = []; - - if specialvec(sf+1)=='S' - Htemp(:,DwPTS+1:Lsf) = NaN; - end - H_EST(:,sf*Lsf+1:(sf+1)*Lsf,rxANT,nTxAntLayer) = Htemp; - - if isnan(H_EST) - error('lte:error','H_EST NaN'); - end - end - end - end - end - if nTxAntLayer<3 || (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'}))) - % The noise level present can be determined using the noisy - % least squares estimates of the channel at pilot symbol - % locations and the noise averaged pilot symbol estimates of the - % channel - noise = ls_estimates(3,~isnan(ls_estimates(3,:))) - P_EST(3,~isnan(P_EST(3,:))); - if strcmpi(CEC.PilotAverage,'UserDefined') - noise = sqrt(ScalingVec./(ScalingVec+1)).*noise; - end - - % Additional averaging for noise estimation in LTE-A case, - % to suppress interference from orthogonal sequences on - % other antennas in same time-frequency locations. - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... - (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) - if (~isempty(ls_estimates)) - if (strcmpi(CEC.Reference,'DMRS')==1) - temp=[]; - pilotSC = unique(ls_estimates(1,:)); - for i = pilotSC - x=find(ls_estimates(1,:)==i); - x=[x(1) x(end)]; - temp=[temp mean(noise(x))*2]; %#ok - end - noise=temp; - end - end - end - - % Taking the variance of the noise present on the pilot symbols - % results in a value of the noise power for each transmit and - % receive antenna pair - if (isempty(noise)) - noiseVec(rxANT,nTxAntLayer)=NaN; - else - noiseVec(rxANT,nTxAntLayer) = mean(noise.*conj(noise)); - end - end - end - end - - % The mean of the noise power across all the transmit/receive antenna - % pairs is used as the estimate of the noise power - NoisePowerEst = mean(mean(noiseVec)); - -end - -% GetPilotEstimates Obtain the least squares estimates of the reference -% signals -% [ls_estimates] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID) Extracts the -% reference signals for a specific transmit/receive antenna pair and -% calculates their least squares estimate. The results are placed in a -% 3xNp matrix containing the subcarrier and OFDM symbol location, row and -% column subscripts, and value. Np is the number of cell specific -% reference (pilot) symbols per resource grid -% -% RXGRID is an MxN array where M is the number of subcarriers, -% N is the number of OFDM symbols. Dimension M must be -% 12*NDLRB where NDLRB must be {6,15,25,50,75,100}. -% Dimension N must be a multiple of number of symbols in a subframe L, -% where L=14 for normal cyclic prefix and L=12 for extended cyclic -% prefix. -% -% nTxAntLayer defines which transmit antennas' or layers' pilot symbols to extract -% -% ENB is a structure and must contain the following fields: -% NDLRB - Number of downlink resource blocks -% NCellID - Physical layer cell identity -% CellRefP - Number of transmit antenna ports {1,2,4} -% CyclicPrefix - Optional. Cyclic prefix length{'Normal'(default),'Extended'} -% -% -% Example -% Return the least squares estimate of the pilots symbols in a 3xNp array -% where the first row is the subcarrier index,k the second row is the OFDM -% symbol,l and the third row defines the least squares estimate of the -% pilot located at that position. -% -% enb=struct('NDLRB',6,'CellRefP',1,'NCellID',0,'CyclicPrefix','Normal'); -% rxGrid=ones(lteDLResourceGridSize(enb)); -% nTxAntLayer=0; -% ls_estimates = GetPilotEstimates(enb,nTxAntLayer,rxGrid).' -% ans = -% 1.0000 1.0000 -0.7071 - 0.7071i -% 7.0000 1.0000 -0.7071 - 0.7071i -% 13.0000 1.0000 -0.7071 - 0.7071i -% . . . -% . . . -% . . . -% 58.0000 12.0000 -0.7071 + 0.7071i -% 64.0000 12.0000 0.7071 - 0.7071i -% 70.0000 12.0000 0.7071 - 0.7071i - -% Copyright 2009-2010 The MathWorks, Inc. -function [ls_estimates,specialvec,DwPTS] = GetPilotEstimates(ENB,nTxAntLayer,RXGRID,PDSCH,CEC) - -% Get dimensions of resource grid -Dims = lteDLResourceGridSize(ENB); -nsfs = size(RXGRID,2)/Dims(2); -K = Dims(1); -L = Dims(2); - -if (rem(nsfs,1)~=0) - error('lte:error','The received grid input must contain a whole number of subframes.'); -end - -if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) - if (strcmp(CEC.Reference,'DMRS')==1) - % create UE RS indices - PDSCH.NTxAnts=0; - PDSCH.W=[]; - linearIndSF = lteDMRSIndices(ENB,PDSCH,'mat'); - else - % create CSI-RS indices and symbols and deal with zero removal - linearIndSF = lteCSIRSIndices(ENB,'mat'); - CsiRS = lteCSIRS(ENB,'mat'); - CsiRS = CsiRS(:,nTxAntLayer+1); - linearIndSF(CsiRS==0,:)=[]; - CsiRS(CsiRS==0)=[]; - end - % If more than one TxAntenna is used we need to adjust indices values so that - % they start in first antenna plane - linearIndSF = linearIndSF(:,nTxAntLayer+1) - (K*L*nTxAntLayer); -else - % Extract linear indices of reference signals for particular TxAntenna - dumENB = ENB; - dumENB.NSubframe = 0; - linearIndSF = lteCellRSIndices(dumENB,nTxAntLayer); - % If more than one TxAntenna is used we need to adjust indices values so that - % they start in first antenna plane - linearIndSF = linearIndSF - (K*L*nTxAntLayer); -end - -% Create grid for pilot symbols -linearIndGrid = zeros(size(linearIndSF,1),nsfs); -idealPilotGrid = zeros(size(linearIndSF,1),nsfs); -offset = double(ENB.NSubframe); -specialvec = char(zeros(1,0)); -DwPTS = 0; -for sf = ENB.NSubframe:ENB.NSubframe+nsfs-1 - ENB.NSubframe = mod(sf,10); - linearIndGrid(:,sf-offset+1) = (linearIndSF+(sf*K*L)); - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port5' 'Port7-8' 'Port8' 'Port7-14'}))) - if (strcmp(CEC.Reference,'DMRS')==1) - % create UE RS symbols - DMRS = lteDMRS(ENB,PDSCH,'mat'); - idealPilotGrid(1:length(DMRS),sf-offset+1) = DMRS(:,nTxAntLayer+1); - else - % use CSI-RS symbols created earlier - idealPilotGrid(1:length(CsiRS),sf-offset+1) = CsiRS; - end - else - CellRS = lteCellRS(ENB, nTxAntLayer); - idealPilotGrid(1:length(CellRS),sf-offset+1) = CellRS; - end - dupinfo = lteDuplexingInfo(ENB); - if strcmpi(dupinfo.SubframeType,'Special') - specialvec = [specialvec 'S']; %#ok - DwPTS = dupinfo.NSymbolsDL; - elseif strcmpi(dupinfo.SubframeType,'Uplink') - specialvec = [specialvec 'U']; %#ok - elseif strcmpi(dupinfo.SubframeType,'Downlink') - specialvec = [specialvec 'D']; %#ok - else - error('lte:error','Invalid SubframeType, in structure dupinfo'); - end -end - -if (~isempty(idealPilotGrid)) - ulvec = find(idealPilotGrid(size(idealPilotGrid,1),:)==0); - linearIndGrid(:,ulvec) = []; - idealPilotGrid(:,ulvec) = []; -else - ulvec = []; -end - -linearIndGrid = linearIndGrid - (offset*K*L); -% Extract the row and column subscripts of the pilot symbols for entire -% grid -[p_estSC, p_estSym] = ind2sub(size(RXGRID),linearIndGrid); - -% Calculate least squares channel estimates at pilot locations -p_est = RXGRID(linearIndGrid)./idealPilotGrid; - -% Create a vector - [k;l;p_est] -sfref = repmat((1:nsfs),length(linearIndSF),1); -sfref(:,ulvec) = []; -ls_estimates = [double(p_estSC(:).') ; double(p_estSym(:).') ; p_est(:).';double(sfref(:)).']; - -end - -%PilotAverage Average reference signals -% [P_EST] = PilotAverage(PDSCH,CEC,H_EST,LS_EST) performs a moving average of pilot -% symbols -% -% LS_EST is a 3xNp matrix containing the least square estimates of the -% pilots symbols and their column and row indices within the received -% grid. -% LS_EST = [k;l;p_est] -% H_EST is an MxN matrix and defines the size of the grid that the -% averaging will be performed on -% -% CEC is a structure which defines the type of channel estimation -% performed. CEC must contain a set of the following fields: -% PilotAverage - Type of pilot averaging {'TestEVM', 'UserDefined'} -% FreqWindow - Size of window used to average in frequency in -% resource elements. -% TimeWindow - Size of window used to average in time in resource -% elements -% InterpType - Type of 2D interpolation used(see griddata for types) -% -% The dimensions of the averaging window are defined in structure CEC. -% The window is defined in terms of Resource Elements, and depending on -% the size of the averaging window, averaging will be performed in either -% the time or frequency direction only, or a combination of both creating -% a square/rectangular window. The pilot to be averaged will always be -% placed at the center of the window, therefore the window size must be -% an odd number. -% -% Frequency Direction: 9x1 Time Direction: 1x9 -% -% x -% x -% x -% x -% P x x x x P x x x x -% x -% x -% x -% x -% -% -% Square window: 9x9 -% x x x x x x x x x -% P x x x x x x P x -% x x x x x x x x x -% x x x x x x x x x -% x x x x P x x x x -% x x x x x x x x x -% x x x x x x x x x -% P x x x x x x P x -% x x x x x x x x x -% -% Performing EVM compliance testing as per TS36.141 AnnexF.3.4, requires -% time averaging be done over 10 subframes(i.e. 1 Frame) across each -% pilot symbol carrying subcarrier creating a TotalNumberPilotsx1 vector. -% This is then frequency averaged using a moving window average with a window -% size of 19. This type of averaging can be performed by setting the -% PilotAverage type in structure CEC to 'TestEVM'. - -% Copyright 2009-2013 The MathWorks, Inc. - -function [P_EST, scalingVec] = PilotAverage(PDSCH,CEC,H_EST,P_EST) - - switch lower(CEC.PilotAverage) - - case 'userdefined' - if(CEC.FreqWindow<1)||(CEC.TimeWindow<1) - error('lte:error','Frequency and time averaging window size cannot be less than 1'); - end - - if (~isempty(PDSCH) && any(strcmpi(PDSCH.TxScheme,{'Port7-8' 'Port7-14'})) &&... - (CEC.TimeWindow==2 || CEC.TimeWindow==4) && CEC.FreqWindow==1) - - % Perform averaging in time direction using a moving window - % of size N = CEC.TimeWindow - N = CEC.TimeWindow; - - if (~isempty(P_EST)) - % Average only subcarriers which contain RS symbols. Extract RS - % symbols on a per subcarrier basis and use window to average. - for subcarrier = unique(P_EST(1,:)) - - % Store DRS symbols from relevant slot in vector for easy access - symbVec = (P_EST(3,P_EST(1,:)==subcarrier)).'; - - % Define temporary vector to store the averaged values - avgVec = zeros(size(symbVec)); - - % Check length of input at least equal to size of window; - % if not, reduce window size. Despreading will be incomplete - % here - if (length(symbVec) < N) - N = length(symbVec); - end - - % Determines position of window w.r.t element being averaged, - % and performs the averaging - for symbNo = 1:length(symbVec) - if (symbNo-(N/2+1)<=0) - avgVec(symbNo)= sum(symbVec(1:N))/N; - else - avgVec(symbNo) = sum(symbVec(end-(N-1):end))/N; - end - end - - % Update P_EST with averaged values - P_EST(3,P_EST(1,:)==subcarrier)= avgVec; - end - - end - - % This vector is used to scale the noise by the number of averaging - % elements in the window - scalingVec = ones(size(P_EST(3,:)))*N; - - else - - if (strcmpi(CEC.InterpWindow,'Centred')||strcmpi(CEC.InterpWindow,'Centered')) - if (~mod(CEC.FreqWindow,2)||~mod(CEC.TimeWindow,2)) - error('lte:error','Window size must be odd in time and frequency for centred/centered window type'); - end - end - - % Define number of subcarriers - K = size(H_EST,1); - - % Define an empty resource grid with the DC offset subcarrier - % inserted - grid = zeros(size(H_EST,1)+1,size(H_EST,2)); - - % Account for DC offset - P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))+1; - - % Place the pilot symbols back into the received grid with the - % DC offset subcarrier in place - grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = P_EST(3,:); - - % Define convolution window - kernel = ones(CEC.FreqWindow,CEC.TimeWindow); - - % Perform convolution - grid = conv2(grid,kernel,'same'); - - % Extract only pilot symbol location values and set the rest of - % the grid to zero - tempGrid = zeros(size(grid)); - tempGrid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))) = grid(sub2ind(size(grid),P_EST(1,:),P_EST(2,:))); - grid = tempGrid; - - % Normalize pilot symbol values after convolution - [grid, scalingVec] = normalisePilotAverage(CEC,P_EST,grid); - - % Place averaged values back into pilot symbol matrix - P_EST(3,:) = grid(sub2ind(size(tempGrid),P_EST(1,:),P_EST(2,:))); - - % Remove DC offset - P_EST(1,(P_EST(1,:)>K/2)) = P_EST(1,(P_EST(1,:)>K/2))-1; - - end - - - case 'testevm' - % As defined in TS36.141 Annex F.3.4 pilots are averaged in - % time across all pilot carrying subcarriers. The resulting - % vector is averaged in frequency direction with a moving - % averaging window of 19. - - % Get phase (theta) and magnitude(radius) of complex estimates - [theta,radius] = cart2pol(real(P_EST(3,:)),imag(P_EST(3,:))); - - % Declare vector to temporarily store averaged phase and - % magnitude - phasemagVec = zeros(size(H_EST,1),2); - - % Perform averaging in time and frequency for phase and - % magnitude separately and recombine at end - for phaseOrMag = 1:2 - % Define temporary P_EST vector and set estimates row to - % phase then magnitude - P_EST_temp = P_EST; - if phaseOrMag==1 - P_EST_temp(3,:) = theta; - elseif phaseOrMag==2 - P_EST_temp (3,:) = radius; - end - - % Declare averaging vector - avgVec = zeros(size(H_EST,1),1); - vec = []; - - % Average across pilot symbol carrying subcarriers in time, - % unwrapping performed on a subcarrier basis - for i = 1:size(H_EST,1) - if ~isempty(P_EST(3,(P_EST(1,:)==i))) - if phaseOrMag==1 - avgVec(i) = mean(unwrap(P_EST_temp(3,(P_EST(1,:)==i)))); - - elseif phaseOrMag==2 - avgVec(i) = mean(P_EST_temp(3,(P_EST(1,:)==i))); - end - vec = [vec i]; %#ok - end - end - - % Remove subcarriers which contained no pilot symbols, then - % perform frequency averaging - avgVec = avgVec(vec); - - % Perform averaging in frequency direction using a moving - % window of size N, N = 19 in TS36.141 Annex F.3.4 - % Performs a moving average of window size N. At the edges, where less than - % N samples are span the window size is reduce to span 1, 3, 5, 7 ... - % samples. - N = 19; - - % avgVec must be a column vector - if (size(avgVec,2) > 1) - error('lte:error','Input to moving average function must be a column vector.') - end - - % N max window size 19 as defined in Annex F.3.4 - if ~mod(N,2) - error('lte:error','Window size N must be odd'); - end - - if (length(avgVec) < N) - % sprintf ('Input signal must have at least %d elements',N); - error('lte:error','Input signal must have at least %d elements',N); - end - - % Use filter to perform part of the averaging (not normalized) - zeroPad = zeros(N-1,1); - data = [avgVec; zeroPad]; - weights = ones(N,1); - freqAvg = filter(weights,1,data); - - % Remove unwanted elements - removeIdx = [ 2:2:N ( length(data)-(2:2:N)+1 )]; - freqAvg(removeIdx) = []; - - % Normalization factor - normFactor = [1:2:N-2 N*ones(1,length(freqAvg)-(N-1)) N-2:-2:1]'; - freqAvg = freqAvg./normFactor; - - % Place frequency averaged pilots into temporary storage - % vector - phasemagVec(vec,phaseOrMag) = freqAvg; - - end - % Convert averaged symbols back to Cartesian coordinates - [X,Y] = pol2cart(phasemagVec(:,1),phasemagVec(:,2)); - P_EST = complex(X,Y); - scalingVec = []; - - otherwise - error('lte:error','Channel estimation structure field PilotAverage must be one of the following: "UserDefined" or "TestEVM"'); - - end -end - -function [avgGrid, scalingVec] = normalisePilotAverage(CEC,p_est,grid) - - % Determine total number of pilots within half a subframe - nPilots = length(p_est); - - avgGrid = zeros(size(grid)); - scalingVec = zeros(1,size(p_est,2)); - - for n = 1:nPilots - % Determine in which subcarrier and OFDM symbol pilot is located - sc = p_est(1,n); - sym = p_est(2,n); - % Determine number of REs to look at either side of pilot - % symbol in time and frequency - half_freq_window = floor(CEC.FreqWindow/2); - half_time_window = floor(CEC.TimeWindow/2); - % Set the location of the window at the back of the pilot - % to be averaged in frequency direction - upperSC = sc-half_freq_window; - % If this location is outwith the grid dimensions set it to - % lowest subcarrier value - if upperSC<1 - upperSC = 1; - end - % Set the location of the window in front of the pilot to - % be averaged in frequency direction - lowerSC = sc+half_freq_window; - % If this location is outwith the grid dimensions set it to - % highest subcarrier value - if lowerSC>size(grid,1) - lowerSC = size(grid,1); - end - % Set the location of the window in front of the pilot to - % be averaged in time direction - leftSYM = sym-half_time_window; - % If this location is outwith the grid dimensions set it to - % lowest OFDM symbol value - if leftSYM<1 - leftSYM = 1; - end - % Set the location of the window at the back of the pilot - % to be averaged in time direction - rightSYM = sym+half_time_window; - % If this location is outwith the grid dimensions set it to - % highest OFDM symbol value - if rightSYM>size(grid,2) - rightSYM = size(grid,2); - end - - % Define the window to average using the determined - % subcarrier and OFDM symbol values - avgVec = grid(upperSC:lowerSC,leftSYM:rightSYM); - - % Remove the zero values from the window so that the average is - % calculated using only valid pilots - avgVec = avgVec(avgVec~=0); - % Average the desired pilot using all pilots within - % averaging window - if isempty(avgVec) - avgVec = 0; - end - - avgGrid(sc,sym) = grid(sc,sym)/numel(avgVec); - scalingVec(n) = numel(avgVec); - end -end - -%createVirtualPilots Create virtual pilots. -% [VP] = createVirtualPilots(..) returns a 3xNvp matrix which contains -% the time/frequency and least squares estimate of virtual pilots. -% Nvp is the number of virtual pilots. -% -% The inputs are: -% -% ENB structure which must contain the following fields: -% NDLRB - Number of downlink resource blocks -% CyclicPrefix - Optional. Cyclic prefix length {'Normal'(default),'Extended'} -% -% P_EST - A matrix containing the pilots within the grid. The matrix must -% have three rows. Each column contains the information for each pilot: -% [subcarrier_indices symbol_indices pilot_channel_estimate] -% -% ANTENNA - The current antenna port -% CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END - a value {0 or 1} -% indicating whether to return virtual pilots in each position. A 1 -% indicates virtual pilots should be returned, a 0 indicates they should -% not be returned. -% -% Example: -% -% Create virtual pilots on the top of a grid of pilots (estimates) -% VP_TOP = createVirtualPilots(ENB,estimates,0,1,0,0,0); -% -% Add virtual pilots to current pilot estimates for interpolation -% estimates = [estimates VP_TOP]; - -% Copyright 2009-2010 The MathWorks, Inc. -function VP = createVirtualPilots(ENB,P_EST,CREATE_TOP,CREATE_BOTTOM,CREATE_FRONT,CREATE_END) - - % Initialize outputs - VP = zeros(3,0); - - % Get resource grid dimensions - dims = lteDLResourceGridSize(ENB); - K = dims(1); - - % Virtual pilot cut-off values - indices in time or frequency at which - % the virtual pilot shall be discarded. As the symbol indices of the - % pilots passed in may be positive and negative the start and end of - % the effective grid varies therefore affecting the front and end pilot - % cut-off values - coTop = -6; % - coBottom = K+6; % - coFront = min(P_EST(2,:))-7; % floor(min(P_EST(2,:))/L)*L-5; % - coEnd = max(P_EST(2,:))+7; % ceil(max(P_EST(2,:))/L)*L+5; - - % Number of pilots in a subcarrier is dependent upon antenna -% noPilotinSC = (2-floor(ANTENNA/2))*nSF; - noPilotinSC = numel(P_EST(P_EST(1,:)==P_EST(1,1))); - - % Number of pilots in a symbol - noPilotinSym = K/6; - - % Sort by subcarrier - [~, indices] = sortrows(P_EST(1,:).'); - p_est_sorted_sc = P_EST(:,indices).'; - - if CREATE_TOP - % Repeat first and second SC containing pilots - p_est_rep_above = p_est_sorted_sc(1+noPilotinSC:noPilotinSC*2,:); - p_est_rep_above = [p_est_rep_above.' p_est_sorted_sc(1:noPilotinSC,:).'].'; - - % Subtract six to normalize subcarrier indices - p_est_rep_above(:,1) = p_est_rep_above(:,1) - 6; - - % Remove virtual pilots which are too far - p_est_rep_above(p_est_rep_above(:,1) < coTop,:) = []; - - % Initialize vp vector - VP_TOP = zeros(size(p_est_rep_above)); - - % Create virtual pilots on top - for p = 1:size(p_est_rep_above) - VP_TOP(p,:) = calculatePilot(p_est_rep_above(p,:), p_est_sorted_sc); - end - - % Transpose to make suitable for output - VP = [VP VP_TOP.']; - end - - if CREATE_BOTTOM - % Repeat last and second last SC containing pilots - p_est_rep_below = p_est_sorted_sc(end-noPilotinSC*2+1:end-noPilotinSC,:); - p_est_rep_below = [p_est_rep_below.' p_est_sorted_sc(end-noPilotinSC+1:end,:).'].'; - - % Add six to normalize subcarrier indices - p_est_rep_below(:,1) = p_est_rep_below(:,1) + 6; - - % Remove virtual pilots which are too far - p_est_rep_below(p_est_rep_below(:,1) > coBottom,:) = []; - - % Initialize vp vector - VP_BOTTOM = zeros(size(p_est_rep_below)); - - % Create virtual pilots on bottom - for p = 1:size(p_est_rep_below) - VP_BOTTOM(p,:) = calculatePilot(p_est_rep_below(p,:), p_est_sorted_sc); - end - - % Transpose to make suitable for output - VP = [VP VP_BOTTOM.']; - end - - % Sort by symbol - [~, indices] = sortrows(P_EST(2,:).'); - p_est_sorted_sym = P_EST(:,indices).'; - - if CREATE_FRONT - % Repeat first symbol containing pilots - p_est_rep_front = p_est_sorted_sym(noPilotinSym+1:(noPilotinSym*2),:); - - % Add subcarrier above and below - p_est_rep_front = addSCs(p_est_rep_front,noPilotinSym); - - % Repeat second symbol containing pilots - p_est_rep_front_second = p_est_sorted_sym(1:noPilotinSym,:); - - % Add subcarrier above and below - p_est_rep_front_second = addSCs(p_est_rep_front_second,noPilotinSym); - - % Concatenate to create virtual pilots - p_est_rep_front = [p_est_rep_front.' p_est_rep_front_second.'].'; - - % Subtract seven to normalize symbol indices - p_est_rep_front(:,2) = p_est_rep_front(:,2) - 7; - - % Remove virtual pilots which are too far - p_est_rep_front = removeTooFar(p_est_rep_front,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); - - % Initialize vp vector - VP_FRONT = zeros(size(p_est_rep_front)); - - % Create virtual pilots on front - for p = 1:length(p_est_rep_front) - VP_FRONT(p,:) = calculatePilot(p_est_rep_front(p,:), p_est_sorted_sc); - end - - % Transpose for output - VP = [VP VP_FRONT.']; - end - - if CREATE_END - % Repeat last symbol containing pilots - p_est_rep_end = p_est_sorted_sym(end-(noPilotinSym*2)+1:end-noPilotinSym,:); - - % Add subcarrier above and below - p_est_rep_end = addSCs(p_est_rep_end,noPilotinSym); - - % Repeat second symbol containing pilots - p_est_rep_end_second = p_est_sorted_sym(end-noPilotinSym+1:end,:); - - % Add subcarrier above and below - p_est_rep_end_second = addSCs(p_est_rep_end_second,noPilotinSym); - - % Concatenate to create virtual pilots - p_est_rep_end = [p_est_rep_end.' p_est_rep_end_second.'].'; - - % Add seven to normalize symbol indices, mod controls case when - % only 2 pilots per subcarrier - p_est_rep_end(:,2) = p_est_rep_end(:,2) + 7; - - % Remove virtual pilots which are too far - p_est_rep_end = removeTooFar(p_est_rep_end,p_est_sorted_sym,coTop,coBottom,coFront,coEnd); - - % Initialize vp vector - VP_END = zeros(size(p_est_rep_end)); - - % Create virtual pilots on front - for p = 1:length(p_est_rep_end) - VP_END(p,:) = calculatePilot(p_est_rep_end(p,:), p_est_sorted_sc); - end - - % Transpose for output - VP = [VP VP_END.']; - end -end - -function vp = calculatePilot(p_est_rep, p_est_sorted) - % Calculate Euclidean distance between virtual pilot and other - % pilots - ind = sqrt((p_est_rep(1)-p_est_sorted(:,1)).^2+ (p_est_rep(2)-p_est_sorted(:,2)).^2); - % ind = (abs(p_est_rep(1)-p_est_sorted(:,1))+ abs(p_est_rep(2)-p_est_sorted(:,2))); - - % Sort from shortest to longest distance - [~, ind] = sortrows(ind); - - % Take three closest pilots - ind = ind(1:10); - pilots_use = p_est_sorted(ind,:); - - % If first 3 pilots used are in the same subcarrier or symbol then use 4th instead of 3rd - while ((pilots_use(3,1) == pilots_use(2,1)) && (pilots_use(2,1) == pilots_use(1,1)) || (pilots_use(3,2) == pilots_use(2,2)) && (pilots_use(2,2) == pilots_use(1,2))) - pilots_use(3,:) = []; - end - - % Calculate virtual pilot value - vp = calculateVirtualValue(pilots_use(3,:),pilots_use(1,:),pilots_use(2,:),p_est_rep(1),p_est_rep(2)); -end - -function new = calculateVirtualValue(a,b,c,xnew,ynew) - % Calculate vectors - AB = b-a; - AC = c-a; - - % Perform cross product - cro = cross(AB,AC); - - % Break out X, Y and Z plane coeffs - x = cro(1); - y = cro(2); - z = cro(3); - - % Calculate normal in equation - c = sum(cro.*a); - - % Calculate new z value - znew = (c - xnew*x - ynew*y)/z; - - % Return new point - new = [xnew ynew znew]; -end - -function pilots = addSCs(pilots, noPilotinSym) - % Add on extra subcarrier above - pilots(end+1,:) = pilots(1,:); - pilots(end,1) = pilots(end,1) - 6; - - % Add on extra subcarrier below - pilots(end+1,:) = pilots(noPilotinSym,:); - pilots(end,1) = pilots(end,1) + 6; -end - -function pilots = removeTooFar(pilots,p_est_sorted_sym,coTop,coBottom,coFront,coEnd) - pilots((pilots(:,2) < coFront) | (pilots(:,1) < coTop) | (pilots(:,2)> coEnd) | (pilots(:,1) > coBottom),:) = []; - - % Remove virtual pilots which fall within resource grid - removeInd = []; - for i = 1:size(pilots) - if (find(p_est_sorted_sym(:,2) == pilots(i,2))) - removeInd = [removeInd i]; %#ok - end - end - pilots(removeInd,:) = []; -end - -%CreateEdgeVirtualPilots -% Creates virtual pilots on the edges of the resource grid to improve -% interpolation results. Also adds virtual pilots around the current pilot -% estimates. -function vps = createEdgeVirtualPilots(enb,p_est) - - % Determine dimensions of current subframe - dims=lteDLResourceGridSize(enb); - K=dims(1); - L=dims(2); - - % Calculate virtual pilots beyond upper and lower bandwidth edge based - % on pilots present on subcarriers. Also create virtual pilots 1/2 RB - % above and below extent of current pilots. - vps=createDimensionVirtualPilots(p_est,2,unique([-6 min(p_est(1,:)-6) max(p_est(1,:)+6) K+6])); - - % Combine these frequency-direction VPs with original pilots. - temp = [p_est vps]; - - % Calculate virtual pilots beyond start and end of subframe based on - % pilots and frequency-direction VPs present in symbols. Also create - % virtual 1 OFDM symbol before and after extent of current pilots. - vps = [vps createDimensionVirtualPilots(temp,1,unique([-1 min(p_est(2,:)-1) max(p_est(2,:)+1) L+1]))]; - -end - -% dim=1 adds VPs in time -% dim=2 adds VPs in frequency -function vps = createDimensionVirtualPilots(p_est,dim,points) - - vps=[]; - - pilots = unique(p_est(dim,:)); - for i = pilots - x=find(p_est(dim,:)==i); - rep=1+double(length(x)==1); - adj=(1:rep)-rep; - pil = interp1(p_est(3-dim,x)+adj,repmat(p_est(3,x),1,rep),points,'linear','extrap'); - for j=1:length(points) - vps = [ vps [i;points(j);pil(j)] ]; %#ok - end - end - - if (dim==2) - vps = vps([2 1 3],:); - end - -end - diff --git a/matlab/tests/neighbour_cell_search.m b/matlab/tests/neighbour_cell_search.m deleted file mode 100644 index 881a53650..000000000 --- a/matlab/tests/neighbour_cell_search.m +++ /dev/null @@ -1,61 +0,0 @@ - -clear -NofENB = 1; - -for i=1:NofENB - enb = lteTestModel('1.1','5MHz'); - enb.TotSubframes = 10; - if (i == 1) - tx_signal = lteTestModelTool(enb); - else - tx_signal = tx_signal + lteTestModelTool(enb); - end -end - -corrcfg.PSS='On'; -corrcfg.SSS='On'; -corrcfg.CellRS='On'; - -cec = struct; % Channel estimation config structure -cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging -cec.FreqWindow = 9; % Frequency window size -cec.TimeWindow = 9; % Time window size -cec.InterpType = 'Linear'; % 2D interpolation type -cec.InterpWindow = 'Centered'; % Interpolation window type -cec.InterpWinSize = 1; % Interpolation window size - - -addpath('../../debug/lte/phy/lib/sync/test') -addpath('../../debug/lte/phy/lib/ch_estimation/test') - -%tx_signal = signal; - -enb = struct('NDLRB',6,'CyclicPrefix','Normal','DuplexMode','FDD'); -[cellid, offset] = lteCellSearch(enb, tx_signal,1); - -enb.NCellID=cellid; -disp(offset) -enb.NSubframe = 0; - -rxWaveform = tx_signal(1+offset:end,:); -rxGrid = lteOFDMDemodulate(enb,rxWaveform); - -enb.CellRefP = 4; - -[hest, nest] = lteDLChannelEstimate(enb,cec,rxGrid); - -griddims = lteResourceGridSize(enb); % Resource grid dimensions -L = griddims(2); - -pbchIndices = ltePBCHIndices(enb); -[pbchRx, pbchHest] = lteExtractResources( ... - pbchIndices, rxGrid(:,1:L,:), hest(:,1:L,:,:)); - -% Decode PBCH -[bchBits, pbchSymbols, nfmod4, mib, enb.CellRefP] = ltePBCHDecode( ... - enb, pbchRx, pbchHest, nest); - -% Parse MIB bits -enb = lteMIB(mib, enb) - -%plot(angle(hest(:,[1 4],1,1))); diff --git a/matlab/tests/pdcch_test.m b/matlab/tests/pdcch_test.m deleted file mode 100644 index 1a9a21a3a..000000000 --- a/matlab/tests/pdcch_test.m +++ /dev/null @@ -1,105 +0,0 @@ -%% PDCCH Blind Search and DCI Decoding - -%% Cell-Wide Settings -% A structure |enbConfig| is used to configure the eNodeB. - -Npackets = 1; -SNR_values =20;%linspace(-5,3,8); - -enbConfig.NDLRB = 15; % No of Downlink RBs in total BW -enbConfig.CyclicPrefix = 'Normal'; % CP length -enbConfig.CFI = 3; ; % 4 PDCCH symbols as NDLRB <= 10 -enbConfig.Ng = 'Sixth'; % HICH groups -enbConfig.CellRefP = 2; % 1-antenna ports -enbConfig.NCellID = 10; % Physical layer cell identity -enbConfig.NSubframe = 0; % Subframe number 0 -enbConfig.DuplexMode = 'FDD'; % Frame structure -enbConfig.PHICHDuration = 'Normal'; - -%% DCI Message Generation -% Generate a DCI message to be mapped to the PDCCH. - -dciConfig.DCIFormat = 'Format1A'; % DCI message format -dciConfig.Allocation.RIV = 26; % Resource indication value - -% Create DCI message for given configuration -[dciMessage, dciMessageBits] = lteDCI(enbConfig, dciConfig); - -%% DCI Channel Coding - -C_RNTI = 65535; % 16-bit UE-specific mask -pdcchConfig.RNTI = C_RNTI; % Radio network temporary identifier -pdcchConfig.PDCCHFormat = 3; % PDCCH format - -% DCI message bits coding to form coded DCI bits -codedDciBits = lteDCIEncode(pdcchConfig, dciMessageBits); - -%% PDCCH Bits Generation - -pdcchDims = ltePDCCHInfo(enbConfig); - -% Initialize elements with -1 to indicate that all the bits are unused -pdcchBits = -1*ones(pdcchDims.MTot, 1); - -% Perform search space for UE-specific control channel candidates. -candidates = ltePDCCHSpace(enbConfig, pdcchConfig, {'bits', '1based'}); - -Ncad=randi(length(candidates),1,1); - -% Map PDCCH payload on available UE-specific candidate. In this example the -% first available candidate is used to map the coded DCI bits. -pdcchBits ( candidates(Ncad, 1) : candidates(Ncad, 2) ) = codedDciBits; - -%% PDCCH Complex-Valued Modulated Symbol Generation - -pdcchSymbols = ltePDCCH(enbConfig, pdcchBits); - -pdcchIndices = ltePDCCHIndices(enbConfig,{'1based'}); - -decoded = zeros(size(SNR_values)); -decoded_liblte = zeros(size(SNR_values)); - -Nports = enbConfig.CellRefP; -ueConfig.RNTI = C_RNTI; - -subframe_tx = lteDLResourceGrid(enbConfig); -subframe_tx(pdcchIndices) = pdcchSymbols; - -addpath('../../debug/lte/phy/lib/phch/test') - -for snr_idx=1:length(SNR_values) - SNRdB = SNR_values(snr_idx); - for i=1:Npackets - - %% Noise Addition - SNR = 10^(SNRdB/10); % Linear SNR - - N0 = 1/(sqrt(2.0*Nports)*SNR); - noise = N0*complex(randn(size(subframe_tx)), randn(size(subframe_tx))); % Generate noise - - subframe_rx = sum(subframe_tx + noise,3); % Add noise to PDCCH symbols - - pdcchSymbolsNoisy = subframe_rx(pdcchIndices(:,1)); - - %% PDCCH Decoding - recPdcchBits = ltePDCCHDecode(enbConfig, pdcchSymbolsNoisy); - - %% Blind Decoding using DCI Search - [rxDCI, rxDCIBits] = ltePDCCHSearch(enbConfig, ueConfig, recPdcchBits); - decoded(snr_idx) = decoded(snr_idx) + length(rxDCI); - - [found_liblte, llr, viterbi_in] = liblte_pdcch(enbConfig, ueConfig.RNTI, subframe_rx); - - decoded_liblte(snr_idx) = decoded_liblte(snr_idx)+found_liblte; - end - fprintf('SNR: %.1f\n',SNRdB) -end - -if (Npackets>1) - plot(SNR_values,1-decoded/Npackets,SNR_values,1-decoded_liblte/Npackets) - grid on - legend('Matlab','libLTE') -else - disp(decoded_liblte) -end - diff --git a/matlab/tests/test_pbch.m b/matlab/tests/test_pbch.m deleted file mode 100644 index 47972e6c7..000000000 --- a/matlab/tests/test_pbch.m +++ /dev/null @@ -1,102 +0,0 @@ -%clear -rmc = lteRMCDL('R.10'); - -NofPortsTx=2; - -SNR_values_db=linspace(-6,0,4); -Nrealizations=50; -enb = struct('NCellID',0,'NDLRB',50,'CellRefP',NofPortsTx,'CyclicPrefix','Normal','DuplexMode','FDD','NSubframe',0); - - -cfg.Seed = 8; % Random channel seed -cfg.NRxAnts = 1; % 1 receive antenna -cfg.DelayProfile = 'EVA'; % EVA delay spread -cfg.DopplerFreq = 120; % 120Hz Doppler frequency -cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation -cfg.InitTime = 0; % Initialize at time zero -cfg.NTerms = 16; % Oscillators used in fading model -cfg.ModelType = 'GMEDS'; % Rayleigh fading model type -cfg.InitPhase = 'Random'; % Random initial phases -cfg.NormalizePathGains = 'On'; % Normalize delay profile power -cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas - -cec.PilotAverage = 'UserDefined'; % Type of pilot averaging -cec.FreqWindow = 9; % Frequency window size -cec.TimeWindow = 9; % Time window size -cec.InterpType = 'linear'; % 2D interpolation type -cec.InterpWindow = 'Centered'; % Interpolation window type -cec.InterpWinSize = 1; % Interpolation window size - -rmc.PDSCH.Modulation = '16QAM'; -[waveform,rgrid,info] = lteRMCDLTool(rmc,[1;0;0;1]); - -cfg.SamplingRate = info.SamplingRate; - -addpath('../../debug/lte/phy/lib/phch/test') - - -error=zeros(length(SNR_values_db),2); -for snr_idx=1:length(SNR_values_db) - SNRdB = SNR_values_db(snr_idx); % Desired SNR in dB - SNR = 10^(SNRdB/20); % Linear SNR - - errorReal = zeros(Nrealizations,2); - for i=1:Nrealizations - - griddims = lteResourceGridSize(enb); % Resource grid dimensions - L = griddims(2); - - rxWaveform = lteFadingChannel(cfg,waveform(:,1)); - - %% Additive Noise - N0 = 1/(sqrt(2.0*double(enb.CellRefP)*double(info.Nfft))*SNR); - - % Create additive white Gaussian noise - noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform))); - - rxWaveform = noise + rxWaveform; - - % rxWaveform = downsampled; - - % Number of OFDM symbols in a subframe - % OFDM demodulate signal - rxgrid = lteOFDMDemodulate(enb, rxWaveform); - - % Perform channel estimation - [hest, nest] = lteDLChannelEstimate(enb, cec, rxgrid(:,1:L,:)); - - pbchIndices = ltePBCHIndices(enb); - [pbchRx, pbchHest] = lteExtractResources( ... - pbchIndices, rxgrid(:,1:L,:), hest(:,1:L,:,:)); - - % Decode PBCH - [bchBits, pbchSymbols, nfmod4, mib, nof_ports] = ltePBCHDecode( ... - enb, pbchRx, pbchHest, nest); - - if (nof_ports ~= NofPortsTx) - errorReal(i,1)=1; - end - - [nof_ports2, pbchSymbols2, pbchBits, ce, ce2, pbchRx2, pbchHest2,indices]=... - liblte_pbch(enb, rxWaveform, hest, nest); - if (nof_ports2 ~= NofPortsTx) - errorReal(i,2)=1; - end -% if (errorReal(i,1) ~= errorReal(i,2)) -% i=1; -% end - end - error(snr_idx,:) = sum(errorReal); - fprintf('SNR: %.2f dB\n', SNR_values_db(snr_idx)); -end - -if (length(SNR_values_db) > 1) - plot(SNR_values_db, 1-error/Nrealizations) - grid on - xlabel('SNR (dB)'); - ylabel('Pdet') - legend('Matlab','libLTE') -else - disp(error) -end - diff --git a/matlab/tests/test_pdsch_resalloc.m b/matlab/tests/test_pdsch_resalloc.m deleted file mode 100644 index 61c9d9740..000000000 --- a/matlab/tests/test_pdsch_resalloc.m +++ /dev/null @@ -1,76 +0,0 @@ -filename='../../debug/dist_ra.dat'; - -enb.NDLRB = 50; -enb.CyclicPrefix = 'Normal'; -enb.PHICHDuration = 'Normal'; -enb.CFI = 2; -enb.Ng = 'Sixth'; -enb.CellRefP = 1; -enb.NCellID = 196; -enb.NSubframe = 5; -enb.NTotalSubframes=1; -enb.DuplexMode = 'FDD'; - -dci.NDLRB = enb.NDLRB; -dci.DCIFormat = 'Format1C'; -dci.AllocationType=1; -%dci.Allocation.Bitmap='01111000011110000'; -%dci.Allocation.Subset=3; -dci.Allocation.RIV = 33; -dci.Allocation.Gap = 0; -dci.ModCoding=6; -dci.RV=0; -dci.DuplexMode = enb.DuplexMode; -dci.NTxAnts = enb.CellRefP; -pdcch.RNTI = 65535; -pdcch.PDCCHFormat = 3; - -pdsch.Modulation='QPSK'; -pdsch.RNTI=pdcch.RNTI; -if (enb.CellRefP == 1) - pdsch.TxScheme='Port0'; -else - pdsch.TxScheme='TxDiversity'; -end -pdsch.NLayers=enb.CellRefP; -pdsch.trblklen=176; -pdsch.RV=dci.RV; - -% Begin frame generation -subframe = lteDLResourceGrid(enb); - -%%% Create Reference Signals -rsAnt = lteCellRS(enb); -indAnt = lteCellRSIndices(enb); -subframe(indAnt) = rsAnt; - -%%% Create PDCCH -[dciMessage,dciMessageBits] = lteDCI(enb,dci); -codedDciBits = lteDCIEncode(pdcch,dciMessageBits); -pdcchInfo = ltePDCCHInfo(enb); -pdcchBits = -1*ones(1,pdcchInfo.MTot); -candidates = ltePDCCHSpace(enb,pdcch,{'bits','1based'}); -pdcchBits (candidates(1,1):candidates(1,2)) = codedDciBits; -pdcchSymbols = ltePDCCH(enb, pdcchBits); -pdcchIndices = ltePDCCHIndices(enb,{'1based'}); -subframe(pdcchIndices) = pdcchSymbols; - -% Create PDSCH -pdsch.prbset = lteDCIResourceAllocation(enb,dci); - -[pdschIndices,pdschInfo] = ltePDSCHIndices(enb,pdsch,pdsch.prbset); - -dlschTransportBlk=randi([0 1],pdsch.trblklen,1); -pdschcodeword = lteDLSCH(enb,pdsch,pdschInfo.G,dlschTransportBlk); -%crced = lteCRCEncode(dlschTransportBlk, '24A'); -%encoded = lteTurboEncode(crced); -%pdschcodeword2 = lteRateMatchTurbo(encoded,pdschInfo.G,pdsch.RV); -pdschSymbols = ltePDSCH(enb,pdsch,pdschcodeword); - -subframe(pdschIndices) = pdschSymbols; - -txwaveform = lteOFDMModulate(enb,subframe); - -write_complex(filename,sum(txwaveform,2)); -fprintf('Written signal to %s\n',filename); - diff --git a/matlab/tests/test_sss.m b/matlab/tests/test_sss.m deleted file mode 100644 index 21c9a0bac..000000000 --- a/matlab/tests/test_sss.m +++ /dev/null @@ -1,144 +0,0 @@ - -SNR_values = linspace(-6,4,10); -Npackets = 200; -CFO=4/15; -m0=7; -m1=10; -%m0=26; -%m1=21; - -recordedWaveform = x; -if (~isempty(recordedWaveform)) - Npackets = floor(length(recordedWaveform)/19200)-1; - SNR_values = 0; -end - -error = zeros(6,length(SNR_values)); - -enb = struct('NCellID',2,'NSubframe',0,'NDLRB',6,'CellRefP',1,'CyclicPrefix','Normal','DuplexMode','FDD'); -sss=lteSSS(enb); - -cfg.Seed = 2; % Random channel seed -cfg.NRxAnts = 1; % 1 receive antenna -cfg.DelayProfile = 'ETU'; % EVA delay spread -cfg.DopplerFreq = 144; % 120Hz Doppler frequency -cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation -cfg.NTerms = 16; % Oscillators used in fading model -cfg.ModelType = 'GMEDS'; % Rayleigh fading model type -cfg.InitPhase = 'Random'; % Random initial phases -cfg.NormalizePathGains = 'On'; % Normalize delay profile power -cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas % Initialize at time zero - -[s, c0, c1] = get_sc(mod(enb.NCellID,3)); - -subframe = lteDLResourceGrid(enb); -sssSym = lteSSS(enb); -sssInd = lteSSSIndices(enb); -subframe(sssInd) = sssSym; -N_id_1 = floor(enb.NCellID/3); - -[txWaveform,info] = lteOFDMModulate(enb,subframe); -cfg.SamplingRate = info.SamplingRate; -fftSize = info.Nfft; - - -addpath('../../debug/lte/phy/lib/sync/test') - -for snr_idx=1:length(SNR_values) - SNRdB = SNR_values(snr_idx); - for i=1:Npackets - %% Noise Addition - SNR = 10^(SNRdB/10); % Linear SNR - - if (isempty(recordedWaveform)) - cfg.InitTime = i*(10^-3); - [rxWaveform, info]= lteFadingChannel(cfg,txWaveform); - rxWaveform = txWaveform; - - % Add CFO - freq = CFO/double(fftSize); - rxWaveform = rxWaveform.*exp(1i*2*pi*freq*(1:length(txWaveform))'); - - N0 = 1/(sqrt(2.0*enb.CellRefP*double(fftSize))*SNR); - noise = N0*complex(randn(size(rxWaveform)), randn(size(rxWaveform))); % Generate noise - - rxWaveform = rxWaveform + noise; - else - rxWaveform = recordedWaveform(i*19200+1:(i+1)*19200); - end - - offset = lteDLFrameOffset(enb,rxWaveform); - offsetVec(i)=offset; - rxWaveform = [rxWaveform(1+offset:end,:); zeros(offset,1)]; - - subframe_rx = lteOFDMDemodulate(enb,rxWaveform,1); - - sss_rx = subframe_rx(lteSSSIndices(enb)); - sss0=sss_rx(1:2:end); - sss1=sss_rx(2:2:end); - - beta0=sss0.*c0'; - beta1=sss1.*c1'; - - corr0=zeros(31,1); - for m=1:31 - corr0(m)=sum(beta0.*s(m,:)'); - end - corr0=abs(corr0).^2; - [m, idx]=max(corr0); - - error(1,snr_idx) = error(1,snr_idx) + ((idx ~= m0 && idx ~= m1)); - - M=2; - Nm=10; - - corr2=zeros(31,1); - for m=1:31 - for j=0:M - idx=1+j*Nm:(j+1)*Nm; - corr2(m)=corr2(m)+abs(sum(beta0(idx).*s(m,idx)')).^2; - end - end - [m, idx]=max(corr2); - - error(2,snr_idx) = error(2,snr_idx) + ((idx ~= m0 && idx ~= m1)); - - corr3=zeros(31,1); - for m=1:31 - corr3(m)=abs(sum(beta0(2:end).*conj(beta0(1:end-1)).*transpose(s(m,2:end).*conj(s(m,1:end-1))))).^2; - end - [m, idx]=max(corr3); - - error(3,snr_idx) = error(3,snr_idx) + ((idx ~= m0 && idx ~= m1)); - - % libLTE results - [n,sf_idx,lt_corr0]=liblte_sss(enb,rxWaveform,'full'); - [m, idx]=max(lt_corr0); - error(4,snr_idx) = error(4,snr_idx) + ((idx ~= m0 && idx ~= m1)); - - [n,sf_idx,lt_corr2]=liblte_sss(enb,rxWaveform,'partial'); - [m, idx]=max(lt_corr2); - error(5,snr_idx) = error(5,snr_idx) + ((idx ~= m0 && idx ~= m1)); - - [n,sf_idx,lt_corr3]=liblte_sss(enb,rxWaveform,'diff'); - [m, idx]=max(lt_corr3); - error(6,snr_idx) = error(6,snr_idx) + ((idx ~= m0 && idx ~= m1)); - - end -end - -if (length(SNR_values) > 1) - plot(SNR_values,1-error/Npackets) - legend('Full','Partial','Differential','Full-lt','Partial-lt','Differential-lt') - grid on -else - e=error/Npackets; - fprintf('Full (mt/lt): \t%f/%f\n',e(1),e(4)); - fprintf('Partial (mt/lt):%f/%f\n',e(2),e(5)); - fprintf('Diff (mt/lt): \t%f/%f\n',e(3),e(6)); -end - - - - - diff --git a/matlab/tests/test_viterbi.m b/matlab/tests/test_viterbi.m deleted file mode 100644 index 06b49c82f..000000000 --- a/matlab/tests/test_viterbi.m +++ /dev/null @@ -1,49 +0,0 @@ - -clear -blen=40; -SNR_values_db=linspace(-6,4,8); -Nrealizations=5000; - -addpath('../../debug/lte/phy/lib/fec/test') - -errors1=zeros(1,length(SNR_values_db)); -errors2=zeros(1,length(SNR_values_db)); -for snr_idx=1:length(SNR_values_db) - SNRdB = SNR_values_db(snr_idx); % Desired SNR in dB - SNR = 10^(SNRdB/20); % Linear SNR - - for i=1:Nrealizations - Data = randi(2,blen,1)==1; - codedData = lteConvolutionalEncode(Data); - - codedsymbols = 2*double(codedData)-1; - - %% Additive Noise - N0 = 1/SNR; - - % Create additive white Gaussian noise - noise = N0*randn(size(codedsymbols)); - - noisysymbols = noise + codedsymbols; - - decodedData = lteConvolutionalDecode(noisysymbols); - interleavedSymbols = reshape(reshape(noisysymbols,[],3)',1,[]); - [decodedData2, quant] = liblte_viterbi(interleavedSymbols); - - errors1(snr_idx) = errors1(snr_idx) + any(decodedData ~= Data); - errors2(snr_idx) = errors2(snr_idx) + any(decodedData2 ~= Data); - end -end - -if (length(SNR_values_db) > 1) - semilogy(SNR_values_db, errors1/Nrealizations, ... - SNR_values_db, errors2/Nrealizations) - grid on - xlabel('SNR (dB)') - ylabel('BLER') - legend('Matlab','libLTE'); -else - disp(errors1); - disp(errors2); - disp(errors3); -end \ No newline at end of file From 10ce33d47dd6788fc330f55add94492d4627f184 Mon Sep 17 00:00:00 2001 From: ismagom Date: Wed, 17 Dec 2014 20:53:26 +0000 Subject: [PATCH 51/55] Changed matlab tests names --- lte/phy/lib/phch/test/pcfich_test_mex.c | 157 ++++++++++++++++++++++ matlab/tests/pbch_bler.m | 104 ++++++++++++++ matlab/tests/pdcch_bler.m | 171 ++++++++++++++++++++++++ matlab/tests/pdsch_resalloc.m | 76 +++++++++++ matlab/tests/sss_test.m | 144 ++++++++++++++++++++ matlab/tests/viterbi_bler.m | 49 +++++++ 6 files changed, 701 insertions(+) create mode 100644 lte/phy/lib/phch/test/pcfich_test_mex.c create mode 100644 matlab/tests/pbch_bler.m create mode 100644 matlab/tests/pdcch_bler.m create mode 100644 matlab/tests/pdsch_resalloc.m create mode 100644 matlab/tests/sss_test.m create mode 100644 matlab/tests/viterbi_bler.m diff --git a/lte/phy/lib/phch/test/pcfich_test_mex.c b/lte/phy/lib/phch/test/pcfich_test_mex.c new file mode 100644 index 000000000..4fff6cc7e --- /dev/null +++ b/lte/phy/lib/phch/test/pcfich_test_mex.c @@ -0,0 +1,157 @@ +/** + * + * \section COPYRIGHT + * + * Copyright 2013-2014 The libLTE Developers. See the + * COPYRIGHT file at the top-level directory of this distribution. + * + * \section LICENSE + * + * This file is part of the libLTE library. + * + * libLTE is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. + * + * libLTE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * A copy of the GNU Lesser General Public License can be found in + * the LICENSE file in the top-level directory of this distribution + * and at http://www.gnu.org/licenses/. + * + */ + +#include +#include "liblte/phy/phy.h" +#include "liblte/mex/mexutils.h" + +/** MEX function to be called from MATLAB to test the channel estimator + */ + +#define ENBCFG prhs[0] +#define INPUT prhs[1] +#define NOF_INPUTS 2 + +void help() +{ + mexErrMsgTxt + ("[cfi] = liblte_pdcch(enbConfig, rxWaveform)\n\n"); +} + +/* the gateway function */ +void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) +{ + int i; + lte_cell_t cell; + pcfich_t pcfich; + chest_dl_t chest; + lte_fft_t fft; + regs_t regs; + uint32_t sf_idx; + cf_t *input_fft, *input_signal; + + if (nrhs != NOF_INPUTS) { + help(); + return; + } + + if (mexutils_read_cell(ENBCFG, &cell)) { + help(); + return; + } + + if (mexutils_read_uint32_struct(ENBCFG, "NSubframe", &sf_idx)) { + help(); + return; + } + + if (chest_dl_init(&chest, cell)) { + fprintf(stderr, "Error initializing equalizer\n"); + return; + } + + if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { + fprintf(stderr, "Error initializing FFT\n"); + return; + } + + if (regs_init(®s, cell)) { + mexErrMsgTxt("Error initiating regs\n"); + return; + } + + if (pcfich_init(&pcfich, ®s, cell)) { + fprintf(stderr, "Error creating PBCH object\n"); + return; + } + + /** Allocate input buffers */ + if (mexutils_read_cf(INPUT, &input_signal) < 0) { + mexErrMsgTxt("Error reading input signal\n"); + return; + } + input_fft = vec_malloc(SF_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); + + // Set Channel estimates to 1.0 (ignore fading) + cf_t *ce[MAX_PORTS]; + for (i=0;i NOF_INPUTS) { + cf_t *cearray; + mexutils_read_cf(prhs[NOF_INPUTS], &cearray); + for (i=0;i NOF_INPUTS + 1) { + noise_power = mxGetScalar(prhs[NOF_INPUTS+1]); + } else { + noise_power = chest_dl_get_noise_estimate(&chest); + } + + + uint32_t cfi, distance; + int n = pcfich_decode(&pcfich, input_fft, ce, noise_power, sf_idx, &cfi, &distance); + + if (nlhs >= 1) { + if (n < 0) { + plhs[0] = mxCreateDoubleScalar(-1); + } else { + plhs[0] = mxCreateDoubleScalar(cfi); + } + } + if (nlhs >= 2) { + mexutils_write_cf(pcfich.pcfich_d, &plhs[1], 16, 1); + } + if (nlhs >= 3) { + mexutils_write_cf(pcfich.pcfich_symbols[0], &plhs[2], 16, 1); + } + + chest_dl_free(&chest); + lte_fft_free(&fft); + pcfich_free(&pcfich); + regs_free(®s); + + for (i=0;i 1) + semilogy(SNR_values_db, error/Nrealizations) + grid on + xlabel('SNR (dB)'); + ylabel('BLER') + legend('Matlab','libLTE') + axis([min(SNR_values_db) max(SNR_values_db) 1/Nrealizations/10 1]) +else + disp(error) +end + diff --git a/matlab/tests/pdcch_bler.m b/matlab/tests/pdcch_bler.m new file mode 100644 index 000000000..c337a7b63 --- /dev/null +++ b/matlab/tests/pdcch_bler.m @@ -0,0 +1,171 @@ +%% PDCCH Blind Search and DCI Decoding + PCFICH encoding/decoding + +%% Cell-Wide Settings +% A structure |enbConfig| is used to configure the eNodeB. +clear + +Npackets = 1000; +SNR_values = linspace(-0.5,3,6); + +txCFI = 3; +enbConfig.NDLRB = 15; % No of Downlink RBs in total BW +enbConfig.CyclicPrefix = 'Normal'; % CP length +enbConfig.CFI = txCFI; ; % 4 PDCCH symbols as NDLRB <= 10 +enbConfig.Ng = 'Sixth'; % HICH groups +enbConfig.CellRefP = 1; % 1-antenna ports +enbConfig.NCellID = 0; % Physical layer cell identity +enbConfig.NSubframe = 5; % Subframe number 0 +enbConfig.DuplexMode = 'FDD'; % Frame structure +enbConfig.PHICHDuration = 'Normal'; +C_RNTI = 65535; % 16-bit UE-specific mask + +%% Setup Fading channel model +cfg.Seed = 8; % Random channel seed +cfg.NRxAnts = 1; % 1 receive antenna +cfg.DelayProfile = 'EPA'; % EVA delay spread +cfg.DopplerFreq = 5; % 120Hz Doppler frequency +cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation +cfg.InitTime = 0; % Initialize at time zero +cfg.NTerms = 16; % Oscillators used in fading model +cfg.ModelType = 'GMEDS'; % Rayleigh fading model type +cfg.InitPhase = 'Random'; % Random initial phases +cfg.NormalizePathGains = 'On'; % Normalize delay profile power +cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas + +% Setup channel equalizer +cec.PilotAverage = 'UserDefined'; % Type of pilot averaging +cec.FreqWindow = 9; % Frequency window size +cec.TimeWindow = 9; % Time window size +cec.InterpType = 'linear'; % 2D interpolation type +cec.InterpWindow = 'Centered'; % Interpolation window type +cec.InterpWinSize = 1; % Interpolation window size + +%% DCI Message Generation +% Generate a DCI message to be mapped to the PDCCH. + +dciConfig.DCIFormat = 'Format1A'; % DCI message format +dciConfig.Allocation.RIV = 26; % Resource indication value + +% Create DCI message for given configuration +[dciMessage, dciMessageBits] = lteDCI(enbConfig, dciConfig); + +%% DCI Channel Coding + +pdcchConfig.RNTI = C_RNTI; % Radio network temporary identifier +pdcchConfig.PDCCHFormat = 3; % PDCCH format +ueConfig.RNTI = C_RNTI; + +% DCI message bits coding to form coded DCI bits +codedDciBits = lteDCIEncode(pdcchConfig, dciMessageBits); + +%% PDCCH Bits Generation + +pdcchDims = ltePDCCHInfo(enbConfig); + +% Initialize elements with -1 to indicate that all the bits are unused +pdcchBits = -1*ones(pdcchDims.MTot, 1); + +% Perform search space for UE-specific control channel candidates. +candidates = ltePDCCHSpace(enbConfig, pdcchConfig, {'bits', '1based'}); + +Ncad=randi(length(candidates),1,1); + +% Map PDCCH payload on available UE-specific candidate. In this example the +% first available candidate is used to map the coded DCI bits. +pdcchBits ( candidates(Ncad, 1) : candidates(Ncad, 2) ) = codedDciBits; + +%% PDCCH Complex-Valued Modulated Symbol Generation + +pdcchSymbols = ltePDCCH(enbConfig, pdcchBits); +pdcchIndices = ltePDCCHIndices(enbConfig,{'1based'}); +subframe_tx = lteDLResourceGrid(enbConfig); +subframe_tx(pdcchIndices) = pdcchSymbols; + +%% PCFICH +cfiCodeword = lteCFI(enbConfig); +pcfichSymbols = ltePCFICH(enbConfig,cfiCodeword); +pcfichIndices = ltePCFICHIndices(enbConfig,'1based'); +subframe_tx(pcfichIndices) = pcfichSymbols; + +%% Add references +cellRsSym = lteCellRS(enbConfig); +cellRsInd = lteCellRSIndices(enbConfig); +subframe_tx(cellRsInd) = cellRsSym; + +[txWaveform, info] = lteOFDMModulate(enbConfig,subframe_tx); +cfg.SamplingRate = info.SamplingRate; + +addpath('../../debug/lte/phy/lib/phch/test') + +decoded = zeros(size(SNR_values)); +decoded_cfi = zeros(size(SNR_values)); +decoded_liblte = zeros(size(SNR_values)); +decoded_cfi_liblte = zeros(size(SNR_values)); + +parfor snr_idx=1:length(SNR_values) + SNRdB = SNR_values(snr_idx); + SNR = 10^(SNRdB/10); % Linear SNR + N0 = 1/(sqrt(2.0*enbConfig.CellRefP*double(info.Nfft))*SNR); + for i=1:Npackets + + enbConfigRx=enbConfig; + + rxWaveform = sum(txWaveform,2); + + %% Fading + rxWaveform = lteFadingChannel(cfg,rxWaveform); + + %% Noise Addition + noise = N0*complex(randn(size(rxWaveform)), randn(size(rxWaveform))); % Generate noise + rxWaveform = rxWaveform + noise; + + %% Demodulate + subframe_rx = lteOFDMDemodulate(enbConfigRx, rxWaveform); + + % Perform channel estimation + [hest, nest] = lteDLChannelEstimate(enbConfigRx, cec, subframe_rx); + + [pcfichSymbolsRx, pdcfichSymbolsHest] = lteExtractResources(pcfichIndices(:,1), subframe_rx, hest); + + %% PCFICH decoding + [pcfichBits, pcfichSymbols] = ltePCFICHDecode(enbConfigRx,pcfichSymbolsRx, pdcfichSymbolsHest, nest); + rxCFI = lteCFIDecode(pcfichBits); + + decoded_cfi(snr_idx) = decoded_cfi(snr_idx) + (rxCFI == txCFI); + + %% PDCCH Decoding + enbConfigRx.CFI = rxCFI; + pdcchIndicesRx = ltePDCCHIndices(enbConfigRx,{'1based'}); + [pdcchSymbolsRx, pdcchSymbolsHest] = lteExtractResources(pdcchIndicesRx(:,1), subframe_rx, hest); + [recPdcchBits] = ltePDCCHDecode(enbConfigRx, pdcchSymbolsRx, pdcchSymbolsHest, nest); + + %% Blind Decoding using DCI Search + [rxDCI, rxDCIBits] = ltePDCCHSearch(enbConfigRx, ueConfig, recPdcchBits); + decoded(snr_idx) = decoded(snr_idx) + (length(rxDCI)>0); + + + %% Same with libLTE + [rxCFI, pcfichSymbols2, pcfichSymbolsRx2] = liblte_pcfich(enbConfigRx, rxWaveform); + decoded_cfi_liblte(snr_idx) = decoded_cfi_liblte(snr_idx) + (rxCFI == txCFI); + enbConfigRx.CFI = rxCFI; + [found_liblte, llr, pdcchSymbols2] = liblte_pdcch(enbConfigRx, ueConfig.RNTI, rxWaveform); + decoded_liblte(snr_idx) = decoded_liblte(snr_idx)+found_liblte; + end + fprintf('SNR: %.1f\n',SNRdB) +end + +if (Npackets>1) + semilogy(SNR_values,1-decoded/Npackets,'bo-',... + SNR_values,1-decoded_cfi/Npackets,'bx:',... + SNR_values,1-decoded_liblte/Npackets, 'ro-',... + SNR_values,1-decoded_cfi_liblte/Npackets,'rx:') + grid on + legend('Matlab all','Matlab cfi', 'libLTE all', 'libLTE cfi') + xlabel('SNR (dB)') + ylabel('BLER') + axis([min(SNR_values) max(SNR_values) 1/Npackets/10 1]) +else + disp(decoded) + disp(decoded_liblte) +end + diff --git a/matlab/tests/pdsch_resalloc.m b/matlab/tests/pdsch_resalloc.m new file mode 100644 index 000000000..61c9d9740 --- /dev/null +++ b/matlab/tests/pdsch_resalloc.m @@ -0,0 +1,76 @@ +filename='../../debug/dist_ra.dat'; + +enb.NDLRB = 50; +enb.CyclicPrefix = 'Normal'; +enb.PHICHDuration = 'Normal'; +enb.CFI = 2; +enb.Ng = 'Sixth'; +enb.CellRefP = 1; +enb.NCellID = 196; +enb.NSubframe = 5; +enb.NTotalSubframes=1; +enb.DuplexMode = 'FDD'; + +dci.NDLRB = enb.NDLRB; +dci.DCIFormat = 'Format1C'; +dci.AllocationType=1; +%dci.Allocation.Bitmap='01111000011110000'; +%dci.Allocation.Subset=3; +dci.Allocation.RIV = 33; +dci.Allocation.Gap = 0; +dci.ModCoding=6; +dci.RV=0; +dci.DuplexMode = enb.DuplexMode; +dci.NTxAnts = enb.CellRefP; +pdcch.RNTI = 65535; +pdcch.PDCCHFormat = 3; + +pdsch.Modulation='QPSK'; +pdsch.RNTI=pdcch.RNTI; +if (enb.CellRefP == 1) + pdsch.TxScheme='Port0'; +else + pdsch.TxScheme='TxDiversity'; +end +pdsch.NLayers=enb.CellRefP; +pdsch.trblklen=176; +pdsch.RV=dci.RV; + +% Begin frame generation +subframe = lteDLResourceGrid(enb); + +%%% Create Reference Signals +rsAnt = lteCellRS(enb); +indAnt = lteCellRSIndices(enb); +subframe(indAnt) = rsAnt; + +%%% Create PDCCH +[dciMessage,dciMessageBits] = lteDCI(enb,dci); +codedDciBits = lteDCIEncode(pdcch,dciMessageBits); +pdcchInfo = ltePDCCHInfo(enb); +pdcchBits = -1*ones(1,pdcchInfo.MTot); +candidates = ltePDCCHSpace(enb,pdcch,{'bits','1based'}); +pdcchBits (candidates(1,1):candidates(1,2)) = codedDciBits; +pdcchSymbols = ltePDCCH(enb, pdcchBits); +pdcchIndices = ltePDCCHIndices(enb,{'1based'}); +subframe(pdcchIndices) = pdcchSymbols; + +% Create PDSCH +pdsch.prbset = lteDCIResourceAllocation(enb,dci); + +[pdschIndices,pdschInfo] = ltePDSCHIndices(enb,pdsch,pdsch.prbset); + +dlschTransportBlk=randi([0 1],pdsch.trblklen,1); +pdschcodeword = lteDLSCH(enb,pdsch,pdschInfo.G,dlschTransportBlk); +%crced = lteCRCEncode(dlschTransportBlk, '24A'); +%encoded = lteTurboEncode(crced); +%pdschcodeword2 = lteRateMatchTurbo(encoded,pdschInfo.G,pdsch.RV); +pdschSymbols = ltePDSCH(enb,pdsch,pdschcodeword); + +subframe(pdschIndices) = pdschSymbols; + +txwaveform = lteOFDMModulate(enb,subframe); + +write_complex(filename,sum(txwaveform,2)); +fprintf('Written signal to %s\n',filename); + diff --git a/matlab/tests/sss_test.m b/matlab/tests/sss_test.m new file mode 100644 index 000000000..21c9a0bac --- /dev/null +++ b/matlab/tests/sss_test.m @@ -0,0 +1,144 @@ + +SNR_values = linspace(-6,4,10); +Npackets = 200; +CFO=4/15; +m0=7; +m1=10; +%m0=26; +%m1=21; + +recordedWaveform = x; +if (~isempty(recordedWaveform)) + Npackets = floor(length(recordedWaveform)/19200)-1; + SNR_values = 0; +end + +error = zeros(6,length(SNR_values)); + +enb = struct('NCellID',2,'NSubframe',0,'NDLRB',6,'CellRefP',1,'CyclicPrefix','Normal','DuplexMode','FDD'); +sss=lteSSS(enb); + +cfg.Seed = 2; % Random channel seed +cfg.NRxAnts = 1; % 1 receive antenna +cfg.DelayProfile = 'ETU'; % EVA delay spread +cfg.DopplerFreq = 144; % 120Hz Doppler frequency +cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation +cfg.NTerms = 16; % Oscillators used in fading model +cfg.ModelType = 'GMEDS'; % Rayleigh fading model type +cfg.InitPhase = 'Random'; % Random initial phases +cfg.NormalizePathGains = 'On'; % Normalize delay profile power +cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas % Initialize at time zero + +[s, c0, c1] = get_sc(mod(enb.NCellID,3)); + +subframe = lteDLResourceGrid(enb); +sssSym = lteSSS(enb); +sssInd = lteSSSIndices(enb); +subframe(sssInd) = sssSym; +N_id_1 = floor(enb.NCellID/3); + +[txWaveform,info] = lteOFDMModulate(enb,subframe); +cfg.SamplingRate = info.SamplingRate; +fftSize = info.Nfft; + + +addpath('../../debug/lte/phy/lib/sync/test') + +for snr_idx=1:length(SNR_values) + SNRdB = SNR_values(snr_idx); + for i=1:Npackets + %% Noise Addition + SNR = 10^(SNRdB/10); % Linear SNR + + if (isempty(recordedWaveform)) + cfg.InitTime = i*(10^-3); + [rxWaveform, info]= lteFadingChannel(cfg,txWaveform); + rxWaveform = txWaveform; + + % Add CFO + freq = CFO/double(fftSize); + rxWaveform = rxWaveform.*exp(1i*2*pi*freq*(1:length(txWaveform))'); + + N0 = 1/(sqrt(2.0*enb.CellRefP*double(fftSize))*SNR); + noise = N0*complex(randn(size(rxWaveform)), randn(size(rxWaveform))); % Generate noise + + rxWaveform = rxWaveform + noise; + else + rxWaveform = recordedWaveform(i*19200+1:(i+1)*19200); + end + + offset = lteDLFrameOffset(enb,rxWaveform); + offsetVec(i)=offset; + rxWaveform = [rxWaveform(1+offset:end,:); zeros(offset,1)]; + + subframe_rx = lteOFDMDemodulate(enb,rxWaveform,1); + + sss_rx = subframe_rx(lteSSSIndices(enb)); + sss0=sss_rx(1:2:end); + sss1=sss_rx(2:2:end); + + beta0=sss0.*c0'; + beta1=sss1.*c1'; + + corr0=zeros(31,1); + for m=1:31 + corr0(m)=sum(beta0.*s(m,:)'); + end + corr0=abs(corr0).^2; + [m, idx]=max(corr0); + + error(1,snr_idx) = error(1,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + M=2; + Nm=10; + + corr2=zeros(31,1); + for m=1:31 + for j=0:M + idx=1+j*Nm:(j+1)*Nm; + corr2(m)=corr2(m)+abs(sum(beta0(idx).*s(m,idx)')).^2; + end + end + [m, idx]=max(corr2); + + error(2,snr_idx) = error(2,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + corr3=zeros(31,1); + for m=1:31 + corr3(m)=abs(sum(beta0(2:end).*conj(beta0(1:end-1)).*transpose(s(m,2:end).*conj(s(m,1:end-1))))).^2; + end + [m, idx]=max(corr3); + + error(3,snr_idx) = error(3,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + % libLTE results + [n,sf_idx,lt_corr0]=liblte_sss(enb,rxWaveform,'full'); + [m, idx]=max(lt_corr0); + error(4,snr_idx) = error(4,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + [n,sf_idx,lt_corr2]=liblte_sss(enb,rxWaveform,'partial'); + [m, idx]=max(lt_corr2); + error(5,snr_idx) = error(5,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + [n,sf_idx,lt_corr3]=liblte_sss(enb,rxWaveform,'diff'); + [m, idx]=max(lt_corr3); + error(6,snr_idx) = error(6,snr_idx) + ((idx ~= m0 && idx ~= m1)); + + end +end + +if (length(SNR_values) > 1) + plot(SNR_values,1-error/Npackets) + legend('Full','Partial','Differential','Full-lt','Partial-lt','Differential-lt') + grid on +else + e=error/Npackets; + fprintf('Full (mt/lt): \t%f/%f\n',e(1),e(4)); + fprintf('Partial (mt/lt):%f/%f\n',e(2),e(5)); + fprintf('Diff (mt/lt): \t%f/%f\n',e(3),e(6)); +end + + + + + diff --git a/matlab/tests/viterbi_bler.m b/matlab/tests/viterbi_bler.m new file mode 100644 index 000000000..06b49c82f --- /dev/null +++ b/matlab/tests/viterbi_bler.m @@ -0,0 +1,49 @@ + +clear +blen=40; +SNR_values_db=linspace(-6,4,8); +Nrealizations=5000; + +addpath('../../debug/lte/phy/lib/fec/test') + +errors1=zeros(1,length(SNR_values_db)); +errors2=zeros(1,length(SNR_values_db)); +for snr_idx=1:length(SNR_values_db) + SNRdB = SNR_values_db(snr_idx); % Desired SNR in dB + SNR = 10^(SNRdB/20); % Linear SNR + + for i=1:Nrealizations + Data = randi(2,blen,1)==1; + codedData = lteConvolutionalEncode(Data); + + codedsymbols = 2*double(codedData)-1; + + %% Additive Noise + N0 = 1/SNR; + + % Create additive white Gaussian noise + noise = N0*randn(size(codedsymbols)); + + noisysymbols = noise + codedsymbols; + + decodedData = lteConvolutionalDecode(noisysymbols); + interleavedSymbols = reshape(reshape(noisysymbols,[],3)',1,[]); + [decodedData2, quant] = liblte_viterbi(interleavedSymbols); + + errors1(snr_idx) = errors1(snr_idx) + any(decodedData ~= Data); + errors2(snr_idx) = errors2(snr_idx) + any(decodedData2 ~= Data); + end +end + +if (length(SNR_values_db) > 1) + semilogy(SNR_values_db, errors1/Nrealizations, ... + SNR_values_db, errors2/Nrealizations) + grid on + xlabel('SNR (dB)') + ylabel('BLER') + legend('Matlab','libLTE'); +else + disp(errors1); + disp(errors2); + disp(errors3); +end \ No newline at end of file From 5e6abc71866ccd42c708d16e154dd477f0240272 Mon Sep 17 00:00:00 2001 From: ismagom Date: Thu, 18 Dec 2014 00:30:31 +0000 Subject: [PATCH 52/55] Improved PCFICH detection using soft bit correlation. --- cuhd/lib/cuhd_imp.cpp | 18 +- lte/examples/CMakeLists.txt | 2 - lte/examples/cell_scanner/CMakeLists.txt | 28 -- lte/examples/cell_scanner/cell_scanner.c | 283 ------------------ lte/examples/cell_scanner/cell_scanner.h | 64 ---- lte/examples/cell_scanner/cell_scanner_test.c | 143 --------- lte/phy/include/liblte/phy/phch/pcfich.h | 17 +- lte/phy/lib/phch/src/pbch.c | 1 + lte/phy/lib/phch/src/pcfich.c | 71 +++-- lte/phy/lib/phch/test/pcfich_file_test.c | 10 +- lte/phy/lib/phch/test/pcfich_test.c | 14 +- lte/phy/lib/phch/test/pcfich_test_mex.c | 11 +- lte/phy/lib/ue/src/ue_dl.c | 7 +- lte/phy/lib/ue/src/ue_mib.c | 2 +- lte/phy/lib/ue/src/ue_sync.c | 2 +- 15 files changed, 84 insertions(+), 589 deletions(-) delete mode 100644 lte/examples/cell_scanner/CMakeLists.txt delete mode 100644 lte/examples/cell_scanner/cell_scanner.c delete mode 100644 lte/examples/cell_scanner/cell_scanner.h delete mode 100644 lte/examples/cell_scanner/cell_scanner_test.c diff --git a/cuhd/lib/cuhd_imp.cpp b/cuhd/lib/cuhd_imp.cpp index 33b925b97..1f9e60a5b 100644 --- a/cuhd/lib/cuhd_imp.cpp +++ b/cuhd/lib/cuhd_imp.cpp @@ -68,7 +68,7 @@ bool cuhd_rx_wait_lo_locked(void *h) { double report = 0.0; - while (isLocked(h) && report < 3.0) { + while (isLocked(h) && report < 3000.0) { report += 0.1; usleep(1000); } @@ -139,7 +139,7 @@ int cuhd_open(char *args, void **h) int cuhd_close(void *h) { cuhd_stop_rx_stream(h); - /** Something else to close the USRP?? */ + /** Something else to close the USRP?? */ return 0; } @@ -147,15 +147,17 @@ int cuhd_close(void *h) double cuhd_set_rx_srate(void *h, double freq) { cuhd_handler *handler = static_cast < cuhd_handler * >(h); + printf("Changing sampling freq now to %.2f MHz\n", freq/1000000); handler->usrp->set_rx_rate(freq); - double ret = handler->usrp->get_rx_rate(); + printf("Done\n"); + /* if ((int) ret != (int) freq) { printf("Got %f!=%f. setting master clock rate to %f\n",ret, freq, freq); handler->usrp->set_master_clock_rate(freq); handler->usrp->set_rx_rate(freq); - double ret = handler->usrp->get_rx_rate(); } - return ret; + */ + return freq; } double cuhd_set_rx_gain(void *h, double gain) @@ -168,8 +170,10 @@ double cuhd_set_rx_gain(void *h, double gain) double cuhd_set_rx_freq(void *h, double freq) { cuhd_handler *handler = static_cast < cuhd_handler * >(h); + printf("Tunning receiver to %.3f MHz\n", (double ) freq/1000000); handler->usrp->set_rx_freq(freq); - return handler->usrp->get_rx_freq(); + printf("Done\n"); + return freq; } double cuhd_set_rx_freq_offset(void *h, double freq, double off) { @@ -196,7 +200,7 @@ int cuhd_recv(void *h, void *data, uint32_t nsamples, bool blocking) std::cout << "\nError code: " << md.to_pp_string() << "\n\n"; } #endif - } while (n < nsamples); + } while (n < nsamples && md.error_code == uhd::rx_metadata_t::ERROR_CODE_NONE); return nsamples; } else { return handler->rx_stream->recv(data, nsamples, md, 0.0); diff --git a/lte/examples/CMakeLists.txt b/lte/examples/CMakeLists.txt index 72bcda270..402f3b0f1 100644 --- a/lte/examples/CMakeLists.txt +++ b/lte/examples/CMakeLists.txt @@ -92,5 +92,3 @@ IF(${CUHD_FIND} GREATER -1) ELSE(${CUHD_FIND} GREATER -1) MESSAGE(STATUS " UHD examples NOT INSTALLED: CUHD library not compiled.") ENDIF(${CUHD_FIND} GREATER -1) - -add_subdirectory(cell_scanner) \ No newline at end of file diff --git a/lte/examples/cell_scanner/CMakeLists.txt b/lte/examples/cell_scanner/CMakeLists.txt deleted file mode 100644 index 502745fe1..000000000 --- a/lte/examples/cell_scanner/CMakeLists.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# Copyright 2012-2013 The libLTE Developers. See the -# COPYRIGHT file at the top-level directory of this distribution. -# -# This file is part of the libLTE library. -# -# libLTE is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# libLTE is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# A copy of the GNU Lesser General Public License can be found in -# the LICENSE file in the top-level directory of this distribution -# and at http://www.gnu.org/licenses/. -# - - -################################################################# -# CELL SCANNER TEST -################################################################# - -add_executable(cell_scanner_test cell_scanner_test.c cell_scanner.c ../cuhd_utils.c) -target_link_libraries(cell_scanner_test lte_phy lte_rrc cuhd) diff --git a/lte/examples/cell_scanner/cell_scanner.c b/lte/examples/cell_scanner/cell_scanner.c deleted file mode 100644 index ff5e5ffe1..000000000 --- a/lte/examples/cell_scanner/cell_scanner.c +++ /dev/null @@ -1,283 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "liblte/rrc/rrc.h" -#include "liblte/phy/phy.h" -#include "liblte/cuhd/cuhd.h" -#include "../cuhd_utils.h" -#include "cell_scanner.h" - -#define B210_DEFAULT_GAIN 40.0 -#define B210_DEFAULT_GAIN_CORREC 80.0 // Gain of the Rx chain when the gain is set to 40 - -int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { - DEBUG(" ---- Receive %d samples ---- \n", nsamples); - return cuhd_recv(h, data, nsamples, 1); -} - -int cell_scanner_init(cell_scanner_t *q, cell_scanner_config_t *config) -{ - bzero(q, sizeof(cell_scanner_t)); - - memcpy(&q->config, config, sizeof(cell_scanner_config_t)); - - printf("Opening UHD device...\n"); - if (cuhd_open(q->config.uhd_args, &q->uhd)) { - fprintf(stderr, "Error opening uhd\n"); - return -1; - } - /* Set receiver gain */ - cuhd_set_rx_gain(q->uhd, B210_DEFAULT_GAIN); - - return 0; -} - -void cell_scanner_close(cell_scanner_t *q) { - cuhd_close(q->uhd); -} - -int cell_scanner_all_cells(cell_scanner_t *q, float frequency, cell_scanner_result_t *result) -{ - return cell_scanner_cell(q, frequency, -1, result); -} - -#define MAX_SINFO 10 - -int cell_scanner_cell(cell_scanner_t *q, float frequency, int N_id_2, cell_scanner_result_t *result) -{ - int ret; - cf_t *sf_buffer; - lte_cell_t cell; - int64_t sf_cnt; - ue_sync_t ue_sync; - ue_mib_t ue_mib; - ue_dl_t ue_dl; - lte_fft_t fft; - chest_dl_t chest; - uint32_t nframes_measure=0; - uint32_t nof_trials = 0; - uint32_t sfn = 0; // system frame number - int n; - uint8_t bch_payload[BCH_PAYLOAD_LEN], bch_payload_unpacked[BCH_PAYLOAD_LEN]; - uint32_t sfn_offset; - uint8_t data[1024]; - uint8_t data_unpacked[1024]; - - bzero(result, sizeof(cell_scanner_result_t)); - - /* set receiver frequency */ - cuhd_set_rx_freq(q->uhd, (double) frequency); - cuhd_rx_wait_lo_locked(q->uhd); - printf("Tunning receiver to %.3f MHz\n", (double ) frequency/1000000); - - cell_search_cfg_t cfg; - cfg.max_frames_pss = q->config.pss_max_frames; - cfg.max_frames_pbch = q->config.pbch_max_frames; - cfg.threshold = q->config.cell_detect_early_stop_threshold; - - ret = cuhd_search_and_decode_mib(q->uhd, &cfg, N_id_2, &cell); - if (ret < 0) { - fprintf(stderr, "Error searching cell\n"); - exit(-1); - } else if (ret == 0) { - printf("Cell not found\n"); - exit(0); - } - - /* set sampling frequency */ - int srate = lte_sampling_freq_hz(cell.nof_prb); - if (srate != -1) { - cuhd_set_rx_srate(q->uhd, (double) srate); - } else { - fprintf(stderr, "Invalid number of PRB %d\n", cell.nof_prb); - return LIBLTE_ERROR; - } - - INFO("Stopping UHD and flushing buffer...\n",0); - cuhd_stop_rx_stream(q->uhd); - cuhd_flush_buffer(q->uhd); - - if (ue_sync_init(&ue_sync, cell, cuhd_recv_wrapper, q->uhd)) { - fprintf(stderr, "Error initiating ue_sync\n"); - exit(-1); - } - if (ue_dl_init(&ue_dl, cell, 1234)) { - fprintf(stderr, "Error initiating UE downlink processing module\n"); - exit(-1); - } - if (ue_mib_init(&ue_mib, cell)) { - fprintf(stderr, "Error initaiting UE MIB decoder\n"); - exit(-1); - } - - /* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */ - ue_dl_set_rnti(&ue_dl, SIRNTI); - - /* Initialize subframe counter */ - sf_cnt = 0; - - if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { - fprintf(stderr, "Error initiating FFT\n"); - return -1; - } - if (chest_dl_init(&chest, cell)) { - fprintf(stderr, "Error initiating channel estimator\n"); - return -1; - } - - int sf_re = SF_LEN_RE(cell.nof_prb, cell.cp); - cf_t *sf_symbols = vec_malloc(sf_re * sizeof(cf_t)); - - cf_t *ce[MAX_PORTS]; - for (int i=0;iuhd); - - memcpy(&result->phy_cell, &cell, sizeof(lte_cell_t)); - - chest_dl_t *chest_ptr = &ue_dl.chest; - bool mib_decoded = false; - bool sib_decoded = false; - - /* Main loop */ - while (sf_cnt < q->config.measure_avg_nof_frames) { - - ret = ue_sync_get_buffer(&ue_sync, &sf_buffer); - if (ret < 0) { - fprintf(stderr, "Error calling ue_sync_work()\n"); - } - - /* ue_sync_get_buffer returns 1 if successfully read 1 aligned subframe */ - if (ret == 1) { - if (!mib_decoded) { - if (ue_sync_get_sfidx(&ue_sync) == 0) { - pbch_decode_reset(&ue_mib.pbch); - n = ue_mib_decode(&ue_mib, sf_buffer, bch_payload_unpacked, NULL, &sfn_offset); - if (n < 0) { - fprintf(stderr, "Error decoding UE MIB\n"); - exit(-1); - } else if (n == MIB_FOUND) { - bit_unpack_vector(bch_payload_unpacked, bch_payload, BCH_PAYLOAD_LEN); - bcch_bch_unpack(bch_payload, BCH_PAYLOAD_LEN, &cell, &sfn); - printf("Decoded MIB. SFN: %d, offset: %d\n", sfn, sfn_offset); - sfn = (sfn + sfn_offset)%1024; - mib_decoded = true; - } - } - } - - /* We are looking for SI Blocks, search only in appropiate places */ - if (mib_decoded && !sib_decoded && - (ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) - { - n = ue_dl_decode_sib(&ue_dl, sf_buffer, data, ue_sync_get_sfidx(&ue_sync), - ((int) ceilf((float)3*(((sfn)/2)%4)/2))%4); - if (n < 0) { - fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); - exit(-1); - } else if (n == 0) { - nof_trials++; - } else { - bit_unpack_vector(data, data_unpacked, n); - void *dlsch_msg = bcch_dlsch_unpack(data_unpacked, n); - if (dlsch_msg) { - printf("\n");fflush(stdout); - cell_access_info_t cell_info; - bcch_dlsch_sib1_get_cell_access_info(dlsch_msg, &cell_info); - printf("Decoded SIB1. Cell ID: 0x%x\n", cell_info.cell_id); - - result->cell_id = cell_info.cell_id; - - bcch_dlsch_fprint(dlsch_msg, stdout); - - sib_decoded = true; - } - } - } else { - chest_ptr = &chest; - /* Run FFT for all subframe data */ - lte_fft_run_sf(&fft, sf_buffer, sf_symbols); - chest_dl_estimate(&chest, sf_symbols, ce, ue_sync_get_sfidx(&ue_sync)); - } - - result->rssi = VEC_CMA(vec_avg_power_cf(sf_buffer,SF_LEN(lte_symbol_sz(cell.nof_prb))), - result->rssi,nframes_measure); - result->rsrq = VEC_EMA(chest_dl_get_rsrq(chest_ptr),result->rsrq,0.01); - result->rsrp = VEC_CMA(chest_dl_get_rsrp(chest_ptr),result->rsrp,nframes_measure); - result->snr = VEC_EMA(chest_dl_get_snr(chest_ptr),result->snr,0.01); - nframes_measure++; - - // Plot and Printf - if ((nframes_measure%10) == 0) { - printf("CFO: %+8.4f KHz, SFO: %+8.4f Khz, RSSI: %5.1f dBm, " - "RSRP: %+5.1f dBm, RSRQ: %5.1f dB, SNR: %5.1f dB\r", - ue_sync_get_cfo(&ue_sync)/1000, ue_sync_get_sfo(&ue_sync)/1000, - 10*log10(result->rssi*1000)-B210_DEFAULT_GAIN_CORREC, - 10*log10(result->rsrp*1000)-B210_DEFAULT_GAIN_CORREC, - 10*log10(result->rsrq), 10*log10(result->snr)); - if (verbose != VERBOSE_NONE) { - printf("\n"); - } - } - if (ue_sync_get_sfidx(&ue_sync) == 9) { - sfn++; - if (sfn == 1024) { - sfn = 0; - } - } - } else if (ret == 0) { - printf("Finding PSS... Peak: %8.1f, FrameCnt: %d, State: %d\r", - sync_get_peak_value(&ue_sync.sfind), - ue_sync.frame_total_cnt, ue_sync.state); - } - sf_cnt++; - } // Main loop - - // Correct RSRP and RSSI measurements - result->rssi /= pow(10, 8); - result->rsrp /= pow(10, 8); - - ue_sync_free(&ue_sync); - - return 0; -} - - - diff --git a/lte/examples/cell_scanner/cell_scanner.h b/lte/examples/cell_scanner/cell_scanner.h deleted file mode 100644 index faf5b890a..000000000 --- a/lte/examples/cell_scanner/cell_scanner.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include "liblte/phy/phy.h" - -typedef struct { - int pss_max_frames; - int pbch_max_frames; - float cell_detect_early_stop_threshold; - int measure_avg_nof_frames; - char *uhd_args; -} cell_scanner_config_t; - -typedef struct { - lte_cell_t phy_cell; - uint32_t cell_id; - float rsrp; - float rsrq; - float rssi; - float snr; -} cell_scanner_result_t; - -typedef struct { - cell_scanner_config_t config; - void *uhd; -} cell_scanner_t; - -int cell_scanner_init(cell_scanner_t *q, - cell_scanner_config_t *config); - -void cell_scanner_close(cell_scanner_t *q); - -int cell_scanner_all_cells(cell_scanner_t *q, - float frequency, - cell_scanner_result_t *result); - -int cell_scanner_cell(cell_scanner_t *q, - float frequency, - int N_id_2, - cell_scanner_result_t *result); diff --git a/lte/examples/cell_scanner/cell_scanner_test.c b/lte/examples/cell_scanner/cell_scanner_test.c deleted file mode 100644 index 52a40cb8d..000000000 --- a/lte/examples/cell_scanner/cell_scanner_test.c +++ /dev/null @@ -1,143 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2014 The libLTE Developers. See the - * COPYRIGHT file at the top-level directory of this distribution. - * - * \section LICENSE - * - * This file is part of the libLTE library. - * - * libLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * libLTE is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * A copy of the GNU Lesser General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "liblte/rrc/rrc.h" -#include "liblte/phy/phy.h" -#include "liblte/cuhd/cuhd.h" -#include "cell_scanner.h" - - -/********************************************************************** - * Program arguments processing - ***********************************************************************/ -typedef struct { - int nof_subframes; - int force_N_id_2; - char *uhd_args; - float uhd_freq; -}prog_args_t; - -void args_default(prog_args_t *args) { - args->nof_subframes = -1; - args->force_N_id_2 = -1; // Pick the best - args->uhd_args = ""; - args->uhd_freq = -1.0; -} - -void usage(prog_args_t *args, char *prog) { - printf("Usage: %s [alnv] -f rx_frequency (in Hz)\n", prog); - printf("\t-a UHD args [Default %s]\n", args->uhd_args); - printf("\t-l Force N_id_2 [Default best]\n"); - printf("\t-n nof_subframes [Default %d]\n", args->nof_subframes); - printf("\t-v [set verbose to debug, default none]\n"); -} - -void parse_args(prog_args_t *args, int argc, char **argv) { - int opt; - args_default(args); - while ((opt = getopt(argc, argv, "alnvf")) != -1) { - switch (opt) { - case 'a': - args->uhd_args = argv[optind]; - break; - case 'f': - args->uhd_freq = atof(argv[optind]); - break; - case 'n': - args->nof_subframes = atoi(argv[optind]); - break; - case 'l': - args->force_N_id_2 = atoi(argv[optind]); - break; - case 'v': - verbose++; - break; - default: - usage(args, argv[0]); - exit(-1); - } - } - if (args->uhd_freq < 0) { - usage(args, argv[0]); - exit(-1); - } -} -/**********************************************************************/ - -int main(int argc, char **argv) { - prog_args_t prog_args; - cell_scanner_result_t result; - cell_scanner_config_t cfg; - cell_scanner_t cs; - - parse_args(&prog_args, argc, argv); - - // Peak-to-sidelobe ratio (PSR) threshold for cell detection early stopping. - cfg.cell_detect_early_stop_threshold = 20.0; // This is a normal value. - // maximum 5 ms frames that will be scanned maximum in the case the threshold is not exceed - // ie for bad cells - cfg.pss_max_frames = 50; // this is 250 ms - - // maximum 5 ms frames that will be received to decode the PBCH - // ie for bad cells - cfg.pbch_max_frames = 500; // this is 2500 ms - - // Number of 1 ms subframes that will be used to compute rsrp, rsrq, snr, etc average - cfg.measure_avg_nof_frames = 1000; // 1 sec - - cfg.uhd_args = prog_args.uhd_args; - - // Init USRP - if (cell_scanner_init(&cs, &cfg)) { - fprintf(stderr, "Error initiating cell scanner\n"); - exit(-1); - } - - // Scan for a frequency - if (prog_args.force_N_id_2 < 0) { - // We have 2 options, either we scan for the three possible N_id_2 root sequences... - cell_scanner_all_cells(&cs, prog_args.uhd_freq, &result); - } else { - // or we scan for a single one. - cell_scanner_cell(&cs, prog_args.uhd_freq, prog_args.force_N_id_2, &result); - } - - printf("\nResult: CellID: %d, PHYID: %d, RSRP: %.1f dBm, RSRQ: %.1f dB, SNR: %.1f dB\n", - result.cell_id, result.phy_cell.id, - 10*log10(result.rsrp*1000), 10*log10(result.rsrq), 10*log10(result.snr)); -} diff --git a/lte/phy/include/liblte/phy/phch/pcfich.h b/lte/phy/include/liblte/phy/phch/pcfich.h index cd87c14f9..c151a4d1a 100644 --- a/lte/phy/include/liblte/phy/phch/pcfich.h +++ b/lte/phy/include/liblte/phy/phch/pcfich.h @@ -33,13 +33,12 @@ #include "liblte/phy/mimo/precoding.h" #include "liblte/phy/mimo/layermap.h" #include "liblte/phy/modem/mod.h" -#include "liblte/phy/modem/demod_hard.h" +#include "liblte/phy/modem/demod_soft.h" #include "liblte/phy/scrambling/scrambling.h" #include "liblte/phy/phch/regs.h" -#define PCFICH_CFI_LEN 32 -#define PCFICH_RE PCFICH_CFI_LEN/2 -#define PCFICH_MAX_DISTANCE 5 +#define PCFICH_CFI_LEN 32 +#define PCFICH_RE PCFICH_CFI_LEN/2 typedef _Complex float cf_t; @@ -56,13 +55,19 @@ typedef struct LIBLTE_API { cf_t pcfich_symbols[MAX_PORTS][PCFICH_RE]; cf_t pcfich_x[MAX_PORTS][PCFICH_RE]; cf_t pcfich_d[PCFICH_RE]; + + // cfi table in floats + float cfi_table_float[3][PCFICH_CFI_LEN]; /* bit message */ uint8_t data[PCFICH_CFI_LEN]; + /* received soft bits */ + float data_f[PCFICH_CFI_LEN]; + /* tx & rx objects */ modem_table_t mod; - demod_hard_t demod; + demod_soft_t demod; sequence_t seq_pcfich[NSUBFRAMES_X_FRAME]; precoding_t precoding; @@ -80,7 +85,7 @@ LIBLTE_API int pcfich_decode(pcfich_t *q, float noise_estimate, uint32_t subframe, uint32_t *cfi, - uint32_t *distance); + float *corr_result); LIBLTE_API int pcfich_encode(pcfich_t *q, uint32_t cfi, diff --git a/lte/phy/lib/phch/src/pbch.c b/lte/phy/lib/phch/src/pbch.c index 579aea90b..05e00a9c4 100644 --- a/lte/phy/lib/phch/src/pbch.c +++ b/lte/phy/lib/phch/src/pbch.c @@ -148,6 +148,7 @@ int pbch_init(pbch_t *q, lte_cell_t cell) { demod_soft_init(&q->demod); demod_soft_table_set(&q->demod, &q->mod); demod_soft_alg_set(&q->demod, APPROX); + if (sequence_pbch(&q->seq_pbch, q->cell.cp, q->cell.id)) { goto clean; } diff --git a/lte/phy/lib/phch/src/pcfich.c b/lte/phy/lib/phch/src/pcfich.c index 5dd68ea05..44916dc9c 100644 --- a/lte/phy/lib/phch/src/pcfich.c +++ b/lte/phy/lib/phch/src/pcfich.c @@ -42,11 +42,15 @@ #include "liblte/phy/utils/debug.h" // Table 5.3.4-1 -static uint8_t cfi_table[4][PCFICH_CFI_LEN] = { { 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, - 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, { 1, 0, 1, +static uint8_t cfi_table[4][PCFICH_CFI_LEN] = { + { 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, + 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1 }, + { 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, - 0, 1, 1, 0 }, { 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, - 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0 }, + { 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, + 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1 }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // reserved }; @@ -74,18 +78,26 @@ int pcfich_init(pcfich_t *q, regs_t *regs, lte_cell_t cell) { fprintf(stderr, "Error initializing precoding\n"); } - if (modem_table_lte(&q->mod, LTE_QPSK, false)) { + if (modem_table_lte(&q->mod, LTE_QPSK, true)) { goto clean; } - demod_hard_init(&q->demod); - demod_hard_table_set(&q->demod, LTE_QPSK); + demod_soft_init(&q->demod); + demod_soft_table_set(&q->demod, &q->mod); + demod_soft_alg_set(&q->demod, APPROX); for (int nsf = 0; nsf < NSUBFRAMES_X_FRAME; nsf++) { if (sequence_pcfich(&q->seq_pcfich[nsf], 2 * nsf, q->cell.id)) { goto clean; } } + + /* convert cfi bit tables to floats for demodulation */ + for (int i=0;i<3;i++) { + for (int j=0;jcfi_table_float[i][j] = (float) 2.0*cfi_table[i][j]-1.0; + } + } q->nof_symbols = PCFICH_RE; @@ -112,26 +124,22 @@ void pcfich_free(pcfich_t *q) { /** Finds the CFI with minimum distance with the vector of received 32 bits. * Saves the CFI value in the cfi pointer and returns the distance. */ -int pcfich_cfi_decode(uint8_t bits[PCFICH_CFI_LEN], uint32_t *cfi) { - int i, j; - int distance, index = -1; - int min = 32; - +float pcfich_cfi_decode(pcfich_t *q, uint32_t *cfi) { + int i; + int index = 0; + float max_corr = 0; + for (i = 0; i < 3; i++) { - distance = 0; - for (j = 0; j < PCFICH_CFI_LEN; j++) { - distance += (bits[j] ^ cfi_table[i][j]); - } - DEBUG("CFI=%d, distance:%d\n", i, distance); - if (distance < min) { - min = distance; - index = i; + float corr = vec_dot_prod_fff(q->cfi_table_float[i], q->data_f, PCFICH_CFI_LEN); + if (corr > max_corr) { + max_corr = corr; + index = i; } } if (cfi) { *cfi = index + 1; } - return min; + return max_corr; } /** Encodes the CFI producing a vector of 32 bits. @@ -151,8 +159,8 @@ int pcfich_cfi_encode(int cfi, uint8_t bits[PCFICH_CFI_LEN]) { * Returns 1 if successfully decoded the CFI, 0 if not and -1 on error */ int pcfich_decode(pcfich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], float noise_estimate, - uint32_t nsubframe, uint32_t *cfi, uint32_t *distance) { - int dist; + uint32_t nsubframe, uint32_t *cfi, float *corr_result) +{ /* Set pointers for layermapping & precoding */ int i; @@ -200,21 +208,18 @@ int pcfich_decode(pcfich_t *q, cf_t *slot_symbols, cf_t *ce[MAX_PORTS], float no } /* demodulate symbols */ - demod_hard_demodulate(&q->demod, q->pcfich_d, q->data, q->nof_symbols); + demod_soft_sigma_set(&q->demod, 1.0); + demod_soft_demodulate(&q->demod, q->pcfich_d, q->data_f, q->nof_symbols); /* Scramble with the sequence for slot nslot */ - scrambling_b(&q->seq_pcfich[nsubframe], q->data); + scrambling_f(&q->seq_pcfich[nsubframe], q->data_f); /* decode CFI */ - dist = pcfich_cfi_decode(q->data, cfi); - if (distance) { - *distance = dist; - } - if (dist < PCFICH_MAX_DISTANCE) { - return 1; - } else { - return 0; + float corr = pcfich_cfi_decode(q, cfi); + if (corr_result) { + *corr_result = corr; } + return 1; } else { return LIBLTE_ERROR_INVALID_INPUTS; } diff --git a/lte/phy/lib/phch/test/pcfich_file_test.c b/lte/phy/lib/phch/test/pcfich_file_test.c index e91fa150b..e6bd53359 100644 --- a/lte/phy/lib/phch/test/pcfich_file_test.c +++ b/lte/phy/lib/phch/test/pcfich_file_test.c @@ -190,7 +190,8 @@ void base_free() { } int main(int argc, char **argv) { - uint32_t cfi, distance; + uint32_t cfi; + float cfi_corr; int n; if (argc < 3) { @@ -226,8 +227,9 @@ int main(int argc, char **argv) { INFO("Decoding PCFICH\n", 0); - n = pcfich_decode(&pcfich, fft_buffer, ce, chest_dl_get_noise_estimate(&chest), 0, &cfi, &distance); - printf("cfi: %d, distance: %d\n", cfi, distance); + + n = pcfich_decode(&pcfich, fft_buffer, ce, chest_dl_get_noise_estimate(&chest), 0, &cfi, &cfi_corr); + printf("cfi: %d, distance: %f\n", cfi, cfi_corr); base_free(); @@ -238,7 +240,7 @@ int main(int argc, char **argv) { printf("Could not decode PCFICH\n"); exit(-1); } else { - if (distance < 4 && cfi == 1) { + if (cfi_corr > 4 && cfi == 1) { exit(0); } else { exit(-1); diff --git a/lte/phy/lib/phch/test/pcfich_test.c b/lte/phy/lib/phch/test/pcfich_test.c index f4f907848..ab90f1358 100644 --- a/lte/phy/lib/phch/test/pcfich_test.c +++ b/lte/phy/lib/phch/test/pcfich_test.c @@ -82,8 +82,9 @@ int main(int argc, char **argv) { cf_t *ce[MAX_PORTS]; int nof_re; cf_t *slot_symbols[MAX_PORTS]; - uint32_t cfi, cfi_rx, nsf, distance; + uint32_t cfi, cfi_rx, nsf; int cid, max_cid; + float corr_res; parse_args(argc,argv); @@ -139,16 +140,11 @@ int main(int argc, char **argv) { slot_symbols[0][j] += slot_symbols[i][j]; } } - if (pcfich_decode(&pcfich, slot_symbols[0], ce, 0, nsf, &cfi_rx, &distance)<0) { - exit(-1); - } - INFO("cfi_tx: %d, cfi_rx: %d, ns: %d, distance: %d\n", - cfi, cfi_rx, nsf, distance); - - if (distance) { - printf("Error\n"); + if (pcfich_decode(&pcfich, slot_symbols[0], ce, 0, nsf, &cfi_rx, &corr_res)<0) { exit(-1); } + INFO("cfi_tx: %d, cfi_rx: %d, ns: %d, distance: %f\n", + cfi, cfi_rx, nsf, corr_res); } } pcfich_free(&pcfich); diff --git a/lte/phy/lib/phch/test/pcfich_test_mex.c b/lte/phy/lib/phch/test/pcfich_test_mex.c index 4fff6cc7e..2535bb816 100644 --- a/lte/phy/lib/phch/test/pcfich_test_mex.c +++ b/lte/phy/lib/phch/test/pcfich_test_mex.c @@ -70,12 +70,12 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) } if (chest_dl_init(&chest, cell)) { - fprintf(stderr, "Error initializing equalizer\n"); + mexErrMsgTxt("Error initializing equalizer\n"); return; } if (lte_fft_init(&fft, cell.cp, cell.nof_prb)) { - fprintf(stderr, "Error initializing FFT\n"); + mexErrMsgTxt("Error initializing FFT\n"); return; } @@ -85,7 +85,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) } if (pcfich_init(&pcfich, ®s, cell)) { - fprintf(stderr, "Error creating PBCH object\n"); + mexErrMsgTxt("Error creating PBCH object\n"); return; } @@ -124,8 +124,9 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) } - uint32_t cfi, distance; - int n = pcfich_decode(&pcfich, input_fft, ce, noise_power, sf_idx, &cfi, &distance); + uint32_t cfi; + float corr_res; + int n = pcfich_decode(&pcfich, input_fft, ce, noise_power, sf_idx, &cfi, &corr_res); if (nlhs >= 1) { if (n < 0) { diff --git a/lte/phy/lib/ue/src/ue_dl.c b/lte/phy/lib/ue/src/ue_dl.c index 1b0b57154..f19557e22 100644 --- a/lte/phy/lib/ue/src/ue_dl.c +++ b/lte/phy/lib/ue/src/ue_dl.c @@ -174,7 +174,8 @@ int ue_dl_decode(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx) { int ue_dl_decode_sib(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint32_t rvidx) { - uint32_t cfi, cfi_distance, i; + uint32_t cfi, i; + float cfi_corr; ra_pdsch_t ra_dl; dci_location_t locations[MAX_CANDIDATES]; dci_msg_t dci_msg; @@ -195,12 +196,12 @@ int ue_dl_decode_sib(ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, ui /* First decode PCFICH and obtain CFI */ if (pcfich_decode(&q->pcfich, q->sf_symbols, q->ce, - chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_distance)<0) { + chest_dl_get_noise_estimate(&q->chest), sf_idx, &cfi, &cfi_corr)<0) { fprintf(stderr, "Error decoding PCFICH\n"); return LIBLTE_ERROR; } - INFO("Decoded CFI=%d with distance %d\n", cfi, cfi_distance); + INFO("Decoded CFI=%d with correlation %.2f\n", cfi, cfi_corr); if (regs_set_cfi(&q->regs, cfi)) { fprintf(stderr, "Error setting CFI\n"); diff --git a/lte/phy/lib/ue/src/ue_mib.c b/lte/phy/lib/ue/src/ue_mib.c index 644b4289a..e8f6c7096 100644 --- a/lte/phy/lib/ue/src/ue_mib.c +++ b/lte/phy/lib/ue/src/ue_mib.c @@ -201,7 +201,7 @@ int ue_mib_sync_decode(ue_mib_sync_t * q, int ret = LIBLTE_ERROR_INVALID_INPUTS; cf_t *sf_buffer = NULL; uint32_t nof_frames = 0; - int mib_ret; + int mib_ret = MIB_NOTFOUND; if (q != NULL) { diff --git a/lte/phy/lib/ue/src/ue_sync.c b/lte/phy/lib/ue/src/ue_sync.c index f38f5e4ce..d82e5c709 100644 --- a/lte/phy/lib/ue/src/ue_sync.c +++ b/lte/phy/lib/ue/src/ue_sync.c @@ -272,7 +272,7 @@ int track_peak_no(ue_sync_t *q) { /* if we missed too many PSS go back to FIND */ q->frame_no_cnt++; if (q->frame_no_cnt >= TRACK_MAX_LOST) { - printf("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); + INFO("\n%d frames lost. Going back to FIND\n", (int) q->frame_no_cnt); q->state = SF_FIND; } else { INFO("Tracking peak not found. Peak %.3f, %d lost\n", From a25fa6a435c8fea10cf251cfa1f8920cb73f5ba2 Mon Sep 17 00:00:00 2001 From: ismagom Date: Thu, 18 Dec 2014 10:43:05 +0000 Subject: [PATCH 53/55] Added timeout to cuhd_recv --- cuhd/lib/cuhd_imp.cpp | 6 +++++- lte/examples/cell_measurement.c | 2 +- lte/examples/pdsch_ue.c | 2 +- lte/phy/lib/ch_estimation/src/chest_dl.c | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/cuhd/lib/cuhd_imp.cpp b/cuhd/lib/cuhd_imp.cpp index 1f9e60a5b..642f3155d 100644 --- a/cuhd/lib/cuhd_imp.cpp +++ b/cuhd/lib/cuhd_imp.cpp @@ -186,6 +186,7 @@ int cuhd_recv(void *h, void *data, uint32_t nsamples, bool blocking) { cuhd_handler *handler = static_cast < cuhd_handler * >(h); uhd::rx_metadata_t md; + uint32_t nof_packets = 0; if (blocking) { int n = 0, p; complex_t *data_c = (complex_t *) data; @@ -200,7 +201,10 @@ int cuhd_recv(void *h, void *data, uint32_t nsamples, bool blocking) std::cout << "\nError code: " << md.to_pp_string() << "\n\n"; } #endif - } while (n < nsamples && md.error_code == uhd::rx_metadata_t::ERROR_CODE_NONE); + nof_packets++; + } while (n < nsamples && + md.error_code == uhd::rx_metadata_t::ERROR_CODE_NONE && + nof_packets < 10); return nsamples; } else { return handler->rx_stream->recv(data, nsamples, md, 0.0); diff --git a/lte/examples/cell_measurement.c b/lte/examples/cell_measurement.c index c82be280e..0fb5796c1 100644 --- a/lte/examples/cell_measurement.c +++ b/lte/examples/cell_measurement.c @@ -49,7 +49,7 @@ float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_search_cfg_t cell_detect_config = { 5000, // maximum number of frames to receive for MIB decoding 50, // maximum number of frames to receive for PSS correlation - 9.0 // early-stops cell detection if mean PSR is above this value + 16.0 // early-stops cell detection if mean PSR is above this value }; /********************************************************************** diff --git a/lte/examples/pdsch_ue.c b/lte/examples/pdsch_ue.c index 595acc100..2373f98d3 100644 --- a/lte/examples/pdsch_ue.c +++ b/lte/examples/pdsch_ue.c @@ -56,7 +56,7 @@ float gain_offset = B210_DEFAULT_GAIN_CORREC; cell_search_cfg_t cell_detect_config = { 5000, 100, // nof_frames_total - 4.0 // threshold + 16.0 // threshold }; /********************************************************************** diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 89aca49eb..6cf6e0538 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -118,7 +118,7 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) //float f[3]={0.15, 0.7, 0.15}; //chest_dl_set_filter_freq(q, f, 3); - float f[5]={0.05, 0.15, 0.6, 0.15, 0.05}; + float f[5]={0.02, 0.18, 0.6, 0.18, 0.02}; chest_dl_set_filter_freq(q, f, 5); float t[2]={0.1, 0.9}; From fc1989b2957996b31c3a044478fcb407ebe284d5 Mon Sep 17 00:00:00 2001 From: ismagom Date: Thu, 18 Dec 2014 19:34:57 +0000 Subject: [PATCH 54/55] Changed estimator filter --- lte/phy/lib/ch_estimation/src/chest_dl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lte/phy/lib/ch_estimation/src/chest_dl.c b/lte/phy/lib/ch_estimation/src/chest_dl.c index 6cf6e0538..e163ac805 100644 --- a/lte/phy/lib/ch_estimation/src/chest_dl.c +++ b/lte/phy/lib/ch_estimation/src/chest_dl.c @@ -115,10 +115,10 @@ int chest_dl_init(chest_dl_t *q, lte_cell_t cell) } /* Set default time/freq filters */ - //float f[3]={0.15, 0.7, 0.15}; + //float f[3]={0.1, 0.8, 0.1}; //chest_dl_set_filter_freq(q, f, 3); - float f[5]={0.02, 0.18, 0.6, 0.18, 0.02}; + float f[5]={0.05, 0.15, 0.6, 0.15, 0.05}; chest_dl_set_filter_freq(q, f, 5); float t[2]={0.1, 0.9}; From c8c7bf39b2e9202acb5cf5f7f2a6b2e760ac77b7 Mon Sep 17 00:00:00 2001 From: ismagom Date: Thu, 18 Dec 2014 20:24:19 +0000 Subject: [PATCH 55/55] Reordered RRC ASN directory. Fixed ASN headers installation. --- CMakeLists.txt | 3 +- cmake/modules/BuildMex.cmake | 4 +- cmake/modules/FindVolk.cmake | 200 +++++++------- lte/examples/CMakeLists.txt | 33 +-- lte/phy/CMakeLists.txt | 2 +- lte/phy/lib/common/test/fft_test.c | 3 + lte/phy/lib/phch/test/CMakeLists.txt | 4 - lte/phy/lib/phch/test/pdcch_test_mex.c | 2 +- lte/phy/lib/phch/test/pdsch_re_test.c | 122 --------- lte/phy/lib/sync/test/CMakeLists.txt | 13 +- lte/phy/lib/ue/test/CMakeLists.txt | 38 --- lte/phy/lib/ue/test/ue_sync_usrp.c | 257 ------------------ lte/rrc/CMakeLists.txt | 6 - lte/rrc/asn/CMakeLists.txt | 27 -- .../liblte/rrc}/asn/AC-BarringConfig.h | 0 .../rrc}/asn/AC-BarringConfig1XRTT-r9.h | 0 .../liblte/rrc}/asn/ARFCN-ValueCDMA2000.h | 0 .../liblte/rrc}/asn/ARFCN-ValueEUTRA.h | 0 .../liblte/rrc}/asn/ARFCN-ValueGERAN.h | 0 .../liblte/rrc}/asn/ARFCN-ValueUTRA.h | 0 .../{ => include/liblte/rrc}/asn/AS-Config.h | 0 .../{ => include/liblte/rrc}/asn/AS-Context.h | 0 .../liblte/rrc}/asn/AbsoluteTimeInfo-r10.h | 0 .../liblte/rrc}/asn/AccessStratumRelease.h | 0 .../liblte/rrc}/asn/AdditionalReestabInfo.h | 0 .../rrc}/asn/AdditionalReestabInfoList.h | 0 .../liblte/rrc}/asn/AdditionalSI-Info-r9.h | 0 .../rrc}/asn/AdditionalSpectrumEmission.h | 0 .../liblte/rrc}/asn/AllowedMeasBandwidth.h | 0 .../liblte/rrc}/asn/AntennaInfoCommon.h | 0 .../rrc}/asn/AntennaInfoDedicated-r10.h | 0 .../rrc}/asn/AntennaInfoDedicated-v920.h | 0 .../liblte/rrc}/asn/AntennaInfoDedicated.h | 0 .../liblte/rrc}/asn/AntennaInfoUL-r10.h | 0 .../liblte/rrc}/asn/AreaConfiguration-r10.h | 0 .../liblte/rrc}/asn/BCCH-BCH-Message.h | 0 .../liblte/rrc}/asn/BCCH-BCH-MessageType.h | 0 .../liblte/rrc}/asn/BCCH-Config.h | 0 .../liblte/rrc}/asn/BCCH-DL-SCH-Message.h | 0 .../liblte/rrc}/asn/BCCH-DL-SCH-MessageType.h | 0 .../{ => include/liblte/rrc}/asn/BIT_STRING.h | 0 .../{ => include/liblte/rrc}/asn/BOOLEAN.h | 0 .../liblte/rrc}/asn/BandClassInfoCDMA2000.h | 0 .../liblte/rrc}/asn/BandClassListCDMA2000.h | 0 .../liblte/rrc}/asn/BandClassPriority1XRTT.h | 0 .../liblte/rrc}/asn/BandClassPriorityHRPD.h | 0 .../rrc}/asn/BandClassPriorityList1XRTT.h | 0 .../rrc}/asn/BandClassPriorityListHRPD.h | 0 .../rrc}/asn/BandCombinationListEUTRA-r10.h | 0 .../rrc}/asn/BandCombinationParameters-r10.h | 0 .../liblte/rrc}/asn/BandIndicatorGERAN.h | 0 .../liblte/rrc}/asn/BandInfoEUTRA.h | 0 .../liblte/rrc}/asn/BandListEUTRA.h | 0 .../liblte/rrc}/asn/BandParameters-r10.h | 0 .../liblte/rrc}/asn/BandParametersDL-r10.h | 0 .../liblte/rrc}/asn/BandParametersUL-r10.h | 0 .../liblte/rrc}/asn/BandclassCDMA2000.h | 0 .../liblte/rrc}/asn/BetaOffset-CA-Index.h | 0 .../liblte/rrc}/asn/BlackCellsToAddMod.h | 0 .../liblte/rrc}/asn/BlackCellsToAddModList.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/C-RNTI.h | 0 .../liblte/rrc}/asn/CA-BandwidthClass-r10.h | 0 .../rrc}/asn/CA-MIMO-ParametersDL-r10.h | 0 .../rrc}/asn/CA-MIMO-ParametersUL-r10.h | 0 .../{ => include/liblte/rrc}/asn/CA-RNTI.h | 0 .../rrc}/asn/CA-semiPersistSchedIntervalUL.h | 0 .../liblte/rrc}/asn/CDMA2000-Type.h | 0 .../liblte/rrc}/asn/CQI-ReportAperiodic-r10.h | 0 .../liblte/rrc}/asn/CQI-ReportConfig-r10.h | 0 .../liblte/rrc}/asn/CQI-ReportConfig-v920.h | 0 .../liblte/rrc}/asn/CQI-ReportConfig.h | 0 .../rrc}/asn/CQI-ReportConfigSCell-r10.h | 0 .../liblte/rrc}/asn/CQI-ReportModeAperiodic.h | 0 .../liblte/rrc}/asn/CQI-ReportPeriodic-r10.h | 0 .../liblte/rrc}/asn/CQI-ReportPeriodic.h | 0 .../asn/CSFB-RegistrationParam1XRTT-v920.h | 0 .../rrc}/asn/CSFB-RegistrationParam1XRTT.h | 0 .../CSFBParametersRequestCDMA2000-r8-IEs.h | 0 .../CSFBParametersRequestCDMA2000-v8a0-IEs.h | 0 .../rrc}/asn/CSFBParametersRequestCDMA2000.h | 0 .../CSFBParametersResponseCDMA2000-r8-IEs.h | 0 .../CSFBParametersResponseCDMA2000-v8a0-IEs.h | 0 .../rrc}/asn/CSFBParametersResponseCDMA2000.h | 0 .../rrc}/asn/CSG-AllowedReportingCells-r9.h | 0 .../liblte/rrc}/asn/CSG-Identity.h | 0 .../CSG-ProximityIndicationParameters-r9.h | 0 .../liblte/rrc}/asn/CSI-RS-Config-r10.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/CShift.h | 0 .../liblte/rrc}/asn/CarrierBandwidthEUTRA.h | 0 .../liblte/rrc}/asn/CarrierFreqCDMA2000.h | 0 .../liblte/rrc}/asn/CarrierFreqEUTRA.h | 0 .../liblte/rrc}/asn/CarrierFreqGERAN.h | 0 .../liblte/rrc}/asn/CarrierFreqListUTRA-FDD.h | 0 .../rrc}/asn/CarrierFreqListUTRA-TDD-r10.h | 0 .../liblte/rrc}/asn/CarrierFreqListUTRA-TDD.h | 0 .../liblte/rrc}/asn/CarrierFreqUTRA-FDD.h | 0 .../liblte/rrc}/asn/CarrierFreqUTRA-TDD.h | 0 .../liblte/rrc}/asn/CarrierFreqsGERAN.h | 0 .../liblte/rrc}/asn/CarrierFreqsInfoGERAN.h | 0 .../rrc}/asn/CarrierFreqsInfoListGERAN.h | 0 .../liblte/rrc}/asn/CellChangeOrder.h | 0 .../liblte/rrc}/asn/CellGlobalIdCDMA2000.h | 0 .../liblte/rrc}/asn/CellGlobalIdEUTRA.h | 0 .../liblte/rrc}/asn/CellGlobalIdGERAN.h | 0 .../liblte/rrc}/asn/CellGlobalIdList-r10.h | 0 .../liblte/rrc}/asn/CellGlobalIdUTRA.h | 0 .../liblte/rrc}/asn/CellIdentity.h | 0 .../{ => include/liblte/rrc}/asn/CellIndex.h | 0 .../liblte/rrc}/asn/CellIndexList.h | 0 .../liblte/rrc}/asn/CellInfoGERAN-r9.h | 0 .../liblte/rrc}/asn/CellInfoListGERAN-r9.h | 0 .../liblte/rrc}/asn/CellInfoListUTRA-FDD-r9.h | 0 .../rrc}/asn/CellInfoListUTRA-TDD-r10.h | 0 .../liblte/rrc}/asn/CellInfoListUTRA-TDD-r9.h | 0 .../liblte/rrc}/asn/CellInfoUTRA-FDD-r9.h | 0 .../liblte/rrc}/asn/CellInfoUTRA-TDD-r10.h | 0 .../liblte/rrc}/asn/CellInfoUTRA-TDD-r9.h | 0 .../CellReselectionParametersCDMA2000-v920.h | 0 .../asn/CellReselectionParametersCDMA2000.h | 0 .../liblte/rrc}/asn/CellReselectionPriority.h | 0 .../liblte/rrc}/asn/CellSelectionInfo-v920.h | 0 .../liblte/rrc}/asn/CellsToAddMod.h | 0 .../liblte/rrc}/asn/CellsToAddModCDMA2000.h | 0 .../liblte/rrc}/asn/CellsToAddModList.h | 0 .../rrc}/asn/CellsToAddModListCDMA2000.h | 0 .../rrc}/asn/CellsToAddModListUTRA-FDD.h | 0 .../rrc}/asn/CellsToAddModListUTRA-TDD.h | 0 .../liblte/rrc}/asn/CellsToAddModUTRA-FDD.h | 0 .../liblte/rrc}/asn/CellsToAddModUTRA-TDD.h | 0 .../liblte/rrc}/asn/CellsTriggeredList.h | 0 .../rrc}/asn/CommonSF-AllocPatternList-r9.h | 0 .../liblte/rrc}/asn/CounterCheck-r8-IEs.h | 0 .../liblte/rrc}/asn/CounterCheck-v8a0-IEs.h | 0 .../liblte/rrc}/asn/CounterCheck.h | 0 .../rrc}/asn/CounterCheckResponse-r8-IEs.h | 0 .../rrc}/asn/CounterCheckResponse-v8a0-IEs.h | 0 .../liblte/rrc}/asn/CounterCheckResponse.h | 0 .../liblte/rrc}/asn/CountingRequestInfo-r10.h | 0 .../liblte/rrc}/asn/CountingRequestList-r10.h | 0 .../rrc}/asn/CountingResponseInfo-r10.h | 0 .../rrc}/asn/CountingResponseList-r10.h | 0 .../asn/CrossCarrierSchedulingConfig-r10.h | 0 .../{ => include/liblte/rrc}/asn/DL-AM-RLC.h | 0 .../liblte/rrc}/asn/DL-CCCH-Message.h | 0 .../liblte/rrc}/asn/DL-CCCH-MessageType.h | 0 .../liblte/rrc}/asn/DL-DCCH-Message.h | 0 .../liblte/rrc}/asn/DL-DCCH-MessageType.h | 0 .../{ => include/liblte/rrc}/asn/DL-UM-RLC.h | 0 .../rrc}/asn/DLInformationTransfer-r8-IEs.h | 0 .../rrc}/asn/DLInformationTransfer-v8a0-IEs.h | 0 .../liblte/rrc}/asn/DLInformationTransfer.h | 0 .../liblte/rrc}/asn/DRB-CountInfo.h | 0 .../liblte/rrc}/asn/DRB-CountInfoList.h | 0 .../liblte/rrc}/asn/DRB-CountMSB-Info.h | 0 .../liblte/rrc}/asn/DRB-CountMSB-InfoList.h | 0 .../liblte/rrc}/asn/DRB-Identity.h | 0 .../liblte/rrc}/asn/DRB-ToAddMod.h | 0 .../liblte/rrc}/asn/DRB-ToAddModList.h | 0 .../liblte/rrc}/asn/DRB-ToReleaseList.h | 0 .../{ => include/liblte/rrc}/asn/DRX-Config.h | 0 .../liblte/rrc}/asn/DedicatedInfoCDMA2000.h | 0 .../liblte/rrc}/asn/DedicatedInfoNAS.h | 0 .../liblte/rrc}/asn/DeltaFList-PUCCH.h | 0 .../rrc}/asn/DeltaTxD-OffsetListPUCCH-r10.h | 0 .../{ => include/liblte/rrc}/asn/E-CSFB-r9.h | 0 .../liblte/rrc}/asn/EstablishmentCause.h | 0 .../liblte/rrc}/asn/ExplicitListOfARFCNs.h | 0 .../liblte/rrc}/asn/FilterCoefficient.h | 0 .../liblte/rrc}/asn/FreqPriorityEUTRA.h | 0 .../liblte/rrc}/asn/FreqPriorityListEUTRA.h | 0 .../rrc}/asn/FreqPriorityListUTRA-FDD.h | 0 .../rrc}/asn/FreqPriorityListUTRA-TDD.h | 0 .../liblte/rrc}/asn/FreqPriorityUTRA-FDD.h | 0 .../liblte/rrc}/asn/FreqPriorityUTRA-TDD.h | 0 .../liblte/rrc}/asn/FreqsPriorityGERAN.h | 0 .../liblte/rrc}/asn/FreqsPriorityListGERAN.h | 0 .../{ => include/liblte/rrc}/asn/Handover.h | 0 .../liblte/rrc}/asn/HandoverCommand-r8-IEs.h | 0 .../liblte/rrc}/asn/HandoverCommand.h | 0 ...ndoverFromEUTRAPreparationRequest-r8-IEs.h | 0 ...verFromEUTRAPreparationRequest-v1020-IEs.h | 0 ...overFromEUTRAPreparationRequest-v890-IEs.h | 0 ...overFromEUTRAPreparationRequest-v920-IEs.h | 0 .../asn/HandoverFromEUTRAPreparationRequest.h | 0 .../HandoverPreparationInformation-r8-IEs.h | 0 .../HandoverPreparationInformation-v920-IEs.h | 0 .../rrc}/asn/HandoverPreparationInformation.h | 0 .../{ => include/liblte/rrc}/asn/Hysteresis.h | 0 .../{ => include/liblte/rrc}/asn/IMSI-Digit.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/IMSI.h | 0 .../{ => include/liblte/rrc}/asn/INTEGER.h | 0 .../asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h | 0 .../asn/IRAT-ParametersCDMA2000-1XRTT-v920.h | 0 .../rrc}/asn/IRAT-ParametersCDMA2000-1XRTT.h | 0 .../rrc}/asn/IRAT-ParametersCDMA2000-HRPD.h | 0 .../rrc}/asn/IRAT-ParametersGERAN-v920.h | 0 .../liblte/rrc}/asn/IRAT-ParametersGERAN.h | 0 .../liblte/rrc}/asn/IRAT-ParametersUTRA-FDD.h | 0 .../rrc}/asn/IRAT-ParametersUTRA-TDD-v1020.h | 0 .../rrc}/asn/IRAT-ParametersUTRA-TDD128.h | 0 .../rrc}/asn/IRAT-ParametersUTRA-TDD384.h | 0 .../rrc}/asn/IRAT-ParametersUTRA-TDD768.h | 0 .../rrc}/asn/IRAT-ParametersUTRA-v920.h | 0 .../rrc}/asn/IdleModeMobilityControlInfo.h | 0 .../liblte/rrc}/asn/InitialUE-Identity.h | 0 .../liblte/rrc}/asn/InterFreqBandInfo.h | 0 .../liblte/rrc}/asn/InterFreqBandList.h | 0 .../liblte/rrc}/asn/InterFreqBlackCellList.h | 0 .../rrc}/asn/InterFreqCarrierFreqInfo.h | 0 .../rrc}/asn/InterFreqCarrierFreqList.h | 0 .../liblte/rrc}/asn/InterFreqNeighCellInfo.h | 0 .../liblte/rrc}/asn/InterFreqNeighCellList.h | 0 ...terFreqRSTDMeasurementIndication-r10-IEs.h | 0 .../InterFreqRSTDMeasurementIndication-r10.h | 0 .../liblte/rrc}/asn/InterRAT-BandInfo.h | 0 .../liblte/rrc}/asn/InterRAT-BandList.h | 0 .../liblte/rrc}/asn/IntraFreqBlackCellList.h | 0 .../liblte/rrc}/asn/IntraFreqNeighCellInfo.h | 0 .../liblte/rrc}/asn/IntraFreqNeighCellList.h | 0 .../liblte/rrc}/asn/Key-eNodeB-Star.h | 0 .../liblte/rrc}/asn/LocationInfo-r10.h | 0 .../liblte/rrc}/asn/LogMeasInfo-r10.h | 0 .../liblte/rrc}/asn/LogMeasInfoList-r10.h | 0 .../liblte/rrc}/asn/LogMeasReport-r10.h | 0 .../LoggedMeasurementConfiguration-r10-IEs.h | 0 .../asn/LoggedMeasurementConfiguration-r10.h | 0 .../liblte/rrc}/asn/LoggingDuration-r10.h | 0 .../liblte/rrc}/asn/LoggingInterval-r10.h | 0 .../liblte/rrc}/asn/LogicalChannelConfig.h | 0 .../liblte/rrc}/asn/MAC-MainConfig.h | 0 .../rrc}/asn/MBMS-NotificationConfig-r9.h | 0 .../liblte/rrc}/asn/MBMS-SessionInfo-r9.h | 0 .../liblte/rrc}/asn/MBMS-SessionInfoList-r9.h | 0 .../liblte/rrc}/asn/MBMSCountingRequest-r10.h | 0 .../rrc}/asn/MBMSCountingResponse-r10-IEs.h | 0 .../rrc}/asn/MBMSCountingResponse-r10.h | 0 .../liblte/rrc}/asn/MBSFN-AreaInfo-r9.h | 0 .../liblte/rrc}/asn/MBSFN-AreaInfoList-r9.h | 0 .../liblte/rrc}/asn/MBSFN-SubframeConfig.h | 0 .../rrc}/asn/MBSFN-SubframeConfigList.h | 0 .../rrc}/asn/MBSFNAreaConfiguration-r9.h | 0 .../asn/MBSFNAreaConfiguration-v930-IEs.h | 0 .../liblte/rrc}/asn/MCC-MNC-Digit.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/MCC.h | 0 .../liblte/rrc}/asn/MCCH-Message.h | 0 .../liblte/rrc}/asn/MCCH-MessageType.h | 0 .../liblte/rrc}/asn/MIMO-CapabilityDL-r10.h | 0 .../liblte/rrc}/asn/MIMO-CapabilityUL-r10.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/MMEC.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/MNC.h | 0 .../liblte/rrc}/asn/MasterInformationBlock.h | 0 .../{ => include/liblte/rrc}/asn/MeasConfig.h | 0 .../liblte/rrc}/asn/MeasCycleSCell-r10.h | 0 .../liblte/rrc}/asn/MeasGapConfig.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/MeasId.h | 0 .../liblte/rrc}/asn/MeasIdToAddMod.h | 0 .../liblte/rrc}/asn/MeasIdToAddModList.h | 0 .../liblte/rrc}/asn/MeasIdToRemoveList.h | 0 .../liblte/rrc}/asn/MeasObjectCDMA2000.h | 0 .../liblte/rrc}/asn/MeasObjectEUTRA.h | 0 .../liblte/rrc}/asn/MeasObjectGERAN.h | 0 .../liblte/rrc}/asn/MeasObjectId.h | 0 .../liblte/rrc}/asn/MeasObjectToAddMod.h | 0 .../liblte/rrc}/asn/MeasObjectToAddModList.h | 0 .../liblte/rrc}/asn/MeasObjectToRemoveList.h | 0 .../liblte/rrc}/asn/MeasObjectUTRA.h | 0 .../liblte/rrc}/asn/MeasParameters-v1020.h | 0 .../liblte/rrc}/asn/MeasParameters.h | 0 .../liblte/rrc}/asn/MeasResult2CDMA2000-r9.h | 0 .../liblte/rrc}/asn/MeasResult2EUTRA-r9.h | 0 .../liblte/rrc}/asn/MeasResult2UTRA-r9.h | 0 .../liblte/rrc}/asn/MeasResultCDMA2000.h | 0 .../liblte/rrc}/asn/MeasResultEUTRA.h | 0 .../liblte/rrc}/asn/MeasResultForECID-r9.h | 0 .../liblte/rrc}/asn/MeasResultGERAN.h | 0 .../rrc}/asn/MeasResultList2CDMA2000-r9.h | 0 .../liblte/rrc}/asn/MeasResultList2EUTRA-r9.h | 0 .../rrc}/asn/MeasResultList2GERAN-r10.h | 0 .../liblte/rrc}/asn/MeasResultList2UTRA-r9.h | 0 .../liblte/rrc}/asn/MeasResultListCDMA2000.h | 0 .../liblte/rrc}/asn/MeasResultListEUTRA.h | 0 .../liblte/rrc}/asn/MeasResultListGERAN.h | 0 .../liblte/rrc}/asn/MeasResultListUTRA.h | 0 .../liblte/rrc}/asn/MeasResultServFreq-r10.h | 0 .../rrc}/asn/MeasResultServFreqList-r10.h | 0 .../liblte/rrc}/asn/MeasResultUTRA.h | 0 .../liblte/rrc}/asn/MeasResults.h | 0 .../liblte/rrc}/asn/MeasResultsCDMA2000.h | 0 .../rrc}/asn/MeasSubframeCellList-r10.h | 0 .../liblte/rrc}/asn/MeasSubframePattern-r10.h | 0 .../asn/MeasSubframePatternConfigNeigh-r10.h | 0 .../rrc}/asn/MeasSubframePatternPCell-r10.h | 0 .../rrc}/asn/MeasurementReport-r8-IEs.h | 0 .../rrc}/asn/MeasurementReport-v8a0-IEs.h | 0 .../liblte/rrc}/asn/MeasurementReport.h | 0 .../liblte/rrc}/asn/MobilityControlInfo.h | 0 .../asn/MobilityFromEUTRACommand-r8-IEs.h | 0 .../asn/MobilityFromEUTRACommand-r9-IEs.h | 0 .../asn/MobilityFromEUTRACommand-v8a0-IEs.h | 0 .../asn/MobilityFromEUTRACommand-v8d0-IEs.h | 0 .../asn/MobilityFromEUTRACommand-v930-IEs.h | 0 .../asn/MobilityFromEUTRACommand-v960-IEs.h | 0 .../rrc}/asn/MobilityFromEUTRACommand.h | 0 .../rrc}/asn/MobilityParametersCDMA2000.h | 0 .../liblte/rrc}/asn/MobilityStateParameters.h | 0 .../rrc}/asn/N1-PUCCH-AN-PersistentList.h | 0 .../liblte/rrc}/asn/N1PUCCH-AN-CS-r10.h | 0 .../rrc}/asn/N1PUCCH-AN-PersistentList.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/NULL.h | 0 .../liblte/rrc}/asn/NativeEnumerated.h | 0 .../liblte/rrc}/asn/NativeInteger.h | 0 .../liblte/rrc}/asn/NeighCellCDMA2000-v920.h | 0 .../liblte/rrc}/asn/NeighCellCDMA2000.h | 0 .../liblte/rrc}/asn/NeighCellConfig.h | 0 .../rrc}/asn/NeighCellListCDMA2000-v920.h | 0 .../liblte/rrc}/asn/NeighCellListCDMA2000.h | 0 .../NeighCellSI-AcquisitionParameters-r9.h | 0 .../asn/NeighCellsPerBandclassCDMA2000-v920.h | 0 .../rrc}/asn/NeighCellsPerBandclassCDMA2000.h | 0 .../NeighCellsPerBandclassListCDMA2000-v920.h | 0 .../asn/NeighCellsPerBandclassListCDMA2000.h | 0 .../liblte/rrc}/asn/NextHopChainingCount.h | 0 .../NonContiguousUL-RA-WithinCC-List-r10.h | 0 .../asn/NonContiguousUL-RA-WithinCC-r10.h | 0 .../liblte/rrc}/asn/OCTET_STRING.h | 0 .../liblte/rrc}/asn/OtherConfig-r9.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/P-Max.h | 0 .../liblte/rrc}/asn/PCCH-Config.h | 0 .../liblte/rrc}/asn/PCCH-Message.h | 0 .../liblte/rrc}/asn/PCCH-MessageType.h | 0 .../liblte/rrc}/asn/PDCP-Config.h | 0 .../liblte/rrc}/asn/PDCP-Parameters.h | 0 .../liblte/rrc}/asn/PDSCH-ConfigCommon.h | 0 .../liblte/rrc}/asn/PDSCH-ConfigDedicated.h | 0 .../liblte/rrc}/asn/PHICH-Config.h | 0 .../liblte/rrc}/asn/PLMN-Identity.h | 0 .../liblte/rrc}/asn/PLMN-IdentityInfo.h | 0 .../liblte/rrc}/asn/PLMN-IdentityList.h | 0 .../liblte/rrc}/asn/PLMN-IdentityList2.h | 0 .../liblte/rrc}/asn/PMCH-Config-r9.h | 0 .../liblte/rrc}/asn/PMCH-Info-r9.h | 0 .../liblte/rrc}/asn/PMCH-InfoList-r9.h | 0 .../liblte/rrc}/asn/PRACH-Config.h | 0 .../liblte/rrc}/asn/PRACH-ConfigInfo.h | 0 .../liblte/rrc}/asn/PRACH-ConfigSCell-r10.h | 0 .../liblte/rrc}/asn/PRACH-ConfigSIB.h | 0 .../liblte/rrc}/asn/PUCCH-ConfigCommon.h | 0 .../rrc}/asn/PUCCH-ConfigDedicated-v1020.h | 0 .../liblte/rrc}/asn/PUCCH-ConfigDedicated.h | 0 .../rrc}/asn/PUSCH-CAConfigDedicated-vlola.h | 0 .../liblte/rrc}/asn/PUSCH-ConfigCommon.h | 0 .../rrc}/asn/PUSCH-ConfigDedicated-v1020.h | 0 .../liblte/rrc}/asn/PUSCH-ConfigDedicated.h | 0 .../rrc}/asn/PUSCH-ConfigDedicatedSCell-r10.h | 0 .../liblte/rrc}/asn/Paging-v890-IEs.h | 0 .../liblte/rrc}/asn/Paging-v920-IEs.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/Paging.h | 0 .../liblte/rrc}/asn/PagingRecord.h | 0 .../liblte/rrc}/asn/PagingRecordList.h | 0 .../liblte/rrc}/asn/PagingUE-Identity.h | 0 .../rrc}/asn/PhyLayerParameters-v1020.h | 0 .../liblte/rrc}/asn/PhyLayerParameters-v920.h | 0 .../liblte/rrc}/asn/PhyLayerParameters.h | 0 .../{ => include/liblte/rrc}/asn/PhysCellId.h | 0 .../liblte/rrc}/asn/PhysCellIdCDMA2000.h | 0 .../liblte/rrc}/asn/PhysCellIdGERAN.h | 0 .../rrc}/asn/PhysCellIdListCDMA2000-v920.h | 0 .../liblte/rrc}/asn/PhysCellIdListCDMA2000.h | 0 .../liblte/rrc}/asn/PhysCellIdRange.h | 0 .../rrc}/asn/PhysCellIdRangeUTRA-FDD-r9.h | 0 .../rrc}/asn/PhysCellIdRangeUTRA-FDDList-r9.h | 0 .../liblte/rrc}/asn/PhysCellIdUTRA-FDD.h | 0 .../liblte/rrc}/asn/PhysCellIdUTRA-TDD.h | 0 .../liblte/rrc}/asn/PhysicalConfigDedicated.h | 0 .../asn/PhysicalConfigDedicatedSCell-r10.h | 0 .../{ => include/liblte/rrc}/asn/PollByte.h | 0 .../{ => include/liblte/rrc}/asn/PollPDU.h | 0 .../liblte/rrc}/asn/PreRegistrationInfoHRPD.h | 0 .../rrc}/asn/PreRegistrationZoneIdHRPD.h | 0 .../liblte/rrc}/asn/PresenceAntennaPort1.h | 0 .../rrc}/asn/ProximityIndication-r9-IEs.h | 0 .../liblte/rrc}/asn/ProximityIndication-r9.h | 0 .../rrc}/asn/ProximityIndication-v930-IEs.h | 0 .../liblte/rrc}/asn/Q-OffsetRange.h | 0 .../liblte/rrc}/asn/Q-OffsetRangeInterRAT.h | 0 .../liblte/rrc}/asn/Q-QualMin-r9.h | 0 .../{ => include/liblte/rrc}/asn/Q-RxLevMin.h | 0 .../liblte/rrc}/asn/QuantityConfig.h | 0 .../liblte/rrc}/asn/QuantityConfigCDMA2000.h | 0 .../liblte/rrc}/asn/QuantityConfigEUTRA.h | 0 .../liblte/rrc}/asn/QuantityConfigGERAN.h | 0 .../rrc}/asn/QuantityConfigUTRA-v1020.h | 0 .../liblte/rrc}/asn/QuantityConfigUTRA.h | 0 .../liblte/rrc}/asn/RACH-ConfigCommon.h | 0 .../liblte/rrc}/asn/RACH-ConfigDedicated.h | 0 .../liblte/rrc}/asn/RAND-CDMA2000.h | 0 .../{ => include/liblte/rrc}/asn/RAT-Type.h | 0 .../liblte/rrc}/asn/RF-Parameters-v1020.h | 0 .../liblte/rrc}/asn/RF-Parameters.h | 0 .../{ => include/liblte/rrc}/asn/RLC-Config.h | 0 .../liblte/rrc}/asn/RLF-Report-r9.h | 0 .../rrc}/asn/RLF-TimersAndConstants-r9.h | 0 .../liblte/rrc}/asn/RN-SubframeConfig-r10.h | 0 .../liblte/rrc}/asn/RN-SystemInfo-r10.h | 0 .../rrc}/asn/RNReconfiguration-r10-IEs.h | 0 .../liblte/rrc}/asn/RNReconfiguration-r10.h | 0 .../asn/RNReconfigurationComplete-r10-IEs.h | 0 .../rrc}/asn/RNReconfigurationComplete-r10.h | 0 .../rrc}/asn/RRC-TransactionIdentifier.h | 0 .../asn/RRCConnectionReconfiguration-r8-IEs.h | 0 .../RRCConnectionReconfiguration-v1020-IEs.h | 0 .../RRCConnectionReconfiguration-v890-IEs.h | 0 .../RRCConnectionReconfiguration-v920-IEs.h | 0 .../rrc}/asn/RRCConnectionReconfiguration.h | 0 ...ConnectionReconfigurationComplete-r8-IEs.h | 0 ...nectionReconfigurationComplete-v1020-IEs.h | 0 ...nnectionReconfigurationComplete-v8a0-IEs.h | 0 .../RRCConnectionReconfigurationComplete.h | 0 .../asn/RRCConnectionReestablishment-r8-IEs.h | 0 .../RRCConnectionReestablishment-v8a0-IEs.h | 0 .../rrc}/asn/RRCConnectionReestablishment.h | 0 ...ConnectionReestablishmentComplete-r8-IEs.h | 0 ...nectionReestablishmentComplete-v1020-IEs.h | 0 ...nnectionReestablishmentComplete-v8a0-IEs.h | 0 ...nnectionReestablishmentComplete-v920-IEs.h | 0 .../RRCConnectionReestablishmentComplete.h | 0 ...RCConnectionReestablishmentReject-r8-IEs.h | 0 ...ConnectionReestablishmentReject-v8a0-IEs.h | 0 .../asn/RRCConnectionReestablishmentReject.h | 0 ...CConnectionReestablishmentRequest-r8-IEs.h | 0 .../asn/RRCConnectionReestablishmentRequest.h | 0 .../rrc}/asn/RRCConnectionReject-r8-IEs.h | 0 .../rrc}/asn/RRCConnectionReject-v1020-IEs.h | 0 .../rrc}/asn/RRCConnectionReject-v8a0-IEs.h | 0 .../liblte/rrc}/asn/RRCConnectionReject.h | 0 .../rrc}/asn/RRCConnectionRelease-r8-IEs.h | 0 .../rrc}/asn/RRCConnectionRelease-v1020-IEs.h | 0 .../rrc}/asn/RRCConnectionRelease-v890-IEs.h | 0 .../rrc}/asn/RRCConnectionRelease-v920-IEs.h | 0 .../liblte/rrc}/asn/RRCConnectionRelease.h | 0 .../rrc}/asn/RRCConnectionRequest-r8-IEs.h | 0 .../liblte/rrc}/asn/RRCConnectionRequest.h | 0 .../rrc}/asn/RRCConnectionSetup-r8-IEs.h | 0 .../rrc}/asn/RRCConnectionSetup-v8a0-IEs.h | 0 .../liblte/rrc}/asn/RRCConnectionSetup.h | 0 .../asn/RRCConnectionSetupComplete-r8-IEs.h | 0 .../RRCConnectionSetupComplete-v1020-IEs.h | 0 .../asn/RRCConnectionSetupComplete-v8a0-IEs.h | 0 .../rrc}/asn/RRCConnectionSetupComplete.h | 0 .../{ => include/liblte/rrc}/asn/RRM-Config.h | 0 .../{ => include/liblte/rrc}/asn/RSRP-Range.h | 0 .../{ => include/liblte/rrc}/asn/RSRQ-Range.h | 0 .../liblte/rrc}/asn/RSTD-InterFreqInfo-r10.h | 0 .../rrc}/asn/RSTD-InterFreqInfoList-r10.h | 0 .../rrc}/asn/RadioResourceConfigCommon.h | 0 .../asn/RadioResourceConfigCommonSCell-r10.h | 0 .../rrc}/asn/RadioResourceConfigCommonSIB.h | 0 .../rrc}/asn/RadioResourceConfigDedicated.h | 0 .../RadioResourceConfigDedicatedSCell-r10.h | 0 .../liblte/rrc}/asn/RedirectedCarrierInfo.h | 0 .../liblte/rrc}/asn/ReestabUE-Identity.h | 0 .../liblte/rrc}/asn/ReestablishmentCause.h | 0 .../liblte/rrc}/asn/ReestablishmentInfo.h | 0 .../liblte/rrc}/asn/RegisteredMME.h | 0 .../liblte/rrc}/asn/ReleaseCause.h | 0 .../liblte/rrc}/asn/ReportConfigEUTRA.h | 0 .../liblte/rrc}/asn/ReportConfigId.h | 0 .../liblte/rrc}/asn/ReportConfigInterRAT.h | 0 .../liblte/rrc}/asn/ReportConfigToAddMod.h | 0 .../rrc}/asn/ReportConfigToAddModList.h | 0 .../rrc}/asn/ReportConfigToRemoveList.h | 0 .../liblte/rrc}/asn/ReportInterval.h | 0 .../rrc}/asn/ReportProximityConfig-r9.h | 0 .../liblte/rrc}/asn/ReselectionThreshold.h | 0 .../rrc}/asn/ReselectionThresholdQ-r9.h | 0 lte/rrc/{ => include/liblte/rrc}/asn/S-TMSI.h | 0 .../liblte/rrc}/asn/SCellIndex-r10.h | 0 .../liblte/rrc}/asn/SCellToAddMod-r10.h | 0 .../liblte/rrc}/asn/SCellToAddModList-r10.h | 0 .../liblte/rrc}/asn/SCellToReleaseList-r10.h | 0 .../liblte/rrc}/asn/SI-OrPSI-GERAN.h | 0 .../liblte/rrc}/asn/SIB-MappingInfo.h | 0 .../{ => include/liblte/rrc}/asn/SIB-Type.h | 0 .../liblte/rrc}/asn/SN-FieldLength.h | 0 .../liblte/rrc}/asn/SON-Parameters-r9.h | 0 .../{ => include/liblte/rrc}/asn/SPS-Config.h | 0 .../liblte/rrc}/asn/SPS-ConfigDL.h | 0 .../liblte/rrc}/asn/SPS-ConfigUL.h | 0 .../liblte/rrc}/asn/SPS-RA-ConfigList-rlola.h | 0 .../liblte/rrc}/asn/SRB-ToAddMod.h | 0 .../liblte/rrc}/asn/SRB-ToAddModList.h | 0 .../liblte/rrc}/asn/SRS-ConfigAp-r10.h | 0 .../liblte/rrc}/asn/SchedulingInfo.h | 0 .../liblte/rrc}/asn/SchedulingInfoList.h | 0 .../rrc}/asn/SchedulingRequestConfig-v1020.h | 0 .../liblte/rrc}/asn/SchedulingRequestConfig.h | 0 .../SecondaryPreRegistrationZoneIdListHRPD.h | 0 .../liblte/rrc}/asn/SecurityAlgorithmConfig.h | 0 .../liblte/rrc}/asn/SecurityConfigHO.h | 0 .../liblte/rrc}/asn/SecurityConfigSMC.h | 0 .../rrc}/asn/SecurityModeCommand-r8-IEs.h | 0 .../rrc}/asn/SecurityModeCommand-v8a0-IEs.h | 0 .../liblte/rrc}/asn/SecurityModeCommand.h | 0 .../rrc}/asn/SecurityModeComplete-r8-IEs.h | 0 .../rrc}/asn/SecurityModeComplete-v8a0-IEs.h | 0 .../liblte/rrc}/asn/SecurityModeComplete.h | 0 .../rrc}/asn/SecurityModeFailure-r8-IEs.h | 0 .../rrc}/asn/SecurityModeFailure-v8a0-IEs.h | 0 .../liblte/rrc}/asn/SecurityModeFailure.h | 0 .../liblte/rrc}/asn/ServCellIndex-r10.h | 0 .../{ => include/liblte/rrc}/asn/ShortMAC-I.h | 0 .../rrc}/asn/SoundingRS-UL-ConfigCommon.h | 0 .../asn/SoundingRS-UL-ConfigDedicated-v1020.h | 0 .../rrc}/asn/SoundingRS-UL-ConfigDedicated.h | 0 ...undingRS-UL-ConfigDedicatedAperiodic-r10.h | 0 .../liblte/rrc}/asn/SpeedStateScaleFactors.h | 0 .../rrc}/asn/SupportedBandCombination-r10.h | 0 .../liblte/rrc}/asn/SupportedBandEUTRA.h | 0 .../liblte/rrc}/asn/SupportedBandGERAN.h | 0 .../liblte/rrc}/asn/SupportedBandList1XRTT.h | 0 .../liblte/rrc}/asn/SupportedBandListEUTRA.h | 0 .../liblte/rrc}/asn/SupportedBandListGERAN.h | 0 .../liblte/rrc}/asn/SupportedBandListHRPD.h | 0 .../rrc}/asn/SupportedBandListUTRA-FDD.h | 0 .../rrc}/asn/SupportedBandListUTRA-TDD128.h | 0 .../rrc}/asn/SupportedBandListUTRA-TDD384.h | 0 .../rrc}/asn/SupportedBandListUTRA-TDD768.h | 0 .../liblte/rrc}/asn/SupportedBandUTRA-FDD.h | 0 .../rrc}/asn/SupportedBandUTRA-TDD128.h | 0 .../rrc}/asn/SupportedBandUTRA-TDD384.h | 0 .../rrc}/asn/SupportedBandUTRA-TDD768.h | 0 .../liblte/rrc}/asn/SystemInfoListGERAN.h | 0 .../rrc}/asn/SystemInformation-r8-IEs.h | 0 .../rrc}/asn/SystemInformation-v8a0-IEs.h | 0 .../liblte/rrc}/asn/SystemInformation.h | 0 .../SystemInformationBlockType1-v890-IEs.h | 0 .../SystemInformationBlockType1-v920-IEs.h | 0 .../rrc}/asn/SystemInformationBlockType1.h | 0 .../rrc}/asn/SystemInformationBlockType10.h | 0 .../rrc}/asn/SystemInformationBlockType11.h | 0 .../asn/SystemInformationBlockType12-r9.h | 0 .../asn/SystemInformationBlockType13-r9.h | 0 .../rrc}/asn/SystemInformationBlockType2.h | 0 .../rrc}/asn/SystemInformationBlockType3.h | 0 .../rrc}/asn/SystemInformationBlockType4.h | 0 .../rrc}/asn/SystemInformationBlockType5.h | 0 .../rrc}/asn/SystemInformationBlockType6.h | 0 .../rrc}/asn/SystemInformationBlockType7.h | 0 .../rrc}/asn/SystemInformationBlockType8.h | 0 .../rrc}/asn/SystemInformationBlockType9.h | 0 .../liblte/rrc}/asn/SystemTimeInfoCDMA2000.h | 0 .../liblte/rrc}/asn/T-PollRetransmit.h | 0 .../liblte/rrc}/asn/T-Reordering.h | 0 .../liblte/rrc}/asn/T-Reselection.h | 0 .../liblte/rrc}/asn/T-StatusProhibit.h | 0 .../{ => include/liblte/rrc}/asn/TDD-Config.h | 0 .../{ => include/liblte/rrc}/asn/TMGI-r9.h | 0 .../{ => include/liblte/rrc}/asn/TPC-Index.h | 0 .../liblte/rrc}/asn/TPC-PDCCH-Config.h | 0 .../liblte/rrc}/asn/ThresholdCDMA2000.h | 0 .../liblte/rrc}/asn/ThresholdEUTRA.h | 0 .../liblte/rrc}/asn/ThresholdGERAN.h | 0 .../liblte/rrc}/asn/ThresholdUTRA.h | 0 .../liblte/rrc}/asn/TimeAlignmentTimer.h | 0 .../liblte/rrc}/asn/TimeToTrigger.h | 0 .../liblte/rrc}/asn/TraceReference-r10.h | 0 .../liblte/rrc}/asn/TrackingAreaCode.h | 0 .../rrc}/asn/TrackingAreaCodeList-r10.h | 0 .../asn/UE-BasedNetwPerfMeasParameters-r10.h | 0 .../rrc}/asn/UE-CapabilityRAT-Container.h | 0 .../rrc}/asn/UE-CapabilityRAT-ContainerList.h | 0 .../liblte/rrc}/asn/UE-CapabilityRequest.h | 0 .../rrc}/asn/UE-EUTRA-Capability-v1020-IEs.h | 0 .../rrc}/asn/UE-EUTRA-Capability-v920-IEs.h | 0 .../rrc}/asn/UE-EUTRA-Capability-v940-IEs.h | 0 .../liblte/rrc}/asn/UE-EUTRA-Capability.h | 0 .../liblte/rrc}/asn/UE-TimersAndConstants.h | 0 .../rrc}/asn/UECapabilityEnquiry-r8-IEs.h | 0 .../rrc}/asn/UECapabilityEnquiry-v8a0-IEs.h | 0 .../liblte/rrc}/asn/UECapabilityEnquiry.h | 0 .../rrc}/asn/UECapabilityInformation-r8-IEs.h | 0 .../asn/UECapabilityInformation-v8a0-IEs.h | 0 .../liblte/rrc}/asn/UECapabilityInformation.h | 0 .../rrc}/asn/UEInformationRequest-r9-IEs.h | 0 .../liblte/rrc}/asn/UEInformationRequest-r9.h | 0 .../rrc}/asn/UEInformationRequest-v1020-IEs.h | 0 .../rrc}/asn/UEInformationRequest-v930-IEs.h | 0 .../rrc}/asn/UEInformationResponse-r9-IEs.h | 0 .../rrc}/asn/UEInformationResponse-r9.h | 0 .../asn/UEInformationResponse-v1020-IEs.h | 0 .../rrc}/asn/UEInformationResponse-v930-IEs.h | 0 ...ERadioAccessCapabilityInformation-r8-IEs.h | 0 .../asn/UERadioAccessCapabilityInformation.h | 0 .../{ => include/liblte/rrc}/asn/UL-AM-RLC.h | 0 .../liblte/rrc}/asn/UL-CCCH-Message.h | 0 .../liblte/rrc}/asn/UL-CCCH-MessageType.h | 0 .../liblte/rrc}/asn/UL-CyclicPrefixLength.h | 0 .../liblte/rrc}/asn/UL-DCCH-Message.h | 0 .../liblte/rrc}/asn/UL-DCCH-MessageType.h | 0 .../rrc}/asn/UL-ReferenceSignalsPUSCH.h | 0 .../{ => include/liblte/rrc}/asn/UL-UM-RLC.h | 0 .../ULHandoverPreparationTransfer-r8-IEs.h | 0 .../ULHandoverPreparationTransfer-v8a0-IEs.h | 0 .../rrc}/asn/ULHandoverPreparationTransfer.h | 0 .../rrc}/asn/ULInformationTransfer-r8-IEs.h | 0 .../rrc}/asn/ULInformationTransfer-v8a0-IEs.h | 0 .../liblte/rrc}/asn/ULInformationTransfer.h | 0 .../rrc}/asn/UplinkPowerControlCommon-v1020.h | 0 .../rrc}/asn/UplinkPowerControlCommon.h | 0 .../asn/UplinkPowerControlCommonSCell-r10.h | 0 .../asn/UplinkPowerControlDedicated-v1020.h | 0 .../rrc}/asn/UplinkPowerControlDedicated.h | 0 .../UplinkPowerControlDedicatedSCell-r10.h | 0 .../liblte/rrc}/asn/VarMeasConfig.h | 0 .../liblte/rrc}/asn/VarMeasReport.h | 0 .../liblte/rrc}/asn/VarMeasReportList.h | 0 .../liblte/rrc}/asn/VarShortMAC-Input.h | 0 .../liblte/rrc}/asn/asn_SEQUENCE_OF.h | 0 .../{ => include/liblte/rrc}/asn/asn_SET_OF.h | 0 .../liblte/rrc}/asn/asn_application.h | 0 .../{ => include/liblte/rrc}/asn/asn_codecs.h | 0 .../liblte/rrc}/asn/asn_codecs_prim.h | 0 .../liblte/rrc}/asn/asn_internal.h | 0 .../{ => include/liblte/rrc}/asn/asn_system.h | 0 .../liblte/rrc}/asn/ber_decoder.h | 0 .../liblte/rrc}/asn/ber_tlv_length.h | 0 .../liblte/rrc}/asn/ber_tlv_tag.h | 0 .../liblte/rrc}/asn/constr_CHOICE.h | 0 .../liblte/rrc}/asn/constr_SEQUENCE.h | 0 .../liblte/rrc}/asn/constr_SEQUENCE_OF.h | 0 .../liblte/rrc}/asn/constr_SET_OF.h | 0 .../liblte/rrc}/asn/constr_TYPE.h | 0 .../liblte/rrc}/asn/constraints.h | 0 .../liblte/rrc}/asn/der_encoder.h | 0 .../liblte/rrc}/asn/per_decoder.h | 0 .../liblte/rrc}/asn/per_encoder.h | 0 .../liblte/rrc}/asn/per_opentype.h | 0 .../liblte/rrc}/asn/per_support.h | 0 .../{ => include/liblte/rrc}/asn/rrc_asn.h | 0 .../liblte/rrc}/asn/xer_decoder.h | 0 .../liblte/rrc}/asn/xer_encoder.h | 0 .../liblte/rrc}/asn/xer_support.h | 0 lte/rrc/include/liblte/rrc/messages/sib1.h | 2 +- lte/rrc/lib/CMakeLists.txt | 4 +- .../{asn => lib/asn/src}/AC-BarringConfig.c | 0 .../asn/src}/AC-BarringConfig1XRTT-r9.c | 0 .../asn/src}/ARFCN-ValueCDMA2000.c | 0 .../{asn => lib/asn/src}/ARFCN-ValueEUTRA.c | 0 .../{asn => lib/asn/src}/ARFCN-ValueGERAN.c | 0 .../{asn => lib/asn/src}/ARFCN-ValueUTRA.c | 0 lte/rrc/{asn => lib/asn/src}/AS-Config.c | 0 lte/rrc/{asn => lib/asn/src}/AS-Context.c | 0 .../asn/src}/AbsoluteTimeInfo-r10.c | 0 .../asn/src}/AccessStratumRelease.c | 0 .../asn/src}/AdditionalReestabInfo.c | 0 .../asn/src}/AdditionalReestabInfoList.c | 0 .../asn/src}/AdditionalSI-Info-r9.c | 0 .../asn/src}/AdditionalSpectrumEmission.c | 0 .../asn/src}/AllowedMeasBandwidth.c | 0 .../{asn => lib/asn/src}/AntennaInfoCommon.c | 0 .../asn/src}/AntennaInfoDedicated-r10.c | 0 .../asn/src}/AntennaInfoDedicated-v920.c | 0 .../asn/src}/AntennaInfoDedicated.c | 0 .../{asn => lib/asn/src}/AntennaInfoUL-r10.c | 0 .../asn/src}/AreaConfiguration-r10.c | 0 .../{asn => lib/asn/src}/BCCH-BCH-Message.c | 0 .../asn/src}/BCCH-BCH-MessageType.c | 0 lte/rrc/{asn => lib/asn/src}/BCCH-Config.c | 0 .../asn/src}/BCCH-DL-SCH-Message.c | 0 .../asn/src}/BCCH-DL-SCH-MessageType.c | 0 lte/rrc/{asn => lib/asn/src}/BIT_STRING.c | 0 lte/rrc/{asn => lib/asn/src}/BOOLEAN.c | 0 .../asn/src}/BandClassInfoCDMA2000.c | 0 .../asn/src}/BandClassListCDMA2000.c | 0 .../asn/src}/BandClassPriority1XRTT.c | 0 .../asn/src}/BandClassPriorityHRPD.c | 0 .../asn/src}/BandClassPriorityList1XRTT.c | 0 .../asn/src}/BandClassPriorityListHRPD.c | 0 .../asn/src}/BandCombinationListEUTRA-r10.c | 0 .../asn/src}/BandCombinationParameters-r10.c | 0 .../{asn => lib/asn/src}/BandIndicatorGERAN.c | 0 lte/rrc/{asn => lib/asn/src}/BandInfoEUTRA.c | 0 lte/rrc/{asn => lib/asn/src}/BandListEUTRA.c | 0 .../{asn => lib/asn/src}/BandParameters-r10.c | 0 .../asn/src}/BandParametersDL-r10.c | 0 .../asn/src}/BandParametersUL-r10.c | 0 .../{asn => lib/asn/src}/BandclassCDMA2000.c | 0 .../asn/src}/BetaOffset-CA-Index.c | 0 .../{asn => lib/asn/src}/BlackCellsToAddMod.c | 0 .../asn/src}/BlackCellsToAddModList.c | 0 lte/rrc/{asn => lib/asn/src}/C-RNTI.c | 0 .../asn/src}/CA-BandwidthClass-r10.c | 0 .../asn/src}/CA-MIMO-ParametersDL-r10.c | 0 .../asn/src}/CA-MIMO-ParametersUL-r10.c | 0 lte/rrc/{asn => lib/asn/src}/CA-RNTI.c | 0 .../asn/src}/CA-semiPersistSchedIntervalUL.c | 0 lte/rrc/{asn => lib/asn/src}/CDMA2000-Type.c | 0 .../asn/src}/CQI-ReportAperiodic-r10.c | 0 .../asn/src}/CQI-ReportConfig-r10.c | 0 .../asn/src}/CQI-ReportConfig-v920.c | 0 .../{asn => lib/asn/src}/CQI-ReportConfig.c | 0 .../asn/src}/CQI-ReportConfigSCell-r10.c | 0 .../asn/src}/CQI-ReportModeAperiodic.c | 0 .../asn/src}/CQI-ReportPeriodic-r10.c | 0 .../{asn => lib/asn/src}/CQI-ReportPeriodic.c | 0 .../src}/CSFB-RegistrationParam1XRTT-v920.c | 0 .../asn/src}/CSFB-RegistrationParam1XRTT.c | 0 .../CSFBParametersRequestCDMA2000-r8-IEs.c | 0 .../CSFBParametersRequestCDMA2000-v8a0-IEs.c | 0 .../asn/src}/CSFBParametersRequestCDMA2000.c | 0 .../CSFBParametersResponseCDMA2000-r8-IEs.c | 0 .../CSFBParametersResponseCDMA2000-v8a0-IEs.c | 0 .../asn/src}/CSFBParametersResponseCDMA2000.c | 0 .../asn/src}/CSG-AllowedReportingCells-r9.c | 0 lte/rrc/{asn => lib/asn/src}/CSG-Identity.c | 0 .../CSG-ProximityIndicationParameters-r9.c | 0 .../{asn => lib/asn/src}/CSI-RS-Config-r10.c | 0 lte/rrc/{asn => lib/asn/src}/CShift.c | 0 .../asn/src}/CarrierBandwidthEUTRA.c | 0 .../asn/src}/CarrierFreqCDMA2000.c | 0 .../{asn => lib/asn/src}/CarrierFreqEUTRA.c | 0 .../{asn => lib/asn/src}/CarrierFreqGERAN.c | 0 .../asn/src}/CarrierFreqListUTRA-FDD.c | 0 .../asn/src}/CarrierFreqListUTRA-TDD-r10.c | 0 .../asn/src}/CarrierFreqListUTRA-TDD.c | 0 .../asn/src}/CarrierFreqUTRA-FDD.c | 0 .../asn/src}/CarrierFreqUTRA-TDD.c | 0 .../{asn => lib/asn/src}/CarrierFreqsGERAN.c | 0 .../asn/src}/CarrierFreqsInfoGERAN.c | 0 .../asn/src}/CarrierFreqsInfoListGERAN.c | 0 .../{asn => lib/asn/src}/CellChangeOrder.c | 0 .../asn/src}/CellGlobalIdCDMA2000.c | 0 .../{asn => lib/asn/src}/CellGlobalIdEUTRA.c | 0 .../{asn => lib/asn/src}/CellGlobalIdGERAN.c | 0 .../asn/src}/CellGlobalIdList-r10.c | 0 .../{asn => lib/asn/src}/CellGlobalIdUTRA.c | 0 lte/rrc/{asn => lib/asn/src}/CellIdentity.c | 0 lte/rrc/{asn => lib/asn/src}/CellIndex.c | 0 lte/rrc/{asn => lib/asn/src}/CellIndexList.c | 0 .../{asn => lib/asn/src}/CellInfoGERAN-r9.c | 0 .../asn/src}/CellInfoListGERAN-r9.c | 0 .../asn/src}/CellInfoListUTRA-FDD-r9.c | 0 .../asn/src}/CellInfoListUTRA-TDD-r10.c | 0 .../asn/src}/CellInfoListUTRA-TDD-r9.c | 0 .../asn/src}/CellInfoUTRA-FDD-r9.c | 0 .../asn/src}/CellInfoUTRA-TDD-r10.c | 0 .../asn/src}/CellInfoUTRA-TDD-r9.c | 0 .../CellReselectionParametersCDMA2000-v920.c | 0 .../src}/CellReselectionParametersCDMA2000.c | 0 .../asn/src}/CellReselectionPriority.c | 0 .../asn/src}/CellSelectionInfo-v920.c | 0 lte/rrc/{asn => lib/asn/src}/CellsToAddMod.c | 0 .../asn/src}/CellsToAddModCDMA2000.c | 0 .../{asn => lib/asn/src}/CellsToAddModList.c | 0 .../asn/src}/CellsToAddModListCDMA2000.c | 0 .../asn/src}/CellsToAddModListUTRA-FDD.c | 0 .../asn/src}/CellsToAddModListUTRA-TDD.c | 0 .../asn/src}/CellsToAddModUTRA-FDD.c | 0 .../asn/src}/CellsToAddModUTRA-TDD.c | 0 .../{asn => lib/asn/src}/CellsTriggeredList.c | 0 .../asn/src}/CommonSF-AllocPatternList-r9.c | 0 .../asn/src}/CounterCheck-r8-IEs.c | 0 .../asn/src}/CounterCheck-v8a0-IEs.c | 0 lte/rrc/{asn => lib/asn/src}/CounterCheck.c | 0 .../asn/src}/CounterCheckResponse-r8-IEs.c | 0 .../asn/src}/CounterCheckResponse-v8a0-IEs.c | 0 .../asn/src}/CounterCheckResponse.c | 0 .../asn/src}/CountingRequestInfo-r10.c | 0 .../asn/src}/CountingRequestList-r10.c | 0 .../asn/src}/CountingResponseInfo-r10.c | 0 .../asn/src}/CountingResponseList-r10.c | 0 .../src}/CrossCarrierSchedulingConfig-r10.c | 0 lte/rrc/{asn => lib/asn/src}/DL-AM-RLC.c | 0 .../{asn => lib/asn/src}/DL-CCCH-Message.c | 0 .../asn/src}/DL-CCCH-MessageType.c | 0 .../{asn => lib/asn/src}/DL-DCCH-Message.c | 0 .../asn/src}/DL-DCCH-MessageType.c | 0 lte/rrc/{asn => lib/asn/src}/DL-UM-RLC.c | 0 .../asn/src}/DLInformationTransfer-r8-IEs.c | 0 .../asn/src}/DLInformationTransfer-v8a0-IEs.c | 0 .../asn/src}/DLInformationTransfer.c | 0 lte/rrc/{asn => lib/asn/src}/DRB-CountInfo.c | 0 .../{asn => lib/asn/src}/DRB-CountInfoList.c | 0 .../{asn => lib/asn/src}/DRB-CountMSB-Info.c | 0 .../asn/src}/DRB-CountMSB-InfoList.c | 0 lte/rrc/{asn => lib/asn/src}/DRB-Identity.c | 0 lte/rrc/{asn => lib/asn/src}/DRB-ToAddMod.c | 0 .../{asn => lib/asn/src}/DRB-ToAddModList.c | 0 .../{asn => lib/asn/src}/DRB-ToReleaseList.c | 0 lte/rrc/{asn => lib/asn/src}/DRX-Config.c | 0 .../asn/src}/DedicatedInfoCDMA2000.c | 0 .../{asn => lib/asn/src}/DedicatedInfoNAS.c | 0 .../{asn => lib/asn/src}/DeltaFList-PUCCH.c | 0 .../asn/src}/DeltaTxD-OffsetListPUCCH-r10.c | 0 lte/rrc/{asn => lib/asn/src}/E-CSFB-r9.c | 0 .../{asn => lib/asn/src}/EstablishmentCause.c | 0 .../asn/src}/ExplicitListOfARFCNs.c | 0 .../{asn => lib/asn/src}/FilterCoefficient.c | 0 .../{asn => lib/asn/src}/FreqPriorityEUTRA.c | 0 .../asn/src}/FreqPriorityListEUTRA.c | 0 .../asn/src}/FreqPriorityListUTRA-FDD.c | 0 .../asn/src}/FreqPriorityListUTRA-TDD.c | 0 .../asn/src}/FreqPriorityUTRA-FDD.c | 0 .../asn/src}/FreqPriorityUTRA-TDD.c | 0 .../{asn => lib/asn/src}/FreqsPriorityGERAN.c | 0 .../asn/src}/FreqsPriorityListGERAN.c | 0 lte/rrc/{asn => lib/asn/src}/Handover.c | 0 .../asn/src}/HandoverCommand-r8-IEs.c | 0 .../{asn => lib/asn/src}/HandoverCommand.c | 0 ...ndoverFromEUTRAPreparationRequest-r8-IEs.c | 0 ...verFromEUTRAPreparationRequest-v1020-IEs.c | 0 ...overFromEUTRAPreparationRequest-v890-IEs.c | 0 ...overFromEUTRAPreparationRequest-v920-IEs.c | 0 .../HandoverFromEUTRAPreparationRequest.c | 0 .../HandoverPreparationInformation-r8-IEs.c | 0 .../HandoverPreparationInformation-v920-IEs.c | 0 .../asn/src}/HandoverPreparationInformation.c | 0 lte/rrc/{asn => lib/asn/src}/Hysteresis.c | 0 lte/rrc/{asn => lib/asn/src}/IMSI-Digit.c | 0 lte/rrc/{asn => lib/asn/src}/IMSI.c | 0 lte/rrc/{asn => lib/asn/src}/INTEGER.c | 0 .../IRAT-ParametersCDMA2000-1XRTT-v1020.c | 0 .../src}/IRAT-ParametersCDMA2000-1XRTT-v920.c | 0 .../asn/src}/IRAT-ParametersCDMA2000-1XRTT.c | 0 .../asn/src}/IRAT-ParametersCDMA2000-HRPD.c | 0 .../asn/src}/IRAT-ParametersGERAN-v920.c | 0 .../asn/src}/IRAT-ParametersGERAN.c | 0 .../asn/src}/IRAT-ParametersUTRA-FDD.c | 0 .../asn/src}/IRAT-ParametersUTRA-TDD-v1020.c | 0 .../asn/src}/IRAT-ParametersUTRA-TDD128.c | 0 .../asn/src}/IRAT-ParametersUTRA-TDD384.c | 0 .../asn/src}/IRAT-ParametersUTRA-TDD768.c | 0 .../asn/src}/IRAT-ParametersUTRA-v920.c | 0 .../asn/src}/IdleModeMobilityControlInfo.c | 0 .../{asn => lib/asn/src}/InitialUE-Identity.c | 0 .../{asn => lib/asn/src}/InterFreqBandInfo.c | 0 .../{asn => lib/asn/src}/InterFreqBandList.c | 0 .../asn/src}/InterFreqBlackCellList.c | 0 .../asn/src}/InterFreqCarrierFreqInfo.c | 0 .../asn/src}/InterFreqCarrierFreqList.c | 0 .../asn/src}/InterFreqNeighCellInfo.c | 0 .../asn/src}/InterFreqNeighCellList.c | 0 ...terFreqRSTDMeasurementIndication-r10-IEs.c | 0 .../InterFreqRSTDMeasurementIndication-r10.c | 0 .../{asn => lib/asn/src}/InterRAT-BandInfo.c | 0 .../{asn => lib/asn/src}/InterRAT-BandList.c | 0 .../asn/src}/IntraFreqBlackCellList.c | 0 .../asn/src}/IntraFreqNeighCellInfo.c | 0 .../asn/src}/IntraFreqNeighCellList.c | 0 .../{asn => lib/asn/src}/Key-eNodeB-Star.c | 0 .../{asn => lib/asn/src}/LocationInfo-r10.c | 0 .../{asn => lib/asn/src}/LogMeasInfo-r10.c | 0 .../asn/src}/LogMeasInfoList-r10.c | 0 .../{asn => lib/asn/src}/LogMeasReport-r10.c | 0 .../LoggedMeasurementConfiguration-r10-IEs.c | 0 .../src}/LoggedMeasurementConfiguration-r10.c | 0 .../asn/src}/LoggingDuration-r10.c | 0 .../asn/src}/LoggingInterval-r10.c | 0 .../asn/src}/LogicalChannelConfig.c | 0 lte/rrc/{asn => lib/asn/src}/MAC-MainConfig.c | 0 .../asn/src}/MBMS-NotificationConfig-r9.c | 0 .../asn/src}/MBMS-SessionInfo-r9.c | 0 .../asn/src}/MBMS-SessionInfoList-r9.c | 0 .../asn/src}/MBMSCountingRequest-r10.c | 0 .../asn/src}/MBMSCountingResponse-r10-IEs.c | 0 .../asn/src}/MBMSCountingResponse-r10.c | 0 .../{asn => lib/asn/src}/MBSFN-AreaInfo-r9.c | 0 .../asn/src}/MBSFN-AreaInfoList-r9.c | 0 .../asn/src}/MBSFN-SubframeConfig.c | 0 .../asn/src}/MBSFN-SubframeConfigList.c | 0 .../asn/src}/MBSFNAreaConfiguration-r9.c | 0 .../src}/MBSFNAreaConfiguration-v930-IEs.c | 0 lte/rrc/{asn => lib/asn/src}/MCC-MNC-Digit.c | 0 lte/rrc/{asn => lib/asn/src}/MCC.c | 0 lte/rrc/{asn => lib/asn/src}/MCCH-Message.c | 0 .../{asn => lib/asn/src}/MCCH-MessageType.c | 0 .../asn/src}/MIMO-CapabilityDL-r10.c | 0 .../asn/src}/MIMO-CapabilityUL-r10.c | 0 lte/rrc/{asn => lib/asn/src}/MMEC.c | 0 lte/rrc/{asn => lib/asn/src}/MNC.c | 0 .../asn/src}/MasterInformationBlock.c | 0 lte/rrc/{asn => lib/asn/src}/MeasConfig.c | 0 .../{asn => lib/asn/src}/MeasCycleSCell-r10.c | 0 lte/rrc/{asn => lib/asn/src}/MeasGapConfig.c | 0 lte/rrc/{asn => lib/asn/src}/MeasId.c | 0 lte/rrc/{asn => lib/asn/src}/MeasIdToAddMod.c | 0 .../{asn => lib/asn/src}/MeasIdToAddModList.c | 0 .../{asn => lib/asn/src}/MeasIdToRemoveList.c | 0 .../{asn => lib/asn/src}/MeasObjectCDMA2000.c | 0 .../{asn => lib/asn/src}/MeasObjectEUTRA.c | 0 .../{asn => lib/asn/src}/MeasObjectGERAN.c | 0 lte/rrc/{asn => lib/asn/src}/MeasObjectId.c | 0 .../{asn => lib/asn/src}/MeasObjectToAddMod.c | 0 .../asn/src}/MeasObjectToAddModList.c | 0 .../asn/src}/MeasObjectToRemoveList.c | 0 lte/rrc/{asn => lib/asn/src}/MeasObjectUTRA.c | 0 .../asn/src}/MeasParameters-v1020.c | 0 lte/rrc/{asn => lib/asn/src}/MeasParameters.c | 0 .../asn/src}/MeasResult2CDMA2000-r9.c | 0 .../asn/src}/MeasResult2EUTRA-r9.c | 0 .../{asn => lib/asn/src}/MeasResult2UTRA-r9.c | 0 .../{asn => lib/asn/src}/MeasResultCDMA2000.c | 0 .../{asn => lib/asn/src}/MeasResultEUTRA.c | 0 .../asn/src}/MeasResultForECID-r9.c | 0 .../{asn => lib/asn/src}/MeasResultGERAN.c | 0 .../asn/src}/MeasResultList2CDMA2000-r9.c | 0 .../asn/src}/MeasResultList2EUTRA-r9.c | 0 .../asn/src}/MeasResultList2GERAN-r10.c | 0 .../asn/src}/MeasResultList2UTRA-r9.c | 0 .../asn/src}/MeasResultListCDMA2000.c | 0 .../asn/src}/MeasResultListEUTRA.c | 0 .../asn/src}/MeasResultListGERAN.c | 0 .../{asn => lib/asn/src}/MeasResultListUTRA.c | 0 .../asn/src}/MeasResultServFreq-r10.c | 0 .../asn/src}/MeasResultServFreqList-r10.c | 0 lte/rrc/{asn => lib/asn/src}/MeasResultUTRA.c | 0 lte/rrc/{asn => lib/asn/src}/MeasResults.c | 0 .../asn/src}/MeasResultsCDMA2000.c | 0 .../asn/src}/MeasSubframeCellList-r10.c | 0 .../asn/src}/MeasSubframePattern-r10.c | 0 .../src}/MeasSubframePatternConfigNeigh-r10.c | 0 .../asn/src}/MeasSubframePatternPCell-r10.c | 0 .../asn/src}/MeasurementReport-r8-IEs.c | 0 .../asn/src}/MeasurementReport-v8a0-IEs.c | 0 .../{asn => lib/asn/src}/MeasurementReport.c | 0 .../asn/src}/MobilityControlInfo.c | 0 .../src}/MobilityFromEUTRACommand-r8-IEs.c | 0 .../src}/MobilityFromEUTRACommand-r9-IEs.c | 0 .../src}/MobilityFromEUTRACommand-v8a0-IEs.c | 0 .../src}/MobilityFromEUTRACommand-v8d0-IEs.c | 0 .../src}/MobilityFromEUTRACommand-v930-IEs.c | 0 .../src}/MobilityFromEUTRACommand-v960-IEs.c | 0 .../asn/src}/MobilityFromEUTRACommand.c | 0 .../asn/src}/MobilityParametersCDMA2000.c | 0 .../asn/src}/MobilityStateParameters.c | 0 .../asn/src}/N1-PUCCH-AN-PersistentList.c | 0 .../{asn => lib/asn/src}/N1PUCCH-AN-CS-r10.c | 0 .../asn/src}/N1PUCCH-AN-PersistentList.c | 0 lte/rrc/{asn => lib/asn/src}/NULL.c | 0 .../{asn => lib/asn/src}/NativeEnumerated.c | 0 lte/rrc/{asn => lib/asn/src}/NativeInteger.c | 0 .../asn/src}/NeighCellCDMA2000-v920.c | 0 .../{asn => lib/asn/src}/NeighCellCDMA2000.c | 0 .../{asn => lib/asn/src}/NeighCellConfig.c | 0 .../asn/src}/NeighCellListCDMA2000-v920.c | 0 .../asn/src}/NeighCellListCDMA2000.c | 0 .../NeighCellSI-AcquisitionParameters-r9.c | 0 .../NeighCellsPerBandclassCDMA2000-v920.c | 0 .../asn/src}/NeighCellsPerBandclassCDMA2000.c | 0 .../NeighCellsPerBandclassListCDMA2000-v920.c | 0 .../src}/NeighCellsPerBandclassListCDMA2000.c | 0 .../asn/src}/NextHopChainingCount.c | 0 .../NonContiguousUL-RA-WithinCC-List-r10.c | 0 .../src}/NonContiguousUL-RA-WithinCC-r10.c | 0 lte/rrc/{asn => lib/asn/src}/OCTET_STRING.c | 0 lte/rrc/{asn => lib/asn/src}/OtherConfig-r9.c | 0 lte/rrc/{asn => lib/asn/src}/P-Max.c | 0 lte/rrc/{asn => lib/asn/src}/PCCH-Config.c | 0 lte/rrc/{asn => lib/asn/src}/PCCH-Message.c | 0 .../{asn => lib/asn/src}/PCCH-MessageType.c | 0 lte/rrc/{asn => lib/asn/src}/PDCP-Config.c | 0 .../{asn => lib/asn/src}/PDCP-Parameters.c | 0 .../{asn => lib/asn/src}/PDSCH-ConfigCommon.c | 0 .../asn/src}/PDSCH-ConfigDedicated.c | 0 lte/rrc/{asn => lib/asn/src}/PHICH-Config.c | 0 lte/rrc/{asn => lib/asn/src}/PLMN-Identity.c | 0 .../{asn => lib/asn/src}/PLMN-IdentityInfo.c | 0 .../{asn => lib/asn/src}/PLMN-IdentityList.c | 0 .../{asn => lib/asn/src}/PLMN-IdentityList2.c | 0 lte/rrc/{asn => lib/asn/src}/PMCH-Config-r9.c | 0 lte/rrc/{asn => lib/asn/src}/PMCH-Info-r9.c | 0 .../{asn => lib/asn/src}/PMCH-InfoList-r9.c | 0 lte/rrc/{asn => lib/asn/src}/PRACH-Config.c | 0 .../{asn => lib/asn/src}/PRACH-ConfigInfo.c | 0 .../asn/src}/PRACH-ConfigSCell-r10.c | 0 .../{asn => lib/asn/src}/PRACH-ConfigSIB.c | 0 .../{asn => lib/asn/src}/PUCCH-ConfigCommon.c | 0 .../asn/src}/PUCCH-ConfigDedicated-v1020.c | 0 .../asn/src}/PUCCH-ConfigDedicated.c | 0 .../asn/src}/PUSCH-CAConfigDedicated-vlola.c | 0 .../{asn => lib/asn/src}/PUSCH-ConfigCommon.c | 0 .../asn/src}/PUSCH-ConfigDedicated-v1020.c | 0 .../asn/src}/PUSCH-ConfigDedicated.c | 0 .../asn/src}/PUSCH-ConfigDedicatedSCell-r10.c | 0 .../{asn => lib/asn/src}/Paging-v890-IEs.c | 0 .../{asn => lib/asn/src}/Paging-v920-IEs.c | 0 lte/rrc/{asn => lib/asn/src}/Paging.c | 0 lte/rrc/{asn => lib/asn/src}/PagingRecord.c | 0 .../{asn => lib/asn/src}/PagingRecordList.c | 0 .../{asn => lib/asn/src}/PagingUE-Identity.c | 0 .../asn/src}/PhyLayerParameters-v1020.c | 0 .../asn/src}/PhyLayerParameters-v920.c | 0 .../{asn => lib/asn/src}/PhyLayerParameters.c | 0 lte/rrc/{asn => lib/asn/src}/PhysCellId.c | 0 .../{asn => lib/asn/src}/PhysCellIdCDMA2000.c | 0 .../{asn => lib/asn/src}/PhysCellIdGERAN.c | 0 .../asn/src}/PhysCellIdListCDMA2000-v920.c | 0 .../asn/src}/PhysCellIdListCDMA2000.c | 0 .../{asn => lib/asn/src}/PhysCellIdRange.c | 0 .../asn/src}/PhysCellIdRangeUTRA-FDD-r9.c | 0 .../asn/src}/PhysCellIdRangeUTRA-FDDList-r9.c | 0 .../{asn => lib/asn/src}/PhysCellIdUTRA-FDD.c | 0 .../{asn => lib/asn/src}/PhysCellIdUTRA-TDD.c | 0 .../asn/src}/PhysicalConfigDedicated.c | 0 .../src}/PhysicalConfigDedicatedSCell-r10.c | 0 lte/rrc/{asn => lib/asn/src}/PollByte.c | 0 lte/rrc/{asn => lib/asn/src}/PollPDU.c | 0 .../asn/src}/PreRegistrationInfoHRPD.c | 0 .../asn/src}/PreRegistrationZoneIdHRPD.c | 0 .../asn/src}/PresenceAntennaPort1.c | 0 .../asn/src}/ProximityIndication-r9-IEs.c | 0 .../asn/src}/ProximityIndication-r9.c | 0 .../asn/src}/ProximityIndication-v930-IEs.c | 0 lte/rrc/{asn => lib/asn/src}/Q-OffsetRange.c | 0 .../asn/src}/Q-OffsetRangeInterRAT.c | 0 lte/rrc/{asn => lib/asn/src}/Q-QualMin-r9.c | 0 lte/rrc/{asn => lib/asn/src}/Q-RxLevMin.c | 0 lte/rrc/{asn => lib/asn/src}/QuantityConfig.c | 0 .../asn/src}/QuantityConfigCDMA2000.c | 0 .../asn/src}/QuantityConfigEUTRA.c | 0 .../asn/src}/QuantityConfigGERAN.c | 0 .../asn/src}/QuantityConfigUTRA-v1020.c | 0 .../{asn => lib/asn/src}/QuantityConfigUTRA.c | 0 .../{asn => lib/asn/src}/RACH-ConfigCommon.c | 0 .../asn/src}/RACH-ConfigDedicated.c | 0 lte/rrc/{asn => lib/asn/src}/RAND-CDMA2000.c | 0 lte/rrc/{asn => lib/asn/src}/RAT-Type.c | 0 .../asn/src}/RF-Parameters-v1020.c | 0 lte/rrc/{asn => lib/asn/src}/RF-Parameters.c | 0 lte/rrc/{asn => lib/asn/src}/RLC-Config.c | 0 lte/rrc/{asn => lib/asn/src}/RLF-Report-r9.c | 0 .../asn/src}/RLF-TimersAndConstants-r9.c | 0 .../asn/src}/RN-SubframeConfig-r10.c | 0 .../{asn => lib/asn/src}/RN-SystemInfo-r10.c | 0 .../asn/src}/RNReconfiguration-r10-IEs.c | 0 .../asn/src}/RNReconfiguration-r10.c | 0 .../src}/RNReconfigurationComplete-r10-IEs.c | 0 .../asn/src}/RNReconfigurationComplete-r10.c | 0 .../asn/src}/RRC-TransactionIdentifier.c | 0 .../RRCConnectionReconfiguration-r8-IEs.c | 0 .../RRCConnectionReconfiguration-v1020-IEs.c | 0 .../RRCConnectionReconfiguration-v890-IEs.c | 0 .../RRCConnectionReconfiguration-v920-IEs.c | 0 .../asn/src}/RRCConnectionReconfiguration.c | 0 ...ConnectionReconfigurationComplete-r8-IEs.c | 0 ...nectionReconfigurationComplete-v1020-IEs.c | 0 ...nnectionReconfigurationComplete-v8a0-IEs.c | 0 .../RRCConnectionReconfigurationComplete.c | 0 .../RRCConnectionReestablishment-r8-IEs.c | 0 .../RRCConnectionReestablishment-v8a0-IEs.c | 0 .../asn/src}/RRCConnectionReestablishment.c | 0 ...ConnectionReestablishmentComplete-r8-IEs.c | 0 ...nectionReestablishmentComplete-v1020-IEs.c | 0 ...nnectionReestablishmentComplete-v8a0-IEs.c | 0 ...nnectionReestablishmentComplete-v920-IEs.c | 0 .../RRCConnectionReestablishmentComplete.c | 0 ...RCConnectionReestablishmentReject-r8-IEs.c | 0 ...ConnectionReestablishmentReject-v8a0-IEs.c | 0 .../src}/RRCConnectionReestablishmentReject.c | 0 ...CConnectionReestablishmentRequest-r8-IEs.c | 0 .../RRCConnectionReestablishmentRequest.c | 0 .../asn/src}/RRCConnectionReject-r8-IEs.c | 0 .../asn/src}/RRCConnectionReject-v1020-IEs.c | 0 .../asn/src}/RRCConnectionReject-v8a0-IEs.c | 0 .../asn/src}/RRCConnectionReject.c | 0 .../asn/src}/RRCConnectionRelease-r8-IEs.c | 0 .../asn/src}/RRCConnectionRelease-v1020-IEs.c | 0 .../asn/src}/RRCConnectionRelease-v890-IEs.c | 0 .../asn/src}/RRCConnectionRelease-v920-IEs.c | 0 .../asn/src}/RRCConnectionRelease.c | 0 .../asn/src}/RRCConnectionRequest-r8-IEs.c | 0 .../asn/src}/RRCConnectionRequest.c | 0 .../asn/src}/RRCConnectionSetup-r8-IEs.c | 0 .../asn/src}/RRCConnectionSetup-v8a0-IEs.c | 0 .../{asn => lib/asn/src}/RRCConnectionSetup.c | 0 .../src}/RRCConnectionSetupComplete-r8-IEs.c | 0 .../RRCConnectionSetupComplete-v1020-IEs.c | 0 .../RRCConnectionSetupComplete-v8a0-IEs.c | 0 .../asn/src}/RRCConnectionSetupComplete.c | 0 lte/rrc/{asn => lib/asn/src}/RRM-Config.c | 0 lte/rrc/{asn => lib/asn/src}/RSRP-Range.c | 0 lte/rrc/{asn => lib/asn/src}/RSRQ-Range.c | 0 .../asn/src}/RSTD-InterFreqInfo-r10.c | 0 .../asn/src}/RSTD-InterFreqInfoList-r10.c | 0 .../asn/src}/RadioResourceConfigCommon.c | 0 .../src}/RadioResourceConfigCommonSCell-r10.c | 0 .../asn/src}/RadioResourceConfigCommonSIB.c | 0 .../asn/src}/RadioResourceConfigDedicated.c | 0 .../RadioResourceConfigDedicatedSCell-r10.c | 0 .../asn/src}/RedirectedCarrierInfo.c | 0 .../{asn => lib/asn/src}/ReestabUE-Identity.c | 0 .../asn/src}/ReestablishmentCause.c | 0 .../asn/src}/ReestablishmentInfo.c | 0 lte/rrc/{asn => lib/asn/src}/RegisteredMME.c | 0 lte/rrc/{asn => lib/asn/src}/ReleaseCause.c | 0 .../{asn => lib/asn/src}/ReportConfigEUTRA.c | 0 lte/rrc/{asn => lib/asn/src}/ReportConfigId.c | 0 .../asn/src}/ReportConfigInterRAT.c | 0 .../asn/src}/ReportConfigToAddMod.c | 0 .../asn/src}/ReportConfigToAddModList.c | 0 .../asn/src}/ReportConfigToRemoveList.c | 0 lte/rrc/{asn => lib/asn/src}/ReportInterval.c | 0 .../asn/src}/ReportProximityConfig-r9.c | 0 .../asn/src}/ReselectionThreshold.c | 0 .../asn/src}/ReselectionThresholdQ-r9.c | 0 lte/rrc/{asn => lib/asn/src}/S-TMSI.c | 0 lte/rrc/{asn => lib/asn/src}/SCellIndex-r10.c | 0 .../{asn => lib/asn/src}/SCellToAddMod-r10.c | 0 .../asn/src}/SCellToAddModList-r10.c | 0 .../asn/src}/SCellToReleaseList-r10.c | 0 lte/rrc/{asn => lib/asn/src}/SI-OrPSI-GERAN.c | 0 .../{asn => lib/asn/src}/SIB-MappingInfo.c | 0 lte/rrc/{asn => lib/asn/src}/SIB-Type.c | 0 lte/rrc/{asn => lib/asn/src}/SN-FieldLength.c | 0 .../{asn => lib/asn/src}/SON-Parameters-r9.c | 0 lte/rrc/{asn => lib/asn/src}/SPS-Config.c | 0 lte/rrc/{asn => lib/asn/src}/SPS-ConfigDL.c | 0 lte/rrc/{asn => lib/asn/src}/SPS-ConfigUL.c | 0 .../asn/src}/SPS-RA-ConfigList-rlola.c | 0 lte/rrc/{asn => lib/asn/src}/SRB-ToAddMod.c | 0 .../{asn => lib/asn/src}/SRB-ToAddModList.c | 0 .../{asn => lib/asn/src}/SRS-ConfigAp-r10.c | 0 lte/rrc/{asn => lib/asn/src}/SchedulingInfo.c | 0 .../{asn => lib/asn/src}/SchedulingInfoList.c | 0 .../asn/src}/SchedulingRequestConfig-v1020.c | 0 .../asn/src}/SchedulingRequestConfig.c | 0 .../SecondaryPreRegistrationZoneIdListHRPD.c | 0 .../asn/src}/SecurityAlgorithmConfig.c | 0 .../{asn => lib/asn/src}/SecurityConfigHO.c | 0 .../{asn => lib/asn/src}/SecurityConfigSMC.c | 0 .../asn/src}/SecurityModeCommand-r8-IEs.c | 0 .../asn/src}/SecurityModeCommand-v8a0-IEs.c | 0 .../asn/src}/SecurityModeCommand.c | 0 .../asn/src}/SecurityModeComplete-r8-IEs.c | 0 .../asn/src}/SecurityModeComplete-v8a0-IEs.c | 0 .../asn/src}/SecurityModeComplete.c | 0 .../asn/src}/SecurityModeFailure-r8-IEs.c | 0 .../asn/src}/SecurityModeFailure-v8a0-IEs.c | 0 .../asn/src}/SecurityModeFailure.c | 0 .../{asn => lib/asn/src}/ServCellIndex-r10.c | 0 lte/rrc/{asn => lib/asn/src}/ShortMAC-I.c | 0 .../asn/src}/SoundingRS-UL-ConfigCommon.c | 0 .../SoundingRS-UL-ConfigDedicated-v1020.c | 0 .../asn/src}/SoundingRS-UL-ConfigDedicated.c | 0 ...undingRS-UL-ConfigDedicatedAperiodic-r10.c | 0 .../asn/src}/SpeedStateScaleFactors.c | 0 .../asn/src}/SupportedBandCombination-r10.c | 0 .../{asn => lib/asn/src}/SupportedBandEUTRA.c | 0 .../{asn => lib/asn/src}/SupportedBandGERAN.c | 0 .../asn/src}/SupportedBandList1XRTT.c | 0 .../asn/src}/SupportedBandListEUTRA.c | 0 .../asn/src}/SupportedBandListGERAN.c | 0 .../asn/src}/SupportedBandListHRPD.c | 0 .../asn/src}/SupportedBandListUTRA-FDD.c | 0 .../asn/src}/SupportedBandListUTRA-TDD128.c | 0 .../asn/src}/SupportedBandListUTRA-TDD384.c | 0 .../asn/src}/SupportedBandListUTRA-TDD768.c | 0 .../asn/src}/SupportedBandUTRA-FDD.c | 0 .../asn/src}/SupportedBandUTRA-TDD128.c | 0 .../asn/src}/SupportedBandUTRA-TDD384.c | 0 .../asn/src}/SupportedBandUTRA-TDD768.c | 0 .../asn/src}/SystemInfoListGERAN.c | 0 .../asn/src}/SystemInformation-r8-IEs.c | 0 .../asn/src}/SystemInformation-v8a0-IEs.c | 0 .../{asn => lib/asn/src}/SystemInformation.c | 0 .../SystemInformationBlockType1-v890-IEs.c | 0 .../SystemInformationBlockType1-v920-IEs.c | 0 .../asn/src}/SystemInformationBlockType1.c | 0 .../asn/src}/SystemInformationBlockType10.c | 0 .../asn/src}/SystemInformationBlockType11.c | 0 .../src}/SystemInformationBlockType12-r9.c | 0 .../src}/SystemInformationBlockType13-r9.c | 0 .../asn/src}/SystemInformationBlockType2.c | 0 .../asn/src}/SystemInformationBlockType3.c | 0 .../asn/src}/SystemInformationBlockType4.c | 0 .../asn/src}/SystemInformationBlockType5.c | 0 .../asn/src}/SystemInformationBlockType6.c | 0 .../asn/src}/SystemInformationBlockType7.c | 0 .../asn/src}/SystemInformationBlockType8.c | 0 .../asn/src}/SystemInformationBlockType9.c | 0 .../asn/src}/SystemTimeInfoCDMA2000.c | 0 .../{asn => lib/asn/src}/T-PollRetransmit.c | 0 lte/rrc/{asn => lib/asn/src}/T-Reordering.c | 0 lte/rrc/{asn => lib/asn/src}/T-Reselection.c | 0 .../{asn => lib/asn/src}/T-StatusProhibit.c | 0 lte/rrc/{asn => lib/asn/src}/TDD-Config.c | 0 lte/rrc/{asn => lib/asn/src}/TMGI-r9.c | 0 lte/rrc/{asn => lib/asn/src}/TPC-Index.c | 0 .../{asn => lib/asn/src}/TPC-PDCCH-Config.c | 0 .../{asn => lib/asn/src}/ThresholdCDMA2000.c | 0 lte/rrc/{asn => lib/asn/src}/ThresholdEUTRA.c | 0 lte/rrc/{asn => lib/asn/src}/ThresholdGERAN.c | 0 lte/rrc/{asn => lib/asn/src}/ThresholdUTRA.c | 0 .../{asn => lib/asn/src}/TimeAlignmentTimer.c | 0 lte/rrc/{asn => lib/asn/src}/TimeToTrigger.c | 0 .../{asn => lib/asn/src}/TraceReference-r10.c | 0 .../{asn => lib/asn/src}/TrackingAreaCode.c | 0 .../asn/src}/TrackingAreaCodeList-r10.c | 0 .../src}/UE-BasedNetwPerfMeasParameters-r10.c | 0 .../asn/src}/UE-CapabilityRAT-Container.c | 0 .../asn/src}/UE-CapabilityRAT-ContainerList.c | 0 .../asn/src}/UE-CapabilityRequest.c | 0 .../asn/src}/UE-EUTRA-Capability-v1020-IEs.c | 0 .../asn/src}/UE-EUTRA-Capability-v920-IEs.c | 0 .../asn/src}/UE-EUTRA-Capability-v940-IEs.c | 0 .../asn/src}/UE-EUTRA-Capability.c | 0 .../asn/src}/UE-TimersAndConstants.c | 0 .../asn/src}/UECapabilityEnquiry-r8-IEs.c | 0 .../asn/src}/UECapabilityEnquiry-v8a0-IEs.c | 0 .../asn/src}/UECapabilityEnquiry.c | 0 .../asn/src}/UECapabilityInformation-r8-IEs.c | 0 .../src}/UECapabilityInformation-v8a0-IEs.c | 0 .../asn/src}/UECapabilityInformation.c | 0 .../asn/src}/UEInformationRequest-r9-IEs.c | 0 .../asn/src}/UEInformationRequest-r9.c | 0 .../asn/src}/UEInformationRequest-v1020-IEs.c | 0 .../asn/src}/UEInformationRequest-v930-IEs.c | 0 .../asn/src}/UEInformationResponse-r9-IEs.c | 0 .../asn/src}/UEInformationResponse-r9.c | 0 .../src}/UEInformationResponse-v1020-IEs.c | 0 .../asn/src}/UEInformationResponse-v930-IEs.c | 0 ...ERadioAccessCapabilityInformation-r8-IEs.c | 0 .../src}/UERadioAccessCapabilityInformation.c | 0 lte/rrc/{asn => lib/asn/src}/UL-AM-RLC.c | 0 .../{asn => lib/asn/src}/UL-CCCH-Message.c | 0 .../asn/src}/UL-CCCH-MessageType.c | 0 .../asn/src}/UL-CyclicPrefixLength.c | 0 .../{asn => lib/asn/src}/UL-DCCH-Message.c | 0 .../asn/src}/UL-DCCH-MessageType.c | 0 .../asn/src}/UL-ReferenceSignalsPUSCH.c | 0 lte/rrc/{asn => lib/asn/src}/UL-UM-RLC.c | 0 .../ULHandoverPreparationTransfer-r8-IEs.c | 0 .../ULHandoverPreparationTransfer-v8a0-IEs.c | 0 .../asn/src}/ULHandoverPreparationTransfer.c | 0 .../asn/src}/ULInformationTransfer-r8-IEs.c | 0 .../asn/src}/ULInformationTransfer-v8a0-IEs.c | 0 .../asn/src}/ULInformationTransfer.c | 0 .../asn/src}/UplinkPowerControlCommon-v1020.c | 0 .../asn/src}/UplinkPowerControlCommon.c | 0 .../src}/UplinkPowerControlCommonSCell-r10.c | 0 .../src}/UplinkPowerControlDedicated-v1020.c | 0 .../asn/src}/UplinkPowerControlDedicated.c | 0 .../UplinkPowerControlDedicatedSCell-r10.c | 0 lte/rrc/{asn => lib/asn/src}/VarMeasConfig.c | 0 lte/rrc/{asn => lib/asn/src}/VarMeasReport.c | 0 .../{asn => lib/asn/src}/VarMeasReportList.c | 0 .../{asn => lib/asn/src}/VarShortMAC-Input.c | 0 .../{asn => lib/asn/src}/asn_SEQUENCE_OF.c | 0 lte/rrc/{asn => lib/asn/src}/asn_SET_OF.c | 0 .../{asn => lib/asn/src}/asn_codecs_prim.c | 0 lte/rrc/{asn => lib/asn/src}/ber_decoder.c | 0 lte/rrc/{asn => lib/asn/src}/ber_tlv_length.c | 0 lte/rrc/{asn => lib/asn/src}/ber_tlv_tag.c | 0 lte/rrc/{asn => lib/asn/src}/constr_CHOICE.c | 0 .../{asn => lib/asn/src}/constr_SEQUENCE.c | 0 .../{asn => lib/asn/src}/constr_SEQUENCE_OF.c | 0 lte/rrc/{asn => lib/asn/src}/constr_SET_OF.c | 0 lte/rrc/{asn => lib/asn/src}/constr_TYPE.c | 0 lte/rrc/{asn => lib/asn/src}/constraints.c | 0 .../{asn => lib/asn/src}/converter-sample.c | 0 lte/rrc/{asn => lib/asn/src}/der_encoder.c | 0 lte/rrc/{asn => lib/asn/src}/per_decoder.c | 0 lte/rrc/{asn => lib/asn/src}/per_encoder.c | 0 lte/rrc/{asn => lib/asn/src}/per_opentype.c | 0 lte/rrc/{asn => lib/asn/src}/per_support.c | 0 lte/rrc/{asn => lib/asn/src}/xer_decoder.c | 0 lte/rrc/{asn => lib/asn/src}/xer_encoder.c | 0 lte/rrc/{asn => lib/asn/src}/xer_support.c | 0 lte/rrc/lib/messages/test/CMakeLists.txt | 4 +- 1269 files changed, 139 insertions(+), 585 deletions(-) delete mode 100644 lte/phy/lib/phch/test/pdsch_re_test.c delete mode 100644 lte/phy/lib/ue/test/CMakeLists.txt delete mode 100644 lte/phy/lib/ue/test/ue_sync_usrp.c delete mode 100755 lte/rrc/asn/CMakeLists.txt rename lte/rrc/{ => include/liblte/rrc}/asn/AC-BarringConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AC-BarringConfig1XRTT-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ARFCN-ValueCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ARFCN-ValueEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ARFCN-ValueGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ARFCN-ValueUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AS-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AS-Context.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AbsoluteTimeInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AccessStratumRelease.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AdditionalReestabInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AdditionalReestabInfoList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AdditionalSI-Info-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AdditionalSpectrumEmission.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AllowedMeasBandwidth.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AntennaInfoCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AntennaInfoDedicated-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AntennaInfoDedicated-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AntennaInfoDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AntennaInfoUL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/AreaConfiguration-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BCCH-BCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BCCH-BCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BCCH-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BCCH-DL-SCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BCCH-DL-SCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BIT_STRING.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BOOLEAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandClassInfoCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandClassListCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandClassPriority1XRTT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandClassPriorityHRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandClassPriorityList1XRTT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandClassPriorityListHRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandCombinationListEUTRA-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandCombinationParameters-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandIndicatorGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandInfoEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandListEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandParameters-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandParametersDL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandParametersUL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BandclassCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BetaOffset-CA-Index.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BlackCellsToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/BlackCellsToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/C-RNTI.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CA-BandwidthClass-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CA-MIMO-ParametersDL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CA-MIMO-ParametersUL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CA-RNTI.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CA-semiPersistSchedIntervalUL.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CDMA2000-Type.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportAperiodic-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportConfig-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportConfig-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportConfigSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportModeAperiodic.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportPeriodic-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CQI-ReportPeriodic.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFB-RegistrationParam1XRTT-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFB-RegistrationParam1XRTT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFBParametersRequestCDMA2000-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFBParametersRequestCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFBParametersResponseCDMA2000-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSFBParametersResponseCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSG-AllowedReportingCells-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSG-Identity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSG-ProximityIndicationParameters-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CSI-RS-Config-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CShift.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierBandwidthEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqListUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqListUTRA-TDD-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqListUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqsGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqsInfoGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CarrierFreqsInfoListGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellChangeOrder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellGlobalIdCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellGlobalIdEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellGlobalIdGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellGlobalIdList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellGlobalIdUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellIdentity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellIndex.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellIndexList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoGERAN-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoListGERAN-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoListUTRA-FDD-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoListUTRA-TDD-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoListUTRA-TDD-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoUTRA-FDD-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoUTRA-TDD-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellInfoUTRA-TDD-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellReselectionParametersCDMA2000-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellReselectionParametersCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellReselectionPriority.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellSelectionInfo-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModListCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModListUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModListUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsToAddModUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CellsTriggeredList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CommonSF-AllocPatternList-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CounterCheck-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CounterCheck-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CounterCheck.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CounterCheckResponse-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CounterCheckResponse-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CounterCheckResponse.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CountingRequestInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CountingRequestList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CountingResponseInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CountingResponseList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/CrossCarrierSchedulingConfig-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DL-AM-RLC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DL-CCCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DL-CCCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DL-DCCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DL-DCCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DL-UM-RLC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DLInformationTransfer-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DLInformationTransfer-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DLInformationTransfer.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-CountInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-CountInfoList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-CountMSB-Info.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-CountMSB-InfoList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-Identity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-ToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-ToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRB-ToReleaseList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DRX-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DedicatedInfoCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DedicatedInfoNAS.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DeltaFList-PUCCH.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/DeltaTxD-OffsetListPUCCH-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/E-CSFB-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/EstablishmentCause.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ExplicitListOfARFCNs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FilterCoefficient.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqPriorityEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqPriorityListEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqPriorityListUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqPriorityListUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqPriorityUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqPriorityUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqsPriorityGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/FreqsPriorityListGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Handover.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverCommand-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverCommand.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverFromEUTRAPreparationRequest.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverPreparationInformation-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverPreparationInformation-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/HandoverPreparationInformation.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Hysteresis.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IMSI-Digit.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IMSI.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/INTEGER.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersCDMA2000-1XRTT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersCDMA2000-HRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersGERAN-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersUTRA-TDD-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersUTRA-TDD128.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersUTRA-TDD384.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersUTRA-TDD768.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IRAT-ParametersUTRA-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IdleModeMobilityControlInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InitialUE-Identity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqBandInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqBandList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqBlackCellList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqCarrierFreqInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqCarrierFreqList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqNeighCellInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqNeighCellList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterFreqRSTDMeasurementIndication-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterRAT-BandInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/InterRAT-BandList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IntraFreqBlackCellList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IntraFreqNeighCellInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/IntraFreqNeighCellList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Key-eNodeB-Star.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LocationInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LogMeasInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LogMeasInfoList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LogMeasReport-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LoggedMeasurementConfiguration-r10-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LoggedMeasurementConfiguration-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LoggingDuration-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LoggingInterval-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/LogicalChannelConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MAC-MainConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBMS-NotificationConfig-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBMS-SessionInfo-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBMS-SessionInfoList-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBMSCountingRequest-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBMSCountingResponse-r10-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBMSCountingResponse-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBSFN-AreaInfo-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBSFN-AreaInfoList-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBSFN-SubframeConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBSFN-SubframeConfigList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBSFNAreaConfiguration-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MBSFNAreaConfiguration-v930-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MCC-MNC-Digit.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MCC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MCCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MCCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MIMO-CapabilityDL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MIMO-CapabilityUL-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MMEC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MNC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MasterInformationBlock.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasCycleSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasGapConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasId.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasIdToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasIdToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasIdToRemoveList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectId.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectToRemoveList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasObjectUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasParameters-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasParameters.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResult2CDMA2000-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResult2EUTRA-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResult2UTRA-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultForECID-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultList2CDMA2000-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultList2EUTRA-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultList2GERAN-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultList2UTRA-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultListCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultListEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultListGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultListUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultServFreq-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultServFreqList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResults.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasResultsCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasSubframeCellList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasSubframePattern-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasSubframePatternConfigNeigh-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasSubframePatternPCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasurementReport-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasurementReport-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MeasurementReport.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityControlInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand-r9-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand-v8d0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand-v930-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand-v960-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityFromEUTRACommand.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityParametersCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/MobilityStateParameters.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/N1-PUCCH-AN-PersistentList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/N1PUCCH-AN-CS-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/N1PUCCH-AN-PersistentList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NULL.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NativeEnumerated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NativeInteger.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellCDMA2000-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellListCDMA2000-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellListCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellSI-AcquisitionParameters-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellsPerBandclassCDMA2000-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellsPerBandclassCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellsPerBandclassListCDMA2000-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NeighCellsPerBandclassListCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NextHopChainingCount.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NonContiguousUL-RA-WithinCC-List-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/NonContiguousUL-RA-WithinCC-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/OCTET_STRING.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/OtherConfig-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/P-Max.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PCCH-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PCCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PCCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PDCP-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PDCP-Parameters.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PDSCH-ConfigCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PDSCH-ConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PHICH-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PLMN-Identity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PLMN-IdentityInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PLMN-IdentityList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PLMN-IdentityList2.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PMCH-Config-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PMCH-Info-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PMCH-InfoList-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PRACH-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PRACH-ConfigInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PRACH-ConfigSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PRACH-ConfigSIB.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUCCH-ConfigCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUCCH-ConfigDedicated-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUCCH-ConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUSCH-CAConfigDedicated-vlola.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUSCH-ConfigCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUSCH-ConfigDedicated-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUSCH-ConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PUSCH-ConfigDedicatedSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Paging-v890-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Paging-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Paging.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PagingRecord.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PagingRecordList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PagingUE-Identity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhyLayerParameters-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhyLayerParameters-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhyLayerParameters.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellId.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdListCDMA2000-v920.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdListCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdRange.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdRangeUTRA-FDD-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdRangeUTRA-FDDList-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysCellIdUTRA-TDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysicalConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PhysicalConfigDedicatedSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PollByte.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PollPDU.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PreRegistrationInfoHRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PreRegistrationZoneIdHRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/PresenceAntennaPort1.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ProximityIndication-r9-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ProximityIndication-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ProximityIndication-v930-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Q-OffsetRange.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Q-OffsetRangeInterRAT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Q-QualMin-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/Q-RxLevMin.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/QuantityConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/QuantityConfigCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/QuantityConfigEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/QuantityConfigGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/QuantityConfigUTRA-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/QuantityConfigUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RACH-ConfigCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RACH-ConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RAND-CDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RAT-Type.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RF-Parameters-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RF-Parameters.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RLC-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RLF-Report-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RLF-TimersAndConstants-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RN-SubframeConfig-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RN-SystemInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RNReconfiguration-r10-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RNReconfiguration-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RNReconfigurationComplete-r10-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RNReconfigurationComplete-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRC-TransactionIdentifier.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfiguration-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfiguration-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfiguration-v890-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfiguration-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfiguration.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfigurationComplete-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReconfigurationComplete.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishment-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishment-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishment.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentComplete-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentComplete-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentComplete.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentReject-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentReject.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentRequest-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReestablishmentRequest.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReject-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReject-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReject-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionReject.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRelease-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRelease-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRelease-v890-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRelease-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRelease.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRequest-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionRequest.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetup-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetup-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetup.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetupComplete-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetupComplete-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetupComplete-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRCConnectionSetupComplete.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RRM-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RSRP-Range.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RSRQ-Range.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RSTD-InterFreqInfo-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RSTD-InterFreqInfoList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RadioResourceConfigCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RadioResourceConfigCommonSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RadioResourceConfigCommonSIB.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RadioResourceConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RadioResourceConfigDedicatedSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RedirectedCarrierInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReestabUE-Identity.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReestablishmentCause.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReestablishmentInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/RegisteredMME.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReleaseCause.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportConfigEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportConfigId.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportConfigInterRAT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportConfigToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportConfigToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportConfigToRemoveList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportInterval.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReportProximityConfig-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReselectionThreshold.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ReselectionThresholdQ-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/S-TMSI.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SCellIndex-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SCellToAddMod-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SCellToAddModList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SCellToReleaseList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SI-OrPSI-GERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SIB-MappingInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SIB-Type.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SN-FieldLength.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SON-Parameters-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SPS-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SPS-ConfigDL.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SPS-ConfigUL.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SPS-RA-ConfigList-rlola.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SRB-ToAddMod.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SRB-ToAddModList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SRS-ConfigAp-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SchedulingInfo.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SchedulingInfoList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SchedulingRequestConfig-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SchedulingRequestConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecondaryPreRegistrationZoneIdListHRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityAlgorithmConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityConfigHO.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityConfigSMC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeCommand-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeCommand-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeCommand.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeComplete-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeComplete-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeComplete.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeFailure-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeFailure-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SecurityModeFailure.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ServCellIndex-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ShortMAC-I.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SoundingRS-UL-ConfigCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SoundingRS-UL-ConfigDedicated-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SoundingRS-UL-ConfigDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SpeedStateScaleFactors.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandCombination-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandList1XRTT.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListHRPD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListUTRA-TDD128.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListUTRA-TDD384.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandListUTRA-TDD768.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandUTRA-FDD.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandUTRA-TDD128.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandUTRA-TDD384.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SupportedBandUTRA-TDD768.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInfoListGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformation-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformation-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformation.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType1-v890-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType1-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType1.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType11.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType12-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType13-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType2.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType3.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType4.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType5.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType6.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType7.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType8.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemInformationBlockType9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/SystemTimeInfoCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/T-PollRetransmit.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/T-Reordering.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/T-Reselection.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/T-StatusProhibit.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TDD-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TMGI-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TPC-Index.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TPC-PDCCH-Config.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ThresholdCDMA2000.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ThresholdEUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ThresholdGERAN.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ThresholdUTRA.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TimeAlignmentTimer.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TimeToTrigger.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TraceReference-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TrackingAreaCode.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/TrackingAreaCodeList-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-BasedNetwPerfMeasParameters-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-CapabilityRAT-Container.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-CapabilityRAT-ContainerList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-CapabilityRequest.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-EUTRA-Capability-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-EUTRA-Capability-v920-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-EUTRA-Capability-v940-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-EUTRA-Capability.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UE-TimersAndConstants.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UECapabilityEnquiry-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UECapabilityEnquiry-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UECapabilityEnquiry.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UECapabilityInformation-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UECapabilityInformation-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UECapabilityInformation.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationRequest-r9-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationRequest-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationRequest-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationRequest-v930-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationResponse-r9-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationResponse-r9.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationResponse-v1020-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UEInformationResponse-v930-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UERadioAccessCapabilityInformation-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UERadioAccessCapabilityInformation.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-AM-RLC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-CCCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-CCCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-CyclicPrefixLength.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-DCCH-Message.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-DCCH-MessageType.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-ReferenceSignalsPUSCH.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UL-UM-RLC.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ULHandoverPreparationTransfer-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ULHandoverPreparationTransfer-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ULHandoverPreparationTransfer.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ULInformationTransfer-r8-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ULInformationTransfer-v8a0-IEs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ULInformationTransfer.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UplinkPowerControlCommon-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UplinkPowerControlCommon.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UplinkPowerControlCommonSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UplinkPowerControlDedicated-v1020.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UplinkPowerControlDedicated.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/UplinkPowerControlDedicatedSCell-r10.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/VarMeasConfig.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/VarMeasReport.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/VarMeasReportList.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/VarShortMAC-Input.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_SEQUENCE_OF.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_SET_OF.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_application.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_codecs.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_codecs_prim.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_internal.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/asn_system.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ber_decoder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ber_tlv_length.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/ber_tlv_tag.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/constr_CHOICE.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/constr_SEQUENCE.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/constr_SEQUENCE_OF.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/constr_SET_OF.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/constr_TYPE.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/constraints.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/der_encoder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/per_decoder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/per_encoder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/per_opentype.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/per_support.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/rrc_asn.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/xer_decoder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/xer_encoder.h (100%) rename lte/rrc/{ => include/liblte/rrc}/asn/xer_support.h (100%) rename lte/rrc/{asn => lib/asn/src}/AC-BarringConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/AC-BarringConfig1XRTT-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/ARFCN-ValueCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/ARFCN-ValueEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/ARFCN-ValueGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/ARFCN-ValueUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/AS-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/AS-Context.c (100%) rename lte/rrc/{asn => lib/asn/src}/AbsoluteTimeInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/AccessStratumRelease.c (100%) rename lte/rrc/{asn => lib/asn/src}/AdditionalReestabInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/AdditionalReestabInfoList.c (100%) rename lte/rrc/{asn => lib/asn/src}/AdditionalSI-Info-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/AdditionalSpectrumEmission.c (100%) rename lte/rrc/{asn => lib/asn/src}/AllowedMeasBandwidth.c (100%) rename lte/rrc/{asn => lib/asn/src}/AntennaInfoCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/AntennaInfoDedicated-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/AntennaInfoDedicated-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/AntennaInfoDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/AntennaInfoUL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/AreaConfiguration-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/BCCH-BCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/BCCH-BCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/BCCH-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/BCCH-DL-SCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/BCCH-DL-SCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/BIT_STRING.c (100%) rename lte/rrc/{asn => lib/asn/src}/BOOLEAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandClassInfoCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandClassListCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandClassPriority1XRTT.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandClassPriorityHRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandClassPriorityList1XRTT.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandClassPriorityListHRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandCombinationListEUTRA-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandCombinationParameters-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandIndicatorGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandInfoEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandListEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandParameters-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandParametersDL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandParametersUL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/BandclassCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/BetaOffset-CA-Index.c (100%) rename lte/rrc/{asn => lib/asn/src}/BlackCellsToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/BlackCellsToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/C-RNTI.c (100%) rename lte/rrc/{asn => lib/asn/src}/CA-BandwidthClass-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CA-MIMO-ParametersDL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CA-MIMO-ParametersUL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CA-RNTI.c (100%) rename lte/rrc/{asn => lib/asn/src}/CA-semiPersistSchedIntervalUL.c (100%) rename lte/rrc/{asn => lib/asn/src}/CDMA2000-Type.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportAperiodic-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportConfig-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportConfig-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportConfigSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportModeAperiodic.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportPeriodic-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CQI-ReportPeriodic.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFB-RegistrationParam1XRTT-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFB-RegistrationParam1XRTT.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFBParametersRequestCDMA2000-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFBParametersRequestCDMA2000-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFBParametersRequestCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFBParametersResponseCDMA2000-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFBParametersResponseCDMA2000-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSFBParametersResponseCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSG-AllowedReportingCells-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSG-Identity.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSG-ProximityIndicationParameters-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CSI-RS-Config-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CShift.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierBandwidthEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqListUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqListUTRA-TDD-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqListUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqsGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqsInfoGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/CarrierFreqsInfoListGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellChangeOrder.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellGlobalIdCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellGlobalIdEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellGlobalIdGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellGlobalIdList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellGlobalIdUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellIdentity.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellIndex.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellIndexList.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoGERAN-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoListGERAN-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoListUTRA-FDD-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoListUTRA-TDD-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoListUTRA-TDD-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoUTRA-FDD-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoUTRA-TDD-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellInfoUTRA-TDD-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellReselectionParametersCDMA2000-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellReselectionParametersCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellReselectionPriority.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellSelectionInfo-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModListCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModListUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModListUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsToAddModUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/CellsTriggeredList.c (100%) rename lte/rrc/{asn => lib/asn/src}/CommonSF-AllocPatternList-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/CounterCheck-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CounterCheck-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CounterCheck.c (100%) rename lte/rrc/{asn => lib/asn/src}/CounterCheckResponse-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CounterCheckResponse-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/CounterCheckResponse.c (100%) rename lte/rrc/{asn => lib/asn/src}/CountingRequestInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CountingRequestList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CountingResponseInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CountingResponseList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/CrossCarrierSchedulingConfig-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/DL-AM-RLC.c (100%) rename lte/rrc/{asn => lib/asn/src}/DL-CCCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/DL-CCCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/DL-DCCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/DL-DCCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/DL-UM-RLC.c (100%) rename lte/rrc/{asn => lib/asn/src}/DLInformationTransfer-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/DLInformationTransfer-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/DLInformationTransfer.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-CountInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-CountInfoList.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-CountMSB-Info.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-CountMSB-InfoList.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-Identity.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-ToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-ToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRB-ToReleaseList.c (100%) rename lte/rrc/{asn => lib/asn/src}/DRX-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/DedicatedInfoCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/DedicatedInfoNAS.c (100%) rename lte/rrc/{asn => lib/asn/src}/DeltaFList-PUCCH.c (100%) rename lte/rrc/{asn => lib/asn/src}/DeltaTxD-OffsetListPUCCH-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/E-CSFB-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/EstablishmentCause.c (100%) rename lte/rrc/{asn => lib/asn/src}/ExplicitListOfARFCNs.c (100%) rename lte/rrc/{asn => lib/asn/src}/FilterCoefficient.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqPriorityEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqPriorityListEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqPriorityListUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqPriorityListUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqPriorityUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqPriorityUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqsPriorityGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/FreqsPriorityListGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/Handover.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverCommand-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverCommand.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverFromEUTRAPreparationRequest-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverFromEUTRAPreparationRequest-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverFromEUTRAPreparationRequest-v890-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverFromEUTRAPreparationRequest-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverFromEUTRAPreparationRequest.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverPreparationInformation-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverPreparationInformation-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/HandoverPreparationInformation.c (100%) rename lte/rrc/{asn => lib/asn/src}/Hysteresis.c (100%) rename lte/rrc/{asn => lib/asn/src}/IMSI-Digit.c (100%) rename lte/rrc/{asn => lib/asn/src}/IMSI.c (100%) rename lte/rrc/{asn => lib/asn/src}/INTEGER.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersCDMA2000-1XRTT-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersCDMA2000-1XRTT-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersCDMA2000-1XRTT.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersCDMA2000-HRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersGERAN-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersUTRA-TDD-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersUTRA-TDD128.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersUTRA-TDD384.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersUTRA-TDD768.c (100%) rename lte/rrc/{asn => lib/asn/src}/IRAT-ParametersUTRA-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/IdleModeMobilityControlInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/InitialUE-Identity.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqBandInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqBandList.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqBlackCellList.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqCarrierFreqInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqCarrierFreqList.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqNeighCellInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqNeighCellList.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqRSTDMeasurementIndication-r10-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterFreqRSTDMeasurementIndication-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterRAT-BandInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/InterRAT-BandList.c (100%) rename lte/rrc/{asn => lib/asn/src}/IntraFreqBlackCellList.c (100%) rename lte/rrc/{asn => lib/asn/src}/IntraFreqNeighCellInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/IntraFreqNeighCellList.c (100%) rename lte/rrc/{asn => lib/asn/src}/Key-eNodeB-Star.c (100%) rename lte/rrc/{asn => lib/asn/src}/LocationInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LogMeasInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LogMeasInfoList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LogMeasReport-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LoggedMeasurementConfiguration-r10-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/LoggedMeasurementConfiguration-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LoggingDuration-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LoggingInterval-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/LogicalChannelConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/MAC-MainConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBMS-NotificationConfig-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBMS-SessionInfo-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBMS-SessionInfoList-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBMSCountingRequest-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBMSCountingResponse-r10-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBMSCountingResponse-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBSFN-AreaInfo-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBSFN-AreaInfoList-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBSFN-SubframeConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBSFN-SubframeConfigList.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBSFNAreaConfiguration-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MBSFNAreaConfiguration-v930-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MCC-MNC-Digit.c (100%) rename lte/rrc/{asn => lib/asn/src}/MCC.c (100%) rename lte/rrc/{asn => lib/asn/src}/MCCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/MCCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/MIMO-CapabilityDL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MIMO-CapabilityUL-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MMEC.c (100%) rename lte/rrc/{asn => lib/asn/src}/MNC.c (100%) rename lte/rrc/{asn => lib/asn/src}/MasterInformationBlock.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasCycleSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasGapConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasId.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasIdToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasIdToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasIdToRemoveList.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectId.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectToRemoveList.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasObjectUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasParameters-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasParameters.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResult2CDMA2000-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResult2EUTRA-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResult2UTRA-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultForECID-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultList2CDMA2000-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultList2EUTRA-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultList2GERAN-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultList2UTRA-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultListCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultListEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultListGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultListUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultServFreq-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultServFreqList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResults.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasResultsCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasSubframeCellList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasSubframePattern-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasSubframePatternConfigNeigh-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasSubframePatternPCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasurementReport-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasurementReport-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MeasurementReport.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityControlInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand-r9-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand-v8d0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand-v930-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand-v960-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityFromEUTRACommand.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityParametersCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/MobilityStateParameters.c (100%) rename lte/rrc/{asn => lib/asn/src}/N1-PUCCH-AN-PersistentList.c (100%) rename lte/rrc/{asn => lib/asn/src}/N1PUCCH-AN-CS-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/N1PUCCH-AN-PersistentList.c (100%) rename lte/rrc/{asn => lib/asn/src}/NULL.c (100%) rename lte/rrc/{asn => lib/asn/src}/NativeEnumerated.c (100%) rename lte/rrc/{asn => lib/asn/src}/NativeInteger.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellCDMA2000-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellListCDMA2000-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellListCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellSI-AcquisitionParameters-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellsPerBandclassCDMA2000-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellsPerBandclassCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellsPerBandclassListCDMA2000-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/NeighCellsPerBandclassListCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/NextHopChainingCount.c (100%) rename lte/rrc/{asn => lib/asn/src}/NonContiguousUL-RA-WithinCC-List-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/NonContiguousUL-RA-WithinCC-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/OCTET_STRING.c (100%) rename lte/rrc/{asn => lib/asn/src}/OtherConfig-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/P-Max.c (100%) rename lte/rrc/{asn => lib/asn/src}/PCCH-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/PCCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/PCCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/PDCP-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/PDCP-Parameters.c (100%) rename lte/rrc/{asn => lib/asn/src}/PDSCH-ConfigCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/PDSCH-ConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/PHICH-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/PLMN-Identity.c (100%) rename lte/rrc/{asn => lib/asn/src}/PLMN-IdentityInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/PLMN-IdentityList.c (100%) rename lte/rrc/{asn => lib/asn/src}/PLMN-IdentityList2.c (100%) rename lte/rrc/{asn => lib/asn/src}/PMCH-Config-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/PMCH-Info-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/PMCH-InfoList-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/PRACH-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/PRACH-ConfigInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/PRACH-ConfigSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/PRACH-ConfigSIB.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUCCH-ConfigCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUCCH-ConfigDedicated-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUCCH-ConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUSCH-CAConfigDedicated-vlola.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUSCH-ConfigCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUSCH-ConfigDedicated-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUSCH-ConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/PUSCH-ConfigDedicatedSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/Paging-v890-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/Paging-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/Paging.c (100%) rename lte/rrc/{asn => lib/asn/src}/PagingRecord.c (100%) rename lte/rrc/{asn => lib/asn/src}/PagingRecordList.c (100%) rename lte/rrc/{asn => lib/asn/src}/PagingUE-Identity.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhyLayerParameters-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhyLayerParameters-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhyLayerParameters.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellId.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdListCDMA2000-v920.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdListCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdRange.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdRangeUTRA-FDD-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdRangeUTRA-FDDList-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysCellIdUTRA-TDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysicalConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/PhysicalConfigDedicatedSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/PollByte.c (100%) rename lte/rrc/{asn => lib/asn/src}/PollPDU.c (100%) rename lte/rrc/{asn => lib/asn/src}/PreRegistrationInfoHRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/PreRegistrationZoneIdHRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/PresenceAntennaPort1.c (100%) rename lte/rrc/{asn => lib/asn/src}/ProximityIndication-r9-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/ProximityIndication-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/ProximityIndication-v930-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/Q-OffsetRange.c (100%) rename lte/rrc/{asn => lib/asn/src}/Q-OffsetRangeInterRAT.c (100%) rename lte/rrc/{asn => lib/asn/src}/Q-QualMin-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/Q-RxLevMin.c (100%) rename lte/rrc/{asn => lib/asn/src}/QuantityConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/QuantityConfigCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/QuantityConfigEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/QuantityConfigGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/QuantityConfigUTRA-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/QuantityConfigUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/RACH-ConfigCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/RACH-ConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/RAND-CDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/RAT-Type.c (100%) rename lte/rrc/{asn => lib/asn/src}/RF-Parameters-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/RF-Parameters.c (100%) rename lte/rrc/{asn => lib/asn/src}/RLC-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/RLF-Report-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/RLF-TimersAndConstants-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/RN-SubframeConfig-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RN-SystemInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RNReconfiguration-r10-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RNReconfiguration-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RNReconfigurationComplete-r10-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RNReconfigurationComplete-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRC-TransactionIdentifier.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfiguration-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfiguration-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfiguration-v890-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfiguration-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfiguration.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfigurationComplete-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfigurationComplete-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfigurationComplete-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReconfigurationComplete.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishment-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishment-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishment.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentComplete-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentComplete-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentComplete-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentComplete-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentComplete.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentReject-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentReject-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentReject.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentRequest-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReestablishmentRequest.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReject-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReject-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReject-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionReject.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRelease-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRelease-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRelease-v890-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRelease-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRelease.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRequest-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionRequest.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetup-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetup-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetup.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetupComplete-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetupComplete-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetupComplete-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRCConnectionSetupComplete.c (100%) rename lte/rrc/{asn => lib/asn/src}/RRM-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/RSRP-Range.c (100%) rename lte/rrc/{asn => lib/asn/src}/RSRQ-Range.c (100%) rename lte/rrc/{asn => lib/asn/src}/RSTD-InterFreqInfo-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RSTD-InterFreqInfoList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RadioResourceConfigCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/RadioResourceConfigCommonSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RadioResourceConfigCommonSIB.c (100%) rename lte/rrc/{asn => lib/asn/src}/RadioResourceConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/RadioResourceConfigDedicatedSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/RedirectedCarrierInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReestabUE-Identity.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReestablishmentCause.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReestablishmentInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/RegisteredMME.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReleaseCause.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportConfigEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportConfigId.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportConfigInterRAT.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportConfigToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportConfigToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportConfigToRemoveList.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportInterval.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReportProximityConfig-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReselectionThreshold.c (100%) rename lte/rrc/{asn => lib/asn/src}/ReselectionThresholdQ-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/S-TMSI.c (100%) rename lte/rrc/{asn => lib/asn/src}/SCellIndex-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SCellToAddMod-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SCellToAddModList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SCellToReleaseList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SI-OrPSI-GERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/SIB-MappingInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/SIB-Type.c (100%) rename lte/rrc/{asn => lib/asn/src}/SN-FieldLength.c (100%) rename lte/rrc/{asn => lib/asn/src}/SON-Parameters-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/SPS-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/SPS-ConfigDL.c (100%) rename lte/rrc/{asn => lib/asn/src}/SPS-ConfigUL.c (100%) rename lte/rrc/{asn => lib/asn/src}/SPS-RA-ConfigList-rlola.c (100%) rename lte/rrc/{asn => lib/asn/src}/SRB-ToAddMod.c (100%) rename lte/rrc/{asn => lib/asn/src}/SRB-ToAddModList.c (100%) rename lte/rrc/{asn => lib/asn/src}/SRS-ConfigAp-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SchedulingInfo.c (100%) rename lte/rrc/{asn => lib/asn/src}/SchedulingInfoList.c (100%) rename lte/rrc/{asn => lib/asn/src}/SchedulingRequestConfig-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/SchedulingRequestConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecondaryPreRegistrationZoneIdListHRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityAlgorithmConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityConfigHO.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityConfigSMC.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeCommand-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeCommand-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeCommand.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeComplete-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeComplete-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeComplete.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeFailure-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeFailure-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SecurityModeFailure.c (100%) rename lte/rrc/{asn => lib/asn/src}/ServCellIndex-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/ShortMAC-I.c (100%) rename lte/rrc/{asn => lib/asn/src}/SoundingRS-UL-ConfigCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/SoundingRS-UL-ConfigDedicated-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/SoundingRS-UL-ConfigDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SpeedStateScaleFactors.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandCombination-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandList1XRTT.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListHRPD.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListUTRA-TDD128.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListUTRA-TDD384.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandListUTRA-TDD768.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandUTRA-FDD.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandUTRA-TDD128.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandUTRA-TDD384.c (100%) rename lte/rrc/{asn => lib/asn/src}/SupportedBandUTRA-TDD768.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInfoListGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformation-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformation-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformation.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType1-v890-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType1-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType1.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType10.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType11.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType12-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType13-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType2.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType3.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType4.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType5.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType6.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType7.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType8.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemInformationBlockType9.c (100%) rename lte/rrc/{asn => lib/asn/src}/SystemTimeInfoCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/T-PollRetransmit.c (100%) rename lte/rrc/{asn => lib/asn/src}/T-Reordering.c (100%) rename lte/rrc/{asn => lib/asn/src}/T-Reselection.c (100%) rename lte/rrc/{asn => lib/asn/src}/T-StatusProhibit.c (100%) rename lte/rrc/{asn => lib/asn/src}/TDD-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/TMGI-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/TPC-Index.c (100%) rename lte/rrc/{asn => lib/asn/src}/TPC-PDCCH-Config.c (100%) rename lte/rrc/{asn => lib/asn/src}/ThresholdCDMA2000.c (100%) rename lte/rrc/{asn => lib/asn/src}/ThresholdEUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/ThresholdGERAN.c (100%) rename lte/rrc/{asn => lib/asn/src}/ThresholdUTRA.c (100%) rename lte/rrc/{asn => lib/asn/src}/TimeAlignmentTimer.c (100%) rename lte/rrc/{asn => lib/asn/src}/TimeToTrigger.c (100%) rename lte/rrc/{asn => lib/asn/src}/TraceReference-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/TrackingAreaCode.c (100%) rename lte/rrc/{asn => lib/asn/src}/TrackingAreaCodeList-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-BasedNetwPerfMeasParameters-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-CapabilityRAT-Container.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-CapabilityRAT-ContainerList.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-CapabilityRequest.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-EUTRA-Capability-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-EUTRA-Capability-v920-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-EUTRA-Capability-v940-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-EUTRA-Capability.c (100%) rename lte/rrc/{asn => lib/asn/src}/UE-TimersAndConstants.c (100%) rename lte/rrc/{asn => lib/asn/src}/UECapabilityEnquiry-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UECapabilityEnquiry-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UECapabilityEnquiry.c (100%) rename lte/rrc/{asn => lib/asn/src}/UECapabilityInformation-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UECapabilityInformation-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UECapabilityInformation.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationRequest-r9-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationRequest-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationRequest-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationRequest-v930-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationResponse-r9-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationResponse-r9.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationResponse-v1020-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UEInformationResponse-v930-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UERadioAccessCapabilityInformation-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/UERadioAccessCapabilityInformation.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-AM-RLC.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-CCCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-CCCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-CyclicPrefixLength.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-DCCH-Message.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-DCCH-MessageType.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-ReferenceSignalsPUSCH.c (100%) rename lte/rrc/{asn => lib/asn/src}/UL-UM-RLC.c (100%) rename lte/rrc/{asn => lib/asn/src}/ULHandoverPreparationTransfer-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/ULHandoverPreparationTransfer-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/ULHandoverPreparationTransfer.c (100%) rename lte/rrc/{asn => lib/asn/src}/ULInformationTransfer-r8-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/ULInformationTransfer-v8a0-IEs.c (100%) rename lte/rrc/{asn => lib/asn/src}/ULInformationTransfer.c (100%) rename lte/rrc/{asn => lib/asn/src}/UplinkPowerControlCommon-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/UplinkPowerControlCommon.c (100%) rename lte/rrc/{asn => lib/asn/src}/UplinkPowerControlCommonSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/UplinkPowerControlDedicated-v1020.c (100%) rename lte/rrc/{asn => lib/asn/src}/UplinkPowerControlDedicated.c (100%) rename lte/rrc/{asn => lib/asn/src}/UplinkPowerControlDedicatedSCell-r10.c (100%) rename lte/rrc/{asn => lib/asn/src}/VarMeasConfig.c (100%) rename lte/rrc/{asn => lib/asn/src}/VarMeasReport.c (100%) rename lte/rrc/{asn => lib/asn/src}/VarMeasReportList.c (100%) rename lte/rrc/{asn => lib/asn/src}/VarShortMAC-Input.c (100%) rename lte/rrc/{asn => lib/asn/src}/asn_SEQUENCE_OF.c (100%) rename lte/rrc/{asn => lib/asn/src}/asn_SET_OF.c (100%) rename lte/rrc/{asn => lib/asn/src}/asn_codecs_prim.c (100%) rename lte/rrc/{asn => lib/asn/src}/ber_decoder.c (100%) rename lte/rrc/{asn => lib/asn/src}/ber_tlv_length.c (100%) rename lte/rrc/{asn => lib/asn/src}/ber_tlv_tag.c (100%) rename lte/rrc/{asn => lib/asn/src}/constr_CHOICE.c (100%) rename lte/rrc/{asn => lib/asn/src}/constr_SEQUENCE.c (100%) rename lte/rrc/{asn => lib/asn/src}/constr_SEQUENCE_OF.c (100%) rename lte/rrc/{asn => lib/asn/src}/constr_SET_OF.c (100%) rename lte/rrc/{asn => lib/asn/src}/constr_TYPE.c (100%) rename lte/rrc/{asn => lib/asn/src}/constraints.c (100%) rename lte/rrc/{asn => lib/asn/src}/converter-sample.c (100%) rename lte/rrc/{asn => lib/asn/src}/der_encoder.c (100%) rename lte/rrc/{asn => lib/asn/src}/per_decoder.c (100%) rename lte/rrc/{asn => lib/asn/src}/per_encoder.c (100%) rename lte/rrc/{asn => lib/asn/src}/per_opentype.c (100%) rename lte/rrc/{asn => lib/asn/src}/per_support.c (100%) rename lte/rrc/{asn => lib/asn/src}/xer_decoder.c (100%) rename lte/rrc/{asn => lib/asn/src}/xer_encoder.c (100%) rename lte/rrc/{asn => lib/asn/src}/xer_support.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0be5f898b..de8f506c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ CONFIGURE_FILE( SET(RUNTIME_DIR bin) SET(LIBRARY_DIR lib) SET(INCLUDE_DIR include) +SET(MEX_DIR mex) SET(DOC_DIR "share/doc/${CPACK_PACKAGE_NAME}") SET(DATA_DIR share/${CPACK_PACKAGE_NAME}) @@ -153,7 +154,7 @@ MESSAGE(STATUS "Building for version: ${VERSION}") INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/common/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/phy/include/) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/include/) -INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/asn/) +INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lte/rrc/include/liblte/rrc/asn) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/cuhd/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mex/include) INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/graphics/include) diff --git a/cmake/modules/BuildMex.cmake b/cmake/modules/BuildMex.cmake index 03b4a336c..ce5ce6c3d 100644 --- a/cmake/modules/BuildMex.cmake +++ b/cmake/modules/BuildMex.cmake @@ -42,7 +42,7 @@ FUNCTION(BuildMex) COMPILE_FLAGS "-fvisibility=default ${MATLAB_MEX_CFLAGS}" ) target_link_libraries(${BuildMex_MEXNAME}-mat ${BuildMex_LIBRARIES} ${MATLAB_MEX_LIBRARY}) - install(TARGETS ${BuildMex_MEXNAME}-mat DESTINATION mex) + install(TARGETS ${BuildMex_MEXNAME}-mat DESTINATION "${MEX_DIR}/liblte/") endif(MATLAB_FOUND) if (OCTAVE_FOUND) add_library(${BuildMex_MEXNAME}-oct SHARED ${BuildMex_SOURCES}) @@ -54,7 +54,7 @@ FUNCTION(BuildMex) COMPILE_FLAGS "-fvisibility=default ${OCTAVE_MEX_CFLAGS} -DUNDEF_BOOL" ) target_link_libraries(${BuildMex_MEXNAME}-oct ${BuildMex_LIBRARIES} ${OCTAVE_LIBRARIES}) - install(TARGETS ${BuildMex_MEXNAME}-oct DESTINATION mex) + install(TARGETS ${BuildMex_MEXNAME}-oct DESTINATION "${MEX_DIR}/liblte/") endif (OCTAVE_FOUND) ENDFUNCTION(BuildMex) diff --git a/cmake/modules/FindVolk.cmake b/cmake/modules/FindVolk.cmake index 6603139b9..f7db6f988 100644 --- a/cmake/modules/FindVolk.cmake +++ b/cmake/modules/FindVolk.cmake @@ -25,104 +25,108 @@ FIND_LIBRARY( ) # Some functions are not defined in old volk versions -SET(CMAKE_REQUIRED_LIBRARIES ${VOLK_LIBRARIES} m) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_index_max_16u HAVE_VOLK_MAX_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_accumulator_s32f HAVE_VOLK_ACC_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32fc_multiply_32fc HAVE_VOLK_MULT_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_conjugate_32fc HAVE_VOLK_CONJ_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_multiply_32fc HAVE_VOLK_MULT2_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_multiply_conjugate_32fc HAVE_VOLK_MULT2_CONJ_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_multiply_32fc HAVE_VOLK_MULT_REAL_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_multiply_32f HAVE_VOLK_MULT_FLOAT_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_32f HAVE_VOLK_MAG_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_squared_32f HAVE_VOLK_MAG_SQUARE_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_divide_32f HAVE_VOLK_DIVIDE_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_dot_prod_32fc HAVE_VOLK_DOTPROD_FC_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_dot_prod_32fc HAVE_VOLK_DOTPROD_CFC_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_conjugate_dot_prod_32fc HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_dot_prod_32f HAVE_VOLK_DOTPROD_F_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32f_atan2_32f HAVE_VOLK_ATAN_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_convert_16i HAVE_VOLK_CONVERT_FI_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_32f_x2 HAVE_VOLK_DEINTERLEAVE_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_interleave_32fc HAVE_VOLK_INTERLEAVE_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_subtract_32f HAVE_VOLK_SUB_FLOAT_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_add_32f HAVE_VOLK_ADD_FLOAT_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_square_dist_32f HAVE_VOLK_SQUARE_DIST_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_real_32f HAVE_VOLK_DEINTERLEAVE_FUNCTION) -CHECK_FUNCTION_EXISTS_MATH(volk_32fc_index_max_16u HAVE_VOLK_MAX_ABS_FUNCTION) + + +IF(${VOLK_FOUND}) + SET(CMAKE_REQUIRED_LIBRARIES ${VOLK_LIBRARIES} m) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_index_max_16u HAVE_VOLK_MAX_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_accumulator_s32f HAVE_VOLK_ACC_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32fc_multiply_32fc HAVE_VOLK_MULT_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_conjugate_32fc HAVE_VOLK_CONJ_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_multiply_32fc HAVE_VOLK_MULT2_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_multiply_conjugate_32fc HAVE_VOLK_MULT2_CONJ_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_multiply_32fc HAVE_VOLK_MULT_REAL_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_multiply_32f HAVE_VOLK_MULT_FLOAT_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_32f HAVE_VOLK_MAG_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_magnitude_squared_32f HAVE_VOLK_MAG_SQUARE_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_divide_32f HAVE_VOLK_DIVIDE_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_dot_prod_32fc HAVE_VOLK_DOTPROD_FC_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_32f_dot_prod_32fc HAVE_VOLK_DOTPROD_CFC_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_conjugate_dot_prod_32fc HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_dot_prod_32f HAVE_VOLK_DOTPROD_F_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_s32f_atan2_32f HAVE_VOLK_ATAN_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_s32f_convert_16i HAVE_VOLK_CONVERT_FI_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_32f_x2 HAVE_VOLK_DEINTERLEAVE_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_interleave_32fc HAVE_VOLK_INTERLEAVE_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_subtract_32f HAVE_VOLK_SUB_FLOAT_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32f_x2_add_32f HAVE_VOLK_ADD_FLOAT_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_x2_square_dist_32f HAVE_VOLK_SQUARE_DIST_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_deinterleave_real_32f HAVE_VOLK_DEINTERLEAVE_FUNCTION) + CHECK_FUNCTION_EXISTS_MATH(volk_32fc_index_max_16u HAVE_VOLK_MAX_ABS_FUNCTION) -SET(VOLK_DEFINITIONS "HAVE_VOLK") -IF(${HAVE_VOLK_MAX_ABS_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_ABS_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MAG_SQUARE_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAG_SQUARE_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_SQUARE_DIST_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SQUARE_DIST_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_DEINTERLEAVE_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DEINTERLEAVE_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_INTERLEAVE_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_INTERLEAVE_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_SUB_FLOAT_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SUB_FLOAT_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_ADD_FLOAT_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ADD_FLOAT_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MULT2_CONJ_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT2_CONJ_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_DEINTERLEAVE_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DEINTERLEAVE_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_CONVERT_FI_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_CONVERT_FI_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MAX_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_ACC_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ACC_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MULT_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_CONJ_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_CONJ_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MULT2_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT2_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MULT_FLOAT_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT_FLOAT_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MULT_REAL_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT_REAL_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_MAG_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAG_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_DIVIDE_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DIVIDE_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_DOTPROD_FC_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_FC_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_DOTPROD_F_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_F_FUNCTION") -ENDIF() -IF(${HAVE_VOLK_ATAN_FUNCTION}) - SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ATAN_FUNCTION") -ENDIF() -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) -MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_DEFINITIONS) + SET(VOLK_DEFINITIONS "HAVE_VOLK") + IF(${HAVE_VOLK_MAX_ABS_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_ABS_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_CONJ_FC_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MAG_SQUARE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAG_SQUARE_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_SQUARE_DIST_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SQUARE_DIST_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_DEINTERLEAVE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DEINTERLEAVE_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_INTERLEAVE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_INTERLEAVE_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_SUB_FLOAT_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_SUB_FLOAT_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_ADD_FLOAT_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ADD_FLOAT_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MULT2_CONJ_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT2_CONJ_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_DEINTERLEAVE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DEINTERLEAVE_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_CONVERT_FI_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_CONVERT_FI_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MAX_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAX_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_ACC_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ACC_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MULT_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_CONJ_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_CONJ_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MULT2_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT2_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MULT_FLOAT_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT_FLOAT_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MULT_REAL_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MULT_REAL_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_MAG_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_MAG_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_DIVIDE_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DIVIDE_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_DOTPROD_FC_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_FC_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_DOTPROD_F_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_DOTPROD_F_FUNCTION") + ENDIF() + IF(${HAVE_VOLK_ATAN_FUNCTION}) + SET(VOLK_DEFINITIONS "${VOLK_DEFINITIONS}; HAVE_VOLK_ATAN_FUNCTION") + ENDIF() + INCLUDE(FindPackageHandleStandardArgs) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS) + MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS VOLK_DEFINITIONS) +ENDIF(${VOLK_FOUND}) \ No newline at end of file diff --git a/lte/examples/CMakeLists.txt b/lte/examples/CMakeLists.txt index 402f3b0f1..d8e47be73 100644 --- a/lte/examples/CMakeLists.txt +++ b/lte/examples/CMakeLists.txt @@ -51,27 +51,24 @@ LIST(FIND OPTIONAL_LIBS graphics GRAPHICS_FIND) # These two can be compiled without UHD or graphics support ################################################################# -add_executable(pdsch_ue pdsch_ue.c cuhd_utils.c) -target_link_libraries(pdsch_ue lte_rrc lte_phy) -add_executable(pdsch_enodeb pdsch_enodeb.c) -target_link_libraries(pdsch_enodeb lte_rrc lte_phy) -IF(${CUHD_FIND} EQUAL -1) - SET_TARGET_PROPERTIES(pdsch_ue PROPERTIES COMPILE_DEFINITIONS "DISABLE_UHD") - SET_TARGET_PROPERTIES(pdsch_enodeb PROPERTIES COMPILE_DEFINITIONS "DISABLE_UHD") -ELSE(${CUHD_FIND} EQUAL -1) - target_link_libraries(pdsch_ue cuhd) - target_link_libraries(pdsch_enodeb cuhd) -ENDIF(${CUHD_FIND} EQUAL -1) +IF(${CUHD_FIND} GREATER -1) + add_executable(pdsch_ue pdsch_ue.c cuhd_utils.c) + target_link_libraries(pdsch_ue lte_rrc lte_phy cuhd) + + add_executable(pdsch_enodeb pdsch_enodeb.c) + target_link_libraries(pdsch_enodeb lte_rrc lte_phy cuhd) -IF(${GRAPHICS_FIND} EQUAL -1) - SET_TARGET_PROPERTIES(pdsch_ue PROPERTIES COMPILE_DEFINITIONS "DISABLE_GRAPHICS") - SET_TARGET_PROPERTIES(pdsch_enodeb PROPERTIES COMPILE_DEFINITIONS "DISABLE_GRAPHICS") -ELSE(${GRAPHICS_FIND} EQUAL -1) - target_link_libraries(pdsch_ue graphics) - target_link_libraries(pdsch_enodeb graphics) -ENDIF(${GRAPHICS_FIND} EQUAL -1) + IF(${GRAPHICS_FIND} EQUAL -1) + SET_TARGET_PROPERTIES(pdsch_ue PROPERTIES COMPILE_DEFINITIONS "DISABLE_GRAPHICS") + SET_TARGET_PROPERTIES(pdsch_enodeb PROPERTIES COMPILE_DEFINITIONS "DISABLE_GRAPHICS") + ELSE(${GRAPHICS_FIND} EQUAL -1) + target_link_libraries(pdsch_ue graphics) + target_link_libraries(pdsch_enodeb graphics) + ENDIF(${GRAPHICS_FIND} EQUAL -1) + +ENDIF(${CUHD_FIND} GREATER -1) diff --git a/lte/phy/CMakeLists.txt b/lte/phy/CMakeLists.txt index d470c4ec0..2b8d2b62d 100644 --- a/lte/phy/CMakeLists.txt +++ b/lte/phy/CMakeLists.txt @@ -39,7 +39,7 @@ FOREACH (_header ${headers}) LIST(APPEND HEADERS_ALL ${tmp}) ENDIF(IS_DIRECTORY ${_header}) ENDFOREACH() -ADD_CUSTOM_TARGET (add_lte_headers SOURCES ${HEADERS_ALL}) +ADD_CUSTOM_TARGET (add_lte_phy_headers SOURCES ${HEADERS_ALL}) ######################################################################## # Add subdirectories diff --git a/lte/phy/lib/common/test/fft_test.c b/lte/phy/lib/common/test/fft_test.c index 74f14f311..407d80b3c 100644 --- a/lte/phy/lib/common/test/fft_test.c +++ b/lte/phy/lib/common/test/fft_test.c @@ -102,10 +102,13 @@ int main(int argc, char **argv) { fprintf(stderr, "Error initializing FFT\n"); exit(-1); } + dft_plan_set_norm(&fft.fft_plan, true); + if (lte_ifft_init(&ifft, cp, n_prb)) { fprintf(stderr, "Error initializing iFFT\n"); exit(-1); } + dft_plan_set_norm(&ifft.fft_plan, true); for (i=0;i NOF_INPUTS) { cf_t *cearray; - mexutils_read_cf(prhs[NOF_INPUTS], &cearray); + nof_re = mexutils_read_cf(prhs[NOF_INPUTS], &cearray); for (i=0;i -#include -#include -#include -#include -#include - -#include "liblte/phy/phy.h" - -#define N_TESTS 10 - - -const lte_cp_t test_re_cp[N_TESTS] = {CPNORM, CPNORM, CPNORM, CPNORM, CPNORM, CPNORM, CPEXT, CPEXT, CPEXT, CPEXT}; -const int test_re_ports[N_TESTS] = {1, 1, 1, 2, 4, 4, 1, 4, 1, 4}; -const int test_re_csymb[N_TESTS] = {2, 1, 3, 3, 1, 3, 2, 2, 1, 2}; -const int test_re_prb[N_TESTS] = {6, 15, 15, 15, 15, 15, 6, 6, 15, 15}; -const int test_re_num[N_TESTS][3] = { - {408, 684, 828 }, // sf 0, 5 and the rest - {1830, 2106, 2250}, - {1470, 1746, 1890}, - {1392, 1656, 1800}, - {1656, 1896, 2040}, - {1356, 1596, 1740}, - {276, 540, 684}, - {264, 480, 624}, - {1482, 1746, 1890}, - {1200, 1416, 1560} -}; - -cf_t in[200000], out[200000]; - -int main(int argc, char **argv) { - int i, n, np, r; - ra_prb_t prb_alloc; - int ret = -1; - pdsch_t pdsch; - lte_cell_t cell; - - while (getopt(argc, argv, "v") == 'v') { - verbose++; - } - - for (i=0;i<110;i++) { - prb_alloc.slot[0].prb_idx[i] = i; - prb_alloc.slot[1].prb_idx[i] = i; - } - - for (i=0;i -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "liblte/phy/phy.h" - -#include "liblte/cuhd/cuhd.h" -void *uhd; - -#ifndef DISABLE_GRAPHICS -#include "liblte/graphics/plot.h" -plot_real_t poutfft; -#endif - -int nof_frames = -1; -float threshold = -1.0; -int N_id_2 = -1; -uint32_t nof_prb = 6; - -float uhd_freq = 0.0, uhd_gain = 20.0; -char *uhd_args = ""; -int disable_plots = 0; - -void usage(char *prog) { - printf("Usage: %s [agntdpv] -f uhd_freq -i N_id_2\n", prog); - printf("\t-a UHD args [Default %s]\n", uhd_args); - printf("\t-g UHD RX gain [Default %.2f dB]\n", uhd_gain); - printf("\t-n nof_frames [Default infinite]\n"); - printf("\t-p nof_prb [Default %d]\n", nof_prb); - printf("\t-t threshold [Default %.2f]\n",threshold); - -#ifndef DISABLE_GRAPHICS - printf("\t-d disable plots [Default enabled]\n"); -#endif - printf("\t-v [set verbose to debug, default none]\n"); -} - -void parse_args(int argc, char **argv) { - int opt; - while ((opt = getopt(argc, argv, "agntdvfip")) != -1) { - switch (opt) { - case 'i': - N_id_2 = atoi(argv[optind]); - break; - case 'p': - nof_prb = atoi(argv[optind]); - break; - case 'n': - nof_frames = atoi(argv[optind]); - break; - case 'a': - uhd_args = argv[optind]; - break; - case 'g': - uhd_gain = atof(argv[optind]); - break; - case 'f': - uhd_freq = atof(argv[optind]); - break; - case 't': - threshold = atof(argv[optind]); - break; - case 'd': - disable_plots = 1; - break; - case 'v': - verbose++; - break; - default: - usage(argv[0]); - exit(-1); - } - } - if (uhd_freq == 0.0 || N_id_2 == -1) { - usage(argv[0]); - exit(-1); - } -} - -void input_init() { - - printf("Opening UHD device...\n"); - if (cuhd_open(uhd_args, &uhd)) { - fprintf(stderr, "Error opening uhd\n"); - exit(-1); - } - cuhd_set_rx_gain(uhd, uhd_gain); - - /* set uhd_freq */ - cuhd_set_rx_freq(uhd, (double) uhd_freq); - cuhd_rx_wait_lo_locked(uhd); - DEBUG("Set uhd_freq to %.3f MHz\n", (double ) uhd_freq/1000000); - - int srate = lte_sampling_freq_hz(nof_prb); - if (srate > 0) { - cuhd_set_rx_srate(uhd, (double) srate); - } else { - fprintf(stderr, "Error invalid nof_prb=%d\n",nof_prb); - } - DEBUG("Starting receiver...\n", 0); - cuhd_start_rx_stream(uhd); - -} - -int cuhd_recv_wrapper(void *h, void *data, uint32_t nsamples) { - DEBUG(" ---- Receive %d samples ---- \n", nsamples); - return cuhd_recv(h, data, nsamples, 1); -} - -#ifndef DISABLE_GRAPHICS - -void init_plots() { - plot_init(); - - plot_real_init(&poutfft); - plot_real_setTitle(&poutfft, "Output FFT - Magnitude"); - plot_real_setLabels(&poutfft, "Index", "dB"); - plot_real_setYAxisScale(&poutfft, -60, 0); - -} - -#endif - -float tmp_plot[100000]; - -int main(int argc, char **argv) { - cf_t *input_buffer, *sf_symbols = NULL; - int frame_cnt; - ue_sync_t s; - int pos; - pss_synch_t pss; - float peak; - struct timeval t[3]; - float mean_ce_time=0; - lte_fft_t fft; - lte_cell_t cell; - - bzero(&cell, sizeof(lte_cell_t)); - - parse_args(argc, argv); - - #ifndef DISABLE_GRAPHICS - if (!disable_plots) { - init_plots(); - } - #endif - - input_init(); - - cell.cp = CPNORM; - cell.id = N_id_2; - cell.nof_ports = 1; - cell.nof_prb = nof_prb; - - if (ue_sync_init(&s, cell, cuhd_recv_wrapper, uhd)) { - fprintf(stderr, "Error initiating UE sync module\n"); - exit(-1); - } - - pss_synch_init_fft(&pss, - SF_LEN(lte_symbol_sz(cell.nof_prb)), - lte_symbol_sz(cell.nof_prb)); - pss_synch_set_N_id_2(&pss, cell.id%3); - sf_symbols = vec_malloc(SLOT_LEN_RE(cell.nof_prb, cell.cp) * sizeof(cf_t)); - if (!sf_symbols) { - perror("malloc"); - exit(-1); - } - lte_fft_init(&fft, cell.cp, cell.nof_prb); - - frame_cnt = 0; - mean_ce_time=0; - uint32_t valid_frames=0; - //uint32_t unaligned = 0; - while (frame_cnt < nof_frames || nof_frames == -1) { - - int n = ue_sync_get_buffer(&s, &input_buffer); - if (n < 0) { - fprintf(stderr, "Error calling sync work()\n"); - exit(-1); - } - - if (n == 1 && ue_sync_get_sfidx(&s) == 0) { - - mean_ce_time = (float) (mean_ce_time + (float) t[0].tv_usec * valid_frames) / (valid_frames+1); - valid_frames++; - - #ifndef DISABLE_GRAPHICS - if (!disable_plots && !(valid_frames % 5) && sf_symbols) { - - /* Run FFT for the second slot */ - lte_fft_run_slot(&fft, input_buffer, sf_symbols); - - int i; - int nof_re = SLOT_LEN_RE(cell.nof_prb, cell.cp); - for (i = 0; i < nof_re; i++) { - tmp_plot[i] = 10 * log10f(cabsf(sf_symbols[i])); - if (isinf(tmp_plot[i])) { - tmp_plot[i] = -80; - } - } - plot_real_setNewData(&poutfft, tmp_plot, nof_re); - } - #endif - - pos = pss_synch_find_pss(&pss, input_buffer, &peak); - printf("CELL_ID: %3d CFO: %+.4f KHz, SFO: %+.4f Khz, TimeOffset: %4d\r", - sync_get_cell_id(&s.sfind), ue_sync_get_cfo(&s)/1000, ue_sync_get_sfo(&s)/1000, pos); - fflush(stdout); - if (VERBOSE_ISINFO()) { - printf("\n"); - } - } - - frame_cnt++; - } - - printf("\nBye\n"); - exit(0); -} - - diff --git a/lte/rrc/CMakeLists.txt b/lte/rrc/CMakeLists.txt index 85151e5c6..c1e2faf49 100644 --- a/lte/rrc/CMakeLists.txt +++ b/lte/rrc/CMakeLists.txt @@ -27,11 +27,6 @@ INSTALL(DIRECTORY include/ FILES_MATCHING PATTERN "*.h" PATTERN ".svn" EXCLUDE ) -INSTALL(DIRECTORY asn/ - DESTINATION "${INCLUDE_DIR}" - FILES_MATCHING PATTERN "*.h" - PATTERN ".svn" EXCLUDE -) ######################################################################## # Add headers to cmake project (useful for IDEs) @@ -50,5 +45,4 @@ ADD_CUSTOM_TARGET (add_lte_rrc_headers SOURCES ${HEADERS_ALL}) ######################################################################## # Add subdirectories ######################################################################## -add_subdirectory(asn) add_subdirectory(lib) diff --git a/lte/rrc/asn/CMakeLists.txt b/lte/rrc/asn/CMakeLists.txt deleted file mode 100755 index fbd147313..000000000 --- a/lte/rrc/asn/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# Copyright 2012-2013 The libLTE Developers. See the -# COPYRIGHT file at the top-level directory of this distribution. -# -# This file is part of the libLTE library. -# -# libLTE is free software: you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# libLTE is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# A copy of the GNU Lesser General Public License can be found in -# the LICENSE file in the top-level directory of this distribution -# and at http://www.gnu.org/licenses/. -# - -FILE(GLOB RRC_ASN_SOURCES *.c) -INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../include/liblte/rrc/asn/") -ADD_LIBRARY(rrc_asn SHARED ${RRC_ASN_SOURCES}) -SET(CMAKE_C_FLAGS "-std=c99 -D_GNU_SOURCE -w") -INSTALL(TARGETS rrc_asn DESTINATION ${LIBRARY_DIR}) -LIBLTE_SET_PIC(rrc_asn) diff --git a/lte/rrc/asn/AC-BarringConfig.h b/lte/rrc/include/liblte/rrc/asn/AC-BarringConfig.h similarity index 100% rename from lte/rrc/asn/AC-BarringConfig.h rename to lte/rrc/include/liblte/rrc/asn/AC-BarringConfig.h diff --git a/lte/rrc/asn/AC-BarringConfig1XRTT-r9.h b/lte/rrc/include/liblte/rrc/asn/AC-BarringConfig1XRTT-r9.h similarity index 100% rename from lte/rrc/asn/AC-BarringConfig1XRTT-r9.h rename to lte/rrc/include/liblte/rrc/asn/AC-BarringConfig1XRTT-r9.h diff --git a/lte/rrc/asn/ARFCN-ValueCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/ARFCN-ValueCDMA2000.h similarity index 100% rename from lte/rrc/asn/ARFCN-ValueCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/ARFCN-ValueCDMA2000.h diff --git a/lte/rrc/asn/ARFCN-ValueEUTRA.h b/lte/rrc/include/liblte/rrc/asn/ARFCN-ValueEUTRA.h similarity index 100% rename from lte/rrc/asn/ARFCN-ValueEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/ARFCN-ValueEUTRA.h diff --git a/lte/rrc/asn/ARFCN-ValueGERAN.h b/lte/rrc/include/liblte/rrc/asn/ARFCN-ValueGERAN.h similarity index 100% rename from lte/rrc/asn/ARFCN-ValueGERAN.h rename to lte/rrc/include/liblte/rrc/asn/ARFCN-ValueGERAN.h diff --git a/lte/rrc/asn/ARFCN-ValueUTRA.h b/lte/rrc/include/liblte/rrc/asn/ARFCN-ValueUTRA.h similarity index 100% rename from lte/rrc/asn/ARFCN-ValueUTRA.h rename to lte/rrc/include/liblte/rrc/asn/ARFCN-ValueUTRA.h diff --git a/lte/rrc/asn/AS-Config.h b/lte/rrc/include/liblte/rrc/asn/AS-Config.h similarity index 100% rename from lte/rrc/asn/AS-Config.h rename to lte/rrc/include/liblte/rrc/asn/AS-Config.h diff --git a/lte/rrc/asn/AS-Context.h b/lte/rrc/include/liblte/rrc/asn/AS-Context.h similarity index 100% rename from lte/rrc/asn/AS-Context.h rename to lte/rrc/include/liblte/rrc/asn/AS-Context.h diff --git a/lte/rrc/asn/AbsoluteTimeInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/AbsoluteTimeInfo-r10.h similarity index 100% rename from lte/rrc/asn/AbsoluteTimeInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/AbsoluteTimeInfo-r10.h diff --git a/lte/rrc/asn/AccessStratumRelease.h b/lte/rrc/include/liblte/rrc/asn/AccessStratumRelease.h similarity index 100% rename from lte/rrc/asn/AccessStratumRelease.h rename to lte/rrc/include/liblte/rrc/asn/AccessStratumRelease.h diff --git a/lte/rrc/asn/AdditionalReestabInfo.h b/lte/rrc/include/liblte/rrc/asn/AdditionalReestabInfo.h similarity index 100% rename from lte/rrc/asn/AdditionalReestabInfo.h rename to lte/rrc/include/liblte/rrc/asn/AdditionalReestabInfo.h diff --git a/lte/rrc/asn/AdditionalReestabInfoList.h b/lte/rrc/include/liblte/rrc/asn/AdditionalReestabInfoList.h similarity index 100% rename from lte/rrc/asn/AdditionalReestabInfoList.h rename to lte/rrc/include/liblte/rrc/asn/AdditionalReestabInfoList.h diff --git a/lte/rrc/asn/AdditionalSI-Info-r9.h b/lte/rrc/include/liblte/rrc/asn/AdditionalSI-Info-r9.h similarity index 100% rename from lte/rrc/asn/AdditionalSI-Info-r9.h rename to lte/rrc/include/liblte/rrc/asn/AdditionalSI-Info-r9.h diff --git a/lte/rrc/asn/AdditionalSpectrumEmission.h b/lte/rrc/include/liblte/rrc/asn/AdditionalSpectrumEmission.h similarity index 100% rename from lte/rrc/asn/AdditionalSpectrumEmission.h rename to lte/rrc/include/liblte/rrc/asn/AdditionalSpectrumEmission.h diff --git a/lte/rrc/asn/AllowedMeasBandwidth.h b/lte/rrc/include/liblte/rrc/asn/AllowedMeasBandwidth.h similarity index 100% rename from lte/rrc/asn/AllowedMeasBandwidth.h rename to lte/rrc/include/liblte/rrc/asn/AllowedMeasBandwidth.h diff --git a/lte/rrc/asn/AntennaInfoCommon.h b/lte/rrc/include/liblte/rrc/asn/AntennaInfoCommon.h similarity index 100% rename from lte/rrc/asn/AntennaInfoCommon.h rename to lte/rrc/include/liblte/rrc/asn/AntennaInfoCommon.h diff --git a/lte/rrc/asn/AntennaInfoDedicated-r10.h b/lte/rrc/include/liblte/rrc/asn/AntennaInfoDedicated-r10.h similarity index 100% rename from lte/rrc/asn/AntennaInfoDedicated-r10.h rename to lte/rrc/include/liblte/rrc/asn/AntennaInfoDedicated-r10.h diff --git a/lte/rrc/asn/AntennaInfoDedicated-v920.h b/lte/rrc/include/liblte/rrc/asn/AntennaInfoDedicated-v920.h similarity index 100% rename from lte/rrc/asn/AntennaInfoDedicated-v920.h rename to lte/rrc/include/liblte/rrc/asn/AntennaInfoDedicated-v920.h diff --git a/lte/rrc/asn/AntennaInfoDedicated.h b/lte/rrc/include/liblte/rrc/asn/AntennaInfoDedicated.h similarity index 100% rename from lte/rrc/asn/AntennaInfoDedicated.h rename to lte/rrc/include/liblte/rrc/asn/AntennaInfoDedicated.h diff --git a/lte/rrc/asn/AntennaInfoUL-r10.h b/lte/rrc/include/liblte/rrc/asn/AntennaInfoUL-r10.h similarity index 100% rename from lte/rrc/asn/AntennaInfoUL-r10.h rename to lte/rrc/include/liblte/rrc/asn/AntennaInfoUL-r10.h diff --git a/lte/rrc/asn/AreaConfiguration-r10.h b/lte/rrc/include/liblte/rrc/asn/AreaConfiguration-r10.h similarity index 100% rename from lte/rrc/asn/AreaConfiguration-r10.h rename to lte/rrc/include/liblte/rrc/asn/AreaConfiguration-r10.h diff --git a/lte/rrc/asn/BCCH-BCH-Message.h b/lte/rrc/include/liblte/rrc/asn/BCCH-BCH-Message.h similarity index 100% rename from lte/rrc/asn/BCCH-BCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/BCCH-BCH-Message.h diff --git a/lte/rrc/asn/BCCH-BCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/BCCH-BCH-MessageType.h similarity index 100% rename from lte/rrc/asn/BCCH-BCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/BCCH-BCH-MessageType.h diff --git a/lte/rrc/asn/BCCH-Config.h b/lte/rrc/include/liblte/rrc/asn/BCCH-Config.h similarity index 100% rename from lte/rrc/asn/BCCH-Config.h rename to lte/rrc/include/liblte/rrc/asn/BCCH-Config.h diff --git a/lte/rrc/asn/BCCH-DL-SCH-Message.h b/lte/rrc/include/liblte/rrc/asn/BCCH-DL-SCH-Message.h similarity index 100% rename from lte/rrc/asn/BCCH-DL-SCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/BCCH-DL-SCH-Message.h diff --git a/lte/rrc/asn/BCCH-DL-SCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/BCCH-DL-SCH-MessageType.h similarity index 100% rename from lte/rrc/asn/BCCH-DL-SCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/BCCH-DL-SCH-MessageType.h diff --git a/lte/rrc/asn/BIT_STRING.h b/lte/rrc/include/liblte/rrc/asn/BIT_STRING.h similarity index 100% rename from lte/rrc/asn/BIT_STRING.h rename to lte/rrc/include/liblte/rrc/asn/BIT_STRING.h diff --git a/lte/rrc/asn/BOOLEAN.h b/lte/rrc/include/liblte/rrc/asn/BOOLEAN.h similarity index 100% rename from lte/rrc/asn/BOOLEAN.h rename to lte/rrc/include/liblte/rrc/asn/BOOLEAN.h diff --git a/lte/rrc/asn/BandClassInfoCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/BandClassInfoCDMA2000.h similarity index 100% rename from lte/rrc/asn/BandClassInfoCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/BandClassInfoCDMA2000.h diff --git a/lte/rrc/asn/BandClassListCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/BandClassListCDMA2000.h similarity index 100% rename from lte/rrc/asn/BandClassListCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/BandClassListCDMA2000.h diff --git a/lte/rrc/asn/BandClassPriority1XRTT.h b/lte/rrc/include/liblte/rrc/asn/BandClassPriority1XRTT.h similarity index 100% rename from lte/rrc/asn/BandClassPriority1XRTT.h rename to lte/rrc/include/liblte/rrc/asn/BandClassPriority1XRTT.h diff --git a/lte/rrc/asn/BandClassPriorityHRPD.h b/lte/rrc/include/liblte/rrc/asn/BandClassPriorityHRPD.h similarity index 100% rename from lte/rrc/asn/BandClassPriorityHRPD.h rename to lte/rrc/include/liblte/rrc/asn/BandClassPriorityHRPD.h diff --git a/lte/rrc/asn/BandClassPriorityList1XRTT.h b/lte/rrc/include/liblte/rrc/asn/BandClassPriorityList1XRTT.h similarity index 100% rename from lte/rrc/asn/BandClassPriorityList1XRTT.h rename to lte/rrc/include/liblte/rrc/asn/BandClassPriorityList1XRTT.h diff --git a/lte/rrc/asn/BandClassPriorityListHRPD.h b/lte/rrc/include/liblte/rrc/asn/BandClassPriorityListHRPD.h similarity index 100% rename from lte/rrc/asn/BandClassPriorityListHRPD.h rename to lte/rrc/include/liblte/rrc/asn/BandClassPriorityListHRPD.h diff --git a/lte/rrc/asn/BandCombinationListEUTRA-r10.h b/lte/rrc/include/liblte/rrc/asn/BandCombinationListEUTRA-r10.h similarity index 100% rename from lte/rrc/asn/BandCombinationListEUTRA-r10.h rename to lte/rrc/include/liblte/rrc/asn/BandCombinationListEUTRA-r10.h diff --git a/lte/rrc/asn/BandCombinationParameters-r10.h b/lte/rrc/include/liblte/rrc/asn/BandCombinationParameters-r10.h similarity index 100% rename from lte/rrc/asn/BandCombinationParameters-r10.h rename to lte/rrc/include/liblte/rrc/asn/BandCombinationParameters-r10.h diff --git a/lte/rrc/asn/BandIndicatorGERAN.h b/lte/rrc/include/liblte/rrc/asn/BandIndicatorGERAN.h similarity index 100% rename from lte/rrc/asn/BandIndicatorGERAN.h rename to lte/rrc/include/liblte/rrc/asn/BandIndicatorGERAN.h diff --git a/lte/rrc/asn/BandInfoEUTRA.h b/lte/rrc/include/liblte/rrc/asn/BandInfoEUTRA.h similarity index 100% rename from lte/rrc/asn/BandInfoEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/BandInfoEUTRA.h diff --git a/lte/rrc/asn/BandListEUTRA.h b/lte/rrc/include/liblte/rrc/asn/BandListEUTRA.h similarity index 100% rename from lte/rrc/asn/BandListEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/BandListEUTRA.h diff --git a/lte/rrc/asn/BandParameters-r10.h b/lte/rrc/include/liblte/rrc/asn/BandParameters-r10.h similarity index 100% rename from lte/rrc/asn/BandParameters-r10.h rename to lte/rrc/include/liblte/rrc/asn/BandParameters-r10.h diff --git a/lte/rrc/asn/BandParametersDL-r10.h b/lte/rrc/include/liblte/rrc/asn/BandParametersDL-r10.h similarity index 100% rename from lte/rrc/asn/BandParametersDL-r10.h rename to lte/rrc/include/liblte/rrc/asn/BandParametersDL-r10.h diff --git a/lte/rrc/asn/BandParametersUL-r10.h b/lte/rrc/include/liblte/rrc/asn/BandParametersUL-r10.h similarity index 100% rename from lte/rrc/asn/BandParametersUL-r10.h rename to lte/rrc/include/liblte/rrc/asn/BandParametersUL-r10.h diff --git a/lte/rrc/asn/BandclassCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/BandclassCDMA2000.h similarity index 100% rename from lte/rrc/asn/BandclassCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/BandclassCDMA2000.h diff --git a/lte/rrc/asn/BetaOffset-CA-Index.h b/lte/rrc/include/liblte/rrc/asn/BetaOffset-CA-Index.h similarity index 100% rename from lte/rrc/asn/BetaOffset-CA-Index.h rename to lte/rrc/include/liblte/rrc/asn/BetaOffset-CA-Index.h diff --git a/lte/rrc/asn/BlackCellsToAddMod.h b/lte/rrc/include/liblte/rrc/asn/BlackCellsToAddMod.h similarity index 100% rename from lte/rrc/asn/BlackCellsToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/BlackCellsToAddMod.h diff --git a/lte/rrc/asn/BlackCellsToAddModList.h b/lte/rrc/include/liblte/rrc/asn/BlackCellsToAddModList.h similarity index 100% rename from lte/rrc/asn/BlackCellsToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/BlackCellsToAddModList.h diff --git a/lte/rrc/asn/C-RNTI.h b/lte/rrc/include/liblte/rrc/asn/C-RNTI.h similarity index 100% rename from lte/rrc/asn/C-RNTI.h rename to lte/rrc/include/liblte/rrc/asn/C-RNTI.h diff --git a/lte/rrc/asn/CA-BandwidthClass-r10.h b/lte/rrc/include/liblte/rrc/asn/CA-BandwidthClass-r10.h similarity index 100% rename from lte/rrc/asn/CA-BandwidthClass-r10.h rename to lte/rrc/include/liblte/rrc/asn/CA-BandwidthClass-r10.h diff --git a/lte/rrc/asn/CA-MIMO-ParametersDL-r10.h b/lte/rrc/include/liblte/rrc/asn/CA-MIMO-ParametersDL-r10.h similarity index 100% rename from lte/rrc/asn/CA-MIMO-ParametersDL-r10.h rename to lte/rrc/include/liblte/rrc/asn/CA-MIMO-ParametersDL-r10.h diff --git a/lte/rrc/asn/CA-MIMO-ParametersUL-r10.h b/lte/rrc/include/liblte/rrc/asn/CA-MIMO-ParametersUL-r10.h similarity index 100% rename from lte/rrc/asn/CA-MIMO-ParametersUL-r10.h rename to lte/rrc/include/liblte/rrc/asn/CA-MIMO-ParametersUL-r10.h diff --git a/lte/rrc/asn/CA-RNTI.h b/lte/rrc/include/liblte/rrc/asn/CA-RNTI.h similarity index 100% rename from lte/rrc/asn/CA-RNTI.h rename to lte/rrc/include/liblte/rrc/asn/CA-RNTI.h diff --git a/lte/rrc/asn/CA-semiPersistSchedIntervalUL.h b/lte/rrc/include/liblte/rrc/asn/CA-semiPersistSchedIntervalUL.h similarity index 100% rename from lte/rrc/asn/CA-semiPersistSchedIntervalUL.h rename to lte/rrc/include/liblte/rrc/asn/CA-semiPersistSchedIntervalUL.h diff --git a/lte/rrc/asn/CDMA2000-Type.h b/lte/rrc/include/liblte/rrc/asn/CDMA2000-Type.h similarity index 100% rename from lte/rrc/asn/CDMA2000-Type.h rename to lte/rrc/include/liblte/rrc/asn/CDMA2000-Type.h diff --git a/lte/rrc/asn/CQI-ReportAperiodic-r10.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportAperiodic-r10.h similarity index 100% rename from lte/rrc/asn/CQI-ReportAperiodic-r10.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportAperiodic-r10.h diff --git a/lte/rrc/asn/CQI-ReportConfig-r10.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportConfig-r10.h similarity index 100% rename from lte/rrc/asn/CQI-ReportConfig-r10.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportConfig-r10.h diff --git a/lte/rrc/asn/CQI-ReportConfig-v920.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportConfig-v920.h similarity index 100% rename from lte/rrc/asn/CQI-ReportConfig-v920.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportConfig-v920.h diff --git a/lte/rrc/asn/CQI-ReportConfig.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportConfig.h similarity index 100% rename from lte/rrc/asn/CQI-ReportConfig.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportConfig.h diff --git a/lte/rrc/asn/CQI-ReportConfigSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportConfigSCell-r10.h similarity index 100% rename from lte/rrc/asn/CQI-ReportConfigSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportConfigSCell-r10.h diff --git a/lte/rrc/asn/CQI-ReportModeAperiodic.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportModeAperiodic.h similarity index 100% rename from lte/rrc/asn/CQI-ReportModeAperiodic.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportModeAperiodic.h diff --git a/lte/rrc/asn/CQI-ReportPeriodic-r10.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportPeriodic-r10.h similarity index 100% rename from lte/rrc/asn/CQI-ReportPeriodic-r10.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportPeriodic-r10.h diff --git a/lte/rrc/asn/CQI-ReportPeriodic.h b/lte/rrc/include/liblte/rrc/asn/CQI-ReportPeriodic.h similarity index 100% rename from lte/rrc/asn/CQI-ReportPeriodic.h rename to lte/rrc/include/liblte/rrc/asn/CQI-ReportPeriodic.h diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h b/lte/rrc/include/liblte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h similarity index 100% rename from lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h rename to lte/rrc/include/liblte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.h diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT.h b/lte/rrc/include/liblte/rrc/asn/CSFB-RegistrationParam1XRTT.h similarity index 100% rename from lte/rrc/asn/CSFB-RegistrationParam1XRTT.h rename to lte/rrc/include/liblte/rrc/asn/CSFB-RegistrationParam1XRTT.h diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h similarity index 100% rename from lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.h diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.h diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CSFBParametersRequestCDMA2000.h similarity index 100% rename from lte/rrc/asn/CSFBParametersRequestCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CSFBParametersRequestCDMA2000.h diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h similarity index 100% rename from lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.h diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.h diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CSFBParametersResponseCDMA2000.h similarity index 100% rename from lte/rrc/asn/CSFBParametersResponseCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CSFBParametersResponseCDMA2000.h diff --git a/lte/rrc/asn/CSG-AllowedReportingCells-r9.h b/lte/rrc/include/liblte/rrc/asn/CSG-AllowedReportingCells-r9.h similarity index 100% rename from lte/rrc/asn/CSG-AllowedReportingCells-r9.h rename to lte/rrc/include/liblte/rrc/asn/CSG-AllowedReportingCells-r9.h diff --git a/lte/rrc/asn/CSG-Identity.h b/lte/rrc/include/liblte/rrc/asn/CSG-Identity.h similarity index 100% rename from lte/rrc/asn/CSG-Identity.h rename to lte/rrc/include/liblte/rrc/asn/CSG-Identity.h diff --git a/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.h b/lte/rrc/include/liblte/rrc/asn/CSG-ProximityIndicationParameters-r9.h similarity index 100% rename from lte/rrc/asn/CSG-ProximityIndicationParameters-r9.h rename to lte/rrc/include/liblte/rrc/asn/CSG-ProximityIndicationParameters-r9.h diff --git a/lte/rrc/asn/CSI-RS-Config-r10.h b/lte/rrc/include/liblte/rrc/asn/CSI-RS-Config-r10.h similarity index 100% rename from lte/rrc/asn/CSI-RS-Config-r10.h rename to lte/rrc/include/liblte/rrc/asn/CSI-RS-Config-r10.h diff --git a/lte/rrc/asn/CShift.h b/lte/rrc/include/liblte/rrc/asn/CShift.h similarity index 100% rename from lte/rrc/asn/CShift.h rename to lte/rrc/include/liblte/rrc/asn/CShift.h diff --git a/lte/rrc/asn/CarrierBandwidthEUTRA.h b/lte/rrc/include/liblte/rrc/asn/CarrierBandwidthEUTRA.h similarity index 100% rename from lte/rrc/asn/CarrierBandwidthEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/CarrierBandwidthEUTRA.h diff --git a/lte/rrc/asn/CarrierFreqCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqCDMA2000.h similarity index 100% rename from lte/rrc/asn/CarrierFreqCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqCDMA2000.h diff --git a/lte/rrc/asn/CarrierFreqEUTRA.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqEUTRA.h similarity index 100% rename from lte/rrc/asn/CarrierFreqEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqEUTRA.h diff --git a/lte/rrc/asn/CarrierFreqGERAN.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqGERAN.h similarity index 100% rename from lte/rrc/asn/CarrierFreqGERAN.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqGERAN.h diff --git a/lte/rrc/asn/CarrierFreqListUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqListUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/CarrierFreqListUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqListUTRA-FDD.h diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h similarity index 100% rename from lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqListUTRA-TDD-r10.h diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqListUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/CarrierFreqListUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqListUTRA-TDD.h diff --git a/lte/rrc/asn/CarrierFreqUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/CarrierFreqUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqUTRA-FDD.h diff --git a/lte/rrc/asn/CarrierFreqUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/CarrierFreqUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqUTRA-TDD.h diff --git a/lte/rrc/asn/CarrierFreqsGERAN.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqsGERAN.h similarity index 100% rename from lte/rrc/asn/CarrierFreqsGERAN.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqsGERAN.h diff --git a/lte/rrc/asn/CarrierFreqsInfoGERAN.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqsInfoGERAN.h similarity index 100% rename from lte/rrc/asn/CarrierFreqsInfoGERAN.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqsInfoGERAN.h diff --git a/lte/rrc/asn/CarrierFreqsInfoListGERAN.h b/lte/rrc/include/liblte/rrc/asn/CarrierFreqsInfoListGERAN.h similarity index 100% rename from lte/rrc/asn/CarrierFreqsInfoListGERAN.h rename to lte/rrc/include/liblte/rrc/asn/CarrierFreqsInfoListGERAN.h diff --git a/lte/rrc/asn/CellChangeOrder.h b/lte/rrc/include/liblte/rrc/asn/CellChangeOrder.h similarity index 100% rename from lte/rrc/asn/CellChangeOrder.h rename to lte/rrc/include/liblte/rrc/asn/CellChangeOrder.h diff --git a/lte/rrc/asn/CellGlobalIdCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CellGlobalIdCDMA2000.h similarity index 100% rename from lte/rrc/asn/CellGlobalIdCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CellGlobalIdCDMA2000.h diff --git a/lte/rrc/asn/CellGlobalIdEUTRA.h b/lte/rrc/include/liblte/rrc/asn/CellGlobalIdEUTRA.h similarity index 100% rename from lte/rrc/asn/CellGlobalIdEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/CellGlobalIdEUTRA.h diff --git a/lte/rrc/asn/CellGlobalIdGERAN.h b/lte/rrc/include/liblte/rrc/asn/CellGlobalIdGERAN.h similarity index 100% rename from lte/rrc/asn/CellGlobalIdGERAN.h rename to lte/rrc/include/liblte/rrc/asn/CellGlobalIdGERAN.h diff --git a/lte/rrc/asn/CellGlobalIdList-r10.h b/lte/rrc/include/liblte/rrc/asn/CellGlobalIdList-r10.h similarity index 100% rename from lte/rrc/asn/CellGlobalIdList-r10.h rename to lte/rrc/include/liblte/rrc/asn/CellGlobalIdList-r10.h diff --git a/lte/rrc/asn/CellGlobalIdUTRA.h b/lte/rrc/include/liblte/rrc/asn/CellGlobalIdUTRA.h similarity index 100% rename from lte/rrc/asn/CellGlobalIdUTRA.h rename to lte/rrc/include/liblte/rrc/asn/CellGlobalIdUTRA.h diff --git a/lte/rrc/asn/CellIdentity.h b/lte/rrc/include/liblte/rrc/asn/CellIdentity.h similarity index 100% rename from lte/rrc/asn/CellIdentity.h rename to lte/rrc/include/liblte/rrc/asn/CellIdentity.h diff --git a/lte/rrc/asn/CellIndex.h b/lte/rrc/include/liblte/rrc/asn/CellIndex.h similarity index 100% rename from lte/rrc/asn/CellIndex.h rename to lte/rrc/include/liblte/rrc/asn/CellIndex.h diff --git a/lte/rrc/asn/CellIndexList.h b/lte/rrc/include/liblte/rrc/asn/CellIndexList.h similarity index 100% rename from lte/rrc/asn/CellIndexList.h rename to lte/rrc/include/liblte/rrc/asn/CellIndexList.h diff --git a/lte/rrc/asn/CellInfoGERAN-r9.h b/lte/rrc/include/liblte/rrc/asn/CellInfoGERAN-r9.h similarity index 100% rename from lte/rrc/asn/CellInfoGERAN-r9.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoGERAN-r9.h diff --git a/lte/rrc/asn/CellInfoListGERAN-r9.h b/lte/rrc/include/liblte/rrc/asn/CellInfoListGERAN-r9.h similarity index 100% rename from lte/rrc/asn/CellInfoListGERAN-r9.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoListGERAN-r9.h diff --git a/lte/rrc/asn/CellInfoListUTRA-FDD-r9.h b/lte/rrc/include/liblte/rrc/asn/CellInfoListUTRA-FDD-r9.h similarity index 100% rename from lte/rrc/asn/CellInfoListUTRA-FDD-r9.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoListUTRA-FDD-r9.h diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r10.h b/lte/rrc/include/liblte/rrc/asn/CellInfoListUTRA-TDD-r10.h similarity index 100% rename from lte/rrc/asn/CellInfoListUTRA-TDD-r10.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoListUTRA-TDD-r10.h diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r9.h b/lte/rrc/include/liblte/rrc/asn/CellInfoListUTRA-TDD-r9.h similarity index 100% rename from lte/rrc/asn/CellInfoListUTRA-TDD-r9.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoListUTRA-TDD-r9.h diff --git a/lte/rrc/asn/CellInfoUTRA-FDD-r9.h b/lte/rrc/include/liblte/rrc/asn/CellInfoUTRA-FDD-r9.h similarity index 100% rename from lte/rrc/asn/CellInfoUTRA-FDD-r9.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoUTRA-FDD-r9.h diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r10.h b/lte/rrc/include/liblte/rrc/asn/CellInfoUTRA-TDD-r10.h similarity index 100% rename from lte/rrc/asn/CellInfoUTRA-TDD-r10.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoUTRA-TDD-r10.h diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r9.h b/lte/rrc/include/liblte/rrc/asn/CellInfoUTRA-TDD-r9.h similarity index 100% rename from lte/rrc/asn/CellInfoUTRA-TDD-r9.h rename to lte/rrc/include/liblte/rrc/asn/CellInfoUTRA-TDD-r9.h diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.h b/lte/rrc/include/liblte/rrc/asn/CellReselectionParametersCDMA2000-v920.h similarity index 100% rename from lte/rrc/asn/CellReselectionParametersCDMA2000-v920.h rename to lte/rrc/include/liblte/rrc/asn/CellReselectionParametersCDMA2000-v920.h diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CellReselectionParametersCDMA2000.h similarity index 100% rename from lte/rrc/asn/CellReselectionParametersCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CellReselectionParametersCDMA2000.h diff --git a/lte/rrc/asn/CellReselectionPriority.h b/lte/rrc/include/liblte/rrc/asn/CellReselectionPriority.h similarity index 100% rename from lte/rrc/asn/CellReselectionPriority.h rename to lte/rrc/include/liblte/rrc/asn/CellReselectionPriority.h diff --git a/lte/rrc/asn/CellSelectionInfo-v920.h b/lte/rrc/include/liblte/rrc/asn/CellSelectionInfo-v920.h similarity index 100% rename from lte/rrc/asn/CellSelectionInfo-v920.h rename to lte/rrc/include/liblte/rrc/asn/CellSelectionInfo-v920.h diff --git a/lte/rrc/asn/CellsToAddMod.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddMod.h similarity index 100% rename from lte/rrc/asn/CellsToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddMod.h diff --git a/lte/rrc/asn/CellsToAddModCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModCDMA2000.h similarity index 100% rename from lte/rrc/asn/CellsToAddModCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModCDMA2000.h diff --git a/lte/rrc/asn/CellsToAddModList.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModList.h similarity index 100% rename from lte/rrc/asn/CellsToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModList.h diff --git a/lte/rrc/asn/CellsToAddModListCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModListCDMA2000.h similarity index 100% rename from lte/rrc/asn/CellsToAddModListCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModListCDMA2000.h diff --git a/lte/rrc/asn/CellsToAddModListUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModListUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/CellsToAddModListUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModListUTRA-FDD.h diff --git a/lte/rrc/asn/CellsToAddModListUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModListUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/CellsToAddModListUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModListUTRA-TDD.h diff --git a/lte/rrc/asn/CellsToAddModUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/CellsToAddModUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModUTRA-FDD.h diff --git a/lte/rrc/asn/CellsToAddModUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/CellsToAddModUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/CellsToAddModUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/CellsToAddModUTRA-TDD.h diff --git a/lte/rrc/asn/CellsTriggeredList.h b/lte/rrc/include/liblte/rrc/asn/CellsTriggeredList.h similarity index 100% rename from lte/rrc/asn/CellsTriggeredList.h rename to lte/rrc/include/liblte/rrc/asn/CellsTriggeredList.h diff --git a/lte/rrc/asn/CommonSF-AllocPatternList-r9.h b/lte/rrc/include/liblte/rrc/asn/CommonSF-AllocPatternList-r9.h similarity index 100% rename from lte/rrc/asn/CommonSF-AllocPatternList-r9.h rename to lte/rrc/include/liblte/rrc/asn/CommonSF-AllocPatternList-r9.h diff --git a/lte/rrc/asn/CounterCheck-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/CounterCheck-r8-IEs.h similarity index 100% rename from lte/rrc/asn/CounterCheck-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CounterCheck-r8-IEs.h diff --git a/lte/rrc/asn/CounterCheck-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/CounterCheck-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/CounterCheck-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CounterCheck-v8a0-IEs.h diff --git a/lte/rrc/asn/CounterCheck.h b/lte/rrc/include/liblte/rrc/asn/CounterCheck.h similarity index 100% rename from lte/rrc/asn/CounterCheck.h rename to lte/rrc/include/liblte/rrc/asn/CounterCheck.h diff --git a/lte/rrc/asn/CounterCheckResponse-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/CounterCheckResponse-r8-IEs.h similarity index 100% rename from lte/rrc/asn/CounterCheckResponse-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CounterCheckResponse-r8-IEs.h diff --git a/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/CounterCheckResponse-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/CounterCheckResponse-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/CounterCheckResponse-v8a0-IEs.h diff --git a/lte/rrc/asn/CounterCheckResponse.h b/lte/rrc/include/liblte/rrc/asn/CounterCheckResponse.h similarity index 100% rename from lte/rrc/asn/CounterCheckResponse.h rename to lte/rrc/include/liblte/rrc/asn/CounterCheckResponse.h diff --git a/lte/rrc/asn/CountingRequestInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/CountingRequestInfo-r10.h similarity index 100% rename from lte/rrc/asn/CountingRequestInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/CountingRequestInfo-r10.h diff --git a/lte/rrc/asn/CountingRequestList-r10.h b/lte/rrc/include/liblte/rrc/asn/CountingRequestList-r10.h similarity index 100% rename from lte/rrc/asn/CountingRequestList-r10.h rename to lte/rrc/include/liblte/rrc/asn/CountingRequestList-r10.h diff --git a/lte/rrc/asn/CountingResponseInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/CountingResponseInfo-r10.h similarity index 100% rename from lte/rrc/asn/CountingResponseInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/CountingResponseInfo-r10.h diff --git a/lte/rrc/asn/CountingResponseList-r10.h b/lte/rrc/include/liblte/rrc/asn/CountingResponseList-r10.h similarity index 100% rename from lte/rrc/asn/CountingResponseList-r10.h rename to lte/rrc/include/liblte/rrc/asn/CountingResponseList-r10.h diff --git a/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.h b/lte/rrc/include/liblte/rrc/asn/CrossCarrierSchedulingConfig-r10.h similarity index 100% rename from lte/rrc/asn/CrossCarrierSchedulingConfig-r10.h rename to lte/rrc/include/liblte/rrc/asn/CrossCarrierSchedulingConfig-r10.h diff --git a/lte/rrc/asn/DL-AM-RLC.h b/lte/rrc/include/liblte/rrc/asn/DL-AM-RLC.h similarity index 100% rename from lte/rrc/asn/DL-AM-RLC.h rename to lte/rrc/include/liblte/rrc/asn/DL-AM-RLC.h diff --git a/lte/rrc/asn/DL-CCCH-Message.h b/lte/rrc/include/liblte/rrc/asn/DL-CCCH-Message.h similarity index 100% rename from lte/rrc/asn/DL-CCCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/DL-CCCH-Message.h diff --git a/lte/rrc/asn/DL-CCCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/DL-CCCH-MessageType.h similarity index 100% rename from lte/rrc/asn/DL-CCCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/DL-CCCH-MessageType.h diff --git a/lte/rrc/asn/DL-DCCH-Message.h b/lte/rrc/include/liblte/rrc/asn/DL-DCCH-Message.h similarity index 100% rename from lte/rrc/asn/DL-DCCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/DL-DCCH-Message.h diff --git a/lte/rrc/asn/DL-DCCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/DL-DCCH-MessageType.h similarity index 100% rename from lte/rrc/asn/DL-DCCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/DL-DCCH-MessageType.h diff --git a/lte/rrc/asn/DL-UM-RLC.h b/lte/rrc/include/liblte/rrc/asn/DL-UM-RLC.h similarity index 100% rename from lte/rrc/asn/DL-UM-RLC.h rename to lte/rrc/include/liblte/rrc/asn/DL-UM-RLC.h diff --git a/lte/rrc/asn/DLInformationTransfer-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/DLInformationTransfer-r8-IEs.h similarity index 100% rename from lte/rrc/asn/DLInformationTransfer-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/DLInformationTransfer-r8-IEs.h diff --git a/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/DLInformationTransfer-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/DLInformationTransfer-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/DLInformationTransfer-v8a0-IEs.h diff --git a/lte/rrc/asn/DLInformationTransfer.h b/lte/rrc/include/liblte/rrc/asn/DLInformationTransfer.h similarity index 100% rename from lte/rrc/asn/DLInformationTransfer.h rename to lte/rrc/include/liblte/rrc/asn/DLInformationTransfer.h diff --git a/lte/rrc/asn/DRB-CountInfo.h b/lte/rrc/include/liblte/rrc/asn/DRB-CountInfo.h similarity index 100% rename from lte/rrc/asn/DRB-CountInfo.h rename to lte/rrc/include/liblte/rrc/asn/DRB-CountInfo.h diff --git a/lte/rrc/asn/DRB-CountInfoList.h b/lte/rrc/include/liblte/rrc/asn/DRB-CountInfoList.h similarity index 100% rename from lte/rrc/asn/DRB-CountInfoList.h rename to lte/rrc/include/liblte/rrc/asn/DRB-CountInfoList.h diff --git a/lte/rrc/asn/DRB-CountMSB-Info.h b/lte/rrc/include/liblte/rrc/asn/DRB-CountMSB-Info.h similarity index 100% rename from lte/rrc/asn/DRB-CountMSB-Info.h rename to lte/rrc/include/liblte/rrc/asn/DRB-CountMSB-Info.h diff --git a/lte/rrc/asn/DRB-CountMSB-InfoList.h b/lte/rrc/include/liblte/rrc/asn/DRB-CountMSB-InfoList.h similarity index 100% rename from lte/rrc/asn/DRB-CountMSB-InfoList.h rename to lte/rrc/include/liblte/rrc/asn/DRB-CountMSB-InfoList.h diff --git a/lte/rrc/asn/DRB-Identity.h b/lte/rrc/include/liblte/rrc/asn/DRB-Identity.h similarity index 100% rename from lte/rrc/asn/DRB-Identity.h rename to lte/rrc/include/liblte/rrc/asn/DRB-Identity.h diff --git a/lte/rrc/asn/DRB-ToAddMod.h b/lte/rrc/include/liblte/rrc/asn/DRB-ToAddMod.h similarity index 100% rename from lte/rrc/asn/DRB-ToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/DRB-ToAddMod.h diff --git a/lte/rrc/asn/DRB-ToAddModList.h b/lte/rrc/include/liblte/rrc/asn/DRB-ToAddModList.h similarity index 100% rename from lte/rrc/asn/DRB-ToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/DRB-ToAddModList.h diff --git a/lte/rrc/asn/DRB-ToReleaseList.h b/lte/rrc/include/liblte/rrc/asn/DRB-ToReleaseList.h similarity index 100% rename from lte/rrc/asn/DRB-ToReleaseList.h rename to lte/rrc/include/liblte/rrc/asn/DRB-ToReleaseList.h diff --git a/lte/rrc/asn/DRX-Config.h b/lte/rrc/include/liblte/rrc/asn/DRX-Config.h similarity index 100% rename from lte/rrc/asn/DRX-Config.h rename to lte/rrc/include/liblte/rrc/asn/DRX-Config.h diff --git a/lte/rrc/asn/DedicatedInfoCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/DedicatedInfoCDMA2000.h similarity index 100% rename from lte/rrc/asn/DedicatedInfoCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/DedicatedInfoCDMA2000.h diff --git a/lte/rrc/asn/DedicatedInfoNAS.h b/lte/rrc/include/liblte/rrc/asn/DedicatedInfoNAS.h similarity index 100% rename from lte/rrc/asn/DedicatedInfoNAS.h rename to lte/rrc/include/liblte/rrc/asn/DedicatedInfoNAS.h diff --git a/lte/rrc/asn/DeltaFList-PUCCH.h b/lte/rrc/include/liblte/rrc/asn/DeltaFList-PUCCH.h similarity index 100% rename from lte/rrc/asn/DeltaFList-PUCCH.h rename to lte/rrc/include/liblte/rrc/asn/DeltaFList-PUCCH.h diff --git a/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h b/lte/rrc/include/liblte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h similarity index 100% rename from lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h rename to lte/rrc/include/liblte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.h diff --git a/lte/rrc/asn/E-CSFB-r9.h b/lte/rrc/include/liblte/rrc/asn/E-CSFB-r9.h similarity index 100% rename from lte/rrc/asn/E-CSFB-r9.h rename to lte/rrc/include/liblte/rrc/asn/E-CSFB-r9.h diff --git a/lte/rrc/asn/EstablishmentCause.h b/lte/rrc/include/liblte/rrc/asn/EstablishmentCause.h similarity index 100% rename from lte/rrc/asn/EstablishmentCause.h rename to lte/rrc/include/liblte/rrc/asn/EstablishmentCause.h diff --git a/lte/rrc/asn/ExplicitListOfARFCNs.h b/lte/rrc/include/liblte/rrc/asn/ExplicitListOfARFCNs.h similarity index 100% rename from lte/rrc/asn/ExplicitListOfARFCNs.h rename to lte/rrc/include/liblte/rrc/asn/ExplicitListOfARFCNs.h diff --git a/lte/rrc/asn/FilterCoefficient.h b/lte/rrc/include/liblte/rrc/asn/FilterCoefficient.h similarity index 100% rename from lte/rrc/asn/FilterCoefficient.h rename to lte/rrc/include/liblte/rrc/asn/FilterCoefficient.h diff --git a/lte/rrc/asn/FreqPriorityEUTRA.h b/lte/rrc/include/liblte/rrc/asn/FreqPriorityEUTRA.h similarity index 100% rename from lte/rrc/asn/FreqPriorityEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/FreqPriorityEUTRA.h diff --git a/lte/rrc/asn/FreqPriorityListEUTRA.h b/lte/rrc/include/liblte/rrc/asn/FreqPriorityListEUTRA.h similarity index 100% rename from lte/rrc/asn/FreqPriorityListEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/FreqPriorityListEUTRA.h diff --git a/lte/rrc/asn/FreqPriorityListUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/FreqPriorityListUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/FreqPriorityListUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/FreqPriorityListUTRA-FDD.h diff --git a/lte/rrc/asn/FreqPriorityListUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/FreqPriorityListUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/FreqPriorityListUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/FreqPriorityListUTRA-TDD.h diff --git a/lte/rrc/asn/FreqPriorityUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/FreqPriorityUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/FreqPriorityUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/FreqPriorityUTRA-FDD.h diff --git a/lte/rrc/asn/FreqPriorityUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/FreqPriorityUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/FreqPriorityUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/FreqPriorityUTRA-TDD.h diff --git a/lte/rrc/asn/FreqsPriorityGERAN.h b/lte/rrc/include/liblte/rrc/asn/FreqsPriorityGERAN.h similarity index 100% rename from lte/rrc/asn/FreqsPriorityGERAN.h rename to lte/rrc/include/liblte/rrc/asn/FreqsPriorityGERAN.h diff --git a/lte/rrc/asn/FreqsPriorityListGERAN.h b/lte/rrc/include/liblte/rrc/asn/FreqsPriorityListGERAN.h similarity index 100% rename from lte/rrc/asn/FreqsPriorityListGERAN.h rename to lte/rrc/include/liblte/rrc/asn/FreqsPriorityListGERAN.h diff --git a/lte/rrc/asn/Handover.h b/lte/rrc/include/liblte/rrc/asn/Handover.h similarity index 100% rename from lte/rrc/asn/Handover.h rename to lte/rrc/include/liblte/rrc/asn/Handover.h diff --git a/lte/rrc/asn/HandoverCommand-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverCommand-r8-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverCommand-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverCommand-r8-IEs.h diff --git a/lte/rrc/asn/HandoverCommand.h b/lte/rrc/include/liblte/rrc/asn/HandoverCommand.h similarity index 100% rename from lte/rrc/asn/HandoverCommand.h rename to lte/rrc/include/liblte/rrc/asn/HandoverCommand.h diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.h diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.h diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.h diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.h diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.h b/lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest.h similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest.h rename to lte/rrc/include/liblte/rrc/asn/HandoverFromEUTRAPreparationRequest.h diff --git a/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverPreparationInformation-r8-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverPreparationInformation-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverPreparationInformation-r8-IEs.h diff --git a/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/HandoverPreparationInformation-v920-IEs.h similarity index 100% rename from lte/rrc/asn/HandoverPreparationInformation-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/HandoverPreparationInformation-v920-IEs.h diff --git a/lte/rrc/asn/HandoverPreparationInformation.h b/lte/rrc/include/liblte/rrc/asn/HandoverPreparationInformation.h similarity index 100% rename from lte/rrc/asn/HandoverPreparationInformation.h rename to lte/rrc/include/liblte/rrc/asn/HandoverPreparationInformation.h diff --git a/lte/rrc/asn/Hysteresis.h b/lte/rrc/include/liblte/rrc/asn/Hysteresis.h similarity index 100% rename from lte/rrc/asn/Hysteresis.h rename to lte/rrc/include/liblte/rrc/asn/Hysteresis.h diff --git a/lte/rrc/asn/IMSI-Digit.h b/lte/rrc/include/liblte/rrc/asn/IMSI-Digit.h similarity index 100% rename from lte/rrc/asn/IMSI-Digit.h rename to lte/rrc/include/liblte/rrc/asn/IMSI-Digit.h diff --git a/lte/rrc/asn/IMSI.h b/lte/rrc/include/liblte/rrc/asn/IMSI.h similarity index 100% rename from lte/rrc/asn/IMSI.h rename to lte/rrc/include/liblte/rrc/asn/IMSI.h diff --git a/lte/rrc/asn/INTEGER.h b/lte/rrc/include/liblte/rrc/asn/INTEGER.h similarity index 100% rename from lte/rrc/asn/INTEGER.h rename to lte/rrc/include/liblte/rrc/asn/INTEGER.h diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.h diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.h diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.h diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.h diff --git a/lte/rrc/asn/IRAT-ParametersGERAN-v920.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersGERAN-v920.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersGERAN-v920.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersGERAN-v920.h diff --git a/lte/rrc/asn/IRAT-ParametersGERAN.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersGERAN.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersGERAN.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersGERAN.h diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-FDD.h diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.h diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD128.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD128.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD128.h diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD384.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD384.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD384.h diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD768.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD768.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-TDD768.h diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-v920.h b/lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-v920.h similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-v920.h rename to lte/rrc/include/liblte/rrc/asn/IRAT-ParametersUTRA-v920.h diff --git a/lte/rrc/asn/IdleModeMobilityControlInfo.h b/lte/rrc/include/liblte/rrc/asn/IdleModeMobilityControlInfo.h similarity index 100% rename from lte/rrc/asn/IdleModeMobilityControlInfo.h rename to lte/rrc/include/liblte/rrc/asn/IdleModeMobilityControlInfo.h diff --git a/lte/rrc/asn/InitialUE-Identity.h b/lte/rrc/include/liblte/rrc/asn/InitialUE-Identity.h similarity index 100% rename from lte/rrc/asn/InitialUE-Identity.h rename to lte/rrc/include/liblte/rrc/asn/InitialUE-Identity.h diff --git a/lte/rrc/asn/InterFreqBandInfo.h b/lte/rrc/include/liblte/rrc/asn/InterFreqBandInfo.h similarity index 100% rename from lte/rrc/asn/InterFreqBandInfo.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqBandInfo.h diff --git a/lte/rrc/asn/InterFreqBandList.h b/lte/rrc/include/liblte/rrc/asn/InterFreqBandList.h similarity index 100% rename from lte/rrc/asn/InterFreqBandList.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqBandList.h diff --git a/lte/rrc/asn/InterFreqBlackCellList.h b/lte/rrc/include/liblte/rrc/asn/InterFreqBlackCellList.h similarity index 100% rename from lte/rrc/asn/InterFreqBlackCellList.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqBlackCellList.h diff --git a/lte/rrc/asn/InterFreqCarrierFreqInfo.h b/lte/rrc/include/liblte/rrc/asn/InterFreqCarrierFreqInfo.h similarity index 100% rename from lte/rrc/asn/InterFreqCarrierFreqInfo.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqCarrierFreqInfo.h diff --git a/lte/rrc/asn/InterFreqCarrierFreqList.h b/lte/rrc/include/liblte/rrc/asn/InterFreqCarrierFreqList.h similarity index 100% rename from lte/rrc/asn/InterFreqCarrierFreqList.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqCarrierFreqList.h diff --git a/lte/rrc/asn/InterFreqNeighCellInfo.h b/lte/rrc/include/liblte/rrc/asn/InterFreqNeighCellInfo.h similarity index 100% rename from lte/rrc/asn/InterFreqNeighCellInfo.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqNeighCellInfo.h diff --git a/lte/rrc/asn/InterFreqNeighCellList.h b/lte/rrc/include/liblte/rrc/asn/InterFreqNeighCellList.h similarity index 100% rename from lte/rrc/asn/InterFreqNeighCellList.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqNeighCellList.h diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h b/lte/rrc/include/liblte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h similarity index 100% rename from lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.h diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h b/lte/rrc/include/liblte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h similarity index 100% rename from lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h rename to lte/rrc/include/liblte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.h diff --git a/lte/rrc/asn/InterRAT-BandInfo.h b/lte/rrc/include/liblte/rrc/asn/InterRAT-BandInfo.h similarity index 100% rename from lte/rrc/asn/InterRAT-BandInfo.h rename to lte/rrc/include/liblte/rrc/asn/InterRAT-BandInfo.h diff --git a/lte/rrc/asn/InterRAT-BandList.h b/lte/rrc/include/liblte/rrc/asn/InterRAT-BandList.h similarity index 100% rename from lte/rrc/asn/InterRAT-BandList.h rename to lte/rrc/include/liblte/rrc/asn/InterRAT-BandList.h diff --git a/lte/rrc/asn/IntraFreqBlackCellList.h b/lte/rrc/include/liblte/rrc/asn/IntraFreqBlackCellList.h similarity index 100% rename from lte/rrc/asn/IntraFreqBlackCellList.h rename to lte/rrc/include/liblte/rrc/asn/IntraFreqBlackCellList.h diff --git a/lte/rrc/asn/IntraFreqNeighCellInfo.h b/lte/rrc/include/liblte/rrc/asn/IntraFreqNeighCellInfo.h similarity index 100% rename from lte/rrc/asn/IntraFreqNeighCellInfo.h rename to lte/rrc/include/liblte/rrc/asn/IntraFreqNeighCellInfo.h diff --git a/lte/rrc/asn/IntraFreqNeighCellList.h b/lte/rrc/include/liblte/rrc/asn/IntraFreqNeighCellList.h similarity index 100% rename from lte/rrc/asn/IntraFreqNeighCellList.h rename to lte/rrc/include/liblte/rrc/asn/IntraFreqNeighCellList.h diff --git a/lte/rrc/asn/Key-eNodeB-Star.h b/lte/rrc/include/liblte/rrc/asn/Key-eNodeB-Star.h similarity index 100% rename from lte/rrc/asn/Key-eNodeB-Star.h rename to lte/rrc/include/liblte/rrc/asn/Key-eNodeB-Star.h diff --git a/lte/rrc/asn/LocationInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/LocationInfo-r10.h similarity index 100% rename from lte/rrc/asn/LocationInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/LocationInfo-r10.h diff --git a/lte/rrc/asn/LogMeasInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/LogMeasInfo-r10.h similarity index 100% rename from lte/rrc/asn/LogMeasInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/LogMeasInfo-r10.h diff --git a/lte/rrc/asn/LogMeasInfoList-r10.h b/lte/rrc/include/liblte/rrc/asn/LogMeasInfoList-r10.h similarity index 100% rename from lte/rrc/asn/LogMeasInfoList-r10.h rename to lte/rrc/include/liblte/rrc/asn/LogMeasInfoList-r10.h diff --git a/lte/rrc/asn/LogMeasReport-r10.h b/lte/rrc/include/liblte/rrc/asn/LogMeasReport-r10.h similarity index 100% rename from lte/rrc/asn/LogMeasReport-r10.h rename to lte/rrc/include/liblte/rrc/asn/LogMeasReport-r10.h diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h b/lte/rrc/include/liblte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h similarity index 100% rename from lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h rename to lte/rrc/include/liblte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.h diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10.h b/lte/rrc/include/liblte/rrc/asn/LoggedMeasurementConfiguration-r10.h similarity index 100% rename from lte/rrc/asn/LoggedMeasurementConfiguration-r10.h rename to lte/rrc/include/liblte/rrc/asn/LoggedMeasurementConfiguration-r10.h diff --git a/lte/rrc/asn/LoggingDuration-r10.h b/lte/rrc/include/liblte/rrc/asn/LoggingDuration-r10.h similarity index 100% rename from lte/rrc/asn/LoggingDuration-r10.h rename to lte/rrc/include/liblte/rrc/asn/LoggingDuration-r10.h diff --git a/lte/rrc/asn/LoggingInterval-r10.h b/lte/rrc/include/liblte/rrc/asn/LoggingInterval-r10.h similarity index 100% rename from lte/rrc/asn/LoggingInterval-r10.h rename to lte/rrc/include/liblte/rrc/asn/LoggingInterval-r10.h diff --git a/lte/rrc/asn/LogicalChannelConfig.h b/lte/rrc/include/liblte/rrc/asn/LogicalChannelConfig.h similarity index 100% rename from lte/rrc/asn/LogicalChannelConfig.h rename to lte/rrc/include/liblte/rrc/asn/LogicalChannelConfig.h diff --git a/lte/rrc/asn/MAC-MainConfig.h b/lte/rrc/include/liblte/rrc/asn/MAC-MainConfig.h similarity index 100% rename from lte/rrc/asn/MAC-MainConfig.h rename to lte/rrc/include/liblte/rrc/asn/MAC-MainConfig.h diff --git a/lte/rrc/asn/MBMS-NotificationConfig-r9.h b/lte/rrc/include/liblte/rrc/asn/MBMS-NotificationConfig-r9.h similarity index 100% rename from lte/rrc/asn/MBMS-NotificationConfig-r9.h rename to lte/rrc/include/liblte/rrc/asn/MBMS-NotificationConfig-r9.h diff --git a/lte/rrc/asn/MBMS-SessionInfo-r9.h b/lte/rrc/include/liblte/rrc/asn/MBMS-SessionInfo-r9.h similarity index 100% rename from lte/rrc/asn/MBMS-SessionInfo-r9.h rename to lte/rrc/include/liblte/rrc/asn/MBMS-SessionInfo-r9.h diff --git a/lte/rrc/asn/MBMS-SessionInfoList-r9.h b/lte/rrc/include/liblte/rrc/asn/MBMS-SessionInfoList-r9.h similarity index 100% rename from lte/rrc/asn/MBMS-SessionInfoList-r9.h rename to lte/rrc/include/liblte/rrc/asn/MBMS-SessionInfoList-r9.h diff --git a/lte/rrc/asn/MBMSCountingRequest-r10.h b/lte/rrc/include/liblte/rrc/asn/MBMSCountingRequest-r10.h similarity index 100% rename from lte/rrc/asn/MBMSCountingRequest-r10.h rename to lte/rrc/include/liblte/rrc/asn/MBMSCountingRequest-r10.h diff --git a/lte/rrc/asn/MBMSCountingResponse-r10-IEs.h b/lte/rrc/include/liblte/rrc/asn/MBMSCountingResponse-r10-IEs.h similarity index 100% rename from lte/rrc/asn/MBMSCountingResponse-r10-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MBMSCountingResponse-r10-IEs.h diff --git a/lte/rrc/asn/MBMSCountingResponse-r10.h b/lte/rrc/include/liblte/rrc/asn/MBMSCountingResponse-r10.h similarity index 100% rename from lte/rrc/asn/MBMSCountingResponse-r10.h rename to lte/rrc/include/liblte/rrc/asn/MBMSCountingResponse-r10.h diff --git a/lte/rrc/asn/MBSFN-AreaInfo-r9.h b/lte/rrc/include/liblte/rrc/asn/MBSFN-AreaInfo-r9.h similarity index 100% rename from lte/rrc/asn/MBSFN-AreaInfo-r9.h rename to lte/rrc/include/liblte/rrc/asn/MBSFN-AreaInfo-r9.h diff --git a/lte/rrc/asn/MBSFN-AreaInfoList-r9.h b/lte/rrc/include/liblte/rrc/asn/MBSFN-AreaInfoList-r9.h similarity index 100% rename from lte/rrc/asn/MBSFN-AreaInfoList-r9.h rename to lte/rrc/include/liblte/rrc/asn/MBSFN-AreaInfoList-r9.h diff --git a/lte/rrc/asn/MBSFN-SubframeConfig.h b/lte/rrc/include/liblte/rrc/asn/MBSFN-SubframeConfig.h similarity index 100% rename from lte/rrc/asn/MBSFN-SubframeConfig.h rename to lte/rrc/include/liblte/rrc/asn/MBSFN-SubframeConfig.h diff --git a/lte/rrc/asn/MBSFN-SubframeConfigList.h b/lte/rrc/include/liblte/rrc/asn/MBSFN-SubframeConfigList.h similarity index 100% rename from lte/rrc/asn/MBSFN-SubframeConfigList.h rename to lte/rrc/include/liblte/rrc/asn/MBSFN-SubframeConfigList.h diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-r9.h b/lte/rrc/include/liblte/rrc/asn/MBSFNAreaConfiguration-r9.h similarity index 100% rename from lte/rrc/asn/MBSFNAreaConfiguration-r9.h rename to lte/rrc/include/liblte/rrc/asn/MBSFNAreaConfiguration-r9.h diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h b/lte/rrc/include/liblte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h similarity index 100% rename from lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.h diff --git a/lte/rrc/asn/MCC-MNC-Digit.h b/lte/rrc/include/liblte/rrc/asn/MCC-MNC-Digit.h similarity index 100% rename from lte/rrc/asn/MCC-MNC-Digit.h rename to lte/rrc/include/liblte/rrc/asn/MCC-MNC-Digit.h diff --git a/lte/rrc/asn/MCC.h b/lte/rrc/include/liblte/rrc/asn/MCC.h similarity index 100% rename from lte/rrc/asn/MCC.h rename to lte/rrc/include/liblte/rrc/asn/MCC.h diff --git a/lte/rrc/asn/MCCH-Message.h b/lte/rrc/include/liblte/rrc/asn/MCCH-Message.h similarity index 100% rename from lte/rrc/asn/MCCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/MCCH-Message.h diff --git a/lte/rrc/asn/MCCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/MCCH-MessageType.h similarity index 100% rename from lte/rrc/asn/MCCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/MCCH-MessageType.h diff --git a/lte/rrc/asn/MIMO-CapabilityDL-r10.h b/lte/rrc/include/liblte/rrc/asn/MIMO-CapabilityDL-r10.h similarity index 100% rename from lte/rrc/asn/MIMO-CapabilityDL-r10.h rename to lte/rrc/include/liblte/rrc/asn/MIMO-CapabilityDL-r10.h diff --git a/lte/rrc/asn/MIMO-CapabilityUL-r10.h b/lte/rrc/include/liblte/rrc/asn/MIMO-CapabilityUL-r10.h similarity index 100% rename from lte/rrc/asn/MIMO-CapabilityUL-r10.h rename to lte/rrc/include/liblte/rrc/asn/MIMO-CapabilityUL-r10.h diff --git a/lte/rrc/asn/MMEC.h b/lte/rrc/include/liblte/rrc/asn/MMEC.h similarity index 100% rename from lte/rrc/asn/MMEC.h rename to lte/rrc/include/liblte/rrc/asn/MMEC.h diff --git a/lte/rrc/asn/MNC.h b/lte/rrc/include/liblte/rrc/asn/MNC.h similarity index 100% rename from lte/rrc/asn/MNC.h rename to lte/rrc/include/liblte/rrc/asn/MNC.h diff --git a/lte/rrc/asn/MasterInformationBlock.h b/lte/rrc/include/liblte/rrc/asn/MasterInformationBlock.h similarity index 100% rename from lte/rrc/asn/MasterInformationBlock.h rename to lte/rrc/include/liblte/rrc/asn/MasterInformationBlock.h diff --git a/lte/rrc/asn/MeasConfig.h b/lte/rrc/include/liblte/rrc/asn/MeasConfig.h similarity index 100% rename from lte/rrc/asn/MeasConfig.h rename to lte/rrc/include/liblte/rrc/asn/MeasConfig.h diff --git a/lte/rrc/asn/MeasCycleSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasCycleSCell-r10.h similarity index 100% rename from lte/rrc/asn/MeasCycleSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasCycleSCell-r10.h diff --git a/lte/rrc/asn/MeasGapConfig.h b/lte/rrc/include/liblte/rrc/asn/MeasGapConfig.h similarity index 100% rename from lte/rrc/asn/MeasGapConfig.h rename to lte/rrc/include/liblte/rrc/asn/MeasGapConfig.h diff --git a/lte/rrc/asn/MeasId.h b/lte/rrc/include/liblte/rrc/asn/MeasId.h similarity index 100% rename from lte/rrc/asn/MeasId.h rename to lte/rrc/include/liblte/rrc/asn/MeasId.h diff --git a/lte/rrc/asn/MeasIdToAddMod.h b/lte/rrc/include/liblte/rrc/asn/MeasIdToAddMod.h similarity index 100% rename from lte/rrc/asn/MeasIdToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/MeasIdToAddMod.h diff --git a/lte/rrc/asn/MeasIdToAddModList.h b/lte/rrc/include/liblte/rrc/asn/MeasIdToAddModList.h similarity index 100% rename from lte/rrc/asn/MeasIdToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/MeasIdToAddModList.h diff --git a/lte/rrc/asn/MeasIdToRemoveList.h b/lte/rrc/include/liblte/rrc/asn/MeasIdToRemoveList.h similarity index 100% rename from lte/rrc/asn/MeasIdToRemoveList.h rename to lte/rrc/include/liblte/rrc/asn/MeasIdToRemoveList.h diff --git a/lte/rrc/asn/MeasObjectCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectCDMA2000.h similarity index 100% rename from lte/rrc/asn/MeasObjectCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectCDMA2000.h diff --git a/lte/rrc/asn/MeasObjectEUTRA.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectEUTRA.h similarity index 100% rename from lte/rrc/asn/MeasObjectEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectEUTRA.h diff --git a/lte/rrc/asn/MeasObjectGERAN.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectGERAN.h similarity index 100% rename from lte/rrc/asn/MeasObjectGERAN.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectGERAN.h diff --git a/lte/rrc/asn/MeasObjectId.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectId.h similarity index 100% rename from lte/rrc/asn/MeasObjectId.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectId.h diff --git a/lte/rrc/asn/MeasObjectToAddMod.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectToAddMod.h similarity index 100% rename from lte/rrc/asn/MeasObjectToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectToAddMod.h diff --git a/lte/rrc/asn/MeasObjectToAddModList.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectToAddModList.h similarity index 100% rename from lte/rrc/asn/MeasObjectToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectToAddModList.h diff --git a/lte/rrc/asn/MeasObjectToRemoveList.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectToRemoveList.h similarity index 100% rename from lte/rrc/asn/MeasObjectToRemoveList.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectToRemoveList.h diff --git a/lte/rrc/asn/MeasObjectUTRA.h b/lte/rrc/include/liblte/rrc/asn/MeasObjectUTRA.h similarity index 100% rename from lte/rrc/asn/MeasObjectUTRA.h rename to lte/rrc/include/liblte/rrc/asn/MeasObjectUTRA.h diff --git a/lte/rrc/asn/MeasParameters-v1020.h b/lte/rrc/include/liblte/rrc/asn/MeasParameters-v1020.h similarity index 100% rename from lte/rrc/asn/MeasParameters-v1020.h rename to lte/rrc/include/liblte/rrc/asn/MeasParameters-v1020.h diff --git a/lte/rrc/asn/MeasParameters.h b/lte/rrc/include/liblte/rrc/asn/MeasParameters.h similarity index 100% rename from lte/rrc/asn/MeasParameters.h rename to lte/rrc/include/liblte/rrc/asn/MeasParameters.h diff --git a/lte/rrc/asn/MeasResult2CDMA2000-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResult2CDMA2000-r9.h similarity index 100% rename from lte/rrc/asn/MeasResult2CDMA2000-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResult2CDMA2000-r9.h diff --git a/lte/rrc/asn/MeasResult2EUTRA-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResult2EUTRA-r9.h similarity index 100% rename from lte/rrc/asn/MeasResult2EUTRA-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResult2EUTRA-r9.h diff --git a/lte/rrc/asn/MeasResult2UTRA-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResult2UTRA-r9.h similarity index 100% rename from lte/rrc/asn/MeasResult2UTRA-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResult2UTRA-r9.h diff --git a/lte/rrc/asn/MeasResultCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/MeasResultCDMA2000.h similarity index 100% rename from lte/rrc/asn/MeasResultCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultCDMA2000.h diff --git a/lte/rrc/asn/MeasResultEUTRA.h b/lte/rrc/include/liblte/rrc/asn/MeasResultEUTRA.h similarity index 100% rename from lte/rrc/asn/MeasResultEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultEUTRA.h diff --git a/lte/rrc/asn/MeasResultForECID-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResultForECID-r9.h similarity index 100% rename from lte/rrc/asn/MeasResultForECID-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultForECID-r9.h diff --git a/lte/rrc/asn/MeasResultGERAN.h b/lte/rrc/include/liblte/rrc/asn/MeasResultGERAN.h similarity index 100% rename from lte/rrc/asn/MeasResultGERAN.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultGERAN.h diff --git a/lte/rrc/asn/MeasResultList2CDMA2000-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResultList2CDMA2000-r9.h similarity index 100% rename from lte/rrc/asn/MeasResultList2CDMA2000-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultList2CDMA2000-r9.h diff --git a/lte/rrc/asn/MeasResultList2EUTRA-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResultList2EUTRA-r9.h similarity index 100% rename from lte/rrc/asn/MeasResultList2EUTRA-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultList2EUTRA-r9.h diff --git a/lte/rrc/asn/MeasResultList2GERAN-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasResultList2GERAN-r10.h similarity index 100% rename from lte/rrc/asn/MeasResultList2GERAN-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultList2GERAN-r10.h diff --git a/lte/rrc/asn/MeasResultList2UTRA-r9.h b/lte/rrc/include/liblte/rrc/asn/MeasResultList2UTRA-r9.h similarity index 100% rename from lte/rrc/asn/MeasResultList2UTRA-r9.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultList2UTRA-r9.h diff --git a/lte/rrc/asn/MeasResultListCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/MeasResultListCDMA2000.h similarity index 100% rename from lte/rrc/asn/MeasResultListCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultListCDMA2000.h diff --git a/lte/rrc/asn/MeasResultListEUTRA.h b/lte/rrc/include/liblte/rrc/asn/MeasResultListEUTRA.h similarity index 100% rename from lte/rrc/asn/MeasResultListEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultListEUTRA.h diff --git a/lte/rrc/asn/MeasResultListGERAN.h b/lte/rrc/include/liblte/rrc/asn/MeasResultListGERAN.h similarity index 100% rename from lte/rrc/asn/MeasResultListGERAN.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultListGERAN.h diff --git a/lte/rrc/asn/MeasResultListUTRA.h b/lte/rrc/include/liblte/rrc/asn/MeasResultListUTRA.h similarity index 100% rename from lte/rrc/asn/MeasResultListUTRA.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultListUTRA.h diff --git a/lte/rrc/asn/MeasResultServFreq-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasResultServFreq-r10.h similarity index 100% rename from lte/rrc/asn/MeasResultServFreq-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultServFreq-r10.h diff --git a/lte/rrc/asn/MeasResultServFreqList-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasResultServFreqList-r10.h similarity index 100% rename from lte/rrc/asn/MeasResultServFreqList-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultServFreqList-r10.h diff --git a/lte/rrc/asn/MeasResultUTRA.h b/lte/rrc/include/liblte/rrc/asn/MeasResultUTRA.h similarity index 100% rename from lte/rrc/asn/MeasResultUTRA.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultUTRA.h diff --git a/lte/rrc/asn/MeasResults.h b/lte/rrc/include/liblte/rrc/asn/MeasResults.h similarity index 100% rename from lte/rrc/asn/MeasResults.h rename to lte/rrc/include/liblte/rrc/asn/MeasResults.h diff --git a/lte/rrc/asn/MeasResultsCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/MeasResultsCDMA2000.h similarity index 100% rename from lte/rrc/asn/MeasResultsCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/MeasResultsCDMA2000.h diff --git a/lte/rrc/asn/MeasSubframeCellList-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasSubframeCellList-r10.h similarity index 100% rename from lte/rrc/asn/MeasSubframeCellList-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasSubframeCellList-r10.h diff --git a/lte/rrc/asn/MeasSubframePattern-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasSubframePattern-r10.h similarity index 100% rename from lte/rrc/asn/MeasSubframePattern-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasSubframePattern-r10.h diff --git a/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h similarity index 100% rename from lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasSubframePatternConfigNeigh-r10.h diff --git a/lte/rrc/asn/MeasSubframePatternPCell-r10.h b/lte/rrc/include/liblte/rrc/asn/MeasSubframePatternPCell-r10.h similarity index 100% rename from lte/rrc/asn/MeasSubframePatternPCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/MeasSubframePatternPCell-r10.h diff --git a/lte/rrc/asn/MeasurementReport-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/MeasurementReport-r8-IEs.h similarity index 100% rename from lte/rrc/asn/MeasurementReport-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MeasurementReport-r8-IEs.h diff --git a/lte/rrc/asn/MeasurementReport-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/MeasurementReport-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/MeasurementReport-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MeasurementReport-v8a0-IEs.h diff --git a/lte/rrc/asn/MeasurementReport.h b/lte/rrc/include/liblte/rrc/asn/MeasurementReport.h similarity index 100% rename from lte/rrc/asn/MeasurementReport.h rename to lte/rrc/include/liblte/rrc/asn/MeasurementReport.h diff --git a/lte/rrc/asn/MobilityControlInfo.h b/lte/rrc/include/liblte/rrc/asn/MobilityControlInfo.h similarity index 100% rename from lte/rrc/asn/MobilityControlInfo.h rename to lte/rrc/include/liblte/rrc/asn/MobilityControlInfo.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.h diff --git a/lte/rrc/asn/MobilityFromEUTRACommand.h b/lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand.h similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand.h rename to lte/rrc/include/liblte/rrc/asn/MobilityFromEUTRACommand.h diff --git a/lte/rrc/asn/MobilityParametersCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/MobilityParametersCDMA2000.h similarity index 100% rename from lte/rrc/asn/MobilityParametersCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/MobilityParametersCDMA2000.h diff --git a/lte/rrc/asn/MobilityStateParameters.h b/lte/rrc/include/liblte/rrc/asn/MobilityStateParameters.h similarity index 100% rename from lte/rrc/asn/MobilityStateParameters.h rename to lte/rrc/include/liblte/rrc/asn/MobilityStateParameters.h diff --git a/lte/rrc/asn/N1-PUCCH-AN-PersistentList.h b/lte/rrc/include/liblte/rrc/asn/N1-PUCCH-AN-PersistentList.h similarity index 100% rename from lte/rrc/asn/N1-PUCCH-AN-PersistentList.h rename to lte/rrc/include/liblte/rrc/asn/N1-PUCCH-AN-PersistentList.h diff --git a/lte/rrc/asn/N1PUCCH-AN-CS-r10.h b/lte/rrc/include/liblte/rrc/asn/N1PUCCH-AN-CS-r10.h similarity index 100% rename from lte/rrc/asn/N1PUCCH-AN-CS-r10.h rename to lte/rrc/include/liblte/rrc/asn/N1PUCCH-AN-CS-r10.h diff --git a/lte/rrc/asn/N1PUCCH-AN-PersistentList.h b/lte/rrc/include/liblte/rrc/asn/N1PUCCH-AN-PersistentList.h similarity index 100% rename from lte/rrc/asn/N1PUCCH-AN-PersistentList.h rename to lte/rrc/include/liblte/rrc/asn/N1PUCCH-AN-PersistentList.h diff --git a/lte/rrc/asn/NULL.h b/lte/rrc/include/liblte/rrc/asn/NULL.h similarity index 100% rename from lte/rrc/asn/NULL.h rename to lte/rrc/include/liblte/rrc/asn/NULL.h diff --git a/lte/rrc/asn/NativeEnumerated.h b/lte/rrc/include/liblte/rrc/asn/NativeEnumerated.h similarity index 100% rename from lte/rrc/asn/NativeEnumerated.h rename to lte/rrc/include/liblte/rrc/asn/NativeEnumerated.h diff --git a/lte/rrc/asn/NativeInteger.h b/lte/rrc/include/liblte/rrc/asn/NativeInteger.h similarity index 100% rename from lte/rrc/asn/NativeInteger.h rename to lte/rrc/include/liblte/rrc/asn/NativeInteger.h diff --git a/lte/rrc/asn/NeighCellCDMA2000-v920.h b/lte/rrc/include/liblte/rrc/asn/NeighCellCDMA2000-v920.h similarity index 100% rename from lte/rrc/asn/NeighCellCDMA2000-v920.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellCDMA2000-v920.h diff --git a/lte/rrc/asn/NeighCellCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/NeighCellCDMA2000.h similarity index 100% rename from lte/rrc/asn/NeighCellCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellCDMA2000.h diff --git a/lte/rrc/asn/NeighCellConfig.h b/lte/rrc/include/liblte/rrc/asn/NeighCellConfig.h similarity index 100% rename from lte/rrc/asn/NeighCellConfig.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellConfig.h diff --git a/lte/rrc/asn/NeighCellListCDMA2000-v920.h b/lte/rrc/include/liblte/rrc/asn/NeighCellListCDMA2000-v920.h similarity index 100% rename from lte/rrc/asn/NeighCellListCDMA2000-v920.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellListCDMA2000-v920.h diff --git a/lte/rrc/asn/NeighCellListCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/NeighCellListCDMA2000.h similarity index 100% rename from lte/rrc/asn/NeighCellListCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellListCDMA2000.h diff --git a/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h b/lte/rrc/include/liblte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h similarity index 100% rename from lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.h diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h b/lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.h diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassCDMA2000.h similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassCDMA2000.h diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h b/lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.h diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/NeighCellsPerBandclassListCDMA2000.h diff --git a/lte/rrc/asn/NextHopChainingCount.h b/lte/rrc/include/liblte/rrc/asn/NextHopChainingCount.h similarity index 100% rename from lte/rrc/asn/NextHopChainingCount.h rename to lte/rrc/include/liblte/rrc/asn/NextHopChainingCount.h diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h b/lte/rrc/include/liblte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h similarity index 100% rename from lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h rename to lte/rrc/include/liblte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.h diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h b/lte/rrc/include/liblte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h similarity index 100% rename from lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h rename to lte/rrc/include/liblte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.h diff --git a/lte/rrc/asn/OCTET_STRING.h b/lte/rrc/include/liblte/rrc/asn/OCTET_STRING.h similarity index 100% rename from lte/rrc/asn/OCTET_STRING.h rename to lte/rrc/include/liblte/rrc/asn/OCTET_STRING.h diff --git a/lte/rrc/asn/OtherConfig-r9.h b/lte/rrc/include/liblte/rrc/asn/OtherConfig-r9.h similarity index 100% rename from lte/rrc/asn/OtherConfig-r9.h rename to lte/rrc/include/liblte/rrc/asn/OtherConfig-r9.h diff --git a/lte/rrc/asn/P-Max.h b/lte/rrc/include/liblte/rrc/asn/P-Max.h similarity index 100% rename from lte/rrc/asn/P-Max.h rename to lte/rrc/include/liblte/rrc/asn/P-Max.h diff --git a/lte/rrc/asn/PCCH-Config.h b/lte/rrc/include/liblte/rrc/asn/PCCH-Config.h similarity index 100% rename from lte/rrc/asn/PCCH-Config.h rename to lte/rrc/include/liblte/rrc/asn/PCCH-Config.h diff --git a/lte/rrc/asn/PCCH-Message.h b/lte/rrc/include/liblte/rrc/asn/PCCH-Message.h similarity index 100% rename from lte/rrc/asn/PCCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/PCCH-Message.h diff --git a/lte/rrc/asn/PCCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/PCCH-MessageType.h similarity index 100% rename from lte/rrc/asn/PCCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/PCCH-MessageType.h diff --git a/lte/rrc/asn/PDCP-Config.h b/lte/rrc/include/liblte/rrc/asn/PDCP-Config.h similarity index 100% rename from lte/rrc/asn/PDCP-Config.h rename to lte/rrc/include/liblte/rrc/asn/PDCP-Config.h diff --git a/lte/rrc/asn/PDCP-Parameters.h b/lte/rrc/include/liblte/rrc/asn/PDCP-Parameters.h similarity index 100% rename from lte/rrc/asn/PDCP-Parameters.h rename to lte/rrc/include/liblte/rrc/asn/PDCP-Parameters.h diff --git a/lte/rrc/asn/PDSCH-ConfigCommon.h b/lte/rrc/include/liblte/rrc/asn/PDSCH-ConfigCommon.h similarity index 100% rename from lte/rrc/asn/PDSCH-ConfigCommon.h rename to lte/rrc/include/liblte/rrc/asn/PDSCH-ConfigCommon.h diff --git a/lte/rrc/asn/PDSCH-ConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/PDSCH-ConfigDedicated.h similarity index 100% rename from lte/rrc/asn/PDSCH-ConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/PDSCH-ConfigDedicated.h diff --git a/lte/rrc/asn/PHICH-Config.h b/lte/rrc/include/liblte/rrc/asn/PHICH-Config.h similarity index 100% rename from lte/rrc/asn/PHICH-Config.h rename to lte/rrc/include/liblte/rrc/asn/PHICH-Config.h diff --git a/lte/rrc/asn/PLMN-Identity.h b/lte/rrc/include/liblte/rrc/asn/PLMN-Identity.h similarity index 100% rename from lte/rrc/asn/PLMN-Identity.h rename to lte/rrc/include/liblte/rrc/asn/PLMN-Identity.h diff --git a/lte/rrc/asn/PLMN-IdentityInfo.h b/lte/rrc/include/liblte/rrc/asn/PLMN-IdentityInfo.h similarity index 100% rename from lte/rrc/asn/PLMN-IdentityInfo.h rename to lte/rrc/include/liblte/rrc/asn/PLMN-IdentityInfo.h diff --git a/lte/rrc/asn/PLMN-IdentityList.h b/lte/rrc/include/liblte/rrc/asn/PLMN-IdentityList.h similarity index 100% rename from lte/rrc/asn/PLMN-IdentityList.h rename to lte/rrc/include/liblte/rrc/asn/PLMN-IdentityList.h diff --git a/lte/rrc/asn/PLMN-IdentityList2.h b/lte/rrc/include/liblte/rrc/asn/PLMN-IdentityList2.h similarity index 100% rename from lte/rrc/asn/PLMN-IdentityList2.h rename to lte/rrc/include/liblte/rrc/asn/PLMN-IdentityList2.h diff --git a/lte/rrc/asn/PMCH-Config-r9.h b/lte/rrc/include/liblte/rrc/asn/PMCH-Config-r9.h similarity index 100% rename from lte/rrc/asn/PMCH-Config-r9.h rename to lte/rrc/include/liblte/rrc/asn/PMCH-Config-r9.h diff --git a/lte/rrc/asn/PMCH-Info-r9.h b/lte/rrc/include/liblte/rrc/asn/PMCH-Info-r9.h similarity index 100% rename from lte/rrc/asn/PMCH-Info-r9.h rename to lte/rrc/include/liblte/rrc/asn/PMCH-Info-r9.h diff --git a/lte/rrc/asn/PMCH-InfoList-r9.h b/lte/rrc/include/liblte/rrc/asn/PMCH-InfoList-r9.h similarity index 100% rename from lte/rrc/asn/PMCH-InfoList-r9.h rename to lte/rrc/include/liblte/rrc/asn/PMCH-InfoList-r9.h diff --git a/lte/rrc/asn/PRACH-Config.h b/lte/rrc/include/liblte/rrc/asn/PRACH-Config.h similarity index 100% rename from lte/rrc/asn/PRACH-Config.h rename to lte/rrc/include/liblte/rrc/asn/PRACH-Config.h diff --git a/lte/rrc/asn/PRACH-ConfigInfo.h b/lte/rrc/include/liblte/rrc/asn/PRACH-ConfigInfo.h similarity index 100% rename from lte/rrc/asn/PRACH-ConfigInfo.h rename to lte/rrc/include/liblte/rrc/asn/PRACH-ConfigInfo.h diff --git a/lte/rrc/asn/PRACH-ConfigSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/PRACH-ConfigSCell-r10.h similarity index 100% rename from lte/rrc/asn/PRACH-ConfigSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/PRACH-ConfigSCell-r10.h diff --git a/lte/rrc/asn/PRACH-ConfigSIB.h b/lte/rrc/include/liblte/rrc/asn/PRACH-ConfigSIB.h similarity index 100% rename from lte/rrc/asn/PRACH-ConfigSIB.h rename to lte/rrc/include/liblte/rrc/asn/PRACH-ConfigSIB.h diff --git a/lte/rrc/asn/PUCCH-ConfigCommon.h b/lte/rrc/include/liblte/rrc/asn/PUCCH-ConfigCommon.h similarity index 100% rename from lte/rrc/asn/PUCCH-ConfigCommon.h rename to lte/rrc/include/liblte/rrc/asn/PUCCH-ConfigCommon.h diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h b/lte/rrc/include/liblte/rrc/asn/PUCCH-ConfigDedicated-v1020.h similarity index 100% rename from lte/rrc/asn/PUCCH-ConfigDedicated-v1020.h rename to lte/rrc/include/liblte/rrc/asn/PUCCH-ConfigDedicated-v1020.h diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/PUCCH-ConfigDedicated.h similarity index 100% rename from lte/rrc/asn/PUCCH-ConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/PUCCH-ConfigDedicated.h diff --git a/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h b/lte/rrc/include/liblte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h similarity index 100% rename from lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h rename to lte/rrc/include/liblte/rrc/asn/PUSCH-CAConfigDedicated-vlola.h diff --git a/lte/rrc/asn/PUSCH-ConfigCommon.h b/lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigCommon.h similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigCommon.h rename to lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigCommon.h diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h b/lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigDedicated-v1020.h similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigDedicated-v1020.h rename to lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigDedicated-v1020.h diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigDedicated.h similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigDedicated.h diff --git a/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.h diff --git a/lte/rrc/asn/Paging-v890-IEs.h b/lte/rrc/include/liblte/rrc/asn/Paging-v890-IEs.h similarity index 100% rename from lte/rrc/asn/Paging-v890-IEs.h rename to lte/rrc/include/liblte/rrc/asn/Paging-v890-IEs.h diff --git a/lte/rrc/asn/Paging-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/Paging-v920-IEs.h similarity index 100% rename from lte/rrc/asn/Paging-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/Paging-v920-IEs.h diff --git a/lte/rrc/asn/Paging.h b/lte/rrc/include/liblte/rrc/asn/Paging.h similarity index 100% rename from lte/rrc/asn/Paging.h rename to lte/rrc/include/liblte/rrc/asn/Paging.h diff --git a/lte/rrc/asn/PagingRecord.h b/lte/rrc/include/liblte/rrc/asn/PagingRecord.h similarity index 100% rename from lte/rrc/asn/PagingRecord.h rename to lte/rrc/include/liblte/rrc/asn/PagingRecord.h diff --git a/lte/rrc/asn/PagingRecordList.h b/lte/rrc/include/liblte/rrc/asn/PagingRecordList.h similarity index 100% rename from lte/rrc/asn/PagingRecordList.h rename to lte/rrc/include/liblte/rrc/asn/PagingRecordList.h diff --git a/lte/rrc/asn/PagingUE-Identity.h b/lte/rrc/include/liblte/rrc/asn/PagingUE-Identity.h similarity index 100% rename from lte/rrc/asn/PagingUE-Identity.h rename to lte/rrc/include/liblte/rrc/asn/PagingUE-Identity.h diff --git a/lte/rrc/asn/PhyLayerParameters-v1020.h b/lte/rrc/include/liblte/rrc/asn/PhyLayerParameters-v1020.h similarity index 100% rename from lte/rrc/asn/PhyLayerParameters-v1020.h rename to lte/rrc/include/liblte/rrc/asn/PhyLayerParameters-v1020.h diff --git a/lte/rrc/asn/PhyLayerParameters-v920.h b/lte/rrc/include/liblte/rrc/asn/PhyLayerParameters-v920.h similarity index 100% rename from lte/rrc/asn/PhyLayerParameters-v920.h rename to lte/rrc/include/liblte/rrc/asn/PhyLayerParameters-v920.h diff --git a/lte/rrc/asn/PhyLayerParameters.h b/lte/rrc/include/liblte/rrc/asn/PhyLayerParameters.h similarity index 100% rename from lte/rrc/asn/PhyLayerParameters.h rename to lte/rrc/include/liblte/rrc/asn/PhyLayerParameters.h diff --git a/lte/rrc/asn/PhysCellId.h b/lte/rrc/include/liblte/rrc/asn/PhysCellId.h similarity index 100% rename from lte/rrc/asn/PhysCellId.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellId.h diff --git a/lte/rrc/asn/PhysCellIdCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdCDMA2000.h similarity index 100% rename from lte/rrc/asn/PhysCellIdCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdCDMA2000.h diff --git a/lte/rrc/asn/PhysCellIdGERAN.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdGERAN.h similarity index 100% rename from lte/rrc/asn/PhysCellIdGERAN.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdGERAN.h diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000-v920.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdListCDMA2000-v920.h similarity index 100% rename from lte/rrc/asn/PhysCellIdListCDMA2000-v920.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdListCDMA2000-v920.h diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdListCDMA2000.h similarity index 100% rename from lte/rrc/asn/PhysCellIdListCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdListCDMA2000.h diff --git a/lte/rrc/asn/PhysCellIdRange.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdRange.h similarity index 100% rename from lte/rrc/asn/PhysCellIdRange.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdRange.h diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h similarity index 100% rename from lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.h diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h similarity index 100% rename from lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.h diff --git a/lte/rrc/asn/PhysCellIdUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/PhysCellIdUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdUTRA-FDD.h diff --git a/lte/rrc/asn/PhysCellIdUTRA-TDD.h b/lte/rrc/include/liblte/rrc/asn/PhysCellIdUTRA-TDD.h similarity index 100% rename from lte/rrc/asn/PhysCellIdUTRA-TDD.h rename to lte/rrc/include/liblte/rrc/asn/PhysCellIdUTRA-TDD.h diff --git a/lte/rrc/asn/PhysicalConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/PhysicalConfigDedicated.h similarity index 100% rename from lte/rrc/asn/PhysicalConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/PhysicalConfigDedicated.h diff --git a/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h similarity index 100% rename from lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/PhysicalConfigDedicatedSCell-r10.h diff --git a/lte/rrc/asn/PollByte.h b/lte/rrc/include/liblte/rrc/asn/PollByte.h similarity index 100% rename from lte/rrc/asn/PollByte.h rename to lte/rrc/include/liblte/rrc/asn/PollByte.h diff --git a/lte/rrc/asn/PollPDU.h b/lte/rrc/include/liblte/rrc/asn/PollPDU.h similarity index 100% rename from lte/rrc/asn/PollPDU.h rename to lte/rrc/include/liblte/rrc/asn/PollPDU.h diff --git a/lte/rrc/asn/PreRegistrationInfoHRPD.h b/lte/rrc/include/liblte/rrc/asn/PreRegistrationInfoHRPD.h similarity index 100% rename from lte/rrc/asn/PreRegistrationInfoHRPD.h rename to lte/rrc/include/liblte/rrc/asn/PreRegistrationInfoHRPD.h diff --git a/lte/rrc/asn/PreRegistrationZoneIdHRPD.h b/lte/rrc/include/liblte/rrc/asn/PreRegistrationZoneIdHRPD.h similarity index 100% rename from lte/rrc/asn/PreRegistrationZoneIdHRPD.h rename to lte/rrc/include/liblte/rrc/asn/PreRegistrationZoneIdHRPD.h diff --git a/lte/rrc/asn/PresenceAntennaPort1.h b/lte/rrc/include/liblte/rrc/asn/PresenceAntennaPort1.h similarity index 100% rename from lte/rrc/asn/PresenceAntennaPort1.h rename to lte/rrc/include/liblte/rrc/asn/PresenceAntennaPort1.h diff --git a/lte/rrc/asn/ProximityIndication-r9-IEs.h b/lte/rrc/include/liblte/rrc/asn/ProximityIndication-r9-IEs.h similarity index 100% rename from lte/rrc/asn/ProximityIndication-r9-IEs.h rename to lte/rrc/include/liblte/rrc/asn/ProximityIndication-r9-IEs.h diff --git a/lte/rrc/asn/ProximityIndication-r9.h b/lte/rrc/include/liblte/rrc/asn/ProximityIndication-r9.h similarity index 100% rename from lte/rrc/asn/ProximityIndication-r9.h rename to lte/rrc/include/liblte/rrc/asn/ProximityIndication-r9.h diff --git a/lte/rrc/asn/ProximityIndication-v930-IEs.h b/lte/rrc/include/liblte/rrc/asn/ProximityIndication-v930-IEs.h similarity index 100% rename from lte/rrc/asn/ProximityIndication-v930-IEs.h rename to lte/rrc/include/liblte/rrc/asn/ProximityIndication-v930-IEs.h diff --git a/lte/rrc/asn/Q-OffsetRange.h b/lte/rrc/include/liblte/rrc/asn/Q-OffsetRange.h similarity index 100% rename from lte/rrc/asn/Q-OffsetRange.h rename to lte/rrc/include/liblte/rrc/asn/Q-OffsetRange.h diff --git a/lte/rrc/asn/Q-OffsetRangeInterRAT.h b/lte/rrc/include/liblte/rrc/asn/Q-OffsetRangeInterRAT.h similarity index 100% rename from lte/rrc/asn/Q-OffsetRangeInterRAT.h rename to lte/rrc/include/liblte/rrc/asn/Q-OffsetRangeInterRAT.h diff --git a/lte/rrc/asn/Q-QualMin-r9.h b/lte/rrc/include/liblte/rrc/asn/Q-QualMin-r9.h similarity index 100% rename from lte/rrc/asn/Q-QualMin-r9.h rename to lte/rrc/include/liblte/rrc/asn/Q-QualMin-r9.h diff --git a/lte/rrc/asn/Q-RxLevMin.h b/lte/rrc/include/liblte/rrc/asn/Q-RxLevMin.h similarity index 100% rename from lte/rrc/asn/Q-RxLevMin.h rename to lte/rrc/include/liblte/rrc/asn/Q-RxLevMin.h diff --git a/lte/rrc/asn/QuantityConfig.h b/lte/rrc/include/liblte/rrc/asn/QuantityConfig.h similarity index 100% rename from lte/rrc/asn/QuantityConfig.h rename to lte/rrc/include/liblte/rrc/asn/QuantityConfig.h diff --git a/lte/rrc/asn/QuantityConfigCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/QuantityConfigCDMA2000.h similarity index 100% rename from lte/rrc/asn/QuantityConfigCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/QuantityConfigCDMA2000.h diff --git a/lte/rrc/asn/QuantityConfigEUTRA.h b/lte/rrc/include/liblte/rrc/asn/QuantityConfigEUTRA.h similarity index 100% rename from lte/rrc/asn/QuantityConfigEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/QuantityConfigEUTRA.h diff --git a/lte/rrc/asn/QuantityConfigGERAN.h b/lte/rrc/include/liblte/rrc/asn/QuantityConfigGERAN.h similarity index 100% rename from lte/rrc/asn/QuantityConfigGERAN.h rename to lte/rrc/include/liblte/rrc/asn/QuantityConfigGERAN.h diff --git a/lte/rrc/asn/QuantityConfigUTRA-v1020.h b/lte/rrc/include/liblte/rrc/asn/QuantityConfigUTRA-v1020.h similarity index 100% rename from lte/rrc/asn/QuantityConfigUTRA-v1020.h rename to lte/rrc/include/liblte/rrc/asn/QuantityConfigUTRA-v1020.h diff --git a/lte/rrc/asn/QuantityConfigUTRA.h b/lte/rrc/include/liblte/rrc/asn/QuantityConfigUTRA.h similarity index 100% rename from lte/rrc/asn/QuantityConfigUTRA.h rename to lte/rrc/include/liblte/rrc/asn/QuantityConfigUTRA.h diff --git a/lte/rrc/asn/RACH-ConfigCommon.h b/lte/rrc/include/liblte/rrc/asn/RACH-ConfigCommon.h similarity index 100% rename from lte/rrc/asn/RACH-ConfigCommon.h rename to lte/rrc/include/liblte/rrc/asn/RACH-ConfigCommon.h diff --git a/lte/rrc/asn/RACH-ConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/RACH-ConfigDedicated.h similarity index 100% rename from lte/rrc/asn/RACH-ConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/RACH-ConfigDedicated.h diff --git a/lte/rrc/asn/RAND-CDMA2000.h b/lte/rrc/include/liblte/rrc/asn/RAND-CDMA2000.h similarity index 100% rename from lte/rrc/asn/RAND-CDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/RAND-CDMA2000.h diff --git a/lte/rrc/asn/RAT-Type.h b/lte/rrc/include/liblte/rrc/asn/RAT-Type.h similarity index 100% rename from lte/rrc/asn/RAT-Type.h rename to lte/rrc/include/liblte/rrc/asn/RAT-Type.h diff --git a/lte/rrc/asn/RF-Parameters-v1020.h b/lte/rrc/include/liblte/rrc/asn/RF-Parameters-v1020.h similarity index 100% rename from lte/rrc/asn/RF-Parameters-v1020.h rename to lte/rrc/include/liblte/rrc/asn/RF-Parameters-v1020.h diff --git a/lte/rrc/asn/RF-Parameters.h b/lte/rrc/include/liblte/rrc/asn/RF-Parameters.h similarity index 100% rename from lte/rrc/asn/RF-Parameters.h rename to lte/rrc/include/liblte/rrc/asn/RF-Parameters.h diff --git a/lte/rrc/asn/RLC-Config.h b/lte/rrc/include/liblte/rrc/asn/RLC-Config.h similarity index 100% rename from lte/rrc/asn/RLC-Config.h rename to lte/rrc/include/liblte/rrc/asn/RLC-Config.h diff --git a/lte/rrc/asn/RLF-Report-r9.h b/lte/rrc/include/liblte/rrc/asn/RLF-Report-r9.h similarity index 100% rename from lte/rrc/asn/RLF-Report-r9.h rename to lte/rrc/include/liblte/rrc/asn/RLF-Report-r9.h diff --git a/lte/rrc/asn/RLF-TimersAndConstants-r9.h b/lte/rrc/include/liblte/rrc/asn/RLF-TimersAndConstants-r9.h similarity index 100% rename from lte/rrc/asn/RLF-TimersAndConstants-r9.h rename to lte/rrc/include/liblte/rrc/asn/RLF-TimersAndConstants-r9.h diff --git a/lte/rrc/asn/RN-SubframeConfig-r10.h b/lte/rrc/include/liblte/rrc/asn/RN-SubframeConfig-r10.h similarity index 100% rename from lte/rrc/asn/RN-SubframeConfig-r10.h rename to lte/rrc/include/liblte/rrc/asn/RN-SubframeConfig-r10.h diff --git a/lte/rrc/asn/RN-SystemInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/RN-SystemInfo-r10.h similarity index 100% rename from lte/rrc/asn/RN-SystemInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/RN-SystemInfo-r10.h diff --git a/lte/rrc/asn/RNReconfiguration-r10-IEs.h b/lte/rrc/include/liblte/rrc/asn/RNReconfiguration-r10-IEs.h similarity index 100% rename from lte/rrc/asn/RNReconfiguration-r10-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RNReconfiguration-r10-IEs.h diff --git a/lte/rrc/asn/RNReconfiguration-r10.h b/lte/rrc/include/liblte/rrc/asn/RNReconfiguration-r10.h similarity index 100% rename from lte/rrc/asn/RNReconfiguration-r10.h rename to lte/rrc/include/liblte/rrc/asn/RNReconfiguration-r10.h diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.h b/lte/rrc/include/liblte/rrc/asn/RNReconfigurationComplete-r10-IEs.h similarity index 100% rename from lte/rrc/asn/RNReconfigurationComplete-r10-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RNReconfigurationComplete-r10-IEs.h diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10.h b/lte/rrc/include/liblte/rrc/asn/RNReconfigurationComplete-r10.h similarity index 100% rename from lte/rrc/asn/RNReconfigurationComplete-r10.h rename to lte/rrc/include/liblte/rrc/asn/RNReconfigurationComplete-r10.h diff --git a/lte/rrc/asn/RRC-TransactionIdentifier.h b/lte/rrc/include/liblte/rrc/asn/RRC-TransactionIdentifier.h similarity index 100% rename from lte/rrc/asn/RRC-TransactionIdentifier.h rename to lte/rrc/include/liblte/rrc/asn/RRC-TransactionIdentifier.h diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfiguration.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfiguration.h diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReconfigurationComplete.h diff --git a/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishment-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishment.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishment.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishment.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishment.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentComplete.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentReject.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentReject.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentReject.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentRequest.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentRequest.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReestablishmentRequest.h diff --git a/lte/rrc/asn/RRCConnectionReject-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReject-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReject-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReject-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReject-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReject-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReject-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReject-v1020-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReject-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReject-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReject-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionReject.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionReject.h similarity index 100% rename from lte/rrc/asn/RRCConnectionReject.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionReject.h diff --git a/lte/rrc/asn/RRCConnectionRelease-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-v1020-IEs.h diff --git a/lte/rrc/asn/RRCConnectionRelease-v890-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-v890-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-v890-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-v890-IEs.h diff --git a/lte/rrc/asn/RRCConnectionRelease-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-v920-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease-v920-IEs.h diff --git a/lte/rrc/asn/RRCConnectionRelease.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRelease.h diff --git a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRequest-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRequest-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRequest-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionRequest.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionRequest.h similarity index 100% rename from lte/rrc/asn/RRCConnectionRequest.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionRequest.h diff --git a/lte/rrc/asn/RRCConnectionSetup-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetup-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetup-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetup-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetup-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionSetup.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetup.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetup.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetup.h diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.h diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.h diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.h diff --git a/lte/rrc/asn/RRCConnectionSetupComplete.h b/lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete.h similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete.h rename to lte/rrc/include/liblte/rrc/asn/RRCConnectionSetupComplete.h diff --git a/lte/rrc/asn/RRM-Config.h b/lte/rrc/include/liblte/rrc/asn/RRM-Config.h similarity index 100% rename from lte/rrc/asn/RRM-Config.h rename to lte/rrc/include/liblte/rrc/asn/RRM-Config.h diff --git a/lte/rrc/asn/RSRP-Range.h b/lte/rrc/include/liblte/rrc/asn/RSRP-Range.h similarity index 100% rename from lte/rrc/asn/RSRP-Range.h rename to lte/rrc/include/liblte/rrc/asn/RSRP-Range.h diff --git a/lte/rrc/asn/RSRQ-Range.h b/lte/rrc/include/liblte/rrc/asn/RSRQ-Range.h similarity index 100% rename from lte/rrc/asn/RSRQ-Range.h rename to lte/rrc/include/liblte/rrc/asn/RSRQ-Range.h diff --git a/lte/rrc/asn/RSTD-InterFreqInfo-r10.h b/lte/rrc/include/liblte/rrc/asn/RSTD-InterFreqInfo-r10.h similarity index 100% rename from lte/rrc/asn/RSTD-InterFreqInfo-r10.h rename to lte/rrc/include/liblte/rrc/asn/RSTD-InterFreqInfo-r10.h diff --git a/lte/rrc/asn/RSTD-InterFreqInfoList-r10.h b/lte/rrc/include/liblte/rrc/asn/RSTD-InterFreqInfoList-r10.h similarity index 100% rename from lte/rrc/asn/RSTD-InterFreqInfoList-r10.h rename to lte/rrc/include/liblte/rrc/asn/RSTD-InterFreqInfoList-r10.h diff --git a/lte/rrc/asn/RadioResourceConfigCommon.h b/lte/rrc/include/liblte/rrc/asn/RadioResourceConfigCommon.h similarity index 100% rename from lte/rrc/asn/RadioResourceConfigCommon.h rename to lte/rrc/include/liblte/rrc/asn/RadioResourceConfigCommon.h diff --git a/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/RadioResourceConfigCommonSCell-r10.h similarity index 100% rename from lte/rrc/asn/RadioResourceConfigCommonSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/RadioResourceConfigCommonSCell-r10.h diff --git a/lte/rrc/asn/RadioResourceConfigCommonSIB.h b/lte/rrc/include/liblte/rrc/asn/RadioResourceConfigCommonSIB.h similarity index 100% rename from lte/rrc/asn/RadioResourceConfigCommonSIB.h rename to lte/rrc/include/liblte/rrc/asn/RadioResourceConfigCommonSIB.h diff --git a/lte/rrc/asn/RadioResourceConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/RadioResourceConfigDedicated.h similarity index 100% rename from lte/rrc/asn/RadioResourceConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/RadioResourceConfigDedicated.h diff --git a/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h similarity index 100% rename from lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.h diff --git a/lte/rrc/asn/RedirectedCarrierInfo.h b/lte/rrc/include/liblte/rrc/asn/RedirectedCarrierInfo.h similarity index 100% rename from lte/rrc/asn/RedirectedCarrierInfo.h rename to lte/rrc/include/liblte/rrc/asn/RedirectedCarrierInfo.h diff --git a/lte/rrc/asn/ReestabUE-Identity.h b/lte/rrc/include/liblte/rrc/asn/ReestabUE-Identity.h similarity index 100% rename from lte/rrc/asn/ReestabUE-Identity.h rename to lte/rrc/include/liblte/rrc/asn/ReestabUE-Identity.h diff --git a/lte/rrc/asn/ReestablishmentCause.h b/lte/rrc/include/liblte/rrc/asn/ReestablishmentCause.h similarity index 100% rename from lte/rrc/asn/ReestablishmentCause.h rename to lte/rrc/include/liblte/rrc/asn/ReestablishmentCause.h diff --git a/lte/rrc/asn/ReestablishmentInfo.h b/lte/rrc/include/liblte/rrc/asn/ReestablishmentInfo.h similarity index 100% rename from lte/rrc/asn/ReestablishmentInfo.h rename to lte/rrc/include/liblte/rrc/asn/ReestablishmentInfo.h diff --git a/lte/rrc/asn/RegisteredMME.h b/lte/rrc/include/liblte/rrc/asn/RegisteredMME.h similarity index 100% rename from lte/rrc/asn/RegisteredMME.h rename to lte/rrc/include/liblte/rrc/asn/RegisteredMME.h diff --git a/lte/rrc/asn/ReleaseCause.h b/lte/rrc/include/liblte/rrc/asn/ReleaseCause.h similarity index 100% rename from lte/rrc/asn/ReleaseCause.h rename to lte/rrc/include/liblte/rrc/asn/ReleaseCause.h diff --git a/lte/rrc/asn/ReportConfigEUTRA.h b/lte/rrc/include/liblte/rrc/asn/ReportConfigEUTRA.h similarity index 100% rename from lte/rrc/asn/ReportConfigEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/ReportConfigEUTRA.h diff --git a/lte/rrc/asn/ReportConfigId.h b/lte/rrc/include/liblte/rrc/asn/ReportConfigId.h similarity index 100% rename from lte/rrc/asn/ReportConfigId.h rename to lte/rrc/include/liblte/rrc/asn/ReportConfigId.h diff --git a/lte/rrc/asn/ReportConfigInterRAT.h b/lte/rrc/include/liblte/rrc/asn/ReportConfigInterRAT.h similarity index 100% rename from lte/rrc/asn/ReportConfigInterRAT.h rename to lte/rrc/include/liblte/rrc/asn/ReportConfigInterRAT.h diff --git a/lte/rrc/asn/ReportConfigToAddMod.h b/lte/rrc/include/liblte/rrc/asn/ReportConfigToAddMod.h similarity index 100% rename from lte/rrc/asn/ReportConfigToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/ReportConfigToAddMod.h diff --git a/lte/rrc/asn/ReportConfigToAddModList.h b/lte/rrc/include/liblte/rrc/asn/ReportConfigToAddModList.h similarity index 100% rename from lte/rrc/asn/ReportConfigToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/ReportConfigToAddModList.h diff --git a/lte/rrc/asn/ReportConfigToRemoveList.h b/lte/rrc/include/liblte/rrc/asn/ReportConfigToRemoveList.h similarity index 100% rename from lte/rrc/asn/ReportConfigToRemoveList.h rename to lte/rrc/include/liblte/rrc/asn/ReportConfigToRemoveList.h diff --git a/lte/rrc/asn/ReportInterval.h b/lte/rrc/include/liblte/rrc/asn/ReportInterval.h similarity index 100% rename from lte/rrc/asn/ReportInterval.h rename to lte/rrc/include/liblte/rrc/asn/ReportInterval.h diff --git a/lte/rrc/asn/ReportProximityConfig-r9.h b/lte/rrc/include/liblte/rrc/asn/ReportProximityConfig-r9.h similarity index 100% rename from lte/rrc/asn/ReportProximityConfig-r9.h rename to lte/rrc/include/liblte/rrc/asn/ReportProximityConfig-r9.h diff --git a/lte/rrc/asn/ReselectionThreshold.h b/lte/rrc/include/liblte/rrc/asn/ReselectionThreshold.h similarity index 100% rename from lte/rrc/asn/ReselectionThreshold.h rename to lte/rrc/include/liblte/rrc/asn/ReselectionThreshold.h diff --git a/lte/rrc/asn/ReselectionThresholdQ-r9.h b/lte/rrc/include/liblte/rrc/asn/ReselectionThresholdQ-r9.h similarity index 100% rename from lte/rrc/asn/ReselectionThresholdQ-r9.h rename to lte/rrc/include/liblte/rrc/asn/ReselectionThresholdQ-r9.h diff --git a/lte/rrc/asn/S-TMSI.h b/lte/rrc/include/liblte/rrc/asn/S-TMSI.h similarity index 100% rename from lte/rrc/asn/S-TMSI.h rename to lte/rrc/include/liblte/rrc/asn/S-TMSI.h diff --git a/lte/rrc/asn/SCellIndex-r10.h b/lte/rrc/include/liblte/rrc/asn/SCellIndex-r10.h similarity index 100% rename from lte/rrc/asn/SCellIndex-r10.h rename to lte/rrc/include/liblte/rrc/asn/SCellIndex-r10.h diff --git a/lte/rrc/asn/SCellToAddMod-r10.h b/lte/rrc/include/liblte/rrc/asn/SCellToAddMod-r10.h similarity index 100% rename from lte/rrc/asn/SCellToAddMod-r10.h rename to lte/rrc/include/liblte/rrc/asn/SCellToAddMod-r10.h diff --git a/lte/rrc/asn/SCellToAddModList-r10.h b/lte/rrc/include/liblte/rrc/asn/SCellToAddModList-r10.h similarity index 100% rename from lte/rrc/asn/SCellToAddModList-r10.h rename to lte/rrc/include/liblte/rrc/asn/SCellToAddModList-r10.h diff --git a/lte/rrc/asn/SCellToReleaseList-r10.h b/lte/rrc/include/liblte/rrc/asn/SCellToReleaseList-r10.h similarity index 100% rename from lte/rrc/asn/SCellToReleaseList-r10.h rename to lte/rrc/include/liblte/rrc/asn/SCellToReleaseList-r10.h diff --git a/lte/rrc/asn/SI-OrPSI-GERAN.h b/lte/rrc/include/liblte/rrc/asn/SI-OrPSI-GERAN.h similarity index 100% rename from lte/rrc/asn/SI-OrPSI-GERAN.h rename to lte/rrc/include/liblte/rrc/asn/SI-OrPSI-GERAN.h diff --git a/lte/rrc/asn/SIB-MappingInfo.h b/lte/rrc/include/liblte/rrc/asn/SIB-MappingInfo.h similarity index 100% rename from lte/rrc/asn/SIB-MappingInfo.h rename to lte/rrc/include/liblte/rrc/asn/SIB-MappingInfo.h diff --git a/lte/rrc/asn/SIB-Type.h b/lte/rrc/include/liblte/rrc/asn/SIB-Type.h similarity index 100% rename from lte/rrc/asn/SIB-Type.h rename to lte/rrc/include/liblte/rrc/asn/SIB-Type.h diff --git a/lte/rrc/asn/SN-FieldLength.h b/lte/rrc/include/liblte/rrc/asn/SN-FieldLength.h similarity index 100% rename from lte/rrc/asn/SN-FieldLength.h rename to lte/rrc/include/liblte/rrc/asn/SN-FieldLength.h diff --git a/lte/rrc/asn/SON-Parameters-r9.h b/lte/rrc/include/liblte/rrc/asn/SON-Parameters-r9.h similarity index 100% rename from lte/rrc/asn/SON-Parameters-r9.h rename to lte/rrc/include/liblte/rrc/asn/SON-Parameters-r9.h diff --git a/lte/rrc/asn/SPS-Config.h b/lte/rrc/include/liblte/rrc/asn/SPS-Config.h similarity index 100% rename from lte/rrc/asn/SPS-Config.h rename to lte/rrc/include/liblte/rrc/asn/SPS-Config.h diff --git a/lte/rrc/asn/SPS-ConfigDL.h b/lte/rrc/include/liblte/rrc/asn/SPS-ConfigDL.h similarity index 100% rename from lte/rrc/asn/SPS-ConfigDL.h rename to lte/rrc/include/liblte/rrc/asn/SPS-ConfigDL.h diff --git a/lte/rrc/asn/SPS-ConfigUL.h b/lte/rrc/include/liblte/rrc/asn/SPS-ConfigUL.h similarity index 100% rename from lte/rrc/asn/SPS-ConfigUL.h rename to lte/rrc/include/liblte/rrc/asn/SPS-ConfigUL.h diff --git a/lte/rrc/asn/SPS-RA-ConfigList-rlola.h b/lte/rrc/include/liblte/rrc/asn/SPS-RA-ConfigList-rlola.h similarity index 100% rename from lte/rrc/asn/SPS-RA-ConfigList-rlola.h rename to lte/rrc/include/liblte/rrc/asn/SPS-RA-ConfigList-rlola.h diff --git a/lte/rrc/asn/SRB-ToAddMod.h b/lte/rrc/include/liblte/rrc/asn/SRB-ToAddMod.h similarity index 100% rename from lte/rrc/asn/SRB-ToAddMod.h rename to lte/rrc/include/liblte/rrc/asn/SRB-ToAddMod.h diff --git a/lte/rrc/asn/SRB-ToAddModList.h b/lte/rrc/include/liblte/rrc/asn/SRB-ToAddModList.h similarity index 100% rename from lte/rrc/asn/SRB-ToAddModList.h rename to lte/rrc/include/liblte/rrc/asn/SRB-ToAddModList.h diff --git a/lte/rrc/asn/SRS-ConfigAp-r10.h b/lte/rrc/include/liblte/rrc/asn/SRS-ConfigAp-r10.h similarity index 100% rename from lte/rrc/asn/SRS-ConfigAp-r10.h rename to lte/rrc/include/liblte/rrc/asn/SRS-ConfigAp-r10.h diff --git a/lte/rrc/asn/SchedulingInfo.h b/lte/rrc/include/liblte/rrc/asn/SchedulingInfo.h similarity index 100% rename from lte/rrc/asn/SchedulingInfo.h rename to lte/rrc/include/liblte/rrc/asn/SchedulingInfo.h diff --git a/lte/rrc/asn/SchedulingInfoList.h b/lte/rrc/include/liblte/rrc/asn/SchedulingInfoList.h similarity index 100% rename from lte/rrc/asn/SchedulingInfoList.h rename to lte/rrc/include/liblte/rrc/asn/SchedulingInfoList.h diff --git a/lte/rrc/asn/SchedulingRequestConfig-v1020.h b/lte/rrc/include/liblte/rrc/asn/SchedulingRequestConfig-v1020.h similarity index 100% rename from lte/rrc/asn/SchedulingRequestConfig-v1020.h rename to lte/rrc/include/liblte/rrc/asn/SchedulingRequestConfig-v1020.h diff --git a/lte/rrc/asn/SchedulingRequestConfig.h b/lte/rrc/include/liblte/rrc/asn/SchedulingRequestConfig.h similarity index 100% rename from lte/rrc/asn/SchedulingRequestConfig.h rename to lte/rrc/include/liblte/rrc/asn/SchedulingRequestConfig.h diff --git a/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h b/lte/rrc/include/liblte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h similarity index 100% rename from lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h rename to lte/rrc/include/liblte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.h diff --git a/lte/rrc/asn/SecurityAlgorithmConfig.h b/lte/rrc/include/liblte/rrc/asn/SecurityAlgorithmConfig.h similarity index 100% rename from lte/rrc/asn/SecurityAlgorithmConfig.h rename to lte/rrc/include/liblte/rrc/asn/SecurityAlgorithmConfig.h diff --git a/lte/rrc/asn/SecurityConfigHO.h b/lte/rrc/include/liblte/rrc/asn/SecurityConfigHO.h similarity index 100% rename from lte/rrc/asn/SecurityConfigHO.h rename to lte/rrc/include/liblte/rrc/asn/SecurityConfigHO.h diff --git a/lte/rrc/asn/SecurityConfigSMC.h b/lte/rrc/include/liblte/rrc/asn/SecurityConfigSMC.h similarity index 100% rename from lte/rrc/asn/SecurityConfigSMC.h rename to lte/rrc/include/liblte/rrc/asn/SecurityConfigSMC.h diff --git a/lte/rrc/asn/SecurityModeCommand-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeCommand-r8-IEs.h similarity index 100% rename from lte/rrc/asn/SecurityModeCommand-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeCommand-r8-IEs.h diff --git a/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeCommand-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/SecurityModeCommand-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeCommand-v8a0-IEs.h diff --git a/lte/rrc/asn/SecurityModeCommand.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeCommand.h similarity index 100% rename from lte/rrc/asn/SecurityModeCommand.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeCommand.h diff --git a/lte/rrc/asn/SecurityModeComplete-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeComplete-r8-IEs.h similarity index 100% rename from lte/rrc/asn/SecurityModeComplete-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeComplete-r8-IEs.h diff --git a/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeComplete-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/SecurityModeComplete-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeComplete-v8a0-IEs.h diff --git a/lte/rrc/asn/SecurityModeComplete.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeComplete.h similarity index 100% rename from lte/rrc/asn/SecurityModeComplete.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeComplete.h diff --git a/lte/rrc/asn/SecurityModeFailure-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeFailure-r8-IEs.h similarity index 100% rename from lte/rrc/asn/SecurityModeFailure-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeFailure-r8-IEs.h diff --git a/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeFailure-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/SecurityModeFailure-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeFailure-v8a0-IEs.h diff --git a/lte/rrc/asn/SecurityModeFailure.h b/lte/rrc/include/liblte/rrc/asn/SecurityModeFailure.h similarity index 100% rename from lte/rrc/asn/SecurityModeFailure.h rename to lte/rrc/include/liblte/rrc/asn/SecurityModeFailure.h diff --git a/lte/rrc/asn/ServCellIndex-r10.h b/lte/rrc/include/liblte/rrc/asn/ServCellIndex-r10.h similarity index 100% rename from lte/rrc/asn/ServCellIndex-r10.h rename to lte/rrc/include/liblte/rrc/asn/ServCellIndex-r10.h diff --git a/lte/rrc/asn/ShortMAC-I.h b/lte/rrc/include/liblte/rrc/asn/ShortMAC-I.h similarity index 100% rename from lte/rrc/asn/ShortMAC-I.h rename to lte/rrc/include/liblte/rrc/asn/ShortMAC-I.h diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigCommon.h b/lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigCommon.h similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigCommon.h rename to lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigCommon.h diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h b/lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h rename to lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.h diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h b/lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigDedicated.h similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigDedicated.h rename to lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigDedicated.h diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h b/lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h rename to lte/rrc/include/liblte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.h diff --git a/lte/rrc/asn/SpeedStateScaleFactors.h b/lte/rrc/include/liblte/rrc/asn/SpeedStateScaleFactors.h similarity index 100% rename from lte/rrc/asn/SpeedStateScaleFactors.h rename to lte/rrc/include/liblte/rrc/asn/SpeedStateScaleFactors.h diff --git a/lte/rrc/asn/SupportedBandCombination-r10.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandCombination-r10.h similarity index 100% rename from lte/rrc/asn/SupportedBandCombination-r10.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandCombination-r10.h diff --git a/lte/rrc/asn/SupportedBandEUTRA.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandEUTRA.h similarity index 100% rename from lte/rrc/asn/SupportedBandEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandEUTRA.h diff --git a/lte/rrc/asn/SupportedBandGERAN.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandGERAN.h similarity index 100% rename from lte/rrc/asn/SupportedBandGERAN.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandGERAN.h diff --git a/lte/rrc/asn/SupportedBandList1XRTT.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandList1XRTT.h similarity index 100% rename from lte/rrc/asn/SupportedBandList1XRTT.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandList1XRTT.h diff --git a/lte/rrc/asn/SupportedBandListEUTRA.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListEUTRA.h similarity index 100% rename from lte/rrc/asn/SupportedBandListEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListEUTRA.h diff --git a/lte/rrc/asn/SupportedBandListGERAN.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListGERAN.h similarity index 100% rename from lte/rrc/asn/SupportedBandListGERAN.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListGERAN.h diff --git a/lte/rrc/asn/SupportedBandListHRPD.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListHRPD.h similarity index 100% rename from lte/rrc/asn/SupportedBandListHRPD.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListHRPD.h diff --git a/lte/rrc/asn/SupportedBandListUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-FDD.h diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD128.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-TDD128.h similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-TDD128.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-TDD128.h diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD384.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-TDD384.h similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-TDD384.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-TDD384.h diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD768.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-TDD768.h similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-TDD768.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandListUTRA-TDD768.h diff --git a/lte/rrc/asn/SupportedBandUTRA-FDD.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-FDD.h similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-FDD.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-FDD.h diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD128.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-TDD128.h similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-TDD128.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-TDD128.h diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD384.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-TDD384.h similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-TDD384.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-TDD384.h diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD768.h b/lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-TDD768.h similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-TDD768.h rename to lte/rrc/include/liblte/rrc/asn/SupportedBandUTRA-TDD768.h diff --git a/lte/rrc/asn/SystemInfoListGERAN.h b/lte/rrc/include/liblte/rrc/asn/SystemInfoListGERAN.h similarity index 100% rename from lte/rrc/asn/SystemInfoListGERAN.h rename to lte/rrc/include/liblte/rrc/asn/SystemInfoListGERAN.h diff --git a/lte/rrc/asn/SystemInformation-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/SystemInformation-r8-IEs.h similarity index 100% rename from lte/rrc/asn/SystemInformation-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformation-r8-IEs.h diff --git a/lte/rrc/asn/SystemInformation-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/SystemInformation-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/SystemInformation-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformation-v8a0-IEs.h diff --git a/lte/rrc/asn/SystemInformation.h b/lte/rrc/include/liblte/rrc/asn/SystemInformation.h similarity index 100% rename from lte/rrc/asn/SystemInformation.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformation.h diff --git a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType1-v890-IEs.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType1-v890-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType1-v890-IEs.h diff --git a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType1-v920-IEs.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType1-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType1-v920-IEs.h diff --git a/lte/rrc/asn/SystemInformationBlockType1.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType1.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType1.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType1.h diff --git a/lte/rrc/asn/SystemInformationBlockType10.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType10.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType10.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType10.h diff --git a/lte/rrc/asn/SystemInformationBlockType11.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType11.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType11.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType11.h diff --git a/lte/rrc/asn/SystemInformationBlockType12-r9.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType12-r9.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType12-r9.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType12-r9.h diff --git a/lte/rrc/asn/SystemInformationBlockType13-r9.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType13-r9.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType13-r9.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType13-r9.h diff --git a/lte/rrc/asn/SystemInformationBlockType2.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType2.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType2.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType2.h diff --git a/lte/rrc/asn/SystemInformationBlockType3.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType3.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType3.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType3.h diff --git a/lte/rrc/asn/SystemInformationBlockType4.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType4.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType4.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType4.h diff --git a/lte/rrc/asn/SystemInformationBlockType5.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType5.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType5.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType5.h diff --git a/lte/rrc/asn/SystemInformationBlockType6.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType6.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType6.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType6.h diff --git a/lte/rrc/asn/SystemInformationBlockType7.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType7.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType7.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType7.h diff --git a/lte/rrc/asn/SystemInformationBlockType8.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType8.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType8.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType8.h diff --git a/lte/rrc/asn/SystemInformationBlockType9.h b/lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType9.h similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType9.h rename to lte/rrc/include/liblte/rrc/asn/SystemInformationBlockType9.h diff --git a/lte/rrc/asn/SystemTimeInfoCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/SystemTimeInfoCDMA2000.h similarity index 100% rename from lte/rrc/asn/SystemTimeInfoCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/SystemTimeInfoCDMA2000.h diff --git a/lte/rrc/asn/T-PollRetransmit.h b/lte/rrc/include/liblte/rrc/asn/T-PollRetransmit.h similarity index 100% rename from lte/rrc/asn/T-PollRetransmit.h rename to lte/rrc/include/liblte/rrc/asn/T-PollRetransmit.h diff --git a/lte/rrc/asn/T-Reordering.h b/lte/rrc/include/liblte/rrc/asn/T-Reordering.h similarity index 100% rename from lte/rrc/asn/T-Reordering.h rename to lte/rrc/include/liblte/rrc/asn/T-Reordering.h diff --git a/lte/rrc/asn/T-Reselection.h b/lte/rrc/include/liblte/rrc/asn/T-Reselection.h similarity index 100% rename from lte/rrc/asn/T-Reselection.h rename to lte/rrc/include/liblte/rrc/asn/T-Reselection.h diff --git a/lte/rrc/asn/T-StatusProhibit.h b/lte/rrc/include/liblte/rrc/asn/T-StatusProhibit.h similarity index 100% rename from lte/rrc/asn/T-StatusProhibit.h rename to lte/rrc/include/liblte/rrc/asn/T-StatusProhibit.h diff --git a/lte/rrc/asn/TDD-Config.h b/lte/rrc/include/liblte/rrc/asn/TDD-Config.h similarity index 100% rename from lte/rrc/asn/TDD-Config.h rename to lte/rrc/include/liblte/rrc/asn/TDD-Config.h diff --git a/lte/rrc/asn/TMGI-r9.h b/lte/rrc/include/liblte/rrc/asn/TMGI-r9.h similarity index 100% rename from lte/rrc/asn/TMGI-r9.h rename to lte/rrc/include/liblte/rrc/asn/TMGI-r9.h diff --git a/lte/rrc/asn/TPC-Index.h b/lte/rrc/include/liblte/rrc/asn/TPC-Index.h similarity index 100% rename from lte/rrc/asn/TPC-Index.h rename to lte/rrc/include/liblte/rrc/asn/TPC-Index.h diff --git a/lte/rrc/asn/TPC-PDCCH-Config.h b/lte/rrc/include/liblte/rrc/asn/TPC-PDCCH-Config.h similarity index 100% rename from lte/rrc/asn/TPC-PDCCH-Config.h rename to lte/rrc/include/liblte/rrc/asn/TPC-PDCCH-Config.h diff --git a/lte/rrc/asn/ThresholdCDMA2000.h b/lte/rrc/include/liblte/rrc/asn/ThresholdCDMA2000.h similarity index 100% rename from lte/rrc/asn/ThresholdCDMA2000.h rename to lte/rrc/include/liblte/rrc/asn/ThresholdCDMA2000.h diff --git a/lte/rrc/asn/ThresholdEUTRA.h b/lte/rrc/include/liblte/rrc/asn/ThresholdEUTRA.h similarity index 100% rename from lte/rrc/asn/ThresholdEUTRA.h rename to lte/rrc/include/liblte/rrc/asn/ThresholdEUTRA.h diff --git a/lte/rrc/asn/ThresholdGERAN.h b/lte/rrc/include/liblte/rrc/asn/ThresholdGERAN.h similarity index 100% rename from lte/rrc/asn/ThresholdGERAN.h rename to lte/rrc/include/liblte/rrc/asn/ThresholdGERAN.h diff --git a/lte/rrc/asn/ThresholdUTRA.h b/lte/rrc/include/liblte/rrc/asn/ThresholdUTRA.h similarity index 100% rename from lte/rrc/asn/ThresholdUTRA.h rename to lte/rrc/include/liblte/rrc/asn/ThresholdUTRA.h diff --git a/lte/rrc/asn/TimeAlignmentTimer.h b/lte/rrc/include/liblte/rrc/asn/TimeAlignmentTimer.h similarity index 100% rename from lte/rrc/asn/TimeAlignmentTimer.h rename to lte/rrc/include/liblte/rrc/asn/TimeAlignmentTimer.h diff --git a/lte/rrc/asn/TimeToTrigger.h b/lte/rrc/include/liblte/rrc/asn/TimeToTrigger.h similarity index 100% rename from lte/rrc/asn/TimeToTrigger.h rename to lte/rrc/include/liblte/rrc/asn/TimeToTrigger.h diff --git a/lte/rrc/asn/TraceReference-r10.h b/lte/rrc/include/liblte/rrc/asn/TraceReference-r10.h similarity index 100% rename from lte/rrc/asn/TraceReference-r10.h rename to lte/rrc/include/liblte/rrc/asn/TraceReference-r10.h diff --git a/lte/rrc/asn/TrackingAreaCode.h b/lte/rrc/include/liblte/rrc/asn/TrackingAreaCode.h similarity index 100% rename from lte/rrc/asn/TrackingAreaCode.h rename to lte/rrc/include/liblte/rrc/asn/TrackingAreaCode.h diff --git a/lte/rrc/asn/TrackingAreaCodeList-r10.h b/lte/rrc/include/liblte/rrc/asn/TrackingAreaCodeList-r10.h similarity index 100% rename from lte/rrc/asn/TrackingAreaCodeList-r10.h rename to lte/rrc/include/liblte/rrc/asn/TrackingAreaCodeList-r10.h diff --git a/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h b/lte/rrc/include/liblte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h similarity index 100% rename from lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h rename to lte/rrc/include/liblte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.h diff --git a/lte/rrc/asn/UE-CapabilityRAT-Container.h b/lte/rrc/include/liblte/rrc/asn/UE-CapabilityRAT-Container.h similarity index 100% rename from lte/rrc/asn/UE-CapabilityRAT-Container.h rename to lte/rrc/include/liblte/rrc/asn/UE-CapabilityRAT-Container.h diff --git a/lte/rrc/asn/UE-CapabilityRAT-ContainerList.h b/lte/rrc/include/liblte/rrc/asn/UE-CapabilityRAT-ContainerList.h similarity index 100% rename from lte/rrc/asn/UE-CapabilityRAT-ContainerList.h rename to lte/rrc/include/liblte/rrc/asn/UE-CapabilityRAT-ContainerList.h diff --git a/lte/rrc/asn/UE-CapabilityRequest.h b/lte/rrc/include/liblte/rrc/asn/UE-CapabilityRequest.h similarity index 100% rename from lte/rrc/asn/UE-CapabilityRequest.h rename to lte/rrc/include/liblte/rrc/asn/UE-CapabilityRequest.h diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.h diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h b/lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability-v920-IEs.h diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h b/lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability-v940-IEs.h diff --git a/lte/rrc/asn/UE-EUTRA-Capability.h b/lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability.h similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability.h rename to lte/rrc/include/liblte/rrc/asn/UE-EUTRA-Capability.h diff --git a/lte/rrc/asn/UE-TimersAndConstants.h b/lte/rrc/include/liblte/rrc/asn/UE-TimersAndConstants.h similarity index 100% rename from lte/rrc/asn/UE-TimersAndConstants.h rename to lte/rrc/include/liblte/rrc/asn/UE-TimersAndConstants.h diff --git a/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/UECapabilityEnquiry-r8-IEs.h similarity index 100% rename from lte/rrc/asn/UECapabilityEnquiry-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UECapabilityEnquiry-r8-IEs.h diff --git a/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.h diff --git a/lte/rrc/asn/UECapabilityEnquiry.h b/lte/rrc/include/liblte/rrc/asn/UECapabilityEnquiry.h similarity index 100% rename from lte/rrc/asn/UECapabilityEnquiry.h rename to lte/rrc/include/liblte/rrc/asn/UECapabilityEnquiry.h diff --git a/lte/rrc/asn/UECapabilityInformation-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/UECapabilityInformation-r8-IEs.h similarity index 100% rename from lte/rrc/asn/UECapabilityInformation-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UECapabilityInformation-r8-IEs.h diff --git a/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/UECapabilityInformation-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/UECapabilityInformation-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UECapabilityInformation-v8a0-IEs.h diff --git a/lte/rrc/asn/UECapabilityInformation.h b/lte/rrc/include/liblte/rrc/asn/UECapabilityInformation.h similarity index 100% rename from lte/rrc/asn/UECapabilityInformation.h rename to lte/rrc/include/liblte/rrc/asn/UECapabilityInformation.h diff --git a/lte/rrc/asn/UEInformationRequest-r9-IEs.h b/lte/rrc/include/liblte/rrc/asn/UEInformationRequest-r9-IEs.h similarity index 100% rename from lte/rrc/asn/UEInformationRequest-r9-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationRequest-r9-IEs.h diff --git a/lte/rrc/asn/UEInformationRequest-r9.h b/lte/rrc/include/liblte/rrc/asn/UEInformationRequest-r9.h similarity index 100% rename from lte/rrc/asn/UEInformationRequest-r9.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationRequest-r9.h diff --git a/lte/rrc/asn/UEInformationRequest-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/UEInformationRequest-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/UEInformationRequest-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationRequest-v1020-IEs.h diff --git a/lte/rrc/asn/UEInformationRequest-v930-IEs.h b/lte/rrc/include/liblte/rrc/asn/UEInformationRequest-v930-IEs.h similarity index 100% rename from lte/rrc/asn/UEInformationRequest-v930-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationRequest-v930-IEs.h diff --git a/lte/rrc/asn/UEInformationResponse-r9-IEs.h b/lte/rrc/include/liblte/rrc/asn/UEInformationResponse-r9-IEs.h similarity index 100% rename from lte/rrc/asn/UEInformationResponse-r9-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationResponse-r9-IEs.h diff --git a/lte/rrc/asn/UEInformationResponse-r9.h b/lte/rrc/include/liblte/rrc/asn/UEInformationResponse-r9.h similarity index 100% rename from lte/rrc/asn/UEInformationResponse-r9.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationResponse-r9.h diff --git a/lte/rrc/asn/UEInformationResponse-v1020-IEs.h b/lte/rrc/include/liblte/rrc/asn/UEInformationResponse-v1020-IEs.h similarity index 100% rename from lte/rrc/asn/UEInformationResponse-v1020-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationResponse-v1020-IEs.h diff --git a/lte/rrc/asn/UEInformationResponse-v930-IEs.h b/lte/rrc/include/liblte/rrc/asn/UEInformationResponse-v930-IEs.h similarity index 100% rename from lte/rrc/asn/UEInformationResponse-v930-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UEInformationResponse-v930-IEs.h diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h similarity index 100% rename from lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.h diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation.h b/lte/rrc/include/liblte/rrc/asn/UERadioAccessCapabilityInformation.h similarity index 100% rename from lte/rrc/asn/UERadioAccessCapabilityInformation.h rename to lte/rrc/include/liblte/rrc/asn/UERadioAccessCapabilityInformation.h diff --git a/lte/rrc/asn/UL-AM-RLC.h b/lte/rrc/include/liblte/rrc/asn/UL-AM-RLC.h similarity index 100% rename from lte/rrc/asn/UL-AM-RLC.h rename to lte/rrc/include/liblte/rrc/asn/UL-AM-RLC.h diff --git a/lte/rrc/asn/UL-CCCH-Message.h b/lte/rrc/include/liblte/rrc/asn/UL-CCCH-Message.h similarity index 100% rename from lte/rrc/asn/UL-CCCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/UL-CCCH-Message.h diff --git a/lte/rrc/asn/UL-CCCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/UL-CCCH-MessageType.h similarity index 100% rename from lte/rrc/asn/UL-CCCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/UL-CCCH-MessageType.h diff --git a/lte/rrc/asn/UL-CyclicPrefixLength.h b/lte/rrc/include/liblte/rrc/asn/UL-CyclicPrefixLength.h similarity index 100% rename from lte/rrc/asn/UL-CyclicPrefixLength.h rename to lte/rrc/include/liblte/rrc/asn/UL-CyclicPrefixLength.h diff --git a/lte/rrc/asn/UL-DCCH-Message.h b/lte/rrc/include/liblte/rrc/asn/UL-DCCH-Message.h similarity index 100% rename from lte/rrc/asn/UL-DCCH-Message.h rename to lte/rrc/include/liblte/rrc/asn/UL-DCCH-Message.h diff --git a/lte/rrc/asn/UL-DCCH-MessageType.h b/lte/rrc/include/liblte/rrc/asn/UL-DCCH-MessageType.h similarity index 100% rename from lte/rrc/asn/UL-DCCH-MessageType.h rename to lte/rrc/include/liblte/rrc/asn/UL-DCCH-MessageType.h diff --git a/lte/rrc/asn/UL-ReferenceSignalsPUSCH.h b/lte/rrc/include/liblte/rrc/asn/UL-ReferenceSignalsPUSCH.h similarity index 100% rename from lte/rrc/asn/UL-ReferenceSignalsPUSCH.h rename to lte/rrc/include/liblte/rrc/asn/UL-ReferenceSignalsPUSCH.h diff --git a/lte/rrc/asn/UL-UM-RLC.h b/lte/rrc/include/liblte/rrc/asn/UL-UM-RLC.h similarity index 100% rename from lte/rrc/asn/UL-UM-RLC.h rename to lte/rrc/include/liblte/rrc/asn/UL-UM-RLC.h diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h similarity index 100% rename from lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.h diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.h diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer.h b/lte/rrc/include/liblte/rrc/asn/ULHandoverPreparationTransfer.h similarity index 100% rename from lte/rrc/asn/ULHandoverPreparationTransfer.h rename to lte/rrc/include/liblte/rrc/asn/ULHandoverPreparationTransfer.h diff --git a/lte/rrc/asn/ULInformationTransfer-r8-IEs.h b/lte/rrc/include/liblte/rrc/asn/ULInformationTransfer-r8-IEs.h similarity index 100% rename from lte/rrc/asn/ULInformationTransfer-r8-IEs.h rename to lte/rrc/include/liblte/rrc/asn/ULInformationTransfer-r8-IEs.h diff --git a/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h b/lte/rrc/include/liblte/rrc/asn/ULInformationTransfer-v8a0-IEs.h similarity index 100% rename from lte/rrc/asn/ULInformationTransfer-v8a0-IEs.h rename to lte/rrc/include/liblte/rrc/asn/ULInformationTransfer-v8a0-IEs.h diff --git a/lte/rrc/asn/ULInformationTransfer.h b/lte/rrc/include/liblte/rrc/asn/ULInformationTransfer.h similarity index 100% rename from lte/rrc/asn/ULInformationTransfer.h rename to lte/rrc/include/liblte/rrc/asn/ULInformationTransfer.h diff --git a/lte/rrc/asn/UplinkPowerControlCommon-v1020.h b/lte/rrc/include/liblte/rrc/asn/UplinkPowerControlCommon-v1020.h similarity index 100% rename from lte/rrc/asn/UplinkPowerControlCommon-v1020.h rename to lte/rrc/include/liblte/rrc/asn/UplinkPowerControlCommon-v1020.h diff --git a/lte/rrc/asn/UplinkPowerControlCommon.h b/lte/rrc/include/liblte/rrc/asn/UplinkPowerControlCommon.h similarity index 100% rename from lte/rrc/asn/UplinkPowerControlCommon.h rename to lte/rrc/include/liblte/rrc/asn/UplinkPowerControlCommon.h diff --git a/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/UplinkPowerControlCommonSCell-r10.h similarity index 100% rename from lte/rrc/asn/UplinkPowerControlCommonSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/UplinkPowerControlCommonSCell-r10.h diff --git a/lte/rrc/asn/UplinkPowerControlDedicated-v1020.h b/lte/rrc/include/liblte/rrc/asn/UplinkPowerControlDedicated-v1020.h similarity index 100% rename from lte/rrc/asn/UplinkPowerControlDedicated-v1020.h rename to lte/rrc/include/liblte/rrc/asn/UplinkPowerControlDedicated-v1020.h diff --git a/lte/rrc/asn/UplinkPowerControlDedicated.h b/lte/rrc/include/liblte/rrc/asn/UplinkPowerControlDedicated.h similarity index 100% rename from lte/rrc/asn/UplinkPowerControlDedicated.h rename to lte/rrc/include/liblte/rrc/asn/UplinkPowerControlDedicated.h diff --git a/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h b/lte/rrc/include/liblte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h similarity index 100% rename from lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h rename to lte/rrc/include/liblte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.h diff --git a/lte/rrc/asn/VarMeasConfig.h b/lte/rrc/include/liblte/rrc/asn/VarMeasConfig.h similarity index 100% rename from lte/rrc/asn/VarMeasConfig.h rename to lte/rrc/include/liblte/rrc/asn/VarMeasConfig.h diff --git a/lte/rrc/asn/VarMeasReport.h b/lte/rrc/include/liblte/rrc/asn/VarMeasReport.h similarity index 100% rename from lte/rrc/asn/VarMeasReport.h rename to lte/rrc/include/liblte/rrc/asn/VarMeasReport.h diff --git a/lte/rrc/asn/VarMeasReportList.h b/lte/rrc/include/liblte/rrc/asn/VarMeasReportList.h similarity index 100% rename from lte/rrc/asn/VarMeasReportList.h rename to lte/rrc/include/liblte/rrc/asn/VarMeasReportList.h diff --git a/lte/rrc/asn/VarShortMAC-Input.h b/lte/rrc/include/liblte/rrc/asn/VarShortMAC-Input.h similarity index 100% rename from lte/rrc/asn/VarShortMAC-Input.h rename to lte/rrc/include/liblte/rrc/asn/VarShortMAC-Input.h diff --git a/lte/rrc/asn/asn_SEQUENCE_OF.h b/lte/rrc/include/liblte/rrc/asn/asn_SEQUENCE_OF.h similarity index 100% rename from lte/rrc/asn/asn_SEQUENCE_OF.h rename to lte/rrc/include/liblte/rrc/asn/asn_SEQUENCE_OF.h diff --git a/lte/rrc/asn/asn_SET_OF.h b/lte/rrc/include/liblte/rrc/asn/asn_SET_OF.h similarity index 100% rename from lte/rrc/asn/asn_SET_OF.h rename to lte/rrc/include/liblte/rrc/asn/asn_SET_OF.h diff --git a/lte/rrc/asn/asn_application.h b/lte/rrc/include/liblte/rrc/asn/asn_application.h similarity index 100% rename from lte/rrc/asn/asn_application.h rename to lte/rrc/include/liblte/rrc/asn/asn_application.h diff --git a/lte/rrc/asn/asn_codecs.h b/lte/rrc/include/liblte/rrc/asn/asn_codecs.h similarity index 100% rename from lte/rrc/asn/asn_codecs.h rename to lte/rrc/include/liblte/rrc/asn/asn_codecs.h diff --git a/lte/rrc/asn/asn_codecs_prim.h b/lte/rrc/include/liblte/rrc/asn/asn_codecs_prim.h similarity index 100% rename from lte/rrc/asn/asn_codecs_prim.h rename to lte/rrc/include/liblte/rrc/asn/asn_codecs_prim.h diff --git a/lte/rrc/asn/asn_internal.h b/lte/rrc/include/liblte/rrc/asn/asn_internal.h similarity index 100% rename from lte/rrc/asn/asn_internal.h rename to lte/rrc/include/liblte/rrc/asn/asn_internal.h diff --git a/lte/rrc/asn/asn_system.h b/lte/rrc/include/liblte/rrc/asn/asn_system.h similarity index 100% rename from lte/rrc/asn/asn_system.h rename to lte/rrc/include/liblte/rrc/asn/asn_system.h diff --git a/lte/rrc/asn/ber_decoder.h b/lte/rrc/include/liblte/rrc/asn/ber_decoder.h similarity index 100% rename from lte/rrc/asn/ber_decoder.h rename to lte/rrc/include/liblte/rrc/asn/ber_decoder.h diff --git a/lte/rrc/asn/ber_tlv_length.h b/lte/rrc/include/liblte/rrc/asn/ber_tlv_length.h similarity index 100% rename from lte/rrc/asn/ber_tlv_length.h rename to lte/rrc/include/liblte/rrc/asn/ber_tlv_length.h diff --git a/lte/rrc/asn/ber_tlv_tag.h b/lte/rrc/include/liblte/rrc/asn/ber_tlv_tag.h similarity index 100% rename from lte/rrc/asn/ber_tlv_tag.h rename to lte/rrc/include/liblte/rrc/asn/ber_tlv_tag.h diff --git a/lte/rrc/asn/constr_CHOICE.h b/lte/rrc/include/liblte/rrc/asn/constr_CHOICE.h similarity index 100% rename from lte/rrc/asn/constr_CHOICE.h rename to lte/rrc/include/liblte/rrc/asn/constr_CHOICE.h diff --git a/lte/rrc/asn/constr_SEQUENCE.h b/lte/rrc/include/liblte/rrc/asn/constr_SEQUENCE.h similarity index 100% rename from lte/rrc/asn/constr_SEQUENCE.h rename to lte/rrc/include/liblte/rrc/asn/constr_SEQUENCE.h diff --git a/lte/rrc/asn/constr_SEQUENCE_OF.h b/lte/rrc/include/liblte/rrc/asn/constr_SEQUENCE_OF.h similarity index 100% rename from lte/rrc/asn/constr_SEQUENCE_OF.h rename to lte/rrc/include/liblte/rrc/asn/constr_SEQUENCE_OF.h diff --git a/lte/rrc/asn/constr_SET_OF.h b/lte/rrc/include/liblte/rrc/asn/constr_SET_OF.h similarity index 100% rename from lte/rrc/asn/constr_SET_OF.h rename to lte/rrc/include/liblte/rrc/asn/constr_SET_OF.h diff --git a/lte/rrc/asn/constr_TYPE.h b/lte/rrc/include/liblte/rrc/asn/constr_TYPE.h similarity index 100% rename from lte/rrc/asn/constr_TYPE.h rename to lte/rrc/include/liblte/rrc/asn/constr_TYPE.h diff --git a/lte/rrc/asn/constraints.h b/lte/rrc/include/liblte/rrc/asn/constraints.h similarity index 100% rename from lte/rrc/asn/constraints.h rename to lte/rrc/include/liblte/rrc/asn/constraints.h diff --git a/lte/rrc/asn/der_encoder.h b/lte/rrc/include/liblte/rrc/asn/der_encoder.h similarity index 100% rename from lte/rrc/asn/der_encoder.h rename to lte/rrc/include/liblte/rrc/asn/der_encoder.h diff --git a/lte/rrc/asn/per_decoder.h b/lte/rrc/include/liblte/rrc/asn/per_decoder.h similarity index 100% rename from lte/rrc/asn/per_decoder.h rename to lte/rrc/include/liblte/rrc/asn/per_decoder.h diff --git a/lte/rrc/asn/per_encoder.h b/lte/rrc/include/liblte/rrc/asn/per_encoder.h similarity index 100% rename from lte/rrc/asn/per_encoder.h rename to lte/rrc/include/liblte/rrc/asn/per_encoder.h diff --git a/lte/rrc/asn/per_opentype.h b/lte/rrc/include/liblte/rrc/asn/per_opentype.h similarity index 100% rename from lte/rrc/asn/per_opentype.h rename to lte/rrc/include/liblte/rrc/asn/per_opentype.h diff --git a/lte/rrc/asn/per_support.h b/lte/rrc/include/liblte/rrc/asn/per_support.h similarity index 100% rename from lte/rrc/asn/per_support.h rename to lte/rrc/include/liblte/rrc/asn/per_support.h diff --git a/lte/rrc/asn/rrc_asn.h b/lte/rrc/include/liblte/rrc/asn/rrc_asn.h similarity index 100% rename from lte/rrc/asn/rrc_asn.h rename to lte/rrc/include/liblte/rrc/asn/rrc_asn.h diff --git a/lte/rrc/asn/xer_decoder.h b/lte/rrc/include/liblte/rrc/asn/xer_decoder.h similarity index 100% rename from lte/rrc/asn/xer_decoder.h rename to lte/rrc/include/liblte/rrc/asn/xer_decoder.h diff --git a/lte/rrc/asn/xer_encoder.h b/lte/rrc/include/liblte/rrc/asn/xer_encoder.h similarity index 100% rename from lte/rrc/asn/xer_encoder.h rename to lte/rrc/include/liblte/rrc/asn/xer_encoder.h diff --git a/lte/rrc/asn/xer_support.h b/lte/rrc/include/liblte/rrc/asn/xer_support.h similarity index 100% rename from lte/rrc/asn/xer_support.h rename to lte/rrc/include/liblte/rrc/asn/xer_support.h diff --git a/lte/rrc/include/liblte/rrc/messages/sib1.h b/lte/rrc/include/liblte/rrc/messages/sib1.h index c3663a51e..0f1f49c56 100644 --- a/lte/rrc/include/liblte/rrc/messages/sib1.h +++ b/lte/rrc/include/liblte/rrc/messages/sib1.h @@ -36,7 +36,7 @@ #include "liblte/rrc/common/rrc_common.h" #include "liblte/rrc/messages/bcch.h" #include "liblte/phy/utils/bit.h" -#include "rrc_asn.h" +#include "liblte/rrc/asn/rrc_asn.h" LIBLTE_API uint32_t bcch_dlsch_sib1_get_freq_num(void *bcch_dlsch_msg); diff --git a/lte/rrc/lib/CMakeLists.txt b/lte/rrc/lib/CMakeLists.txt index eb1896ff3..70f0efe7e 100644 --- a/lte/rrc/lib/CMakeLists.txt +++ b/lte/rrc/lib/CMakeLists.txt @@ -31,8 +31,10 @@ FOREACH (_module ${modules}) ENDIF(IS_DIRECTORY ${_module}) ENDFOREACH() +SET(CMAKE_C_FLAGS "-std=c99 -D_GNU_SOURCE -w") + ADD_LIBRARY(lte_rrc SHARED ${SOURCES_ALL}) -TARGET_LINK_LIBRARIES(lte_rrc rrc_asn m) +TARGET_LINK_LIBRARIES(lte_rrc m) INSTALL(TARGETS lte_rrc DESTINATION ${LIBRARY_DIR}) LIBLTE_SET_PIC(lte_rrc) diff --git a/lte/rrc/asn/AC-BarringConfig.c b/lte/rrc/lib/asn/src/AC-BarringConfig.c similarity index 100% rename from lte/rrc/asn/AC-BarringConfig.c rename to lte/rrc/lib/asn/src/AC-BarringConfig.c diff --git a/lte/rrc/asn/AC-BarringConfig1XRTT-r9.c b/lte/rrc/lib/asn/src/AC-BarringConfig1XRTT-r9.c similarity index 100% rename from lte/rrc/asn/AC-BarringConfig1XRTT-r9.c rename to lte/rrc/lib/asn/src/AC-BarringConfig1XRTT-r9.c diff --git a/lte/rrc/asn/ARFCN-ValueCDMA2000.c b/lte/rrc/lib/asn/src/ARFCN-ValueCDMA2000.c similarity index 100% rename from lte/rrc/asn/ARFCN-ValueCDMA2000.c rename to lte/rrc/lib/asn/src/ARFCN-ValueCDMA2000.c diff --git a/lte/rrc/asn/ARFCN-ValueEUTRA.c b/lte/rrc/lib/asn/src/ARFCN-ValueEUTRA.c similarity index 100% rename from lte/rrc/asn/ARFCN-ValueEUTRA.c rename to lte/rrc/lib/asn/src/ARFCN-ValueEUTRA.c diff --git a/lte/rrc/asn/ARFCN-ValueGERAN.c b/lte/rrc/lib/asn/src/ARFCN-ValueGERAN.c similarity index 100% rename from lte/rrc/asn/ARFCN-ValueGERAN.c rename to lte/rrc/lib/asn/src/ARFCN-ValueGERAN.c diff --git a/lte/rrc/asn/ARFCN-ValueUTRA.c b/lte/rrc/lib/asn/src/ARFCN-ValueUTRA.c similarity index 100% rename from lte/rrc/asn/ARFCN-ValueUTRA.c rename to lte/rrc/lib/asn/src/ARFCN-ValueUTRA.c diff --git a/lte/rrc/asn/AS-Config.c b/lte/rrc/lib/asn/src/AS-Config.c similarity index 100% rename from lte/rrc/asn/AS-Config.c rename to lte/rrc/lib/asn/src/AS-Config.c diff --git a/lte/rrc/asn/AS-Context.c b/lte/rrc/lib/asn/src/AS-Context.c similarity index 100% rename from lte/rrc/asn/AS-Context.c rename to lte/rrc/lib/asn/src/AS-Context.c diff --git a/lte/rrc/asn/AbsoluteTimeInfo-r10.c b/lte/rrc/lib/asn/src/AbsoluteTimeInfo-r10.c similarity index 100% rename from lte/rrc/asn/AbsoluteTimeInfo-r10.c rename to lte/rrc/lib/asn/src/AbsoluteTimeInfo-r10.c diff --git a/lte/rrc/asn/AccessStratumRelease.c b/lte/rrc/lib/asn/src/AccessStratumRelease.c similarity index 100% rename from lte/rrc/asn/AccessStratumRelease.c rename to lte/rrc/lib/asn/src/AccessStratumRelease.c diff --git a/lte/rrc/asn/AdditionalReestabInfo.c b/lte/rrc/lib/asn/src/AdditionalReestabInfo.c similarity index 100% rename from lte/rrc/asn/AdditionalReestabInfo.c rename to lte/rrc/lib/asn/src/AdditionalReestabInfo.c diff --git a/lte/rrc/asn/AdditionalReestabInfoList.c b/lte/rrc/lib/asn/src/AdditionalReestabInfoList.c similarity index 100% rename from lte/rrc/asn/AdditionalReestabInfoList.c rename to lte/rrc/lib/asn/src/AdditionalReestabInfoList.c diff --git a/lte/rrc/asn/AdditionalSI-Info-r9.c b/lte/rrc/lib/asn/src/AdditionalSI-Info-r9.c similarity index 100% rename from lte/rrc/asn/AdditionalSI-Info-r9.c rename to lte/rrc/lib/asn/src/AdditionalSI-Info-r9.c diff --git a/lte/rrc/asn/AdditionalSpectrumEmission.c b/lte/rrc/lib/asn/src/AdditionalSpectrumEmission.c similarity index 100% rename from lte/rrc/asn/AdditionalSpectrumEmission.c rename to lte/rrc/lib/asn/src/AdditionalSpectrumEmission.c diff --git a/lte/rrc/asn/AllowedMeasBandwidth.c b/lte/rrc/lib/asn/src/AllowedMeasBandwidth.c similarity index 100% rename from lte/rrc/asn/AllowedMeasBandwidth.c rename to lte/rrc/lib/asn/src/AllowedMeasBandwidth.c diff --git a/lte/rrc/asn/AntennaInfoCommon.c b/lte/rrc/lib/asn/src/AntennaInfoCommon.c similarity index 100% rename from lte/rrc/asn/AntennaInfoCommon.c rename to lte/rrc/lib/asn/src/AntennaInfoCommon.c diff --git a/lte/rrc/asn/AntennaInfoDedicated-r10.c b/lte/rrc/lib/asn/src/AntennaInfoDedicated-r10.c similarity index 100% rename from lte/rrc/asn/AntennaInfoDedicated-r10.c rename to lte/rrc/lib/asn/src/AntennaInfoDedicated-r10.c diff --git a/lte/rrc/asn/AntennaInfoDedicated-v920.c b/lte/rrc/lib/asn/src/AntennaInfoDedicated-v920.c similarity index 100% rename from lte/rrc/asn/AntennaInfoDedicated-v920.c rename to lte/rrc/lib/asn/src/AntennaInfoDedicated-v920.c diff --git a/lte/rrc/asn/AntennaInfoDedicated.c b/lte/rrc/lib/asn/src/AntennaInfoDedicated.c similarity index 100% rename from lte/rrc/asn/AntennaInfoDedicated.c rename to lte/rrc/lib/asn/src/AntennaInfoDedicated.c diff --git a/lte/rrc/asn/AntennaInfoUL-r10.c b/lte/rrc/lib/asn/src/AntennaInfoUL-r10.c similarity index 100% rename from lte/rrc/asn/AntennaInfoUL-r10.c rename to lte/rrc/lib/asn/src/AntennaInfoUL-r10.c diff --git a/lte/rrc/asn/AreaConfiguration-r10.c b/lte/rrc/lib/asn/src/AreaConfiguration-r10.c similarity index 100% rename from lte/rrc/asn/AreaConfiguration-r10.c rename to lte/rrc/lib/asn/src/AreaConfiguration-r10.c diff --git a/lte/rrc/asn/BCCH-BCH-Message.c b/lte/rrc/lib/asn/src/BCCH-BCH-Message.c similarity index 100% rename from lte/rrc/asn/BCCH-BCH-Message.c rename to lte/rrc/lib/asn/src/BCCH-BCH-Message.c diff --git a/lte/rrc/asn/BCCH-BCH-MessageType.c b/lte/rrc/lib/asn/src/BCCH-BCH-MessageType.c similarity index 100% rename from lte/rrc/asn/BCCH-BCH-MessageType.c rename to lte/rrc/lib/asn/src/BCCH-BCH-MessageType.c diff --git a/lte/rrc/asn/BCCH-Config.c b/lte/rrc/lib/asn/src/BCCH-Config.c similarity index 100% rename from lte/rrc/asn/BCCH-Config.c rename to lte/rrc/lib/asn/src/BCCH-Config.c diff --git a/lte/rrc/asn/BCCH-DL-SCH-Message.c b/lte/rrc/lib/asn/src/BCCH-DL-SCH-Message.c similarity index 100% rename from lte/rrc/asn/BCCH-DL-SCH-Message.c rename to lte/rrc/lib/asn/src/BCCH-DL-SCH-Message.c diff --git a/lte/rrc/asn/BCCH-DL-SCH-MessageType.c b/lte/rrc/lib/asn/src/BCCH-DL-SCH-MessageType.c similarity index 100% rename from lte/rrc/asn/BCCH-DL-SCH-MessageType.c rename to lte/rrc/lib/asn/src/BCCH-DL-SCH-MessageType.c diff --git a/lte/rrc/asn/BIT_STRING.c b/lte/rrc/lib/asn/src/BIT_STRING.c similarity index 100% rename from lte/rrc/asn/BIT_STRING.c rename to lte/rrc/lib/asn/src/BIT_STRING.c diff --git a/lte/rrc/asn/BOOLEAN.c b/lte/rrc/lib/asn/src/BOOLEAN.c similarity index 100% rename from lte/rrc/asn/BOOLEAN.c rename to lte/rrc/lib/asn/src/BOOLEAN.c diff --git a/lte/rrc/asn/BandClassInfoCDMA2000.c b/lte/rrc/lib/asn/src/BandClassInfoCDMA2000.c similarity index 100% rename from lte/rrc/asn/BandClassInfoCDMA2000.c rename to lte/rrc/lib/asn/src/BandClassInfoCDMA2000.c diff --git a/lte/rrc/asn/BandClassListCDMA2000.c b/lte/rrc/lib/asn/src/BandClassListCDMA2000.c similarity index 100% rename from lte/rrc/asn/BandClassListCDMA2000.c rename to lte/rrc/lib/asn/src/BandClassListCDMA2000.c diff --git a/lte/rrc/asn/BandClassPriority1XRTT.c b/lte/rrc/lib/asn/src/BandClassPriority1XRTT.c similarity index 100% rename from lte/rrc/asn/BandClassPriority1XRTT.c rename to lte/rrc/lib/asn/src/BandClassPriority1XRTT.c diff --git a/lte/rrc/asn/BandClassPriorityHRPD.c b/lte/rrc/lib/asn/src/BandClassPriorityHRPD.c similarity index 100% rename from lte/rrc/asn/BandClassPriorityHRPD.c rename to lte/rrc/lib/asn/src/BandClassPriorityHRPD.c diff --git a/lte/rrc/asn/BandClassPriorityList1XRTT.c b/lte/rrc/lib/asn/src/BandClassPriorityList1XRTT.c similarity index 100% rename from lte/rrc/asn/BandClassPriorityList1XRTT.c rename to lte/rrc/lib/asn/src/BandClassPriorityList1XRTT.c diff --git a/lte/rrc/asn/BandClassPriorityListHRPD.c b/lte/rrc/lib/asn/src/BandClassPriorityListHRPD.c similarity index 100% rename from lte/rrc/asn/BandClassPriorityListHRPD.c rename to lte/rrc/lib/asn/src/BandClassPriorityListHRPD.c diff --git a/lte/rrc/asn/BandCombinationListEUTRA-r10.c b/lte/rrc/lib/asn/src/BandCombinationListEUTRA-r10.c similarity index 100% rename from lte/rrc/asn/BandCombinationListEUTRA-r10.c rename to lte/rrc/lib/asn/src/BandCombinationListEUTRA-r10.c diff --git a/lte/rrc/asn/BandCombinationParameters-r10.c b/lte/rrc/lib/asn/src/BandCombinationParameters-r10.c similarity index 100% rename from lte/rrc/asn/BandCombinationParameters-r10.c rename to lte/rrc/lib/asn/src/BandCombinationParameters-r10.c diff --git a/lte/rrc/asn/BandIndicatorGERAN.c b/lte/rrc/lib/asn/src/BandIndicatorGERAN.c similarity index 100% rename from lte/rrc/asn/BandIndicatorGERAN.c rename to lte/rrc/lib/asn/src/BandIndicatorGERAN.c diff --git a/lte/rrc/asn/BandInfoEUTRA.c b/lte/rrc/lib/asn/src/BandInfoEUTRA.c similarity index 100% rename from lte/rrc/asn/BandInfoEUTRA.c rename to lte/rrc/lib/asn/src/BandInfoEUTRA.c diff --git a/lte/rrc/asn/BandListEUTRA.c b/lte/rrc/lib/asn/src/BandListEUTRA.c similarity index 100% rename from lte/rrc/asn/BandListEUTRA.c rename to lte/rrc/lib/asn/src/BandListEUTRA.c diff --git a/lte/rrc/asn/BandParameters-r10.c b/lte/rrc/lib/asn/src/BandParameters-r10.c similarity index 100% rename from lte/rrc/asn/BandParameters-r10.c rename to lte/rrc/lib/asn/src/BandParameters-r10.c diff --git a/lte/rrc/asn/BandParametersDL-r10.c b/lte/rrc/lib/asn/src/BandParametersDL-r10.c similarity index 100% rename from lte/rrc/asn/BandParametersDL-r10.c rename to lte/rrc/lib/asn/src/BandParametersDL-r10.c diff --git a/lte/rrc/asn/BandParametersUL-r10.c b/lte/rrc/lib/asn/src/BandParametersUL-r10.c similarity index 100% rename from lte/rrc/asn/BandParametersUL-r10.c rename to lte/rrc/lib/asn/src/BandParametersUL-r10.c diff --git a/lte/rrc/asn/BandclassCDMA2000.c b/lte/rrc/lib/asn/src/BandclassCDMA2000.c similarity index 100% rename from lte/rrc/asn/BandclassCDMA2000.c rename to lte/rrc/lib/asn/src/BandclassCDMA2000.c diff --git a/lte/rrc/asn/BetaOffset-CA-Index.c b/lte/rrc/lib/asn/src/BetaOffset-CA-Index.c similarity index 100% rename from lte/rrc/asn/BetaOffset-CA-Index.c rename to lte/rrc/lib/asn/src/BetaOffset-CA-Index.c diff --git a/lte/rrc/asn/BlackCellsToAddMod.c b/lte/rrc/lib/asn/src/BlackCellsToAddMod.c similarity index 100% rename from lte/rrc/asn/BlackCellsToAddMod.c rename to lte/rrc/lib/asn/src/BlackCellsToAddMod.c diff --git a/lte/rrc/asn/BlackCellsToAddModList.c b/lte/rrc/lib/asn/src/BlackCellsToAddModList.c similarity index 100% rename from lte/rrc/asn/BlackCellsToAddModList.c rename to lte/rrc/lib/asn/src/BlackCellsToAddModList.c diff --git a/lte/rrc/asn/C-RNTI.c b/lte/rrc/lib/asn/src/C-RNTI.c similarity index 100% rename from lte/rrc/asn/C-RNTI.c rename to lte/rrc/lib/asn/src/C-RNTI.c diff --git a/lte/rrc/asn/CA-BandwidthClass-r10.c b/lte/rrc/lib/asn/src/CA-BandwidthClass-r10.c similarity index 100% rename from lte/rrc/asn/CA-BandwidthClass-r10.c rename to lte/rrc/lib/asn/src/CA-BandwidthClass-r10.c diff --git a/lte/rrc/asn/CA-MIMO-ParametersDL-r10.c b/lte/rrc/lib/asn/src/CA-MIMO-ParametersDL-r10.c similarity index 100% rename from lte/rrc/asn/CA-MIMO-ParametersDL-r10.c rename to lte/rrc/lib/asn/src/CA-MIMO-ParametersDL-r10.c diff --git a/lte/rrc/asn/CA-MIMO-ParametersUL-r10.c b/lte/rrc/lib/asn/src/CA-MIMO-ParametersUL-r10.c similarity index 100% rename from lte/rrc/asn/CA-MIMO-ParametersUL-r10.c rename to lte/rrc/lib/asn/src/CA-MIMO-ParametersUL-r10.c diff --git a/lte/rrc/asn/CA-RNTI.c b/lte/rrc/lib/asn/src/CA-RNTI.c similarity index 100% rename from lte/rrc/asn/CA-RNTI.c rename to lte/rrc/lib/asn/src/CA-RNTI.c diff --git a/lte/rrc/asn/CA-semiPersistSchedIntervalUL.c b/lte/rrc/lib/asn/src/CA-semiPersistSchedIntervalUL.c similarity index 100% rename from lte/rrc/asn/CA-semiPersistSchedIntervalUL.c rename to lte/rrc/lib/asn/src/CA-semiPersistSchedIntervalUL.c diff --git a/lte/rrc/asn/CDMA2000-Type.c b/lte/rrc/lib/asn/src/CDMA2000-Type.c similarity index 100% rename from lte/rrc/asn/CDMA2000-Type.c rename to lte/rrc/lib/asn/src/CDMA2000-Type.c diff --git a/lte/rrc/asn/CQI-ReportAperiodic-r10.c b/lte/rrc/lib/asn/src/CQI-ReportAperiodic-r10.c similarity index 100% rename from lte/rrc/asn/CQI-ReportAperiodic-r10.c rename to lte/rrc/lib/asn/src/CQI-ReportAperiodic-r10.c diff --git a/lte/rrc/asn/CQI-ReportConfig-r10.c b/lte/rrc/lib/asn/src/CQI-ReportConfig-r10.c similarity index 100% rename from lte/rrc/asn/CQI-ReportConfig-r10.c rename to lte/rrc/lib/asn/src/CQI-ReportConfig-r10.c diff --git a/lte/rrc/asn/CQI-ReportConfig-v920.c b/lte/rrc/lib/asn/src/CQI-ReportConfig-v920.c similarity index 100% rename from lte/rrc/asn/CQI-ReportConfig-v920.c rename to lte/rrc/lib/asn/src/CQI-ReportConfig-v920.c diff --git a/lte/rrc/asn/CQI-ReportConfig.c b/lte/rrc/lib/asn/src/CQI-ReportConfig.c similarity index 100% rename from lte/rrc/asn/CQI-ReportConfig.c rename to lte/rrc/lib/asn/src/CQI-ReportConfig.c diff --git a/lte/rrc/asn/CQI-ReportConfigSCell-r10.c b/lte/rrc/lib/asn/src/CQI-ReportConfigSCell-r10.c similarity index 100% rename from lte/rrc/asn/CQI-ReportConfigSCell-r10.c rename to lte/rrc/lib/asn/src/CQI-ReportConfigSCell-r10.c diff --git a/lte/rrc/asn/CQI-ReportModeAperiodic.c b/lte/rrc/lib/asn/src/CQI-ReportModeAperiodic.c similarity index 100% rename from lte/rrc/asn/CQI-ReportModeAperiodic.c rename to lte/rrc/lib/asn/src/CQI-ReportModeAperiodic.c diff --git a/lte/rrc/asn/CQI-ReportPeriodic-r10.c b/lte/rrc/lib/asn/src/CQI-ReportPeriodic-r10.c similarity index 100% rename from lte/rrc/asn/CQI-ReportPeriodic-r10.c rename to lte/rrc/lib/asn/src/CQI-ReportPeriodic-r10.c diff --git a/lte/rrc/asn/CQI-ReportPeriodic.c b/lte/rrc/lib/asn/src/CQI-ReportPeriodic.c similarity index 100% rename from lte/rrc/asn/CQI-ReportPeriodic.c rename to lte/rrc/lib/asn/src/CQI-ReportPeriodic.c diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.c b/lte/rrc/lib/asn/src/CSFB-RegistrationParam1XRTT-v920.c similarity index 100% rename from lte/rrc/asn/CSFB-RegistrationParam1XRTT-v920.c rename to lte/rrc/lib/asn/src/CSFB-RegistrationParam1XRTT-v920.c diff --git a/lte/rrc/asn/CSFB-RegistrationParam1XRTT.c b/lte/rrc/lib/asn/src/CSFB-RegistrationParam1XRTT.c similarity index 100% rename from lte/rrc/asn/CSFB-RegistrationParam1XRTT.c rename to lte/rrc/lib/asn/src/CSFB-RegistrationParam1XRTT.c diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.c b/lte/rrc/lib/asn/src/CSFBParametersRequestCDMA2000-r8-IEs.c similarity index 100% rename from lte/rrc/asn/CSFBParametersRequestCDMA2000-r8-IEs.c rename to lte/rrc/lib/asn/src/CSFBParametersRequestCDMA2000-r8-IEs.c diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.c b/lte/rrc/lib/asn/src/CSFBParametersRequestCDMA2000-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/CSFBParametersRequestCDMA2000-v8a0-IEs.c rename to lte/rrc/lib/asn/src/CSFBParametersRequestCDMA2000-v8a0-IEs.c diff --git a/lte/rrc/asn/CSFBParametersRequestCDMA2000.c b/lte/rrc/lib/asn/src/CSFBParametersRequestCDMA2000.c similarity index 100% rename from lte/rrc/asn/CSFBParametersRequestCDMA2000.c rename to lte/rrc/lib/asn/src/CSFBParametersRequestCDMA2000.c diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.c b/lte/rrc/lib/asn/src/CSFBParametersResponseCDMA2000-r8-IEs.c similarity index 100% rename from lte/rrc/asn/CSFBParametersResponseCDMA2000-r8-IEs.c rename to lte/rrc/lib/asn/src/CSFBParametersResponseCDMA2000-r8-IEs.c diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.c b/lte/rrc/lib/asn/src/CSFBParametersResponseCDMA2000-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/CSFBParametersResponseCDMA2000-v8a0-IEs.c rename to lte/rrc/lib/asn/src/CSFBParametersResponseCDMA2000-v8a0-IEs.c diff --git a/lte/rrc/asn/CSFBParametersResponseCDMA2000.c b/lte/rrc/lib/asn/src/CSFBParametersResponseCDMA2000.c similarity index 100% rename from lte/rrc/asn/CSFBParametersResponseCDMA2000.c rename to lte/rrc/lib/asn/src/CSFBParametersResponseCDMA2000.c diff --git a/lte/rrc/asn/CSG-AllowedReportingCells-r9.c b/lte/rrc/lib/asn/src/CSG-AllowedReportingCells-r9.c similarity index 100% rename from lte/rrc/asn/CSG-AllowedReportingCells-r9.c rename to lte/rrc/lib/asn/src/CSG-AllowedReportingCells-r9.c diff --git a/lte/rrc/asn/CSG-Identity.c b/lte/rrc/lib/asn/src/CSG-Identity.c similarity index 100% rename from lte/rrc/asn/CSG-Identity.c rename to lte/rrc/lib/asn/src/CSG-Identity.c diff --git a/lte/rrc/asn/CSG-ProximityIndicationParameters-r9.c b/lte/rrc/lib/asn/src/CSG-ProximityIndicationParameters-r9.c similarity index 100% rename from lte/rrc/asn/CSG-ProximityIndicationParameters-r9.c rename to lte/rrc/lib/asn/src/CSG-ProximityIndicationParameters-r9.c diff --git a/lte/rrc/asn/CSI-RS-Config-r10.c b/lte/rrc/lib/asn/src/CSI-RS-Config-r10.c similarity index 100% rename from lte/rrc/asn/CSI-RS-Config-r10.c rename to lte/rrc/lib/asn/src/CSI-RS-Config-r10.c diff --git a/lte/rrc/asn/CShift.c b/lte/rrc/lib/asn/src/CShift.c similarity index 100% rename from lte/rrc/asn/CShift.c rename to lte/rrc/lib/asn/src/CShift.c diff --git a/lte/rrc/asn/CarrierBandwidthEUTRA.c b/lte/rrc/lib/asn/src/CarrierBandwidthEUTRA.c similarity index 100% rename from lte/rrc/asn/CarrierBandwidthEUTRA.c rename to lte/rrc/lib/asn/src/CarrierBandwidthEUTRA.c diff --git a/lte/rrc/asn/CarrierFreqCDMA2000.c b/lte/rrc/lib/asn/src/CarrierFreqCDMA2000.c similarity index 100% rename from lte/rrc/asn/CarrierFreqCDMA2000.c rename to lte/rrc/lib/asn/src/CarrierFreqCDMA2000.c diff --git a/lte/rrc/asn/CarrierFreqEUTRA.c b/lte/rrc/lib/asn/src/CarrierFreqEUTRA.c similarity index 100% rename from lte/rrc/asn/CarrierFreqEUTRA.c rename to lte/rrc/lib/asn/src/CarrierFreqEUTRA.c diff --git a/lte/rrc/asn/CarrierFreqGERAN.c b/lte/rrc/lib/asn/src/CarrierFreqGERAN.c similarity index 100% rename from lte/rrc/asn/CarrierFreqGERAN.c rename to lte/rrc/lib/asn/src/CarrierFreqGERAN.c diff --git a/lte/rrc/asn/CarrierFreqListUTRA-FDD.c b/lte/rrc/lib/asn/src/CarrierFreqListUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/CarrierFreqListUTRA-FDD.c rename to lte/rrc/lib/asn/src/CarrierFreqListUTRA-FDD.c diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c b/lte/rrc/lib/asn/src/CarrierFreqListUTRA-TDD-r10.c similarity index 100% rename from lte/rrc/asn/CarrierFreqListUTRA-TDD-r10.c rename to lte/rrc/lib/asn/src/CarrierFreqListUTRA-TDD-r10.c diff --git a/lte/rrc/asn/CarrierFreqListUTRA-TDD.c b/lte/rrc/lib/asn/src/CarrierFreqListUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/CarrierFreqListUTRA-TDD.c rename to lte/rrc/lib/asn/src/CarrierFreqListUTRA-TDD.c diff --git a/lte/rrc/asn/CarrierFreqUTRA-FDD.c b/lte/rrc/lib/asn/src/CarrierFreqUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/CarrierFreqUTRA-FDD.c rename to lte/rrc/lib/asn/src/CarrierFreqUTRA-FDD.c diff --git a/lte/rrc/asn/CarrierFreqUTRA-TDD.c b/lte/rrc/lib/asn/src/CarrierFreqUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/CarrierFreqUTRA-TDD.c rename to lte/rrc/lib/asn/src/CarrierFreqUTRA-TDD.c diff --git a/lte/rrc/asn/CarrierFreqsGERAN.c b/lte/rrc/lib/asn/src/CarrierFreqsGERAN.c similarity index 100% rename from lte/rrc/asn/CarrierFreqsGERAN.c rename to lte/rrc/lib/asn/src/CarrierFreqsGERAN.c diff --git a/lte/rrc/asn/CarrierFreqsInfoGERAN.c b/lte/rrc/lib/asn/src/CarrierFreqsInfoGERAN.c similarity index 100% rename from lte/rrc/asn/CarrierFreqsInfoGERAN.c rename to lte/rrc/lib/asn/src/CarrierFreqsInfoGERAN.c diff --git a/lte/rrc/asn/CarrierFreqsInfoListGERAN.c b/lte/rrc/lib/asn/src/CarrierFreqsInfoListGERAN.c similarity index 100% rename from lte/rrc/asn/CarrierFreqsInfoListGERAN.c rename to lte/rrc/lib/asn/src/CarrierFreqsInfoListGERAN.c diff --git a/lte/rrc/asn/CellChangeOrder.c b/lte/rrc/lib/asn/src/CellChangeOrder.c similarity index 100% rename from lte/rrc/asn/CellChangeOrder.c rename to lte/rrc/lib/asn/src/CellChangeOrder.c diff --git a/lte/rrc/asn/CellGlobalIdCDMA2000.c b/lte/rrc/lib/asn/src/CellGlobalIdCDMA2000.c similarity index 100% rename from lte/rrc/asn/CellGlobalIdCDMA2000.c rename to lte/rrc/lib/asn/src/CellGlobalIdCDMA2000.c diff --git a/lte/rrc/asn/CellGlobalIdEUTRA.c b/lte/rrc/lib/asn/src/CellGlobalIdEUTRA.c similarity index 100% rename from lte/rrc/asn/CellGlobalIdEUTRA.c rename to lte/rrc/lib/asn/src/CellGlobalIdEUTRA.c diff --git a/lte/rrc/asn/CellGlobalIdGERAN.c b/lte/rrc/lib/asn/src/CellGlobalIdGERAN.c similarity index 100% rename from lte/rrc/asn/CellGlobalIdGERAN.c rename to lte/rrc/lib/asn/src/CellGlobalIdGERAN.c diff --git a/lte/rrc/asn/CellGlobalIdList-r10.c b/lte/rrc/lib/asn/src/CellGlobalIdList-r10.c similarity index 100% rename from lte/rrc/asn/CellGlobalIdList-r10.c rename to lte/rrc/lib/asn/src/CellGlobalIdList-r10.c diff --git a/lte/rrc/asn/CellGlobalIdUTRA.c b/lte/rrc/lib/asn/src/CellGlobalIdUTRA.c similarity index 100% rename from lte/rrc/asn/CellGlobalIdUTRA.c rename to lte/rrc/lib/asn/src/CellGlobalIdUTRA.c diff --git a/lte/rrc/asn/CellIdentity.c b/lte/rrc/lib/asn/src/CellIdentity.c similarity index 100% rename from lte/rrc/asn/CellIdentity.c rename to lte/rrc/lib/asn/src/CellIdentity.c diff --git a/lte/rrc/asn/CellIndex.c b/lte/rrc/lib/asn/src/CellIndex.c similarity index 100% rename from lte/rrc/asn/CellIndex.c rename to lte/rrc/lib/asn/src/CellIndex.c diff --git a/lte/rrc/asn/CellIndexList.c b/lte/rrc/lib/asn/src/CellIndexList.c similarity index 100% rename from lte/rrc/asn/CellIndexList.c rename to lte/rrc/lib/asn/src/CellIndexList.c diff --git a/lte/rrc/asn/CellInfoGERAN-r9.c b/lte/rrc/lib/asn/src/CellInfoGERAN-r9.c similarity index 100% rename from lte/rrc/asn/CellInfoGERAN-r9.c rename to lte/rrc/lib/asn/src/CellInfoGERAN-r9.c diff --git a/lte/rrc/asn/CellInfoListGERAN-r9.c b/lte/rrc/lib/asn/src/CellInfoListGERAN-r9.c similarity index 100% rename from lte/rrc/asn/CellInfoListGERAN-r9.c rename to lte/rrc/lib/asn/src/CellInfoListGERAN-r9.c diff --git a/lte/rrc/asn/CellInfoListUTRA-FDD-r9.c b/lte/rrc/lib/asn/src/CellInfoListUTRA-FDD-r9.c similarity index 100% rename from lte/rrc/asn/CellInfoListUTRA-FDD-r9.c rename to lte/rrc/lib/asn/src/CellInfoListUTRA-FDD-r9.c diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r10.c b/lte/rrc/lib/asn/src/CellInfoListUTRA-TDD-r10.c similarity index 100% rename from lte/rrc/asn/CellInfoListUTRA-TDD-r10.c rename to lte/rrc/lib/asn/src/CellInfoListUTRA-TDD-r10.c diff --git a/lte/rrc/asn/CellInfoListUTRA-TDD-r9.c b/lte/rrc/lib/asn/src/CellInfoListUTRA-TDD-r9.c similarity index 100% rename from lte/rrc/asn/CellInfoListUTRA-TDD-r9.c rename to lte/rrc/lib/asn/src/CellInfoListUTRA-TDD-r9.c diff --git a/lte/rrc/asn/CellInfoUTRA-FDD-r9.c b/lte/rrc/lib/asn/src/CellInfoUTRA-FDD-r9.c similarity index 100% rename from lte/rrc/asn/CellInfoUTRA-FDD-r9.c rename to lte/rrc/lib/asn/src/CellInfoUTRA-FDD-r9.c diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r10.c b/lte/rrc/lib/asn/src/CellInfoUTRA-TDD-r10.c similarity index 100% rename from lte/rrc/asn/CellInfoUTRA-TDD-r10.c rename to lte/rrc/lib/asn/src/CellInfoUTRA-TDD-r10.c diff --git a/lte/rrc/asn/CellInfoUTRA-TDD-r9.c b/lte/rrc/lib/asn/src/CellInfoUTRA-TDD-r9.c similarity index 100% rename from lte/rrc/asn/CellInfoUTRA-TDD-r9.c rename to lte/rrc/lib/asn/src/CellInfoUTRA-TDD-r9.c diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000-v920.c b/lte/rrc/lib/asn/src/CellReselectionParametersCDMA2000-v920.c similarity index 100% rename from lte/rrc/asn/CellReselectionParametersCDMA2000-v920.c rename to lte/rrc/lib/asn/src/CellReselectionParametersCDMA2000-v920.c diff --git a/lte/rrc/asn/CellReselectionParametersCDMA2000.c b/lte/rrc/lib/asn/src/CellReselectionParametersCDMA2000.c similarity index 100% rename from lte/rrc/asn/CellReselectionParametersCDMA2000.c rename to lte/rrc/lib/asn/src/CellReselectionParametersCDMA2000.c diff --git a/lte/rrc/asn/CellReselectionPriority.c b/lte/rrc/lib/asn/src/CellReselectionPriority.c similarity index 100% rename from lte/rrc/asn/CellReselectionPriority.c rename to lte/rrc/lib/asn/src/CellReselectionPriority.c diff --git a/lte/rrc/asn/CellSelectionInfo-v920.c b/lte/rrc/lib/asn/src/CellSelectionInfo-v920.c similarity index 100% rename from lte/rrc/asn/CellSelectionInfo-v920.c rename to lte/rrc/lib/asn/src/CellSelectionInfo-v920.c diff --git a/lte/rrc/asn/CellsToAddMod.c b/lte/rrc/lib/asn/src/CellsToAddMod.c similarity index 100% rename from lte/rrc/asn/CellsToAddMod.c rename to lte/rrc/lib/asn/src/CellsToAddMod.c diff --git a/lte/rrc/asn/CellsToAddModCDMA2000.c b/lte/rrc/lib/asn/src/CellsToAddModCDMA2000.c similarity index 100% rename from lte/rrc/asn/CellsToAddModCDMA2000.c rename to lte/rrc/lib/asn/src/CellsToAddModCDMA2000.c diff --git a/lte/rrc/asn/CellsToAddModList.c b/lte/rrc/lib/asn/src/CellsToAddModList.c similarity index 100% rename from lte/rrc/asn/CellsToAddModList.c rename to lte/rrc/lib/asn/src/CellsToAddModList.c diff --git a/lte/rrc/asn/CellsToAddModListCDMA2000.c b/lte/rrc/lib/asn/src/CellsToAddModListCDMA2000.c similarity index 100% rename from lte/rrc/asn/CellsToAddModListCDMA2000.c rename to lte/rrc/lib/asn/src/CellsToAddModListCDMA2000.c diff --git a/lte/rrc/asn/CellsToAddModListUTRA-FDD.c b/lte/rrc/lib/asn/src/CellsToAddModListUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/CellsToAddModListUTRA-FDD.c rename to lte/rrc/lib/asn/src/CellsToAddModListUTRA-FDD.c diff --git a/lte/rrc/asn/CellsToAddModListUTRA-TDD.c b/lte/rrc/lib/asn/src/CellsToAddModListUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/CellsToAddModListUTRA-TDD.c rename to lte/rrc/lib/asn/src/CellsToAddModListUTRA-TDD.c diff --git a/lte/rrc/asn/CellsToAddModUTRA-FDD.c b/lte/rrc/lib/asn/src/CellsToAddModUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/CellsToAddModUTRA-FDD.c rename to lte/rrc/lib/asn/src/CellsToAddModUTRA-FDD.c diff --git a/lte/rrc/asn/CellsToAddModUTRA-TDD.c b/lte/rrc/lib/asn/src/CellsToAddModUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/CellsToAddModUTRA-TDD.c rename to lte/rrc/lib/asn/src/CellsToAddModUTRA-TDD.c diff --git a/lte/rrc/asn/CellsTriggeredList.c b/lte/rrc/lib/asn/src/CellsTriggeredList.c similarity index 100% rename from lte/rrc/asn/CellsTriggeredList.c rename to lte/rrc/lib/asn/src/CellsTriggeredList.c diff --git a/lte/rrc/asn/CommonSF-AllocPatternList-r9.c b/lte/rrc/lib/asn/src/CommonSF-AllocPatternList-r9.c similarity index 100% rename from lte/rrc/asn/CommonSF-AllocPatternList-r9.c rename to lte/rrc/lib/asn/src/CommonSF-AllocPatternList-r9.c diff --git a/lte/rrc/asn/CounterCheck-r8-IEs.c b/lte/rrc/lib/asn/src/CounterCheck-r8-IEs.c similarity index 100% rename from lte/rrc/asn/CounterCheck-r8-IEs.c rename to lte/rrc/lib/asn/src/CounterCheck-r8-IEs.c diff --git a/lte/rrc/asn/CounterCheck-v8a0-IEs.c b/lte/rrc/lib/asn/src/CounterCheck-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/CounterCheck-v8a0-IEs.c rename to lte/rrc/lib/asn/src/CounterCheck-v8a0-IEs.c diff --git a/lte/rrc/asn/CounterCheck.c b/lte/rrc/lib/asn/src/CounterCheck.c similarity index 100% rename from lte/rrc/asn/CounterCheck.c rename to lte/rrc/lib/asn/src/CounterCheck.c diff --git a/lte/rrc/asn/CounterCheckResponse-r8-IEs.c b/lte/rrc/lib/asn/src/CounterCheckResponse-r8-IEs.c similarity index 100% rename from lte/rrc/asn/CounterCheckResponse-r8-IEs.c rename to lte/rrc/lib/asn/src/CounterCheckResponse-r8-IEs.c diff --git a/lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c b/lte/rrc/lib/asn/src/CounterCheckResponse-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/CounterCheckResponse-v8a0-IEs.c rename to lte/rrc/lib/asn/src/CounterCheckResponse-v8a0-IEs.c diff --git a/lte/rrc/asn/CounterCheckResponse.c b/lte/rrc/lib/asn/src/CounterCheckResponse.c similarity index 100% rename from lte/rrc/asn/CounterCheckResponse.c rename to lte/rrc/lib/asn/src/CounterCheckResponse.c diff --git a/lte/rrc/asn/CountingRequestInfo-r10.c b/lte/rrc/lib/asn/src/CountingRequestInfo-r10.c similarity index 100% rename from lte/rrc/asn/CountingRequestInfo-r10.c rename to lte/rrc/lib/asn/src/CountingRequestInfo-r10.c diff --git a/lte/rrc/asn/CountingRequestList-r10.c b/lte/rrc/lib/asn/src/CountingRequestList-r10.c similarity index 100% rename from lte/rrc/asn/CountingRequestList-r10.c rename to lte/rrc/lib/asn/src/CountingRequestList-r10.c diff --git a/lte/rrc/asn/CountingResponseInfo-r10.c b/lte/rrc/lib/asn/src/CountingResponseInfo-r10.c similarity index 100% rename from lte/rrc/asn/CountingResponseInfo-r10.c rename to lte/rrc/lib/asn/src/CountingResponseInfo-r10.c diff --git a/lte/rrc/asn/CountingResponseList-r10.c b/lte/rrc/lib/asn/src/CountingResponseList-r10.c similarity index 100% rename from lte/rrc/asn/CountingResponseList-r10.c rename to lte/rrc/lib/asn/src/CountingResponseList-r10.c diff --git a/lte/rrc/asn/CrossCarrierSchedulingConfig-r10.c b/lte/rrc/lib/asn/src/CrossCarrierSchedulingConfig-r10.c similarity index 100% rename from lte/rrc/asn/CrossCarrierSchedulingConfig-r10.c rename to lte/rrc/lib/asn/src/CrossCarrierSchedulingConfig-r10.c diff --git a/lte/rrc/asn/DL-AM-RLC.c b/lte/rrc/lib/asn/src/DL-AM-RLC.c similarity index 100% rename from lte/rrc/asn/DL-AM-RLC.c rename to lte/rrc/lib/asn/src/DL-AM-RLC.c diff --git a/lte/rrc/asn/DL-CCCH-Message.c b/lte/rrc/lib/asn/src/DL-CCCH-Message.c similarity index 100% rename from lte/rrc/asn/DL-CCCH-Message.c rename to lte/rrc/lib/asn/src/DL-CCCH-Message.c diff --git a/lte/rrc/asn/DL-CCCH-MessageType.c b/lte/rrc/lib/asn/src/DL-CCCH-MessageType.c similarity index 100% rename from lte/rrc/asn/DL-CCCH-MessageType.c rename to lte/rrc/lib/asn/src/DL-CCCH-MessageType.c diff --git a/lte/rrc/asn/DL-DCCH-Message.c b/lte/rrc/lib/asn/src/DL-DCCH-Message.c similarity index 100% rename from lte/rrc/asn/DL-DCCH-Message.c rename to lte/rrc/lib/asn/src/DL-DCCH-Message.c diff --git a/lte/rrc/asn/DL-DCCH-MessageType.c b/lte/rrc/lib/asn/src/DL-DCCH-MessageType.c similarity index 100% rename from lte/rrc/asn/DL-DCCH-MessageType.c rename to lte/rrc/lib/asn/src/DL-DCCH-MessageType.c diff --git a/lte/rrc/asn/DL-UM-RLC.c b/lte/rrc/lib/asn/src/DL-UM-RLC.c similarity index 100% rename from lte/rrc/asn/DL-UM-RLC.c rename to lte/rrc/lib/asn/src/DL-UM-RLC.c diff --git a/lte/rrc/asn/DLInformationTransfer-r8-IEs.c b/lte/rrc/lib/asn/src/DLInformationTransfer-r8-IEs.c similarity index 100% rename from lte/rrc/asn/DLInformationTransfer-r8-IEs.c rename to lte/rrc/lib/asn/src/DLInformationTransfer-r8-IEs.c diff --git a/lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c b/lte/rrc/lib/asn/src/DLInformationTransfer-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/DLInformationTransfer-v8a0-IEs.c rename to lte/rrc/lib/asn/src/DLInformationTransfer-v8a0-IEs.c diff --git a/lte/rrc/asn/DLInformationTransfer.c b/lte/rrc/lib/asn/src/DLInformationTransfer.c similarity index 100% rename from lte/rrc/asn/DLInformationTransfer.c rename to lte/rrc/lib/asn/src/DLInformationTransfer.c diff --git a/lte/rrc/asn/DRB-CountInfo.c b/lte/rrc/lib/asn/src/DRB-CountInfo.c similarity index 100% rename from lte/rrc/asn/DRB-CountInfo.c rename to lte/rrc/lib/asn/src/DRB-CountInfo.c diff --git a/lte/rrc/asn/DRB-CountInfoList.c b/lte/rrc/lib/asn/src/DRB-CountInfoList.c similarity index 100% rename from lte/rrc/asn/DRB-CountInfoList.c rename to lte/rrc/lib/asn/src/DRB-CountInfoList.c diff --git a/lte/rrc/asn/DRB-CountMSB-Info.c b/lte/rrc/lib/asn/src/DRB-CountMSB-Info.c similarity index 100% rename from lte/rrc/asn/DRB-CountMSB-Info.c rename to lte/rrc/lib/asn/src/DRB-CountMSB-Info.c diff --git a/lte/rrc/asn/DRB-CountMSB-InfoList.c b/lte/rrc/lib/asn/src/DRB-CountMSB-InfoList.c similarity index 100% rename from lte/rrc/asn/DRB-CountMSB-InfoList.c rename to lte/rrc/lib/asn/src/DRB-CountMSB-InfoList.c diff --git a/lte/rrc/asn/DRB-Identity.c b/lte/rrc/lib/asn/src/DRB-Identity.c similarity index 100% rename from lte/rrc/asn/DRB-Identity.c rename to lte/rrc/lib/asn/src/DRB-Identity.c diff --git a/lte/rrc/asn/DRB-ToAddMod.c b/lte/rrc/lib/asn/src/DRB-ToAddMod.c similarity index 100% rename from lte/rrc/asn/DRB-ToAddMod.c rename to lte/rrc/lib/asn/src/DRB-ToAddMod.c diff --git a/lte/rrc/asn/DRB-ToAddModList.c b/lte/rrc/lib/asn/src/DRB-ToAddModList.c similarity index 100% rename from lte/rrc/asn/DRB-ToAddModList.c rename to lte/rrc/lib/asn/src/DRB-ToAddModList.c diff --git a/lte/rrc/asn/DRB-ToReleaseList.c b/lte/rrc/lib/asn/src/DRB-ToReleaseList.c similarity index 100% rename from lte/rrc/asn/DRB-ToReleaseList.c rename to lte/rrc/lib/asn/src/DRB-ToReleaseList.c diff --git a/lte/rrc/asn/DRX-Config.c b/lte/rrc/lib/asn/src/DRX-Config.c similarity index 100% rename from lte/rrc/asn/DRX-Config.c rename to lte/rrc/lib/asn/src/DRX-Config.c diff --git a/lte/rrc/asn/DedicatedInfoCDMA2000.c b/lte/rrc/lib/asn/src/DedicatedInfoCDMA2000.c similarity index 100% rename from lte/rrc/asn/DedicatedInfoCDMA2000.c rename to lte/rrc/lib/asn/src/DedicatedInfoCDMA2000.c diff --git a/lte/rrc/asn/DedicatedInfoNAS.c b/lte/rrc/lib/asn/src/DedicatedInfoNAS.c similarity index 100% rename from lte/rrc/asn/DedicatedInfoNAS.c rename to lte/rrc/lib/asn/src/DedicatedInfoNAS.c diff --git a/lte/rrc/asn/DeltaFList-PUCCH.c b/lte/rrc/lib/asn/src/DeltaFList-PUCCH.c similarity index 100% rename from lte/rrc/asn/DeltaFList-PUCCH.c rename to lte/rrc/lib/asn/src/DeltaFList-PUCCH.c diff --git a/lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c b/lte/rrc/lib/asn/src/DeltaTxD-OffsetListPUCCH-r10.c similarity index 100% rename from lte/rrc/asn/DeltaTxD-OffsetListPUCCH-r10.c rename to lte/rrc/lib/asn/src/DeltaTxD-OffsetListPUCCH-r10.c diff --git a/lte/rrc/asn/E-CSFB-r9.c b/lte/rrc/lib/asn/src/E-CSFB-r9.c similarity index 100% rename from lte/rrc/asn/E-CSFB-r9.c rename to lte/rrc/lib/asn/src/E-CSFB-r9.c diff --git a/lte/rrc/asn/EstablishmentCause.c b/lte/rrc/lib/asn/src/EstablishmentCause.c similarity index 100% rename from lte/rrc/asn/EstablishmentCause.c rename to lte/rrc/lib/asn/src/EstablishmentCause.c diff --git a/lte/rrc/asn/ExplicitListOfARFCNs.c b/lte/rrc/lib/asn/src/ExplicitListOfARFCNs.c similarity index 100% rename from lte/rrc/asn/ExplicitListOfARFCNs.c rename to lte/rrc/lib/asn/src/ExplicitListOfARFCNs.c diff --git a/lte/rrc/asn/FilterCoefficient.c b/lte/rrc/lib/asn/src/FilterCoefficient.c similarity index 100% rename from lte/rrc/asn/FilterCoefficient.c rename to lte/rrc/lib/asn/src/FilterCoefficient.c diff --git a/lte/rrc/asn/FreqPriorityEUTRA.c b/lte/rrc/lib/asn/src/FreqPriorityEUTRA.c similarity index 100% rename from lte/rrc/asn/FreqPriorityEUTRA.c rename to lte/rrc/lib/asn/src/FreqPriorityEUTRA.c diff --git a/lte/rrc/asn/FreqPriorityListEUTRA.c b/lte/rrc/lib/asn/src/FreqPriorityListEUTRA.c similarity index 100% rename from lte/rrc/asn/FreqPriorityListEUTRA.c rename to lte/rrc/lib/asn/src/FreqPriorityListEUTRA.c diff --git a/lte/rrc/asn/FreqPriorityListUTRA-FDD.c b/lte/rrc/lib/asn/src/FreqPriorityListUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/FreqPriorityListUTRA-FDD.c rename to lte/rrc/lib/asn/src/FreqPriorityListUTRA-FDD.c diff --git a/lte/rrc/asn/FreqPriorityListUTRA-TDD.c b/lte/rrc/lib/asn/src/FreqPriorityListUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/FreqPriorityListUTRA-TDD.c rename to lte/rrc/lib/asn/src/FreqPriorityListUTRA-TDD.c diff --git a/lte/rrc/asn/FreqPriorityUTRA-FDD.c b/lte/rrc/lib/asn/src/FreqPriorityUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/FreqPriorityUTRA-FDD.c rename to lte/rrc/lib/asn/src/FreqPriorityUTRA-FDD.c diff --git a/lte/rrc/asn/FreqPriorityUTRA-TDD.c b/lte/rrc/lib/asn/src/FreqPriorityUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/FreqPriorityUTRA-TDD.c rename to lte/rrc/lib/asn/src/FreqPriorityUTRA-TDD.c diff --git a/lte/rrc/asn/FreqsPriorityGERAN.c b/lte/rrc/lib/asn/src/FreqsPriorityGERAN.c similarity index 100% rename from lte/rrc/asn/FreqsPriorityGERAN.c rename to lte/rrc/lib/asn/src/FreqsPriorityGERAN.c diff --git a/lte/rrc/asn/FreqsPriorityListGERAN.c b/lte/rrc/lib/asn/src/FreqsPriorityListGERAN.c similarity index 100% rename from lte/rrc/asn/FreqsPriorityListGERAN.c rename to lte/rrc/lib/asn/src/FreqsPriorityListGERAN.c diff --git a/lte/rrc/asn/Handover.c b/lte/rrc/lib/asn/src/Handover.c similarity index 100% rename from lte/rrc/asn/Handover.c rename to lte/rrc/lib/asn/src/Handover.c diff --git a/lte/rrc/asn/HandoverCommand-r8-IEs.c b/lte/rrc/lib/asn/src/HandoverCommand-r8-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverCommand-r8-IEs.c rename to lte/rrc/lib/asn/src/HandoverCommand-r8-IEs.c diff --git a/lte/rrc/asn/HandoverCommand.c b/lte/rrc/lib/asn/src/HandoverCommand.c similarity index 100% rename from lte/rrc/asn/HandoverCommand.c rename to lte/rrc/lib/asn/src/HandoverCommand.c diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.c b/lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-r8-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-r8-IEs.c rename to lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-r8-IEs.c diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.c b/lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v1020-IEs.c rename to lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-v1020-IEs.c diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.c b/lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-v890-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v890-IEs.c rename to lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-v890-IEs.c diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.c b/lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-v920-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest-v920-IEs.c rename to lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest-v920-IEs.c diff --git a/lte/rrc/asn/HandoverFromEUTRAPreparationRequest.c b/lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest.c similarity index 100% rename from lte/rrc/asn/HandoverFromEUTRAPreparationRequest.c rename to lte/rrc/lib/asn/src/HandoverFromEUTRAPreparationRequest.c diff --git a/lte/rrc/asn/HandoverPreparationInformation-r8-IEs.c b/lte/rrc/lib/asn/src/HandoverPreparationInformation-r8-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverPreparationInformation-r8-IEs.c rename to lte/rrc/lib/asn/src/HandoverPreparationInformation-r8-IEs.c diff --git a/lte/rrc/asn/HandoverPreparationInformation-v920-IEs.c b/lte/rrc/lib/asn/src/HandoverPreparationInformation-v920-IEs.c similarity index 100% rename from lte/rrc/asn/HandoverPreparationInformation-v920-IEs.c rename to lte/rrc/lib/asn/src/HandoverPreparationInformation-v920-IEs.c diff --git a/lte/rrc/asn/HandoverPreparationInformation.c b/lte/rrc/lib/asn/src/HandoverPreparationInformation.c similarity index 100% rename from lte/rrc/asn/HandoverPreparationInformation.c rename to lte/rrc/lib/asn/src/HandoverPreparationInformation.c diff --git a/lte/rrc/asn/Hysteresis.c b/lte/rrc/lib/asn/src/Hysteresis.c similarity index 100% rename from lte/rrc/asn/Hysteresis.c rename to lte/rrc/lib/asn/src/Hysteresis.c diff --git a/lte/rrc/asn/IMSI-Digit.c b/lte/rrc/lib/asn/src/IMSI-Digit.c similarity index 100% rename from lte/rrc/asn/IMSI-Digit.c rename to lte/rrc/lib/asn/src/IMSI-Digit.c diff --git a/lte/rrc/asn/IMSI.c b/lte/rrc/lib/asn/src/IMSI.c similarity index 100% rename from lte/rrc/asn/IMSI.c rename to lte/rrc/lib/asn/src/IMSI.c diff --git a/lte/rrc/asn/INTEGER.c b/lte/rrc/lib/asn/src/INTEGER.c similarity index 100% rename from lte/rrc/asn/INTEGER.c rename to lte/rrc/lib/asn/src/INTEGER.c diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c b/lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-1XRTT-v1020.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v1020.c rename to lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-1XRTT-v1020.c diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.c b/lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-1XRTT-v920.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT-v920.c rename to lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-1XRTT-v920.c diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c b/lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-1XRTT.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-1XRTT.c rename to lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-1XRTT.c diff --git a/lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c b/lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-HRPD.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersCDMA2000-HRPD.c rename to lte/rrc/lib/asn/src/IRAT-ParametersCDMA2000-HRPD.c diff --git a/lte/rrc/asn/IRAT-ParametersGERAN-v920.c b/lte/rrc/lib/asn/src/IRAT-ParametersGERAN-v920.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersGERAN-v920.c rename to lte/rrc/lib/asn/src/IRAT-ParametersGERAN-v920.c diff --git a/lte/rrc/asn/IRAT-ParametersGERAN.c b/lte/rrc/lib/asn/src/IRAT-ParametersGERAN.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersGERAN.c rename to lte/rrc/lib/asn/src/IRAT-ParametersGERAN.c diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-FDD.c b/lte/rrc/lib/asn/src/IRAT-ParametersUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-FDD.c rename to lte/rrc/lib/asn/src/IRAT-ParametersUTRA-FDD.c diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c b/lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD-v1020.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD-v1020.c rename to lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD-v1020.c diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c b/lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD128.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD128.c rename to lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD128.c diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c b/lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD384.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD384.c rename to lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD384.c diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c b/lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD768.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-TDD768.c rename to lte/rrc/lib/asn/src/IRAT-ParametersUTRA-TDD768.c diff --git a/lte/rrc/asn/IRAT-ParametersUTRA-v920.c b/lte/rrc/lib/asn/src/IRAT-ParametersUTRA-v920.c similarity index 100% rename from lte/rrc/asn/IRAT-ParametersUTRA-v920.c rename to lte/rrc/lib/asn/src/IRAT-ParametersUTRA-v920.c diff --git a/lte/rrc/asn/IdleModeMobilityControlInfo.c b/lte/rrc/lib/asn/src/IdleModeMobilityControlInfo.c similarity index 100% rename from lte/rrc/asn/IdleModeMobilityControlInfo.c rename to lte/rrc/lib/asn/src/IdleModeMobilityControlInfo.c diff --git a/lte/rrc/asn/InitialUE-Identity.c b/lte/rrc/lib/asn/src/InitialUE-Identity.c similarity index 100% rename from lte/rrc/asn/InitialUE-Identity.c rename to lte/rrc/lib/asn/src/InitialUE-Identity.c diff --git a/lte/rrc/asn/InterFreqBandInfo.c b/lte/rrc/lib/asn/src/InterFreqBandInfo.c similarity index 100% rename from lte/rrc/asn/InterFreqBandInfo.c rename to lte/rrc/lib/asn/src/InterFreqBandInfo.c diff --git a/lte/rrc/asn/InterFreqBandList.c b/lte/rrc/lib/asn/src/InterFreqBandList.c similarity index 100% rename from lte/rrc/asn/InterFreqBandList.c rename to lte/rrc/lib/asn/src/InterFreqBandList.c diff --git a/lte/rrc/asn/InterFreqBlackCellList.c b/lte/rrc/lib/asn/src/InterFreqBlackCellList.c similarity index 100% rename from lte/rrc/asn/InterFreqBlackCellList.c rename to lte/rrc/lib/asn/src/InterFreqBlackCellList.c diff --git a/lte/rrc/asn/InterFreqCarrierFreqInfo.c b/lte/rrc/lib/asn/src/InterFreqCarrierFreqInfo.c similarity index 100% rename from lte/rrc/asn/InterFreqCarrierFreqInfo.c rename to lte/rrc/lib/asn/src/InterFreqCarrierFreqInfo.c diff --git a/lte/rrc/asn/InterFreqCarrierFreqList.c b/lte/rrc/lib/asn/src/InterFreqCarrierFreqList.c similarity index 100% rename from lte/rrc/asn/InterFreqCarrierFreqList.c rename to lte/rrc/lib/asn/src/InterFreqCarrierFreqList.c diff --git a/lte/rrc/asn/InterFreqNeighCellInfo.c b/lte/rrc/lib/asn/src/InterFreqNeighCellInfo.c similarity index 100% rename from lte/rrc/asn/InterFreqNeighCellInfo.c rename to lte/rrc/lib/asn/src/InterFreqNeighCellInfo.c diff --git a/lte/rrc/asn/InterFreqNeighCellList.c b/lte/rrc/lib/asn/src/InterFreqNeighCellList.c similarity index 100% rename from lte/rrc/asn/InterFreqNeighCellList.c rename to lte/rrc/lib/asn/src/InterFreqNeighCellList.c diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.c b/lte/rrc/lib/asn/src/InterFreqRSTDMeasurementIndication-r10-IEs.c similarity index 100% rename from lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10-IEs.c rename to lte/rrc/lib/asn/src/InterFreqRSTDMeasurementIndication-r10-IEs.c diff --git a/lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.c b/lte/rrc/lib/asn/src/InterFreqRSTDMeasurementIndication-r10.c similarity index 100% rename from lte/rrc/asn/InterFreqRSTDMeasurementIndication-r10.c rename to lte/rrc/lib/asn/src/InterFreqRSTDMeasurementIndication-r10.c diff --git a/lte/rrc/asn/InterRAT-BandInfo.c b/lte/rrc/lib/asn/src/InterRAT-BandInfo.c similarity index 100% rename from lte/rrc/asn/InterRAT-BandInfo.c rename to lte/rrc/lib/asn/src/InterRAT-BandInfo.c diff --git a/lte/rrc/asn/InterRAT-BandList.c b/lte/rrc/lib/asn/src/InterRAT-BandList.c similarity index 100% rename from lte/rrc/asn/InterRAT-BandList.c rename to lte/rrc/lib/asn/src/InterRAT-BandList.c diff --git a/lte/rrc/asn/IntraFreqBlackCellList.c b/lte/rrc/lib/asn/src/IntraFreqBlackCellList.c similarity index 100% rename from lte/rrc/asn/IntraFreqBlackCellList.c rename to lte/rrc/lib/asn/src/IntraFreqBlackCellList.c diff --git a/lte/rrc/asn/IntraFreqNeighCellInfo.c b/lte/rrc/lib/asn/src/IntraFreqNeighCellInfo.c similarity index 100% rename from lte/rrc/asn/IntraFreqNeighCellInfo.c rename to lte/rrc/lib/asn/src/IntraFreqNeighCellInfo.c diff --git a/lte/rrc/asn/IntraFreqNeighCellList.c b/lte/rrc/lib/asn/src/IntraFreqNeighCellList.c similarity index 100% rename from lte/rrc/asn/IntraFreqNeighCellList.c rename to lte/rrc/lib/asn/src/IntraFreqNeighCellList.c diff --git a/lte/rrc/asn/Key-eNodeB-Star.c b/lte/rrc/lib/asn/src/Key-eNodeB-Star.c similarity index 100% rename from lte/rrc/asn/Key-eNodeB-Star.c rename to lte/rrc/lib/asn/src/Key-eNodeB-Star.c diff --git a/lte/rrc/asn/LocationInfo-r10.c b/lte/rrc/lib/asn/src/LocationInfo-r10.c similarity index 100% rename from lte/rrc/asn/LocationInfo-r10.c rename to lte/rrc/lib/asn/src/LocationInfo-r10.c diff --git a/lte/rrc/asn/LogMeasInfo-r10.c b/lte/rrc/lib/asn/src/LogMeasInfo-r10.c similarity index 100% rename from lte/rrc/asn/LogMeasInfo-r10.c rename to lte/rrc/lib/asn/src/LogMeasInfo-r10.c diff --git a/lte/rrc/asn/LogMeasInfoList-r10.c b/lte/rrc/lib/asn/src/LogMeasInfoList-r10.c similarity index 100% rename from lte/rrc/asn/LogMeasInfoList-r10.c rename to lte/rrc/lib/asn/src/LogMeasInfoList-r10.c diff --git a/lte/rrc/asn/LogMeasReport-r10.c b/lte/rrc/lib/asn/src/LogMeasReport-r10.c similarity index 100% rename from lte/rrc/asn/LogMeasReport-r10.c rename to lte/rrc/lib/asn/src/LogMeasReport-r10.c diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.c b/lte/rrc/lib/asn/src/LoggedMeasurementConfiguration-r10-IEs.c similarity index 100% rename from lte/rrc/asn/LoggedMeasurementConfiguration-r10-IEs.c rename to lte/rrc/lib/asn/src/LoggedMeasurementConfiguration-r10-IEs.c diff --git a/lte/rrc/asn/LoggedMeasurementConfiguration-r10.c b/lte/rrc/lib/asn/src/LoggedMeasurementConfiguration-r10.c similarity index 100% rename from lte/rrc/asn/LoggedMeasurementConfiguration-r10.c rename to lte/rrc/lib/asn/src/LoggedMeasurementConfiguration-r10.c diff --git a/lte/rrc/asn/LoggingDuration-r10.c b/lte/rrc/lib/asn/src/LoggingDuration-r10.c similarity index 100% rename from lte/rrc/asn/LoggingDuration-r10.c rename to lte/rrc/lib/asn/src/LoggingDuration-r10.c diff --git a/lte/rrc/asn/LoggingInterval-r10.c b/lte/rrc/lib/asn/src/LoggingInterval-r10.c similarity index 100% rename from lte/rrc/asn/LoggingInterval-r10.c rename to lte/rrc/lib/asn/src/LoggingInterval-r10.c diff --git a/lte/rrc/asn/LogicalChannelConfig.c b/lte/rrc/lib/asn/src/LogicalChannelConfig.c similarity index 100% rename from lte/rrc/asn/LogicalChannelConfig.c rename to lte/rrc/lib/asn/src/LogicalChannelConfig.c diff --git a/lte/rrc/asn/MAC-MainConfig.c b/lte/rrc/lib/asn/src/MAC-MainConfig.c similarity index 100% rename from lte/rrc/asn/MAC-MainConfig.c rename to lte/rrc/lib/asn/src/MAC-MainConfig.c diff --git a/lte/rrc/asn/MBMS-NotificationConfig-r9.c b/lte/rrc/lib/asn/src/MBMS-NotificationConfig-r9.c similarity index 100% rename from lte/rrc/asn/MBMS-NotificationConfig-r9.c rename to lte/rrc/lib/asn/src/MBMS-NotificationConfig-r9.c diff --git a/lte/rrc/asn/MBMS-SessionInfo-r9.c b/lte/rrc/lib/asn/src/MBMS-SessionInfo-r9.c similarity index 100% rename from lte/rrc/asn/MBMS-SessionInfo-r9.c rename to lte/rrc/lib/asn/src/MBMS-SessionInfo-r9.c diff --git a/lte/rrc/asn/MBMS-SessionInfoList-r9.c b/lte/rrc/lib/asn/src/MBMS-SessionInfoList-r9.c similarity index 100% rename from lte/rrc/asn/MBMS-SessionInfoList-r9.c rename to lte/rrc/lib/asn/src/MBMS-SessionInfoList-r9.c diff --git a/lte/rrc/asn/MBMSCountingRequest-r10.c b/lte/rrc/lib/asn/src/MBMSCountingRequest-r10.c similarity index 100% rename from lte/rrc/asn/MBMSCountingRequest-r10.c rename to lte/rrc/lib/asn/src/MBMSCountingRequest-r10.c diff --git a/lte/rrc/asn/MBMSCountingResponse-r10-IEs.c b/lte/rrc/lib/asn/src/MBMSCountingResponse-r10-IEs.c similarity index 100% rename from lte/rrc/asn/MBMSCountingResponse-r10-IEs.c rename to lte/rrc/lib/asn/src/MBMSCountingResponse-r10-IEs.c diff --git a/lte/rrc/asn/MBMSCountingResponse-r10.c b/lte/rrc/lib/asn/src/MBMSCountingResponse-r10.c similarity index 100% rename from lte/rrc/asn/MBMSCountingResponse-r10.c rename to lte/rrc/lib/asn/src/MBMSCountingResponse-r10.c diff --git a/lte/rrc/asn/MBSFN-AreaInfo-r9.c b/lte/rrc/lib/asn/src/MBSFN-AreaInfo-r9.c similarity index 100% rename from lte/rrc/asn/MBSFN-AreaInfo-r9.c rename to lte/rrc/lib/asn/src/MBSFN-AreaInfo-r9.c diff --git a/lte/rrc/asn/MBSFN-AreaInfoList-r9.c b/lte/rrc/lib/asn/src/MBSFN-AreaInfoList-r9.c similarity index 100% rename from lte/rrc/asn/MBSFN-AreaInfoList-r9.c rename to lte/rrc/lib/asn/src/MBSFN-AreaInfoList-r9.c diff --git a/lte/rrc/asn/MBSFN-SubframeConfig.c b/lte/rrc/lib/asn/src/MBSFN-SubframeConfig.c similarity index 100% rename from lte/rrc/asn/MBSFN-SubframeConfig.c rename to lte/rrc/lib/asn/src/MBSFN-SubframeConfig.c diff --git a/lte/rrc/asn/MBSFN-SubframeConfigList.c b/lte/rrc/lib/asn/src/MBSFN-SubframeConfigList.c similarity index 100% rename from lte/rrc/asn/MBSFN-SubframeConfigList.c rename to lte/rrc/lib/asn/src/MBSFN-SubframeConfigList.c diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-r9.c b/lte/rrc/lib/asn/src/MBSFNAreaConfiguration-r9.c similarity index 100% rename from lte/rrc/asn/MBSFNAreaConfiguration-r9.c rename to lte/rrc/lib/asn/src/MBSFNAreaConfiguration-r9.c diff --git a/lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c b/lte/rrc/lib/asn/src/MBSFNAreaConfiguration-v930-IEs.c similarity index 100% rename from lte/rrc/asn/MBSFNAreaConfiguration-v930-IEs.c rename to lte/rrc/lib/asn/src/MBSFNAreaConfiguration-v930-IEs.c diff --git a/lte/rrc/asn/MCC-MNC-Digit.c b/lte/rrc/lib/asn/src/MCC-MNC-Digit.c similarity index 100% rename from lte/rrc/asn/MCC-MNC-Digit.c rename to lte/rrc/lib/asn/src/MCC-MNC-Digit.c diff --git a/lte/rrc/asn/MCC.c b/lte/rrc/lib/asn/src/MCC.c similarity index 100% rename from lte/rrc/asn/MCC.c rename to lte/rrc/lib/asn/src/MCC.c diff --git a/lte/rrc/asn/MCCH-Message.c b/lte/rrc/lib/asn/src/MCCH-Message.c similarity index 100% rename from lte/rrc/asn/MCCH-Message.c rename to lte/rrc/lib/asn/src/MCCH-Message.c diff --git a/lte/rrc/asn/MCCH-MessageType.c b/lte/rrc/lib/asn/src/MCCH-MessageType.c similarity index 100% rename from lte/rrc/asn/MCCH-MessageType.c rename to lte/rrc/lib/asn/src/MCCH-MessageType.c diff --git a/lte/rrc/asn/MIMO-CapabilityDL-r10.c b/lte/rrc/lib/asn/src/MIMO-CapabilityDL-r10.c similarity index 100% rename from lte/rrc/asn/MIMO-CapabilityDL-r10.c rename to lte/rrc/lib/asn/src/MIMO-CapabilityDL-r10.c diff --git a/lte/rrc/asn/MIMO-CapabilityUL-r10.c b/lte/rrc/lib/asn/src/MIMO-CapabilityUL-r10.c similarity index 100% rename from lte/rrc/asn/MIMO-CapabilityUL-r10.c rename to lte/rrc/lib/asn/src/MIMO-CapabilityUL-r10.c diff --git a/lte/rrc/asn/MMEC.c b/lte/rrc/lib/asn/src/MMEC.c similarity index 100% rename from lte/rrc/asn/MMEC.c rename to lte/rrc/lib/asn/src/MMEC.c diff --git a/lte/rrc/asn/MNC.c b/lte/rrc/lib/asn/src/MNC.c similarity index 100% rename from lte/rrc/asn/MNC.c rename to lte/rrc/lib/asn/src/MNC.c diff --git a/lte/rrc/asn/MasterInformationBlock.c b/lte/rrc/lib/asn/src/MasterInformationBlock.c similarity index 100% rename from lte/rrc/asn/MasterInformationBlock.c rename to lte/rrc/lib/asn/src/MasterInformationBlock.c diff --git a/lte/rrc/asn/MeasConfig.c b/lte/rrc/lib/asn/src/MeasConfig.c similarity index 100% rename from lte/rrc/asn/MeasConfig.c rename to lte/rrc/lib/asn/src/MeasConfig.c diff --git a/lte/rrc/asn/MeasCycleSCell-r10.c b/lte/rrc/lib/asn/src/MeasCycleSCell-r10.c similarity index 100% rename from lte/rrc/asn/MeasCycleSCell-r10.c rename to lte/rrc/lib/asn/src/MeasCycleSCell-r10.c diff --git a/lte/rrc/asn/MeasGapConfig.c b/lte/rrc/lib/asn/src/MeasGapConfig.c similarity index 100% rename from lte/rrc/asn/MeasGapConfig.c rename to lte/rrc/lib/asn/src/MeasGapConfig.c diff --git a/lte/rrc/asn/MeasId.c b/lte/rrc/lib/asn/src/MeasId.c similarity index 100% rename from lte/rrc/asn/MeasId.c rename to lte/rrc/lib/asn/src/MeasId.c diff --git a/lte/rrc/asn/MeasIdToAddMod.c b/lte/rrc/lib/asn/src/MeasIdToAddMod.c similarity index 100% rename from lte/rrc/asn/MeasIdToAddMod.c rename to lte/rrc/lib/asn/src/MeasIdToAddMod.c diff --git a/lte/rrc/asn/MeasIdToAddModList.c b/lte/rrc/lib/asn/src/MeasIdToAddModList.c similarity index 100% rename from lte/rrc/asn/MeasIdToAddModList.c rename to lte/rrc/lib/asn/src/MeasIdToAddModList.c diff --git a/lte/rrc/asn/MeasIdToRemoveList.c b/lte/rrc/lib/asn/src/MeasIdToRemoveList.c similarity index 100% rename from lte/rrc/asn/MeasIdToRemoveList.c rename to lte/rrc/lib/asn/src/MeasIdToRemoveList.c diff --git a/lte/rrc/asn/MeasObjectCDMA2000.c b/lte/rrc/lib/asn/src/MeasObjectCDMA2000.c similarity index 100% rename from lte/rrc/asn/MeasObjectCDMA2000.c rename to lte/rrc/lib/asn/src/MeasObjectCDMA2000.c diff --git a/lte/rrc/asn/MeasObjectEUTRA.c b/lte/rrc/lib/asn/src/MeasObjectEUTRA.c similarity index 100% rename from lte/rrc/asn/MeasObjectEUTRA.c rename to lte/rrc/lib/asn/src/MeasObjectEUTRA.c diff --git a/lte/rrc/asn/MeasObjectGERAN.c b/lte/rrc/lib/asn/src/MeasObjectGERAN.c similarity index 100% rename from lte/rrc/asn/MeasObjectGERAN.c rename to lte/rrc/lib/asn/src/MeasObjectGERAN.c diff --git a/lte/rrc/asn/MeasObjectId.c b/lte/rrc/lib/asn/src/MeasObjectId.c similarity index 100% rename from lte/rrc/asn/MeasObjectId.c rename to lte/rrc/lib/asn/src/MeasObjectId.c diff --git a/lte/rrc/asn/MeasObjectToAddMod.c b/lte/rrc/lib/asn/src/MeasObjectToAddMod.c similarity index 100% rename from lte/rrc/asn/MeasObjectToAddMod.c rename to lte/rrc/lib/asn/src/MeasObjectToAddMod.c diff --git a/lte/rrc/asn/MeasObjectToAddModList.c b/lte/rrc/lib/asn/src/MeasObjectToAddModList.c similarity index 100% rename from lte/rrc/asn/MeasObjectToAddModList.c rename to lte/rrc/lib/asn/src/MeasObjectToAddModList.c diff --git a/lte/rrc/asn/MeasObjectToRemoveList.c b/lte/rrc/lib/asn/src/MeasObjectToRemoveList.c similarity index 100% rename from lte/rrc/asn/MeasObjectToRemoveList.c rename to lte/rrc/lib/asn/src/MeasObjectToRemoveList.c diff --git a/lte/rrc/asn/MeasObjectUTRA.c b/lte/rrc/lib/asn/src/MeasObjectUTRA.c similarity index 100% rename from lte/rrc/asn/MeasObjectUTRA.c rename to lte/rrc/lib/asn/src/MeasObjectUTRA.c diff --git a/lte/rrc/asn/MeasParameters-v1020.c b/lte/rrc/lib/asn/src/MeasParameters-v1020.c similarity index 100% rename from lte/rrc/asn/MeasParameters-v1020.c rename to lte/rrc/lib/asn/src/MeasParameters-v1020.c diff --git a/lte/rrc/asn/MeasParameters.c b/lte/rrc/lib/asn/src/MeasParameters.c similarity index 100% rename from lte/rrc/asn/MeasParameters.c rename to lte/rrc/lib/asn/src/MeasParameters.c diff --git a/lte/rrc/asn/MeasResult2CDMA2000-r9.c b/lte/rrc/lib/asn/src/MeasResult2CDMA2000-r9.c similarity index 100% rename from lte/rrc/asn/MeasResult2CDMA2000-r9.c rename to lte/rrc/lib/asn/src/MeasResult2CDMA2000-r9.c diff --git a/lte/rrc/asn/MeasResult2EUTRA-r9.c b/lte/rrc/lib/asn/src/MeasResult2EUTRA-r9.c similarity index 100% rename from lte/rrc/asn/MeasResult2EUTRA-r9.c rename to lte/rrc/lib/asn/src/MeasResult2EUTRA-r9.c diff --git a/lte/rrc/asn/MeasResult2UTRA-r9.c b/lte/rrc/lib/asn/src/MeasResult2UTRA-r9.c similarity index 100% rename from lte/rrc/asn/MeasResult2UTRA-r9.c rename to lte/rrc/lib/asn/src/MeasResult2UTRA-r9.c diff --git a/lte/rrc/asn/MeasResultCDMA2000.c b/lte/rrc/lib/asn/src/MeasResultCDMA2000.c similarity index 100% rename from lte/rrc/asn/MeasResultCDMA2000.c rename to lte/rrc/lib/asn/src/MeasResultCDMA2000.c diff --git a/lte/rrc/asn/MeasResultEUTRA.c b/lte/rrc/lib/asn/src/MeasResultEUTRA.c similarity index 100% rename from lte/rrc/asn/MeasResultEUTRA.c rename to lte/rrc/lib/asn/src/MeasResultEUTRA.c diff --git a/lte/rrc/asn/MeasResultForECID-r9.c b/lte/rrc/lib/asn/src/MeasResultForECID-r9.c similarity index 100% rename from lte/rrc/asn/MeasResultForECID-r9.c rename to lte/rrc/lib/asn/src/MeasResultForECID-r9.c diff --git a/lte/rrc/asn/MeasResultGERAN.c b/lte/rrc/lib/asn/src/MeasResultGERAN.c similarity index 100% rename from lte/rrc/asn/MeasResultGERAN.c rename to lte/rrc/lib/asn/src/MeasResultGERAN.c diff --git a/lte/rrc/asn/MeasResultList2CDMA2000-r9.c b/lte/rrc/lib/asn/src/MeasResultList2CDMA2000-r9.c similarity index 100% rename from lte/rrc/asn/MeasResultList2CDMA2000-r9.c rename to lte/rrc/lib/asn/src/MeasResultList2CDMA2000-r9.c diff --git a/lte/rrc/asn/MeasResultList2EUTRA-r9.c b/lte/rrc/lib/asn/src/MeasResultList2EUTRA-r9.c similarity index 100% rename from lte/rrc/asn/MeasResultList2EUTRA-r9.c rename to lte/rrc/lib/asn/src/MeasResultList2EUTRA-r9.c diff --git a/lte/rrc/asn/MeasResultList2GERAN-r10.c b/lte/rrc/lib/asn/src/MeasResultList2GERAN-r10.c similarity index 100% rename from lte/rrc/asn/MeasResultList2GERAN-r10.c rename to lte/rrc/lib/asn/src/MeasResultList2GERAN-r10.c diff --git a/lte/rrc/asn/MeasResultList2UTRA-r9.c b/lte/rrc/lib/asn/src/MeasResultList2UTRA-r9.c similarity index 100% rename from lte/rrc/asn/MeasResultList2UTRA-r9.c rename to lte/rrc/lib/asn/src/MeasResultList2UTRA-r9.c diff --git a/lte/rrc/asn/MeasResultListCDMA2000.c b/lte/rrc/lib/asn/src/MeasResultListCDMA2000.c similarity index 100% rename from lte/rrc/asn/MeasResultListCDMA2000.c rename to lte/rrc/lib/asn/src/MeasResultListCDMA2000.c diff --git a/lte/rrc/asn/MeasResultListEUTRA.c b/lte/rrc/lib/asn/src/MeasResultListEUTRA.c similarity index 100% rename from lte/rrc/asn/MeasResultListEUTRA.c rename to lte/rrc/lib/asn/src/MeasResultListEUTRA.c diff --git a/lte/rrc/asn/MeasResultListGERAN.c b/lte/rrc/lib/asn/src/MeasResultListGERAN.c similarity index 100% rename from lte/rrc/asn/MeasResultListGERAN.c rename to lte/rrc/lib/asn/src/MeasResultListGERAN.c diff --git a/lte/rrc/asn/MeasResultListUTRA.c b/lte/rrc/lib/asn/src/MeasResultListUTRA.c similarity index 100% rename from lte/rrc/asn/MeasResultListUTRA.c rename to lte/rrc/lib/asn/src/MeasResultListUTRA.c diff --git a/lte/rrc/asn/MeasResultServFreq-r10.c b/lte/rrc/lib/asn/src/MeasResultServFreq-r10.c similarity index 100% rename from lte/rrc/asn/MeasResultServFreq-r10.c rename to lte/rrc/lib/asn/src/MeasResultServFreq-r10.c diff --git a/lte/rrc/asn/MeasResultServFreqList-r10.c b/lte/rrc/lib/asn/src/MeasResultServFreqList-r10.c similarity index 100% rename from lte/rrc/asn/MeasResultServFreqList-r10.c rename to lte/rrc/lib/asn/src/MeasResultServFreqList-r10.c diff --git a/lte/rrc/asn/MeasResultUTRA.c b/lte/rrc/lib/asn/src/MeasResultUTRA.c similarity index 100% rename from lte/rrc/asn/MeasResultUTRA.c rename to lte/rrc/lib/asn/src/MeasResultUTRA.c diff --git a/lte/rrc/asn/MeasResults.c b/lte/rrc/lib/asn/src/MeasResults.c similarity index 100% rename from lte/rrc/asn/MeasResults.c rename to lte/rrc/lib/asn/src/MeasResults.c diff --git a/lte/rrc/asn/MeasResultsCDMA2000.c b/lte/rrc/lib/asn/src/MeasResultsCDMA2000.c similarity index 100% rename from lte/rrc/asn/MeasResultsCDMA2000.c rename to lte/rrc/lib/asn/src/MeasResultsCDMA2000.c diff --git a/lte/rrc/asn/MeasSubframeCellList-r10.c b/lte/rrc/lib/asn/src/MeasSubframeCellList-r10.c similarity index 100% rename from lte/rrc/asn/MeasSubframeCellList-r10.c rename to lte/rrc/lib/asn/src/MeasSubframeCellList-r10.c diff --git a/lte/rrc/asn/MeasSubframePattern-r10.c b/lte/rrc/lib/asn/src/MeasSubframePattern-r10.c similarity index 100% rename from lte/rrc/asn/MeasSubframePattern-r10.c rename to lte/rrc/lib/asn/src/MeasSubframePattern-r10.c diff --git a/lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.c b/lte/rrc/lib/asn/src/MeasSubframePatternConfigNeigh-r10.c similarity index 100% rename from lte/rrc/asn/MeasSubframePatternConfigNeigh-r10.c rename to lte/rrc/lib/asn/src/MeasSubframePatternConfigNeigh-r10.c diff --git a/lte/rrc/asn/MeasSubframePatternPCell-r10.c b/lte/rrc/lib/asn/src/MeasSubframePatternPCell-r10.c similarity index 100% rename from lte/rrc/asn/MeasSubframePatternPCell-r10.c rename to lte/rrc/lib/asn/src/MeasSubframePatternPCell-r10.c diff --git a/lte/rrc/asn/MeasurementReport-r8-IEs.c b/lte/rrc/lib/asn/src/MeasurementReport-r8-IEs.c similarity index 100% rename from lte/rrc/asn/MeasurementReport-r8-IEs.c rename to lte/rrc/lib/asn/src/MeasurementReport-r8-IEs.c diff --git a/lte/rrc/asn/MeasurementReport-v8a0-IEs.c b/lte/rrc/lib/asn/src/MeasurementReport-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/MeasurementReport-v8a0-IEs.c rename to lte/rrc/lib/asn/src/MeasurementReport-v8a0-IEs.c diff --git a/lte/rrc/asn/MeasurementReport.c b/lte/rrc/lib/asn/src/MeasurementReport.c similarity index 100% rename from lte/rrc/asn/MeasurementReport.c rename to lte/rrc/lib/asn/src/MeasurementReport.c diff --git a/lte/rrc/asn/MobilityControlInfo.c b/lte/rrc/lib/asn/src/MobilityControlInfo.c similarity index 100% rename from lte/rrc/asn/MobilityControlInfo.c rename to lte/rrc/lib/asn/src/MobilityControlInfo.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand-r8-IEs.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-r8-IEs.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand-r8-IEs.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand-r9-IEs.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-r9-IEs.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand-r9-IEs.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v8a0-IEs.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v8a0-IEs.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v8d0-IEs.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v8d0-IEs.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v8d0-IEs.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v930-IEs.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v930-IEs.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v930-IEs.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v960-IEs.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand-v960-IEs.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand-v960-IEs.c diff --git a/lte/rrc/asn/MobilityFromEUTRACommand.c b/lte/rrc/lib/asn/src/MobilityFromEUTRACommand.c similarity index 100% rename from lte/rrc/asn/MobilityFromEUTRACommand.c rename to lte/rrc/lib/asn/src/MobilityFromEUTRACommand.c diff --git a/lte/rrc/asn/MobilityParametersCDMA2000.c b/lte/rrc/lib/asn/src/MobilityParametersCDMA2000.c similarity index 100% rename from lte/rrc/asn/MobilityParametersCDMA2000.c rename to lte/rrc/lib/asn/src/MobilityParametersCDMA2000.c diff --git a/lte/rrc/asn/MobilityStateParameters.c b/lte/rrc/lib/asn/src/MobilityStateParameters.c similarity index 100% rename from lte/rrc/asn/MobilityStateParameters.c rename to lte/rrc/lib/asn/src/MobilityStateParameters.c diff --git a/lte/rrc/asn/N1-PUCCH-AN-PersistentList.c b/lte/rrc/lib/asn/src/N1-PUCCH-AN-PersistentList.c similarity index 100% rename from lte/rrc/asn/N1-PUCCH-AN-PersistentList.c rename to lte/rrc/lib/asn/src/N1-PUCCH-AN-PersistentList.c diff --git a/lte/rrc/asn/N1PUCCH-AN-CS-r10.c b/lte/rrc/lib/asn/src/N1PUCCH-AN-CS-r10.c similarity index 100% rename from lte/rrc/asn/N1PUCCH-AN-CS-r10.c rename to lte/rrc/lib/asn/src/N1PUCCH-AN-CS-r10.c diff --git a/lte/rrc/asn/N1PUCCH-AN-PersistentList.c b/lte/rrc/lib/asn/src/N1PUCCH-AN-PersistentList.c similarity index 100% rename from lte/rrc/asn/N1PUCCH-AN-PersistentList.c rename to lte/rrc/lib/asn/src/N1PUCCH-AN-PersistentList.c diff --git a/lte/rrc/asn/NULL.c b/lte/rrc/lib/asn/src/NULL.c similarity index 100% rename from lte/rrc/asn/NULL.c rename to lte/rrc/lib/asn/src/NULL.c diff --git a/lte/rrc/asn/NativeEnumerated.c b/lte/rrc/lib/asn/src/NativeEnumerated.c similarity index 100% rename from lte/rrc/asn/NativeEnumerated.c rename to lte/rrc/lib/asn/src/NativeEnumerated.c diff --git a/lte/rrc/asn/NativeInteger.c b/lte/rrc/lib/asn/src/NativeInteger.c similarity index 100% rename from lte/rrc/asn/NativeInteger.c rename to lte/rrc/lib/asn/src/NativeInteger.c diff --git a/lte/rrc/asn/NeighCellCDMA2000-v920.c b/lte/rrc/lib/asn/src/NeighCellCDMA2000-v920.c similarity index 100% rename from lte/rrc/asn/NeighCellCDMA2000-v920.c rename to lte/rrc/lib/asn/src/NeighCellCDMA2000-v920.c diff --git a/lte/rrc/asn/NeighCellCDMA2000.c b/lte/rrc/lib/asn/src/NeighCellCDMA2000.c similarity index 100% rename from lte/rrc/asn/NeighCellCDMA2000.c rename to lte/rrc/lib/asn/src/NeighCellCDMA2000.c diff --git a/lte/rrc/asn/NeighCellConfig.c b/lte/rrc/lib/asn/src/NeighCellConfig.c similarity index 100% rename from lte/rrc/asn/NeighCellConfig.c rename to lte/rrc/lib/asn/src/NeighCellConfig.c diff --git a/lte/rrc/asn/NeighCellListCDMA2000-v920.c b/lte/rrc/lib/asn/src/NeighCellListCDMA2000-v920.c similarity index 100% rename from lte/rrc/asn/NeighCellListCDMA2000-v920.c rename to lte/rrc/lib/asn/src/NeighCellListCDMA2000-v920.c diff --git a/lte/rrc/asn/NeighCellListCDMA2000.c b/lte/rrc/lib/asn/src/NeighCellListCDMA2000.c similarity index 100% rename from lte/rrc/asn/NeighCellListCDMA2000.c rename to lte/rrc/lib/asn/src/NeighCellListCDMA2000.c diff --git a/lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.c b/lte/rrc/lib/asn/src/NeighCellSI-AcquisitionParameters-r9.c similarity index 100% rename from lte/rrc/asn/NeighCellSI-AcquisitionParameters-r9.c rename to lte/rrc/lib/asn/src/NeighCellSI-AcquisitionParameters-r9.c diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.c b/lte/rrc/lib/asn/src/NeighCellsPerBandclassCDMA2000-v920.c similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassCDMA2000-v920.c rename to lte/rrc/lib/asn/src/NeighCellsPerBandclassCDMA2000-v920.c diff --git a/lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c b/lte/rrc/lib/asn/src/NeighCellsPerBandclassCDMA2000.c similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassCDMA2000.c rename to lte/rrc/lib/asn/src/NeighCellsPerBandclassCDMA2000.c diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.c b/lte/rrc/lib/asn/src/NeighCellsPerBandclassListCDMA2000-v920.c similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassListCDMA2000-v920.c rename to lte/rrc/lib/asn/src/NeighCellsPerBandclassListCDMA2000-v920.c diff --git a/lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.c b/lte/rrc/lib/asn/src/NeighCellsPerBandclassListCDMA2000.c similarity index 100% rename from lte/rrc/asn/NeighCellsPerBandclassListCDMA2000.c rename to lte/rrc/lib/asn/src/NeighCellsPerBandclassListCDMA2000.c diff --git a/lte/rrc/asn/NextHopChainingCount.c b/lte/rrc/lib/asn/src/NextHopChainingCount.c similarity index 100% rename from lte/rrc/asn/NextHopChainingCount.c rename to lte/rrc/lib/asn/src/NextHopChainingCount.c diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.c b/lte/rrc/lib/asn/src/NonContiguousUL-RA-WithinCC-List-r10.c similarity index 100% rename from lte/rrc/asn/NonContiguousUL-RA-WithinCC-List-r10.c rename to lte/rrc/lib/asn/src/NonContiguousUL-RA-WithinCC-List-r10.c diff --git a/lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c b/lte/rrc/lib/asn/src/NonContiguousUL-RA-WithinCC-r10.c similarity index 100% rename from lte/rrc/asn/NonContiguousUL-RA-WithinCC-r10.c rename to lte/rrc/lib/asn/src/NonContiguousUL-RA-WithinCC-r10.c diff --git a/lte/rrc/asn/OCTET_STRING.c b/lte/rrc/lib/asn/src/OCTET_STRING.c similarity index 100% rename from lte/rrc/asn/OCTET_STRING.c rename to lte/rrc/lib/asn/src/OCTET_STRING.c diff --git a/lte/rrc/asn/OtherConfig-r9.c b/lte/rrc/lib/asn/src/OtherConfig-r9.c similarity index 100% rename from lte/rrc/asn/OtherConfig-r9.c rename to lte/rrc/lib/asn/src/OtherConfig-r9.c diff --git a/lte/rrc/asn/P-Max.c b/lte/rrc/lib/asn/src/P-Max.c similarity index 100% rename from lte/rrc/asn/P-Max.c rename to lte/rrc/lib/asn/src/P-Max.c diff --git a/lte/rrc/asn/PCCH-Config.c b/lte/rrc/lib/asn/src/PCCH-Config.c similarity index 100% rename from lte/rrc/asn/PCCH-Config.c rename to lte/rrc/lib/asn/src/PCCH-Config.c diff --git a/lte/rrc/asn/PCCH-Message.c b/lte/rrc/lib/asn/src/PCCH-Message.c similarity index 100% rename from lte/rrc/asn/PCCH-Message.c rename to lte/rrc/lib/asn/src/PCCH-Message.c diff --git a/lte/rrc/asn/PCCH-MessageType.c b/lte/rrc/lib/asn/src/PCCH-MessageType.c similarity index 100% rename from lte/rrc/asn/PCCH-MessageType.c rename to lte/rrc/lib/asn/src/PCCH-MessageType.c diff --git a/lte/rrc/asn/PDCP-Config.c b/lte/rrc/lib/asn/src/PDCP-Config.c similarity index 100% rename from lte/rrc/asn/PDCP-Config.c rename to lte/rrc/lib/asn/src/PDCP-Config.c diff --git a/lte/rrc/asn/PDCP-Parameters.c b/lte/rrc/lib/asn/src/PDCP-Parameters.c similarity index 100% rename from lte/rrc/asn/PDCP-Parameters.c rename to lte/rrc/lib/asn/src/PDCP-Parameters.c diff --git a/lte/rrc/asn/PDSCH-ConfigCommon.c b/lte/rrc/lib/asn/src/PDSCH-ConfigCommon.c similarity index 100% rename from lte/rrc/asn/PDSCH-ConfigCommon.c rename to lte/rrc/lib/asn/src/PDSCH-ConfigCommon.c diff --git a/lte/rrc/asn/PDSCH-ConfigDedicated.c b/lte/rrc/lib/asn/src/PDSCH-ConfigDedicated.c similarity index 100% rename from lte/rrc/asn/PDSCH-ConfigDedicated.c rename to lte/rrc/lib/asn/src/PDSCH-ConfigDedicated.c diff --git a/lte/rrc/asn/PHICH-Config.c b/lte/rrc/lib/asn/src/PHICH-Config.c similarity index 100% rename from lte/rrc/asn/PHICH-Config.c rename to lte/rrc/lib/asn/src/PHICH-Config.c diff --git a/lte/rrc/asn/PLMN-Identity.c b/lte/rrc/lib/asn/src/PLMN-Identity.c similarity index 100% rename from lte/rrc/asn/PLMN-Identity.c rename to lte/rrc/lib/asn/src/PLMN-Identity.c diff --git a/lte/rrc/asn/PLMN-IdentityInfo.c b/lte/rrc/lib/asn/src/PLMN-IdentityInfo.c similarity index 100% rename from lte/rrc/asn/PLMN-IdentityInfo.c rename to lte/rrc/lib/asn/src/PLMN-IdentityInfo.c diff --git a/lte/rrc/asn/PLMN-IdentityList.c b/lte/rrc/lib/asn/src/PLMN-IdentityList.c similarity index 100% rename from lte/rrc/asn/PLMN-IdentityList.c rename to lte/rrc/lib/asn/src/PLMN-IdentityList.c diff --git a/lte/rrc/asn/PLMN-IdentityList2.c b/lte/rrc/lib/asn/src/PLMN-IdentityList2.c similarity index 100% rename from lte/rrc/asn/PLMN-IdentityList2.c rename to lte/rrc/lib/asn/src/PLMN-IdentityList2.c diff --git a/lte/rrc/asn/PMCH-Config-r9.c b/lte/rrc/lib/asn/src/PMCH-Config-r9.c similarity index 100% rename from lte/rrc/asn/PMCH-Config-r9.c rename to lte/rrc/lib/asn/src/PMCH-Config-r9.c diff --git a/lte/rrc/asn/PMCH-Info-r9.c b/lte/rrc/lib/asn/src/PMCH-Info-r9.c similarity index 100% rename from lte/rrc/asn/PMCH-Info-r9.c rename to lte/rrc/lib/asn/src/PMCH-Info-r9.c diff --git a/lte/rrc/asn/PMCH-InfoList-r9.c b/lte/rrc/lib/asn/src/PMCH-InfoList-r9.c similarity index 100% rename from lte/rrc/asn/PMCH-InfoList-r9.c rename to lte/rrc/lib/asn/src/PMCH-InfoList-r9.c diff --git a/lte/rrc/asn/PRACH-Config.c b/lte/rrc/lib/asn/src/PRACH-Config.c similarity index 100% rename from lte/rrc/asn/PRACH-Config.c rename to lte/rrc/lib/asn/src/PRACH-Config.c diff --git a/lte/rrc/asn/PRACH-ConfigInfo.c b/lte/rrc/lib/asn/src/PRACH-ConfigInfo.c similarity index 100% rename from lte/rrc/asn/PRACH-ConfigInfo.c rename to lte/rrc/lib/asn/src/PRACH-ConfigInfo.c diff --git a/lte/rrc/asn/PRACH-ConfigSCell-r10.c b/lte/rrc/lib/asn/src/PRACH-ConfigSCell-r10.c similarity index 100% rename from lte/rrc/asn/PRACH-ConfigSCell-r10.c rename to lte/rrc/lib/asn/src/PRACH-ConfigSCell-r10.c diff --git a/lte/rrc/asn/PRACH-ConfigSIB.c b/lte/rrc/lib/asn/src/PRACH-ConfigSIB.c similarity index 100% rename from lte/rrc/asn/PRACH-ConfigSIB.c rename to lte/rrc/lib/asn/src/PRACH-ConfigSIB.c diff --git a/lte/rrc/asn/PUCCH-ConfigCommon.c b/lte/rrc/lib/asn/src/PUCCH-ConfigCommon.c similarity index 100% rename from lte/rrc/asn/PUCCH-ConfigCommon.c rename to lte/rrc/lib/asn/src/PUCCH-ConfigCommon.c diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c b/lte/rrc/lib/asn/src/PUCCH-ConfigDedicated-v1020.c similarity index 100% rename from lte/rrc/asn/PUCCH-ConfigDedicated-v1020.c rename to lte/rrc/lib/asn/src/PUCCH-ConfigDedicated-v1020.c diff --git a/lte/rrc/asn/PUCCH-ConfigDedicated.c b/lte/rrc/lib/asn/src/PUCCH-ConfigDedicated.c similarity index 100% rename from lte/rrc/asn/PUCCH-ConfigDedicated.c rename to lte/rrc/lib/asn/src/PUCCH-ConfigDedicated.c diff --git a/lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c b/lte/rrc/lib/asn/src/PUSCH-CAConfigDedicated-vlola.c similarity index 100% rename from lte/rrc/asn/PUSCH-CAConfigDedicated-vlola.c rename to lte/rrc/lib/asn/src/PUSCH-CAConfigDedicated-vlola.c diff --git a/lte/rrc/asn/PUSCH-ConfigCommon.c b/lte/rrc/lib/asn/src/PUSCH-ConfigCommon.c similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigCommon.c rename to lte/rrc/lib/asn/src/PUSCH-ConfigCommon.c diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c b/lte/rrc/lib/asn/src/PUSCH-ConfigDedicated-v1020.c similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigDedicated-v1020.c rename to lte/rrc/lib/asn/src/PUSCH-ConfigDedicated-v1020.c diff --git a/lte/rrc/asn/PUSCH-ConfigDedicated.c b/lte/rrc/lib/asn/src/PUSCH-ConfigDedicated.c similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigDedicated.c rename to lte/rrc/lib/asn/src/PUSCH-ConfigDedicated.c diff --git a/lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c b/lte/rrc/lib/asn/src/PUSCH-ConfigDedicatedSCell-r10.c similarity index 100% rename from lte/rrc/asn/PUSCH-ConfigDedicatedSCell-r10.c rename to lte/rrc/lib/asn/src/PUSCH-ConfigDedicatedSCell-r10.c diff --git a/lte/rrc/asn/Paging-v890-IEs.c b/lte/rrc/lib/asn/src/Paging-v890-IEs.c similarity index 100% rename from lte/rrc/asn/Paging-v890-IEs.c rename to lte/rrc/lib/asn/src/Paging-v890-IEs.c diff --git a/lte/rrc/asn/Paging-v920-IEs.c b/lte/rrc/lib/asn/src/Paging-v920-IEs.c similarity index 100% rename from lte/rrc/asn/Paging-v920-IEs.c rename to lte/rrc/lib/asn/src/Paging-v920-IEs.c diff --git a/lte/rrc/asn/Paging.c b/lte/rrc/lib/asn/src/Paging.c similarity index 100% rename from lte/rrc/asn/Paging.c rename to lte/rrc/lib/asn/src/Paging.c diff --git a/lte/rrc/asn/PagingRecord.c b/lte/rrc/lib/asn/src/PagingRecord.c similarity index 100% rename from lte/rrc/asn/PagingRecord.c rename to lte/rrc/lib/asn/src/PagingRecord.c diff --git a/lte/rrc/asn/PagingRecordList.c b/lte/rrc/lib/asn/src/PagingRecordList.c similarity index 100% rename from lte/rrc/asn/PagingRecordList.c rename to lte/rrc/lib/asn/src/PagingRecordList.c diff --git a/lte/rrc/asn/PagingUE-Identity.c b/lte/rrc/lib/asn/src/PagingUE-Identity.c similarity index 100% rename from lte/rrc/asn/PagingUE-Identity.c rename to lte/rrc/lib/asn/src/PagingUE-Identity.c diff --git a/lte/rrc/asn/PhyLayerParameters-v1020.c b/lte/rrc/lib/asn/src/PhyLayerParameters-v1020.c similarity index 100% rename from lte/rrc/asn/PhyLayerParameters-v1020.c rename to lte/rrc/lib/asn/src/PhyLayerParameters-v1020.c diff --git a/lte/rrc/asn/PhyLayerParameters-v920.c b/lte/rrc/lib/asn/src/PhyLayerParameters-v920.c similarity index 100% rename from lte/rrc/asn/PhyLayerParameters-v920.c rename to lte/rrc/lib/asn/src/PhyLayerParameters-v920.c diff --git a/lte/rrc/asn/PhyLayerParameters.c b/lte/rrc/lib/asn/src/PhyLayerParameters.c similarity index 100% rename from lte/rrc/asn/PhyLayerParameters.c rename to lte/rrc/lib/asn/src/PhyLayerParameters.c diff --git a/lte/rrc/asn/PhysCellId.c b/lte/rrc/lib/asn/src/PhysCellId.c similarity index 100% rename from lte/rrc/asn/PhysCellId.c rename to lte/rrc/lib/asn/src/PhysCellId.c diff --git a/lte/rrc/asn/PhysCellIdCDMA2000.c b/lte/rrc/lib/asn/src/PhysCellIdCDMA2000.c similarity index 100% rename from lte/rrc/asn/PhysCellIdCDMA2000.c rename to lte/rrc/lib/asn/src/PhysCellIdCDMA2000.c diff --git a/lte/rrc/asn/PhysCellIdGERAN.c b/lte/rrc/lib/asn/src/PhysCellIdGERAN.c similarity index 100% rename from lte/rrc/asn/PhysCellIdGERAN.c rename to lte/rrc/lib/asn/src/PhysCellIdGERAN.c diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000-v920.c b/lte/rrc/lib/asn/src/PhysCellIdListCDMA2000-v920.c similarity index 100% rename from lte/rrc/asn/PhysCellIdListCDMA2000-v920.c rename to lte/rrc/lib/asn/src/PhysCellIdListCDMA2000-v920.c diff --git a/lte/rrc/asn/PhysCellIdListCDMA2000.c b/lte/rrc/lib/asn/src/PhysCellIdListCDMA2000.c similarity index 100% rename from lte/rrc/asn/PhysCellIdListCDMA2000.c rename to lte/rrc/lib/asn/src/PhysCellIdListCDMA2000.c diff --git a/lte/rrc/asn/PhysCellIdRange.c b/lte/rrc/lib/asn/src/PhysCellIdRange.c similarity index 100% rename from lte/rrc/asn/PhysCellIdRange.c rename to lte/rrc/lib/asn/src/PhysCellIdRange.c diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c b/lte/rrc/lib/asn/src/PhysCellIdRangeUTRA-FDD-r9.c similarity index 100% rename from lte/rrc/asn/PhysCellIdRangeUTRA-FDD-r9.c rename to lte/rrc/lib/asn/src/PhysCellIdRangeUTRA-FDD-r9.c diff --git a/lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c b/lte/rrc/lib/asn/src/PhysCellIdRangeUTRA-FDDList-r9.c similarity index 100% rename from lte/rrc/asn/PhysCellIdRangeUTRA-FDDList-r9.c rename to lte/rrc/lib/asn/src/PhysCellIdRangeUTRA-FDDList-r9.c diff --git a/lte/rrc/asn/PhysCellIdUTRA-FDD.c b/lte/rrc/lib/asn/src/PhysCellIdUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/PhysCellIdUTRA-FDD.c rename to lte/rrc/lib/asn/src/PhysCellIdUTRA-FDD.c diff --git a/lte/rrc/asn/PhysCellIdUTRA-TDD.c b/lte/rrc/lib/asn/src/PhysCellIdUTRA-TDD.c similarity index 100% rename from lte/rrc/asn/PhysCellIdUTRA-TDD.c rename to lte/rrc/lib/asn/src/PhysCellIdUTRA-TDD.c diff --git a/lte/rrc/asn/PhysicalConfigDedicated.c b/lte/rrc/lib/asn/src/PhysicalConfigDedicated.c similarity index 100% rename from lte/rrc/asn/PhysicalConfigDedicated.c rename to lte/rrc/lib/asn/src/PhysicalConfigDedicated.c diff --git a/lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.c b/lte/rrc/lib/asn/src/PhysicalConfigDedicatedSCell-r10.c similarity index 100% rename from lte/rrc/asn/PhysicalConfigDedicatedSCell-r10.c rename to lte/rrc/lib/asn/src/PhysicalConfigDedicatedSCell-r10.c diff --git a/lte/rrc/asn/PollByte.c b/lte/rrc/lib/asn/src/PollByte.c similarity index 100% rename from lte/rrc/asn/PollByte.c rename to lte/rrc/lib/asn/src/PollByte.c diff --git a/lte/rrc/asn/PollPDU.c b/lte/rrc/lib/asn/src/PollPDU.c similarity index 100% rename from lte/rrc/asn/PollPDU.c rename to lte/rrc/lib/asn/src/PollPDU.c diff --git a/lte/rrc/asn/PreRegistrationInfoHRPD.c b/lte/rrc/lib/asn/src/PreRegistrationInfoHRPD.c similarity index 100% rename from lte/rrc/asn/PreRegistrationInfoHRPD.c rename to lte/rrc/lib/asn/src/PreRegistrationInfoHRPD.c diff --git a/lte/rrc/asn/PreRegistrationZoneIdHRPD.c b/lte/rrc/lib/asn/src/PreRegistrationZoneIdHRPD.c similarity index 100% rename from lte/rrc/asn/PreRegistrationZoneIdHRPD.c rename to lte/rrc/lib/asn/src/PreRegistrationZoneIdHRPD.c diff --git a/lte/rrc/asn/PresenceAntennaPort1.c b/lte/rrc/lib/asn/src/PresenceAntennaPort1.c similarity index 100% rename from lte/rrc/asn/PresenceAntennaPort1.c rename to lte/rrc/lib/asn/src/PresenceAntennaPort1.c diff --git a/lte/rrc/asn/ProximityIndication-r9-IEs.c b/lte/rrc/lib/asn/src/ProximityIndication-r9-IEs.c similarity index 100% rename from lte/rrc/asn/ProximityIndication-r9-IEs.c rename to lte/rrc/lib/asn/src/ProximityIndication-r9-IEs.c diff --git a/lte/rrc/asn/ProximityIndication-r9.c b/lte/rrc/lib/asn/src/ProximityIndication-r9.c similarity index 100% rename from lte/rrc/asn/ProximityIndication-r9.c rename to lte/rrc/lib/asn/src/ProximityIndication-r9.c diff --git a/lte/rrc/asn/ProximityIndication-v930-IEs.c b/lte/rrc/lib/asn/src/ProximityIndication-v930-IEs.c similarity index 100% rename from lte/rrc/asn/ProximityIndication-v930-IEs.c rename to lte/rrc/lib/asn/src/ProximityIndication-v930-IEs.c diff --git a/lte/rrc/asn/Q-OffsetRange.c b/lte/rrc/lib/asn/src/Q-OffsetRange.c similarity index 100% rename from lte/rrc/asn/Q-OffsetRange.c rename to lte/rrc/lib/asn/src/Q-OffsetRange.c diff --git a/lte/rrc/asn/Q-OffsetRangeInterRAT.c b/lte/rrc/lib/asn/src/Q-OffsetRangeInterRAT.c similarity index 100% rename from lte/rrc/asn/Q-OffsetRangeInterRAT.c rename to lte/rrc/lib/asn/src/Q-OffsetRangeInterRAT.c diff --git a/lte/rrc/asn/Q-QualMin-r9.c b/lte/rrc/lib/asn/src/Q-QualMin-r9.c similarity index 100% rename from lte/rrc/asn/Q-QualMin-r9.c rename to lte/rrc/lib/asn/src/Q-QualMin-r9.c diff --git a/lte/rrc/asn/Q-RxLevMin.c b/lte/rrc/lib/asn/src/Q-RxLevMin.c similarity index 100% rename from lte/rrc/asn/Q-RxLevMin.c rename to lte/rrc/lib/asn/src/Q-RxLevMin.c diff --git a/lte/rrc/asn/QuantityConfig.c b/lte/rrc/lib/asn/src/QuantityConfig.c similarity index 100% rename from lte/rrc/asn/QuantityConfig.c rename to lte/rrc/lib/asn/src/QuantityConfig.c diff --git a/lte/rrc/asn/QuantityConfigCDMA2000.c b/lte/rrc/lib/asn/src/QuantityConfigCDMA2000.c similarity index 100% rename from lte/rrc/asn/QuantityConfigCDMA2000.c rename to lte/rrc/lib/asn/src/QuantityConfigCDMA2000.c diff --git a/lte/rrc/asn/QuantityConfigEUTRA.c b/lte/rrc/lib/asn/src/QuantityConfigEUTRA.c similarity index 100% rename from lte/rrc/asn/QuantityConfigEUTRA.c rename to lte/rrc/lib/asn/src/QuantityConfigEUTRA.c diff --git a/lte/rrc/asn/QuantityConfigGERAN.c b/lte/rrc/lib/asn/src/QuantityConfigGERAN.c similarity index 100% rename from lte/rrc/asn/QuantityConfigGERAN.c rename to lte/rrc/lib/asn/src/QuantityConfigGERAN.c diff --git a/lte/rrc/asn/QuantityConfigUTRA-v1020.c b/lte/rrc/lib/asn/src/QuantityConfigUTRA-v1020.c similarity index 100% rename from lte/rrc/asn/QuantityConfigUTRA-v1020.c rename to lte/rrc/lib/asn/src/QuantityConfigUTRA-v1020.c diff --git a/lte/rrc/asn/QuantityConfigUTRA.c b/lte/rrc/lib/asn/src/QuantityConfigUTRA.c similarity index 100% rename from lte/rrc/asn/QuantityConfigUTRA.c rename to lte/rrc/lib/asn/src/QuantityConfigUTRA.c diff --git a/lte/rrc/asn/RACH-ConfigCommon.c b/lte/rrc/lib/asn/src/RACH-ConfigCommon.c similarity index 100% rename from lte/rrc/asn/RACH-ConfigCommon.c rename to lte/rrc/lib/asn/src/RACH-ConfigCommon.c diff --git a/lte/rrc/asn/RACH-ConfigDedicated.c b/lte/rrc/lib/asn/src/RACH-ConfigDedicated.c similarity index 100% rename from lte/rrc/asn/RACH-ConfigDedicated.c rename to lte/rrc/lib/asn/src/RACH-ConfigDedicated.c diff --git a/lte/rrc/asn/RAND-CDMA2000.c b/lte/rrc/lib/asn/src/RAND-CDMA2000.c similarity index 100% rename from lte/rrc/asn/RAND-CDMA2000.c rename to lte/rrc/lib/asn/src/RAND-CDMA2000.c diff --git a/lte/rrc/asn/RAT-Type.c b/lte/rrc/lib/asn/src/RAT-Type.c similarity index 100% rename from lte/rrc/asn/RAT-Type.c rename to lte/rrc/lib/asn/src/RAT-Type.c diff --git a/lte/rrc/asn/RF-Parameters-v1020.c b/lte/rrc/lib/asn/src/RF-Parameters-v1020.c similarity index 100% rename from lte/rrc/asn/RF-Parameters-v1020.c rename to lte/rrc/lib/asn/src/RF-Parameters-v1020.c diff --git a/lte/rrc/asn/RF-Parameters.c b/lte/rrc/lib/asn/src/RF-Parameters.c similarity index 100% rename from lte/rrc/asn/RF-Parameters.c rename to lte/rrc/lib/asn/src/RF-Parameters.c diff --git a/lte/rrc/asn/RLC-Config.c b/lte/rrc/lib/asn/src/RLC-Config.c similarity index 100% rename from lte/rrc/asn/RLC-Config.c rename to lte/rrc/lib/asn/src/RLC-Config.c diff --git a/lte/rrc/asn/RLF-Report-r9.c b/lte/rrc/lib/asn/src/RLF-Report-r9.c similarity index 100% rename from lte/rrc/asn/RLF-Report-r9.c rename to lte/rrc/lib/asn/src/RLF-Report-r9.c diff --git a/lte/rrc/asn/RLF-TimersAndConstants-r9.c b/lte/rrc/lib/asn/src/RLF-TimersAndConstants-r9.c similarity index 100% rename from lte/rrc/asn/RLF-TimersAndConstants-r9.c rename to lte/rrc/lib/asn/src/RLF-TimersAndConstants-r9.c diff --git a/lte/rrc/asn/RN-SubframeConfig-r10.c b/lte/rrc/lib/asn/src/RN-SubframeConfig-r10.c similarity index 100% rename from lte/rrc/asn/RN-SubframeConfig-r10.c rename to lte/rrc/lib/asn/src/RN-SubframeConfig-r10.c diff --git a/lte/rrc/asn/RN-SystemInfo-r10.c b/lte/rrc/lib/asn/src/RN-SystemInfo-r10.c similarity index 100% rename from lte/rrc/asn/RN-SystemInfo-r10.c rename to lte/rrc/lib/asn/src/RN-SystemInfo-r10.c diff --git a/lte/rrc/asn/RNReconfiguration-r10-IEs.c b/lte/rrc/lib/asn/src/RNReconfiguration-r10-IEs.c similarity index 100% rename from lte/rrc/asn/RNReconfiguration-r10-IEs.c rename to lte/rrc/lib/asn/src/RNReconfiguration-r10-IEs.c diff --git a/lte/rrc/asn/RNReconfiguration-r10.c b/lte/rrc/lib/asn/src/RNReconfiguration-r10.c similarity index 100% rename from lte/rrc/asn/RNReconfiguration-r10.c rename to lte/rrc/lib/asn/src/RNReconfiguration-r10.c diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10-IEs.c b/lte/rrc/lib/asn/src/RNReconfigurationComplete-r10-IEs.c similarity index 100% rename from lte/rrc/asn/RNReconfigurationComplete-r10-IEs.c rename to lte/rrc/lib/asn/src/RNReconfigurationComplete-r10-IEs.c diff --git a/lte/rrc/asn/RNReconfigurationComplete-r10.c b/lte/rrc/lib/asn/src/RNReconfigurationComplete-r10.c similarity index 100% rename from lte/rrc/asn/RNReconfigurationComplete-r10.c rename to lte/rrc/lib/asn/src/RNReconfigurationComplete-r10.c diff --git a/lte/rrc/asn/RRC-TransactionIdentifier.c b/lte/rrc/lib/asn/src/RRC-TransactionIdentifier.c similarity index 100% rename from lte/rrc/asn/RRC-TransactionIdentifier.c rename to lte/rrc/lib/asn/src/RRC-TransactionIdentifier.c diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfiguration-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfiguration-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfiguration-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-v1020-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfiguration-v1020-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfiguration-v890-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-v890-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfiguration-v890-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfiguration-v920-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration-v920-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfiguration-v920-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfiguration.c b/lte/rrc/lib/asn/src/RRCConnectionReconfiguration.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfiguration.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfiguration.c diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete-v1020-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete-v1020-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReconfigurationComplete.c b/lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReconfigurationComplete.c rename to lte/rrc/lib/asn/src/RRCConnectionReconfigurationComplete.c diff --git a/lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishment-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishment-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishment-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishment-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishment-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishment-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishment.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishment.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishment.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishment.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-v1020-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-v1020-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-v920-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete-v920-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete-v920-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentComplete.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentComplete.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentComplete.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentReject-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentReject-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentReject-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentReject-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentReject-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentReject-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentReject.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentReject.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentReject.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentReject.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentRequest-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentRequest-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentRequest-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReestablishmentRequest.c b/lte/rrc/lib/asn/src/RRCConnectionReestablishmentRequest.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReestablishmentRequest.c rename to lte/rrc/lib/asn/src/RRCConnectionReestablishmentRequest.c diff --git a/lte/rrc/asn/RRCConnectionReject-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReject-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReject-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReject-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReject-v1020-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReject-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReject-v1020-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReject-v1020-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionReject-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReject-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionReject-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionReject.c b/lte/rrc/lib/asn/src/RRCConnectionReject.c similarity index 100% rename from lte/rrc/asn/RRCConnectionReject.c rename to lte/rrc/lib/asn/src/RRCConnectionReject.c diff --git a/lte/rrc/asn/RRCConnectionRelease-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionRelease-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionRelease-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionRelease-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-v1020-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionRelease-v1020-IEs.c diff --git a/lte/rrc/asn/RRCConnectionRelease-v890-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionRelease-v890-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-v890-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionRelease-v890-IEs.c diff --git a/lte/rrc/asn/RRCConnectionRelease-v920-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionRelease-v920-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease-v920-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionRelease-v920-IEs.c diff --git a/lte/rrc/asn/RRCConnectionRelease.c b/lte/rrc/lib/asn/src/RRCConnectionRelease.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRelease.c rename to lte/rrc/lib/asn/src/RRCConnectionRelease.c diff --git a/lte/rrc/asn/RRCConnectionRequest-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionRequest-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRequest-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionRequest-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionRequest.c b/lte/rrc/lib/asn/src/RRCConnectionRequest.c similarity index 100% rename from lte/rrc/asn/RRCConnectionRequest.c rename to lte/rrc/lib/asn/src/RRCConnectionRequest.c diff --git a/lte/rrc/asn/RRCConnectionSetup-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionSetup-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetup-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionSetup-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionSetup-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetup-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionSetup-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionSetup.c b/lte/rrc/lib/asn/src/RRCConnectionSetup.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetup.c rename to lte/rrc/lib/asn/src/RRCConnectionSetup.c diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionSetupComplete-r8-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete-r8-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionSetupComplete-r8-IEs.c diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionSetupComplete-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete-v1020-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionSetupComplete-v1020-IEs.c diff --git a/lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.c b/lte/rrc/lib/asn/src/RRCConnectionSetupComplete-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete-v8a0-IEs.c rename to lte/rrc/lib/asn/src/RRCConnectionSetupComplete-v8a0-IEs.c diff --git a/lte/rrc/asn/RRCConnectionSetupComplete.c b/lte/rrc/lib/asn/src/RRCConnectionSetupComplete.c similarity index 100% rename from lte/rrc/asn/RRCConnectionSetupComplete.c rename to lte/rrc/lib/asn/src/RRCConnectionSetupComplete.c diff --git a/lte/rrc/asn/RRM-Config.c b/lte/rrc/lib/asn/src/RRM-Config.c similarity index 100% rename from lte/rrc/asn/RRM-Config.c rename to lte/rrc/lib/asn/src/RRM-Config.c diff --git a/lte/rrc/asn/RSRP-Range.c b/lte/rrc/lib/asn/src/RSRP-Range.c similarity index 100% rename from lte/rrc/asn/RSRP-Range.c rename to lte/rrc/lib/asn/src/RSRP-Range.c diff --git a/lte/rrc/asn/RSRQ-Range.c b/lte/rrc/lib/asn/src/RSRQ-Range.c similarity index 100% rename from lte/rrc/asn/RSRQ-Range.c rename to lte/rrc/lib/asn/src/RSRQ-Range.c diff --git a/lte/rrc/asn/RSTD-InterFreqInfo-r10.c b/lte/rrc/lib/asn/src/RSTD-InterFreqInfo-r10.c similarity index 100% rename from lte/rrc/asn/RSTD-InterFreqInfo-r10.c rename to lte/rrc/lib/asn/src/RSTD-InterFreqInfo-r10.c diff --git a/lte/rrc/asn/RSTD-InterFreqInfoList-r10.c b/lte/rrc/lib/asn/src/RSTD-InterFreqInfoList-r10.c similarity index 100% rename from lte/rrc/asn/RSTD-InterFreqInfoList-r10.c rename to lte/rrc/lib/asn/src/RSTD-InterFreqInfoList-r10.c diff --git a/lte/rrc/asn/RadioResourceConfigCommon.c b/lte/rrc/lib/asn/src/RadioResourceConfigCommon.c similarity index 100% rename from lte/rrc/asn/RadioResourceConfigCommon.c rename to lte/rrc/lib/asn/src/RadioResourceConfigCommon.c diff --git a/lte/rrc/asn/RadioResourceConfigCommonSCell-r10.c b/lte/rrc/lib/asn/src/RadioResourceConfigCommonSCell-r10.c similarity index 100% rename from lte/rrc/asn/RadioResourceConfigCommonSCell-r10.c rename to lte/rrc/lib/asn/src/RadioResourceConfigCommonSCell-r10.c diff --git a/lte/rrc/asn/RadioResourceConfigCommonSIB.c b/lte/rrc/lib/asn/src/RadioResourceConfigCommonSIB.c similarity index 100% rename from lte/rrc/asn/RadioResourceConfigCommonSIB.c rename to lte/rrc/lib/asn/src/RadioResourceConfigCommonSIB.c diff --git a/lte/rrc/asn/RadioResourceConfigDedicated.c b/lte/rrc/lib/asn/src/RadioResourceConfigDedicated.c similarity index 100% rename from lte/rrc/asn/RadioResourceConfigDedicated.c rename to lte/rrc/lib/asn/src/RadioResourceConfigDedicated.c diff --git a/lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.c b/lte/rrc/lib/asn/src/RadioResourceConfigDedicatedSCell-r10.c similarity index 100% rename from lte/rrc/asn/RadioResourceConfigDedicatedSCell-r10.c rename to lte/rrc/lib/asn/src/RadioResourceConfigDedicatedSCell-r10.c diff --git a/lte/rrc/asn/RedirectedCarrierInfo.c b/lte/rrc/lib/asn/src/RedirectedCarrierInfo.c similarity index 100% rename from lte/rrc/asn/RedirectedCarrierInfo.c rename to lte/rrc/lib/asn/src/RedirectedCarrierInfo.c diff --git a/lte/rrc/asn/ReestabUE-Identity.c b/lte/rrc/lib/asn/src/ReestabUE-Identity.c similarity index 100% rename from lte/rrc/asn/ReestabUE-Identity.c rename to lte/rrc/lib/asn/src/ReestabUE-Identity.c diff --git a/lte/rrc/asn/ReestablishmentCause.c b/lte/rrc/lib/asn/src/ReestablishmentCause.c similarity index 100% rename from lte/rrc/asn/ReestablishmentCause.c rename to lte/rrc/lib/asn/src/ReestablishmentCause.c diff --git a/lte/rrc/asn/ReestablishmentInfo.c b/lte/rrc/lib/asn/src/ReestablishmentInfo.c similarity index 100% rename from lte/rrc/asn/ReestablishmentInfo.c rename to lte/rrc/lib/asn/src/ReestablishmentInfo.c diff --git a/lte/rrc/asn/RegisteredMME.c b/lte/rrc/lib/asn/src/RegisteredMME.c similarity index 100% rename from lte/rrc/asn/RegisteredMME.c rename to lte/rrc/lib/asn/src/RegisteredMME.c diff --git a/lte/rrc/asn/ReleaseCause.c b/lte/rrc/lib/asn/src/ReleaseCause.c similarity index 100% rename from lte/rrc/asn/ReleaseCause.c rename to lte/rrc/lib/asn/src/ReleaseCause.c diff --git a/lte/rrc/asn/ReportConfigEUTRA.c b/lte/rrc/lib/asn/src/ReportConfigEUTRA.c similarity index 100% rename from lte/rrc/asn/ReportConfigEUTRA.c rename to lte/rrc/lib/asn/src/ReportConfigEUTRA.c diff --git a/lte/rrc/asn/ReportConfigId.c b/lte/rrc/lib/asn/src/ReportConfigId.c similarity index 100% rename from lte/rrc/asn/ReportConfigId.c rename to lte/rrc/lib/asn/src/ReportConfigId.c diff --git a/lte/rrc/asn/ReportConfigInterRAT.c b/lte/rrc/lib/asn/src/ReportConfigInterRAT.c similarity index 100% rename from lte/rrc/asn/ReportConfigInterRAT.c rename to lte/rrc/lib/asn/src/ReportConfigInterRAT.c diff --git a/lte/rrc/asn/ReportConfigToAddMod.c b/lte/rrc/lib/asn/src/ReportConfigToAddMod.c similarity index 100% rename from lte/rrc/asn/ReportConfigToAddMod.c rename to lte/rrc/lib/asn/src/ReportConfigToAddMod.c diff --git a/lte/rrc/asn/ReportConfigToAddModList.c b/lte/rrc/lib/asn/src/ReportConfigToAddModList.c similarity index 100% rename from lte/rrc/asn/ReportConfigToAddModList.c rename to lte/rrc/lib/asn/src/ReportConfigToAddModList.c diff --git a/lte/rrc/asn/ReportConfigToRemoveList.c b/lte/rrc/lib/asn/src/ReportConfigToRemoveList.c similarity index 100% rename from lte/rrc/asn/ReportConfigToRemoveList.c rename to lte/rrc/lib/asn/src/ReportConfigToRemoveList.c diff --git a/lte/rrc/asn/ReportInterval.c b/lte/rrc/lib/asn/src/ReportInterval.c similarity index 100% rename from lte/rrc/asn/ReportInterval.c rename to lte/rrc/lib/asn/src/ReportInterval.c diff --git a/lte/rrc/asn/ReportProximityConfig-r9.c b/lte/rrc/lib/asn/src/ReportProximityConfig-r9.c similarity index 100% rename from lte/rrc/asn/ReportProximityConfig-r9.c rename to lte/rrc/lib/asn/src/ReportProximityConfig-r9.c diff --git a/lte/rrc/asn/ReselectionThreshold.c b/lte/rrc/lib/asn/src/ReselectionThreshold.c similarity index 100% rename from lte/rrc/asn/ReselectionThreshold.c rename to lte/rrc/lib/asn/src/ReselectionThreshold.c diff --git a/lte/rrc/asn/ReselectionThresholdQ-r9.c b/lte/rrc/lib/asn/src/ReselectionThresholdQ-r9.c similarity index 100% rename from lte/rrc/asn/ReselectionThresholdQ-r9.c rename to lte/rrc/lib/asn/src/ReselectionThresholdQ-r9.c diff --git a/lte/rrc/asn/S-TMSI.c b/lte/rrc/lib/asn/src/S-TMSI.c similarity index 100% rename from lte/rrc/asn/S-TMSI.c rename to lte/rrc/lib/asn/src/S-TMSI.c diff --git a/lte/rrc/asn/SCellIndex-r10.c b/lte/rrc/lib/asn/src/SCellIndex-r10.c similarity index 100% rename from lte/rrc/asn/SCellIndex-r10.c rename to lte/rrc/lib/asn/src/SCellIndex-r10.c diff --git a/lte/rrc/asn/SCellToAddMod-r10.c b/lte/rrc/lib/asn/src/SCellToAddMod-r10.c similarity index 100% rename from lte/rrc/asn/SCellToAddMod-r10.c rename to lte/rrc/lib/asn/src/SCellToAddMod-r10.c diff --git a/lte/rrc/asn/SCellToAddModList-r10.c b/lte/rrc/lib/asn/src/SCellToAddModList-r10.c similarity index 100% rename from lte/rrc/asn/SCellToAddModList-r10.c rename to lte/rrc/lib/asn/src/SCellToAddModList-r10.c diff --git a/lte/rrc/asn/SCellToReleaseList-r10.c b/lte/rrc/lib/asn/src/SCellToReleaseList-r10.c similarity index 100% rename from lte/rrc/asn/SCellToReleaseList-r10.c rename to lte/rrc/lib/asn/src/SCellToReleaseList-r10.c diff --git a/lte/rrc/asn/SI-OrPSI-GERAN.c b/lte/rrc/lib/asn/src/SI-OrPSI-GERAN.c similarity index 100% rename from lte/rrc/asn/SI-OrPSI-GERAN.c rename to lte/rrc/lib/asn/src/SI-OrPSI-GERAN.c diff --git a/lte/rrc/asn/SIB-MappingInfo.c b/lte/rrc/lib/asn/src/SIB-MappingInfo.c similarity index 100% rename from lte/rrc/asn/SIB-MappingInfo.c rename to lte/rrc/lib/asn/src/SIB-MappingInfo.c diff --git a/lte/rrc/asn/SIB-Type.c b/lte/rrc/lib/asn/src/SIB-Type.c similarity index 100% rename from lte/rrc/asn/SIB-Type.c rename to lte/rrc/lib/asn/src/SIB-Type.c diff --git a/lte/rrc/asn/SN-FieldLength.c b/lte/rrc/lib/asn/src/SN-FieldLength.c similarity index 100% rename from lte/rrc/asn/SN-FieldLength.c rename to lte/rrc/lib/asn/src/SN-FieldLength.c diff --git a/lte/rrc/asn/SON-Parameters-r9.c b/lte/rrc/lib/asn/src/SON-Parameters-r9.c similarity index 100% rename from lte/rrc/asn/SON-Parameters-r9.c rename to lte/rrc/lib/asn/src/SON-Parameters-r9.c diff --git a/lte/rrc/asn/SPS-Config.c b/lte/rrc/lib/asn/src/SPS-Config.c similarity index 100% rename from lte/rrc/asn/SPS-Config.c rename to lte/rrc/lib/asn/src/SPS-Config.c diff --git a/lte/rrc/asn/SPS-ConfigDL.c b/lte/rrc/lib/asn/src/SPS-ConfigDL.c similarity index 100% rename from lte/rrc/asn/SPS-ConfigDL.c rename to lte/rrc/lib/asn/src/SPS-ConfigDL.c diff --git a/lte/rrc/asn/SPS-ConfigUL.c b/lte/rrc/lib/asn/src/SPS-ConfigUL.c similarity index 100% rename from lte/rrc/asn/SPS-ConfigUL.c rename to lte/rrc/lib/asn/src/SPS-ConfigUL.c diff --git a/lte/rrc/asn/SPS-RA-ConfigList-rlola.c b/lte/rrc/lib/asn/src/SPS-RA-ConfigList-rlola.c similarity index 100% rename from lte/rrc/asn/SPS-RA-ConfigList-rlola.c rename to lte/rrc/lib/asn/src/SPS-RA-ConfigList-rlola.c diff --git a/lte/rrc/asn/SRB-ToAddMod.c b/lte/rrc/lib/asn/src/SRB-ToAddMod.c similarity index 100% rename from lte/rrc/asn/SRB-ToAddMod.c rename to lte/rrc/lib/asn/src/SRB-ToAddMod.c diff --git a/lte/rrc/asn/SRB-ToAddModList.c b/lte/rrc/lib/asn/src/SRB-ToAddModList.c similarity index 100% rename from lte/rrc/asn/SRB-ToAddModList.c rename to lte/rrc/lib/asn/src/SRB-ToAddModList.c diff --git a/lte/rrc/asn/SRS-ConfigAp-r10.c b/lte/rrc/lib/asn/src/SRS-ConfigAp-r10.c similarity index 100% rename from lte/rrc/asn/SRS-ConfigAp-r10.c rename to lte/rrc/lib/asn/src/SRS-ConfigAp-r10.c diff --git a/lte/rrc/asn/SchedulingInfo.c b/lte/rrc/lib/asn/src/SchedulingInfo.c similarity index 100% rename from lte/rrc/asn/SchedulingInfo.c rename to lte/rrc/lib/asn/src/SchedulingInfo.c diff --git a/lte/rrc/asn/SchedulingInfoList.c b/lte/rrc/lib/asn/src/SchedulingInfoList.c similarity index 100% rename from lte/rrc/asn/SchedulingInfoList.c rename to lte/rrc/lib/asn/src/SchedulingInfoList.c diff --git a/lte/rrc/asn/SchedulingRequestConfig-v1020.c b/lte/rrc/lib/asn/src/SchedulingRequestConfig-v1020.c similarity index 100% rename from lte/rrc/asn/SchedulingRequestConfig-v1020.c rename to lte/rrc/lib/asn/src/SchedulingRequestConfig-v1020.c diff --git a/lte/rrc/asn/SchedulingRequestConfig.c b/lte/rrc/lib/asn/src/SchedulingRequestConfig.c similarity index 100% rename from lte/rrc/asn/SchedulingRequestConfig.c rename to lte/rrc/lib/asn/src/SchedulingRequestConfig.c diff --git a/lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.c b/lte/rrc/lib/asn/src/SecondaryPreRegistrationZoneIdListHRPD.c similarity index 100% rename from lte/rrc/asn/SecondaryPreRegistrationZoneIdListHRPD.c rename to lte/rrc/lib/asn/src/SecondaryPreRegistrationZoneIdListHRPD.c diff --git a/lte/rrc/asn/SecurityAlgorithmConfig.c b/lte/rrc/lib/asn/src/SecurityAlgorithmConfig.c similarity index 100% rename from lte/rrc/asn/SecurityAlgorithmConfig.c rename to lte/rrc/lib/asn/src/SecurityAlgorithmConfig.c diff --git a/lte/rrc/asn/SecurityConfigHO.c b/lte/rrc/lib/asn/src/SecurityConfigHO.c similarity index 100% rename from lte/rrc/asn/SecurityConfigHO.c rename to lte/rrc/lib/asn/src/SecurityConfigHO.c diff --git a/lte/rrc/asn/SecurityConfigSMC.c b/lte/rrc/lib/asn/src/SecurityConfigSMC.c similarity index 100% rename from lte/rrc/asn/SecurityConfigSMC.c rename to lte/rrc/lib/asn/src/SecurityConfigSMC.c diff --git a/lte/rrc/asn/SecurityModeCommand-r8-IEs.c b/lte/rrc/lib/asn/src/SecurityModeCommand-r8-IEs.c similarity index 100% rename from lte/rrc/asn/SecurityModeCommand-r8-IEs.c rename to lte/rrc/lib/asn/src/SecurityModeCommand-r8-IEs.c diff --git a/lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c b/lte/rrc/lib/asn/src/SecurityModeCommand-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/SecurityModeCommand-v8a0-IEs.c rename to lte/rrc/lib/asn/src/SecurityModeCommand-v8a0-IEs.c diff --git a/lte/rrc/asn/SecurityModeCommand.c b/lte/rrc/lib/asn/src/SecurityModeCommand.c similarity index 100% rename from lte/rrc/asn/SecurityModeCommand.c rename to lte/rrc/lib/asn/src/SecurityModeCommand.c diff --git a/lte/rrc/asn/SecurityModeComplete-r8-IEs.c b/lte/rrc/lib/asn/src/SecurityModeComplete-r8-IEs.c similarity index 100% rename from lte/rrc/asn/SecurityModeComplete-r8-IEs.c rename to lte/rrc/lib/asn/src/SecurityModeComplete-r8-IEs.c diff --git a/lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c b/lte/rrc/lib/asn/src/SecurityModeComplete-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/SecurityModeComplete-v8a0-IEs.c rename to lte/rrc/lib/asn/src/SecurityModeComplete-v8a0-IEs.c diff --git a/lte/rrc/asn/SecurityModeComplete.c b/lte/rrc/lib/asn/src/SecurityModeComplete.c similarity index 100% rename from lte/rrc/asn/SecurityModeComplete.c rename to lte/rrc/lib/asn/src/SecurityModeComplete.c diff --git a/lte/rrc/asn/SecurityModeFailure-r8-IEs.c b/lte/rrc/lib/asn/src/SecurityModeFailure-r8-IEs.c similarity index 100% rename from lte/rrc/asn/SecurityModeFailure-r8-IEs.c rename to lte/rrc/lib/asn/src/SecurityModeFailure-r8-IEs.c diff --git a/lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c b/lte/rrc/lib/asn/src/SecurityModeFailure-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/SecurityModeFailure-v8a0-IEs.c rename to lte/rrc/lib/asn/src/SecurityModeFailure-v8a0-IEs.c diff --git a/lte/rrc/asn/SecurityModeFailure.c b/lte/rrc/lib/asn/src/SecurityModeFailure.c similarity index 100% rename from lte/rrc/asn/SecurityModeFailure.c rename to lte/rrc/lib/asn/src/SecurityModeFailure.c diff --git a/lte/rrc/asn/ServCellIndex-r10.c b/lte/rrc/lib/asn/src/ServCellIndex-r10.c similarity index 100% rename from lte/rrc/asn/ServCellIndex-r10.c rename to lte/rrc/lib/asn/src/ServCellIndex-r10.c diff --git a/lte/rrc/asn/ShortMAC-I.c b/lte/rrc/lib/asn/src/ShortMAC-I.c similarity index 100% rename from lte/rrc/asn/ShortMAC-I.c rename to lte/rrc/lib/asn/src/ShortMAC-I.c diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigCommon.c b/lte/rrc/lib/asn/src/SoundingRS-UL-ConfigCommon.c similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigCommon.c rename to lte/rrc/lib/asn/src/SoundingRS-UL-ConfigCommon.c diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.c b/lte/rrc/lib/asn/src/SoundingRS-UL-ConfigDedicated-v1020.c similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigDedicated-v1020.c rename to lte/rrc/lib/asn/src/SoundingRS-UL-ConfigDedicated-v1020.c diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c b/lte/rrc/lib/asn/src/SoundingRS-UL-ConfigDedicated.c similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigDedicated.c rename to lte/rrc/lib/asn/src/SoundingRS-UL-ConfigDedicated.c diff --git a/lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c b/lte/rrc/lib/asn/src/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c similarity index 100% rename from lte/rrc/asn/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c rename to lte/rrc/lib/asn/src/SoundingRS-UL-ConfigDedicatedAperiodic-r10.c diff --git a/lte/rrc/asn/SpeedStateScaleFactors.c b/lte/rrc/lib/asn/src/SpeedStateScaleFactors.c similarity index 100% rename from lte/rrc/asn/SpeedStateScaleFactors.c rename to lte/rrc/lib/asn/src/SpeedStateScaleFactors.c diff --git a/lte/rrc/asn/SupportedBandCombination-r10.c b/lte/rrc/lib/asn/src/SupportedBandCombination-r10.c similarity index 100% rename from lte/rrc/asn/SupportedBandCombination-r10.c rename to lte/rrc/lib/asn/src/SupportedBandCombination-r10.c diff --git a/lte/rrc/asn/SupportedBandEUTRA.c b/lte/rrc/lib/asn/src/SupportedBandEUTRA.c similarity index 100% rename from lte/rrc/asn/SupportedBandEUTRA.c rename to lte/rrc/lib/asn/src/SupportedBandEUTRA.c diff --git a/lte/rrc/asn/SupportedBandGERAN.c b/lte/rrc/lib/asn/src/SupportedBandGERAN.c similarity index 100% rename from lte/rrc/asn/SupportedBandGERAN.c rename to lte/rrc/lib/asn/src/SupportedBandGERAN.c diff --git a/lte/rrc/asn/SupportedBandList1XRTT.c b/lte/rrc/lib/asn/src/SupportedBandList1XRTT.c similarity index 100% rename from lte/rrc/asn/SupportedBandList1XRTT.c rename to lte/rrc/lib/asn/src/SupportedBandList1XRTT.c diff --git a/lte/rrc/asn/SupportedBandListEUTRA.c b/lte/rrc/lib/asn/src/SupportedBandListEUTRA.c similarity index 100% rename from lte/rrc/asn/SupportedBandListEUTRA.c rename to lte/rrc/lib/asn/src/SupportedBandListEUTRA.c diff --git a/lte/rrc/asn/SupportedBandListGERAN.c b/lte/rrc/lib/asn/src/SupportedBandListGERAN.c similarity index 100% rename from lte/rrc/asn/SupportedBandListGERAN.c rename to lte/rrc/lib/asn/src/SupportedBandListGERAN.c diff --git a/lte/rrc/asn/SupportedBandListHRPD.c b/lte/rrc/lib/asn/src/SupportedBandListHRPD.c similarity index 100% rename from lte/rrc/asn/SupportedBandListHRPD.c rename to lte/rrc/lib/asn/src/SupportedBandListHRPD.c diff --git a/lte/rrc/asn/SupportedBandListUTRA-FDD.c b/lte/rrc/lib/asn/src/SupportedBandListUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-FDD.c rename to lte/rrc/lib/asn/src/SupportedBandListUTRA-FDD.c diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD128.c b/lte/rrc/lib/asn/src/SupportedBandListUTRA-TDD128.c similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-TDD128.c rename to lte/rrc/lib/asn/src/SupportedBandListUTRA-TDD128.c diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD384.c b/lte/rrc/lib/asn/src/SupportedBandListUTRA-TDD384.c similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-TDD384.c rename to lte/rrc/lib/asn/src/SupportedBandListUTRA-TDD384.c diff --git a/lte/rrc/asn/SupportedBandListUTRA-TDD768.c b/lte/rrc/lib/asn/src/SupportedBandListUTRA-TDD768.c similarity index 100% rename from lte/rrc/asn/SupportedBandListUTRA-TDD768.c rename to lte/rrc/lib/asn/src/SupportedBandListUTRA-TDD768.c diff --git a/lte/rrc/asn/SupportedBandUTRA-FDD.c b/lte/rrc/lib/asn/src/SupportedBandUTRA-FDD.c similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-FDD.c rename to lte/rrc/lib/asn/src/SupportedBandUTRA-FDD.c diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD128.c b/lte/rrc/lib/asn/src/SupportedBandUTRA-TDD128.c similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-TDD128.c rename to lte/rrc/lib/asn/src/SupportedBandUTRA-TDD128.c diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD384.c b/lte/rrc/lib/asn/src/SupportedBandUTRA-TDD384.c similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-TDD384.c rename to lte/rrc/lib/asn/src/SupportedBandUTRA-TDD384.c diff --git a/lte/rrc/asn/SupportedBandUTRA-TDD768.c b/lte/rrc/lib/asn/src/SupportedBandUTRA-TDD768.c similarity index 100% rename from lte/rrc/asn/SupportedBandUTRA-TDD768.c rename to lte/rrc/lib/asn/src/SupportedBandUTRA-TDD768.c diff --git a/lte/rrc/asn/SystemInfoListGERAN.c b/lte/rrc/lib/asn/src/SystemInfoListGERAN.c similarity index 100% rename from lte/rrc/asn/SystemInfoListGERAN.c rename to lte/rrc/lib/asn/src/SystemInfoListGERAN.c diff --git a/lte/rrc/asn/SystemInformation-r8-IEs.c b/lte/rrc/lib/asn/src/SystemInformation-r8-IEs.c similarity index 100% rename from lte/rrc/asn/SystemInformation-r8-IEs.c rename to lte/rrc/lib/asn/src/SystemInformation-r8-IEs.c diff --git a/lte/rrc/asn/SystemInformation-v8a0-IEs.c b/lte/rrc/lib/asn/src/SystemInformation-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/SystemInformation-v8a0-IEs.c rename to lte/rrc/lib/asn/src/SystemInformation-v8a0-IEs.c diff --git a/lte/rrc/asn/SystemInformation.c b/lte/rrc/lib/asn/src/SystemInformation.c similarity index 100% rename from lte/rrc/asn/SystemInformation.c rename to lte/rrc/lib/asn/src/SystemInformation.c diff --git a/lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c b/lte/rrc/lib/asn/src/SystemInformationBlockType1-v890-IEs.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType1-v890-IEs.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType1-v890-IEs.c diff --git a/lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c b/lte/rrc/lib/asn/src/SystemInformationBlockType1-v920-IEs.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType1-v920-IEs.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType1-v920-IEs.c diff --git a/lte/rrc/asn/SystemInformationBlockType1.c b/lte/rrc/lib/asn/src/SystemInformationBlockType1.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType1.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType1.c diff --git a/lte/rrc/asn/SystemInformationBlockType10.c b/lte/rrc/lib/asn/src/SystemInformationBlockType10.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType10.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType10.c diff --git a/lte/rrc/asn/SystemInformationBlockType11.c b/lte/rrc/lib/asn/src/SystemInformationBlockType11.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType11.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType11.c diff --git a/lte/rrc/asn/SystemInformationBlockType12-r9.c b/lte/rrc/lib/asn/src/SystemInformationBlockType12-r9.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType12-r9.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType12-r9.c diff --git a/lte/rrc/asn/SystemInformationBlockType13-r9.c b/lte/rrc/lib/asn/src/SystemInformationBlockType13-r9.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType13-r9.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType13-r9.c diff --git a/lte/rrc/asn/SystemInformationBlockType2.c b/lte/rrc/lib/asn/src/SystemInformationBlockType2.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType2.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType2.c diff --git a/lte/rrc/asn/SystemInformationBlockType3.c b/lte/rrc/lib/asn/src/SystemInformationBlockType3.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType3.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType3.c diff --git a/lte/rrc/asn/SystemInformationBlockType4.c b/lte/rrc/lib/asn/src/SystemInformationBlockType4.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType4.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType4.c diff --git a/lte/rrc/asn/SystemInformationBlockType5.c b/lte/rrc/lib/asn/src/SystemInformationBlockType5.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType5.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType5.c diff --git a/lte/rrc/asn/SystemInformationBlockType6.c b/lte/rrc/lib/asn/src/SystemInformationBlockType6.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType6.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType6.c diff --git a/lte/rrc/asn/SystemInformationBlockType7.c b/lte/rrc/lib/asn/src/SystemInformationBlockType7.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType7.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType7.c diff --git a/lte/rrc/asn/SystemInformationBlockType8.c b/lte/rrc/lib/asn/src/SystemInformationBlockType8.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType8.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType8.c diff --git a/lte/rrc/asn/SystemInformationBlockType9.c b/lte/rrc/lib/asn/src/SystemInformationBlockType9.c similarity index 100% rename from lte/rrc/asn/SystemInformationBlockType9.c rename to lte/rrc/lib/asn/src/SystemInformationBlockType9.c diff --git a/lte/rrc/asn/SystemTimeInfoCDMA2000.c b/lte/rrc/lib/asn/src/SystemTimeInfoCDMA2000.c similarity index 100% rename from lte/rrc/asn/SystemTimeInfoCDMA2000.c rename to lte/rrc/lib/asn/src/SystemTimeInfoCDMA2000.c diff --git a/lte/rrc/asn/T-PollRetransmit.c b/lte/rrc/lib/asn/src/T-PollRetransmit.c similarity index 100% rename from lte/rrc/asn/T-PollRetransmit.c rename to lte/rrc/lib/asn/src/T-PollRetransmit.c diff --git a/lte/rrc/asn/T-Reordering.c b/lte/rrc/lib/asn/src/T-Reordering.c similarity index 100% rename from lte/rrc/asn/T-Reordering.c rename to lte/rrc/lib/asn/src/T-Reordering.c diff --git a/lte/rrc/asn/T-Reselection.c b/lte/rrc/lib/asn/src/T-Reselection.c similarity index 100% rename from lte/rrc/asn/T-Reselection.c rename to lte/rrc/lib/asn/src/T-Reselection.c diff --git a/lte/rrc/asn/T-StatusProhibit.c b/lte/rrc/lib/asn/src/T-StatusProhibit.c similarity index 100% rename from lte/rrc/asn/T-StatusProhibit.c rename to lte/rrc/lib/asn/src/T-StatusProhibit.c diff --git a/lte/rrc/asn/TDD-Config.c b/lte/rrc/lib/asn/src/TDD-Config.c similarity index 100% rename from lte/rrc/asn/TDD-Config.c rename to lte/rrc/lib/asn/src/TDD-Config.c diff --git a/lte/rrc/asn/TMGI-r9.c b/lte/rrc/lib/asn/src/TMGI-r9.c similarity index 100% rename from lte/rrc/asn/TMGI-r9.c rename to lte/rrc/lib/asn/src/TMGI-r9.c diff --git a/lte/rrc/asn/TPC-Index.c b/lte/rrc/lib/asn/src/TPC-Index.c similarity index 100% rename from lte/rrc/asn/TPC-Index.c rename to lte/rrc/lib/asn/src/TPC-Index.c diff --git a/lte/rrc/asn/TPC-PDCCH-Config.c b/lte/rrc/lib/asn/src/TPC-PDCCH-Config.c similarity index 100% rename from lte/rrc/asn/TPC-PDCCH-Config.c rename to lte/rrc/lib/asn/src/TPC-PDCCH-Config.c diff --git a/lte/rrc/asn/ThresholdCDMA2000.c b/lte/rrc/lib/asn/src/ThresholdCDMA2000.c similarity index 100% rename from lte/rrc/asn/ThresholdCDMA2000.c rename to lte/rrc/lib/asn/src/ThresholdCDMA2000.c diff --git a/lte/rrc/asn/ThresholdEUTRA.c b/lte/rrc/lib/asn/src/ThresholdEUTRA.c similarity index 100% rename from lte/rrc/asn/ThresholdEUTRA.c rename to lte/rrc/lib/asn/src/ThresholdEUTRA.c diff --git a/lte/rrc/asn/ThresholdGERAN.c b/lte/rrc/lib/asn/src/ThresholdGERAN.c similarity index 100% rename from lte/rrc/asn/ThresholdGERAN.c rename to lte/rrc/lib/asn/src/ThresholdGERAN.c diff --git a/lte/rrc/asn/ThresholdUTRA.c b/lte/rrc/lib/asn/src/ThresholdUTRA.c similarity index 100% rename from lte/rrc/asn/ThresholdUTRA.c rename to lte/rrc/lib/asn/src/ThresholdUTRA.c diff --git a/lte/rrc/asn/TimeAlignmentTimer.c b/lte/rrc/lib/asn/src/TimeAlignmentTimer.c similarity index 100% rename from lte/rrc/asn/TimeAlignmentTimer.c rename to lte/rrc/lib/asn/src/TimeAlignmentTimer.c diff --git a/lte/rrc/asn/TimeToTrigger.c b/lte/rrc/lib/asn/src/TimeToTrigger.c similarity index 100% rename from lte/rrc/asn/TimeToTrigger.c rename to lte/rrc/lib/asn/src/TimeToTrigger.c diff --git a/lte/rrc/asn/TraceReference-r10.c b/lte/rrc/lib/asn/src/TraceReference-r10.c similarity index 100% rename from lte/rrc/asn/TraceReference-r10.c rename to lte/rrc/lib/asn/src/TraceReference-r10.c diff --git a/lte/rrc/asn/TrackingAreaCode.c b/lte/rrc/lib/asn/src/TrackingAreaCode.c similarity index 100% rename from lte/rrc/asn/TrackingAreaCode.c rename to lte/rrc/lib/asn/src/TrackingAreaCode.c diff --git a/lte/rrc/asn/TrackingAreaCodeList-r10.c b/lte/rrc/lib/asn/src/TrackingAreaCodeList-r10.c similarity index 100% rename from lte/rrc/asn/TrackingAreaCodeList-r10.c rename to lte/rrc/lib/asn/src/TrackingAreaCodeList-r10.c diff --git a/lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.c b/lte/rrc/lib/asn/src/UE-BasedNetwPerfMeasParameters-r10.c similarity index 100% rename from lte/rrc/asn/UE-BasedNetwPerfMeasParameters-r10.c rename to lte/rrc/lib/asn/src/UE-BasedNetwPerfMeasParameters-r10.c diff --git a/lte/rrc/asn/UE-CapabilityRAT-Container.c b/lte/rrc/lib/asn/src/UE-CapabilityRAT-Container.c similarity index 100% rename from lte/rrc/asn/UE-CapabilityRAT-Container.c rename to lte/rrc/lib/asn/src/UE-CapabilityRAT-Container.c diff --git a/lte/rrc/asn/UE-CapabilityRAT-ContainerList.c b/lte/rrc/lib/asn/src/UE-CapabilityRAT-ContainerList.c similarity index 100% rename from lte/rrc/asn/UE-CapabilityRAT-ContainerList.c rename to lte/rrc/lib/asn/src/UE-CapabilityRAT-ContainerList.c diff --git a/lte/rrc/asn/UE-CapabilityRequest.c b/lte/rrc/lib/asn/src/UE-CapabilityRequest.c similarity index 100% rename from lte/rrc/asn/UE-CapabilityRequest.c rename to lte/rrc/lib/asn/src/UE-CapabilityRequest.c diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c b/lte/rrc/lib/asn/src/UE-EUTRA-Capability-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability-v1020-IEs.c rename to lte/rrc/lib/asn/src/UE-EUTRA-Capability-v1020-IEs.c diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c b/lte/rrc/lib/asn/src/UE-EUTRA-Capability-v920-IEs.c similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability-v920-IEs.c rename to lte/rrc/lib/asn/src/UE-EUTRA-Capability-v920-IEs.c diff --git a/lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c b/lte/rrc/lib/asn/src/UE-EUTRA-Capability-v940-IEs.c similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability-v940-IEs.c rename to lte/rrc/lib/asn/src/UE-EUTRA-Capability-v940-IEs.c diff --git a/lte/rrc/asn/UE-EUTRA-Capability.c b/lte/rrc/lib/asn/src/UE-EUTRA-Capability.c similarity index 100% rename from lte/rrc/asn/UE-EUTRA-Capability.c rename to lte/rrc/lib/asn/src/UE-EUTRA-Capability.c diff --git a/lte/rrc/asn/UE-TimersAndConstants.c b/lte/rrc/lib/asn/src/UE-TimersAndConstants.c similarity index 100% rename from lte/rrc/asn/UE-TimersAndConstants.c rename to lte/rrc/lib/asn/src/UE-TimersAndConstants.c diff --git a/lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c b/lte/rrc/lib/asn/src/UECapabilityEnquiry-r8-IEs.c similarity index 100% rename from lte/rrc/asn/UECapabilityEnquiry-r8-IEs.c rename to lte/rrc/lib/asn/src/UECapabilityEnquiry-r8-IEs.c diff --git a/lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c b/lte/rrc/lib/asn/src/UECapabilityEnquiry-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/UECapabilityEnquiry-v8a0-IEs.c rename to lte/rrc/lib/asn/src/UECapabilityEnquiry-v8a0-IEs.c diff --git a/lte/rrc/asn/UECapabilityEnquiry.c b/lte/rrc/lib/asn/src/UECapabilityEnquiry.c similarity index 100% rename from lte/rrc/asn/UECapabilityEnquiry.c rename to lte/rrc/lib/asn/src/UECapabilityEnquiry.c diff --git a/lte/rrc/asn/UECapabilityInformation-r8-IEs.c b/lte/rrc/lib/asn/src/UECapabilityInformation-r8-IEs.c similarity index 100% rename from lte/rrc/asn/UECapabilityInformation-r8-IEs.c rename to lte/rrc/lib/asn/src/UECapabilityInformation-r8-IEs.c diff --git a/lte/rrc/asn/UECapabilityInformation-v8a0-IEs.c b/lte/rrc/lib/asn/src/UECapabilityInformation-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/UECapabilityInformation-v8a0-IEs.c rename to lte/rrc/lib/asn/src/UECapabilityInformation-v8a0-IEs.c diff --git a/lte/rrc/asn/UECapabilityInformation.c b/lte/rrc/lib/asn/src/UECapabilityInformation.c similarity index 100% rename from lte/rrc/asn/UECapabilityInformation.c rename to lte/rrc/lib/asn/src/UECapabilityInformation.c diff --git a/lte/rrc/asn/UEInformationRequest-r9-IEs.c b/lte/rrc/lib/asn/src/UEInformationRequest-r9-IEs.c similarity index 100% rename from lte/rrc/asn/UEInformationRequest-r9-IEs.c rename to lte/rrc/lib/asn/src/UEInformationRequest-r9-IEs.c diff --git a/lte/rrc/asn/UEInformationRequest-r9.c b/lte/rrc/lib/asn/src/UEInformationRequest-r9.c similarity index 100% rename from lte/rrc/asn/UEInformationRequest-r9.c rename to lte/rrc/lib/asn/src/UEInformationRequest-r9.c diff --git a/lte/rrc/asn/UEInformationRequest-v1020-IEs.c b/lte/rrc/lib/asn/src/UEInformationRequest-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/UEInformationRequest-v1020-IEs.c rename to lte/rrc/lib/asn/src/UEInformationRequest-v1020-IEs.c diff --git a/lte/rrc/asn/UEInformationRequest-v930-IEs.c b/lte/rrc/lib/asn/src/UEInformationRequest-v930-IEs.c similarity index 100% rename from lte/rrc/asn/UEInformationRequest-v930-IEs.c rename to lte/rrc/lib/asn/src/UEInformationRequest-v930-IEs.c diff --git a/lte/rrc/asn/UEInformationResponse-r9-IEs.c b/lte/rrc/lib/asn/src/UEInformationResponse-r9-IEs.c similarity index 100% rename from lte/rrc/asn/UEInformationResponse-r9-IEs.c rename to lte/rrc/lib/asn/src/UEInformationResponse-r9-IEs.c diff --git a/lte/rrc/asn/UEInformationResponse-r9.c b/lte/rrc/lib/asn/src/UEInformationResponse-r9.c similarity index 100% rename from lte/rrc/asn/UEInformationResponse-r9.c rename to lte/rrc/lib/asn/src/UEInformationResponse-r9.c diff --git a/lte/rrc/asn/UEInformationResponse-v1020-IEs.c b/lte/rrc/lib/asn/src/UEInformationResponse-v1020-IEs.c similarity index 100% rename from lte/rrc/asn/UEInformationResponse-v1020-IEs.c rename to lte/rrc/lib/asn/src/UEInformationResponse-v1020-IEs.c diff --git a/lte/rrc/asn/UEInformationResponse-v930-IEs.c b/lte/rrc/lib/asn/src/UEInformationResponse-v930-IEs.c similarity index 100% rename from lte/rrc/asn/UEInformationResponse-v930-IEs.c rename to lte/rrc/lib/asn/src/UEInformationResponse-v930-IEs.c diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.c b/lte/rrc/lib/asn/src/UERadioAccessCapabilityInformation-r8-IEs.c similarity index 100% rename from lte/rrc/asn/UERadioAccessCapabilityInformation-r8-IEs.c rename to lte/rrc/lib/asn/src/UERadioAccessCapabilityInformation-r8-IEs.c diff --git a/lte/rrc/asn/UERadioAccessCapabilityInformation.c b/lte/rrc/lib/asn/src/UERadioAccessCapabilityInformation.c similarity index 100% rename from lte/rrc/asn/UERadioAccessCapabilityInformation.c rename to lte/rrc/lib/asn/src/UERadioAccessCapabilityInformation.c diff --git a/lte/rrc/asn/UL-AM-RLC.c b/lte/rrc/lib/asn/src/UL-AM-RLC.c similarity index 100% rename from lte/rrc/asn/UL-AM-RLC.c rename to lte/rrc/lib/asn/src/UL-AM-RLC.c diff --git a/lte/rrc/asn/UL-CCCH-Message.c b/lte/rrc/lib/asn/src/UL-CCCH-Message.c similarity index 100% rename from lte/rrc/asn/UL-CCCH-Message.c rename to lte/rrc/lib/asn/src/UL-CCCH-Message.c diff --git a/lte/rrc/asn/UL-CCCH-MessageType.c b/lte/rrc/lib/asn/src/UL-CCCH-MessageType.c similarity index 100% rename from lte/rrc/asn/UL-CCCH-MessageType.c rename to lte/rrc/lib/asn/src/UL-CCCH-MessageType.c diff --git a/lte/rrc/asn/UL-CyclicPrefixLength.c b/lte/rrc/lib/asn/src/UL-CyclicPrefixLength.c similarity index 100% rename from lte/rrc/asn/UL-CyclicPrefixLength.c rename to lte/rrc/lib/asn/src/UL-CyclicPrefixLength.c diff --git a/lte/rrc/asn/UL-DCCH-Message.c b/lte/rrc/lib/asn/src/UL-DCCH-Message.c similarity index 100% rename from lte/rrc/asn/UL-DCCH-Message.c rename to lte/rrc/lib/asn/src/UL-DCCH-Message.c diff --git a/lte/rrc/asn/UL-DCCH-MessageType.c b/lte/rrc/lib/asn/src/UL-DCCH-MessageType.c similarity index 100% rename from lte/rrc/asn/UL-DCCH-MessageType.c rename to lte/rrc/lib/asn/src/UL-DCCH-MessageType.c diff --git a/lte/rrc/asn/UL-ReferenceSignalsPUSCH.c b/lte/rrc/lib/asn/src/UL-ReferenceSignalsPUSCH.c similarity index 100% rename from lte/rrc/asn/UL-ReferenceSignalsPUSCH.c rename to lte/rrc/lib/asn/src/UL-ReferenceSignalsPUSCH.c diff --git a/lte/rrc/asn/UL-UM-RLC.c b/lte/rrc/lib/asn/src/UL-UM-RLC.c similarity index 100% rename from lte/rrc/asn/UL-UM-RLC.c rename to lte/rrc/lib/asn/src/UL-UM-RLC.c diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.c b/lte/rrc/lib/asn/src/ULHandoverPreparationTransfer-r8-IEs.c similarity index 100% rename from lte/rrc/asn/ULHandoverPreparationTransfer-r8-IEs.c rename to lte/rrc/lib/asn/src/ULHandoverPreparationTransfer-r8-IEs.c diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.c b/lte/rrc/lib/asn/src/ULHandoverPreparationTransfer-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/ULHandoverPreparationTransfer-v8a0-IEs.c rename to lte/rrc/lib/asn/src/ULHandoverPreparationTransfer-v8a0-IEs.c diff --git a/lte/rrc/asn/ULHandoverPreparationTransfer.c b/lte/rrc/lib/asn/src/ULHandoverPreparationTransfer.c similarity index 100% rename from lte/rrc/asn/ULHandoverPreparationTransfer.c rename to lte/rrc/lib/asn/src/ULHandoverPreparationTransfer.c diff --git a/lte/rrc/asn/ULInformationTransfer-r8-IEs.c b/lte/rrc/lib/asn/src/ULInformationTransfer-r8-IEs.c similarity index 100% rename from lte/rrc/asn/ULInformationTransfer-r8-IEs.c rename to lte/rrc/lib/asn/src/ULInformationTransfer-r8-IEs.c diff --git a/lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c b/lte/rrc/lib/asn/src/ULInformationTransfer-v8a0-IEs.c similarity index 100% rename from lte/rrc/asn/ULInformationTransfer-v8a0-IEs.c rename to lte/rrc/lib/asn/src/ULInformationTransfer-v8a0-IEs.c diff --git a/lte/rrc/asn/ULInformationTransfer.c b/lte/rrc/lib/asn/src/ULInformationTransfer.c similarity index 100% rename from lte/rrc/asn/ULInformationTransfer.c rename to lte/rrc/lib/asn/src/ULInformationTransfer.c diff --git a/lte/rrc/asn/UplinkPowerControlCommon-v1020.c b/lte/rrc/lib/asn/src/UplinkPowerControlCommon-v1020.c similarity index 100% rename from lte/rrc/asn/UplinkPowerControlCommon-v1020.c rename to lte/rrc/lib/asn/src/UplinkPowerControlCommon-v1020.c diff --git a/lte/rrc/asn/UplinkPowerControlCommon.c b/lte/rrc/lib/asn/src/UplinkPowerControlCommon.c similarity index 100% rename from lte/rrc/asn/UplinkPowerControlCommon.c rename to lte/rrc/lib/asn/src/UplinkPowerControlCommon.c diff --git a/lte/rrc/asn/UplinkPowerControlCommonSCell-r10.c b/lte/rrc/lib/asn/src/UplinkPowerControlCommonSCell-r10.c similarity index 100% rename from lte/rrc/asn/UplinkPowerControlCommonSCell-r10.c rename to lte/rrc/lib/asn/src/UplinkPowerControlCommonSCell-r10.c diff --git a/lte/rrc/asn/UplinkPowerControlDedicated-v1020.c b/lte/rrc/lib/asn/src/UplinkPowerControlDedicated-v1020.c similarity index 100% rename from lte/rrc/asn/UplinkPowerControlDedicated-v1020.c rename to lte/rrc/lib/asn/src/UplinkPowerControlDedicated-v1020.c diff --git a/lte/rrc/asn/UplinkPowerControlDedicated.c b/lte/rrc/lib/asn/src/UplinkPowerControlDedicated.c similarity index 100% rename from lte/rrc/asn/UplinkPowerControlDedicated.c rename to lte/rrc/lib/asn/src/UplinkPowerControlDedicated.c diff --git a/lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.c b/lte/rrc/lib/asn/src/UplinkPowerControlDedicatedSCell-r10.c similarity index 100% rename from lte/rrc/asn/UplinkPowerControlDedicatedSCell-r10.c rename to lte/rrc/lib/asn/src/UplinkPowerControlDedicatedSCell-r10.c diff --git a/lte/rrc/asn/VarMeasConfig.c b/lte/rrc/lib/asn/src/VarMeasConfig.c similarity index 100% rename from lte/rrc/asn/VarMeasConfig.c rename to lte/rrc/lib/asn/src/VarMeasConfig.c diff --git a/lte/rrc/asn/VarMeasReport.c b/lte/rrc/lib/asn/src/VarMeasReport.c similarity index 100% rename from lte/rrc/asn/VarMeasReport.c rename to lte/rrc/lib/asn/src/VarMeasReport.c diff --git a/lte/rrc/asn/VarMeasReportList.c b/lte/rrc/lib/asn/src/VarMeasReportList.c similarity index 100% rename from lte/rrc/asn/VarMeasReportList.c rename to lte/rrc/lib/asn/src/VarMeasReportList.c diff --git a/lte/rrc/asn/VarShortMAC-Input.c b/lte/rrc/lib/asn/src/VarShortMAC-Input.c similarity index 100% rename from lte/rrc/asn/VarShortMAC-Input.c rename to lte/rrc/lib/asn/src/VarShortMAC-Input.c diff --git a/lte/rrc/asn/asn_SEQUENCE_OF.c b/lte/rrc/lib/asn/src/asn_SEQUENCE_OF.c similarity index 100% rename from lte/rrc/asn/asn_SEQUENCE_OF.c rename to lte/rrc/lib/asn/src/asn_SEQUENCE_OF.c diff --git a/lte/rrc/asn/asn_SET_OF.c b/lte/rrc/lib/asn/src/asn_SET_OF.c similarity index 100% rename from lte/rrc/asn/asn_SET_OF.c rename to lte/rrc/lib/asn/src/asn_SET_OF.c diff --git a/lte/rrc/asn/asn_codecs_prim.c b/lte/rrc/lib/asn/src/asn_codecs_prim.c similarity index 100% rename from lte/rrc/asn/asn_codecs_prim.c rename to lte/rrc/lib/asn/src/asn_codecs_prim.c diff --git a/lte/rrc/asn/ber_decoder.c b/lte/rrc/lib/asn/src/ber_decoder.c similarity index 100% rename from lte/rrc/asn/ber_decoder.c rename to lte/rrc/lib/asn/src/ber_decoder.c diff --git a/lte/rrc/asn/ber_tlv_length.c b/lte/rrc/lib/asn/src/ber_tlv_length.c similarity index 100% rename from lte/rrc/asn/ber_tlv_length.c rename to lte/rrc/lib/asn/src/ber_tlv_length.c diff --git a/lte/rrc/asn/ber_tlv_tag.c b/lte/rrc/lib/asn/src/ber_tlv_tag.c similarity index 100% rename from lte/rrc/asn/ber_tlv_tag.c rename to lte/rrc/lib/asn/src/ber_tlv_tag.c diff --git a/lte/rrc/asn/constr_CHOICE.c b/lte/rrc/lib/asn/src/constr_CHOICE.c similarity index 100% rename from lte/rrc/asn/constr_CHOICE.c rename to lte/rrc/lib/asn/src/constr_CHOICE.c diff --git a/lte/rrc/asn/constr_SEQUENCE.c b/lte/rrc/lib/asn/src/constr_SEQUENCE.c similarity index 100% rename from lte/rrc/asn/constr_SEQUENCE.c rename to lte/rrc/lib/asn/src/constr_SEQUENCE.c diff --git a/lte/rrc/asn/constr_SEQUENCE_OF.c b/lte/rrc/lib/asn/src/constr_SEQUENCE_OF.c similarity index 100% rename from lte/rrc/asn/constr_SEQUENCE_OF.c rename to lte/rrc/lib/asn/src/constr_SEQUENCE_OF.c diff --git a/lte/rrc/asn/constr_SET_OF.c b/lte/rrc/lib/asn/src/constr_SET_OF.c similarity index 100% rename from lte/rrc/asn/constr_SET_OF.c rename to lte/rrc/lib/asn/src/constr_SET_OF.c diff --git a/lte/rrc/asn/constr_TYPE.c b/lte/rrc/lib/asn/src/constr_TYPE.c similarity index 100% rename from lte/rrc/asn/constr_TYPE.c rename to lte/rrc/lib/asn/src/constr_TYPE.c diff --git a/lte/rrc/asn/constraints.c b/lte/rrc/lib/asn/src/constraints.c similarity index 100% rename from lte/rrc/asn/constraints.c rename to lte/rrc/lib/asn/src/constraints.c diff --git a/lte/rrc/asn/converter-sample.c b/lte/rrc/lib/asn/src/converter-sample.c similarity index 100% rename from lte/rrc/asn/converter-sample.c rename to lte/rrc/lib/asn/src/converter-sample.c diff --git a/lte/rrc/asn/der_encoder.c b/lte/rrc/lib/asn/src/der_encoder.c similarity index 100% rename from lte/rrc/asn/der_encoder.c rename to lte/rrc/lib/asn/src/der_encoder.c diff --git a/lte/rrc/asn/per_decoder.c b/lte/rrc/lib/asn/src/per_decoder.c similarity index 100% rename from lte/rrc/asn/per_decoder.c rename to lte/rrc/lib/asn/src/per_decoder.c diff --git a/lte/rrc/asn/per_encoder.c b/lte/rrc/lib/asn/src/per_encoder.c similarity index 100% rename from lte/rrc/asn/per_encoder.c rename to lte/rrc/lib/asn/src/per_encoder.c diff --git a/lte/rrc/asn/per_opentype.c b/lte/rrc/lib/asn/src/per_opentype.c similarity index 100% rename from lte/rrc/asn/per_opentype.c rename to lte/rrc/lib/asn/src/per_opentype.c diff --git a/lte/rrc/asn/per_support.c b/lte/rrc/lib/asn/src/per_support.c similarity index 100% rename from lte/rrc/asn/per_support.c rename to lte/rrc/lib/asn/src/per_support.c diff --git a/lte/rrc/asn/xer_decoder.c b/lte/rrc/lib/asn/src/xer_decoder.c similarity index 100% rename from lte/rrc/asn/xer_decoder.c rename to lte/rrc/lib/asn/src/xer_decoder.c diff --git a/lte/rrc/asn/xer_encoder.c b/lte/rrc/lib/asn/src/xer_encoder.c similarity index 100% rename from lte/rrc/asn/xer_encoder.c rename to lte/rrc/lib/asn/src/xer_encoder.c diff --git a/lte/rrc/asn/xer_support.c b/lte/rrc/lib/asn/src/xer_support.c similarity index 100% rename from lte/rrc/asn/xer_support.c rename to lte/rrc/lib/asn/src/xer_support.c diff --git a/lte/rrc/lib/messages/test/CMakeLists.txt b/lte/rrc/lib/messages/test/CMakeLists.txt index cfc5e936c..9ed745c2d 100644 --- a/lte/rrc/lib/messages/test/CMakeLists.txt +++ b/lte/rrc/lib/messages/test/CMakeLists.txt @@ -24,11 +24,11 @@ ######################################################################## ADD_EXECUTABLE(bcch_bch_test bcch_bch_test.c) -TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc rrc_asn) +TARGET_LINK_LIBRARIES(bcch_bch_test lte_rrc) ADD_TEST(bcch_bch_test_1 bcch_bch_test) ADD_EXECUTABLE(bcch_dlsch_test bcch_dlsch_test.c) -TARGET_LINK_LIBRARIES(bcch_dlsch_test lte_rrc rrc_asn lte_phy) +TARGET_LINK_LIBRARIES(bcch_dlsch_test lte_rrc lte_phy) ADD_TEST(bcch_dlsch_test_1 bcch_dlsch_test)