/** * Copyright 2013-2022 Software Radio Systems Limited * * This file is part of srsRAN. * * srsRAN is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * srsRAN 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 Affero General Public License for more details. * * A copy of the GNU Affero 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/. * */ /******************************************************************************* * * 3GPP TS ASN1 RRC v15.11.0 (2020-09) * ******************************************************************************/ #ifndef SRSASN1_RRC_COMMON_H #define SRSASN1_RRC_COMMON_H #include "srsran/asn1/asn1_utils.h" #include #include namespace asn1 { namespace rrc { /******************************************************************************* * Constant Definitions ******************************************************************************/ #define ASN1_RRC_MAX_ACCESS_CAT_MINUS1_R15 63 #define ASN1_RRC_MAX_ACDC_CAT_R13 16 #define ASN1_RRC_MAX_AVAIL_NARROW_BANDS_R13 16 #define ASN1_RRC_MAX_BAND_COMB_R10 128 #define ASN1_RRC_MAX_BAND_COMB_R11 256 #define ASN1_RRC_MAX_BAND_COMB_R13 384 #define ASN1_RRC_MAX_BANDS 64 #define ASN1_RRC_MAX_BANDS_NR_R15 1024 #define ASN1_RRC_MAX_BW_CLASS_R10 16 #define ASN1_RRC_MAX_BW_COMB_SET_R10 32 #define ASN1_RRC_MAX_BARR_INFO_SET_R15 8 #define ASN1_RRC_MAX_BT_ID_REPORT_R15 32 #define ASN1_RRC_MAX_BT_NAME_R15 4 #define ASN1_RRC_MAX_CBR_LEVEL_R14 16 #define ASN1_RRC_MAX_CBR_LEVEL_MINUS1_R14 15 #define ASN1_RRC_MAX_CBR_REPORT_R14 72 #define ASN1_RRC_MAX_CDMA_BAND_CLASS 32 #define ASN1_RRC_MAX_CE_LEVEL_R13 4 #define ASN1_RRC_MAX_CELL_BLACK 16 #define ASN1_RRC_MAX_CELL_HISTORY_R12 16 #define ASN1_RRC_MAX_CELL_INFO_GERAN_R9 32 #define ASN1_RRC_MAX_CELL_INFO_UTRA_R9 16 #define ASN1_RRC_MAX_CELL_MEAS_IDLE_R15 8 #define ASN1_RRC_MAX_COMB_IDC_R11 128 #define ASN1_RRC_MAX_CSI_IM_R11 3 #define ASN1_RRC_MAX_CSI_IM_R12 4 #define ASN1_RRC_MIN_CSI_IM_R13 5 #define ASN1_RRC_MAX_CSI_IM_R13 24 #define ASN1_RRC_MAX_CSI_IM_V1310 20 #define ASN1_RRC_MAX_CSI_PROC_R11 4 #define ASN1_RRC_MAX_CSI_RS_NZP_R11 3 #define ASN1_RRC_MIN_CSI_RS_NZP_R13 4 #define ASN1_RRC_MAX_CSI_RS_NZP_R13 24 #define ASN1_RRC_MAX_CSI_RS_NZP_V1310 21 #define ASN1_RRC_MAX_CSI_RS_ZP_R11 4 #define ASN1_RRC_MAX_CQI_PROC_EXT_R11 3 #define ASN1_RRC_MAX_FREQ_UTRA_TDD_R10 6 #define ASN1_RRC_MAX_CELL_INTER 16 #define ASN1_RRC_MAX_CELL_INTRA 16 #define ASN1_RRC_MAX_CELL_LIST_GERAN 3 #define ASN1_RRC_MAX_CELL_MEAS 32 #define ASN1_RRC_MAX_CELL_REPORT 8 #define ASN1_RRC_MAX_CELL_SFTD 3 #define ASN1_RRC_MAX_CFG_SPS_R14 8 #define ASN1_RRC_MAX_CFG_SPS_R15 6 #define ASN1_RRC_MAX_CSI_RS_MEAS_R12 96 #define ASN1_RRC_MAX_DRB 11 #define ASN1_RRC_MAX_DRB_EXT_R15 4 #define ASN1_RRC_MAX_DRB_R15 15 #define ASN1_RRC_MAX_DS_DUR_R12 5 #define ASN1_RRC_MAX_DS_ZTP_CSI_RS_R12 5 #define ASN1_RRC_MAX_EARFCN 65535 #define ASN1_RRC_MAX_EARFCN_PLUS1 65536 #define ASN1_RRC_MAX_EARFCN2 262143 #define ASN1_RRC_MAX_EPDCCH_SET_R11 2 #define ASN1_RRC_MAX_FBI 64 #define ASN1_RRC_MAX_FBI_NR_R15 1024 #define ASN1_RRC_MAX_FBI_PLUS1 65 #define ASN1_RRC_MAX_FBI2 256 #define ASN1_RRC_MAX_FEATURE_SETS_R15 256 #define ASN1_RRC_MAX_PER_CC_FEATURE_SETS_R15 32 #define ASN1_RRC_MAX_FREQ 8 #define ASN1_RRC_MAX_FREQ_IDC_R11 32 #define ASN1_RRC_MAX_FREQ_IDLE_R15 8 #define ASN1_RRC_MAX_FREQ_MBMS_R11 5 #define ASN1_RRC_MAX_FREQ_NR_R15 5 #define ASN1_RRC_MAX_FREQ_V2X_R14 8 #define ASN1_RRC_MAX_FREQ_V2X_MINUS1_R14 7 #define ASN1_RRC_MAX_GERAN_SI 10 #define ASN1_RRC_MAX_GNFG 16 #define ASN1_RRC_MAX_IDLE_MEAS_CARRIERS_R15 3 #define ASN1_RRC_MAX_LCG_R13 4 #define ASN1_RRC_MAX_LOG_MEAS_REPORT_R10 520 #define ASN1_RRC_MAX_MBSFN_ALLOCS 8 #define ASN1_RRC_MAX_MBSFN_AREA 8 #define ASN1_RRC_MAX_MBSFN_AREA_MINUS1 7 #define ASN1_RRC_MAX_MBMS_SERVICE_LIST_PER_UE_R13 15 #define ASN1_RRC_MAX_MEAS_ID 32 #define ASN1_RRC_MAX_MEAS_ID_PLUS1 33 #define ASN1_RRC_MAX_MEAS_ID_R12 64 #define ASN1_RRC_MAX_MULTI_BANDS 8 #define ASN1_RRC_MAX_MULTI_BANDS_NR_R15 32 #define ASN1_RRC_MAX_MULTI_BANDS_NR_MINUS1_R15 31 #define ASN1_RRC_MAX_NS_PMAX_R10 8 #define ASN1_RRC_MAX_NAICS_ENTRIES_R12 8 #define ASN1_RRC_MAX_NEIGH_CELL_R12 8 #define ASN1_RRC_MAX_NEIGH_CELL_SCPTM_R13 8 #define ASN1_RRC_MAX_NROF_S_NSSAI_R15 8 #define ASN1_RRC_MAX_OBJ_ID 32 #define ASN1_RRC_MAX_OBJ_ID_PLUS1_R13 33 #define ASN1_RRC_MAX_OBJ_ID_R13 64 #define ASN1_RRC_MAX_P_A_PER_NEIGH_CELL_R12 3 #define ASN1_RRC_MAX_PAGE_REC 16 #define ASN1_RRC_MAX_PCI_RANGE_R9 4 #define ASN1_RRC_MAX_PLMN_R11 6 #define ASN1_RRC_MAX_PLMN_MINUS1_R14 5 #define ASN1_RRC_MAX_PLMN_R15 8 #define ASN1_RRC_MAX_PLMN_NR_R15 12 #define ASN1_RRC_MAX_PN_OFFSET 511 #define ASN1_RRC_MAX_PMCH_PER_MBSFN 15 #define ASN1_RRC_MAX_PSSCH_TX_CFG_R14 16 #define ASN1_RRC_MAX_QUANT_SETS_NR_R15 2 #define ASN1_RRC_MAX_QCI_R13 6 #define ASN1_RRC_MAX_RAT_CAP 8 #define ASN1_RRC_MAX_RE_MAP_QCL_R11 4 #define ASN1_RRC_MAX_REPORT_CFG_ID 32 #define ASN1_RRC_MAX_RESERV_PERIOD_R14 16 #define ASN1_RRC_MAX_RS_IDX_R15 64 #define ASN1_RRC_MAX_RS_IDX_MINUS1_R15 63 #define ASN1_RRC_MAX_RS_IDX_CELL_QUAL_R15 16 #define ASN1_RRC_MAX_RS_IDX_REPORT_R15 32 #define ASN1_RRC_MAX_RSTD_FREQ_R10 3 #define ASN1_RRC_MAX_SAI_MBMS_R11 64 #define ASN1_RRC_MAX_SCELL_R10 4 #define ASN1_RRC_MAX_SCELL_R13 31 #define ASN1_RRC_MAX_SCELL_GROUPS_R15 4 #define ASN1_RRC_MAX_SC_MTCH_R13 1023 #define ASN1_RRC_MAX_SC_MTCH_BR_R14 128 #define ASN1_RRC_MAX_SL_COMM_RX_POOL_NFREQ_R13 32 #define ASN1_RRC_MAX_SL_COMM_RX_POOL_PRECONF_V1310 12 #define ASN1_RRC_MAX_SL_TX_POOL_R12_PLUS1_R13 5 #define ASN1_RRC_MAX_SL_TX_POOL_V1310 4 #define ASN1_RRC_MAX_SL_TX_POOL_R13 8 #define ASN1_RRC_MAX_SL_COMM_TX_POOL_PRECONF_V1310 7 #define ASN1_RRC_MAX_SL_DEST_R12 16 #define ASN1_RRC_MAX_SL_DISC_CELLS_R13 16 #define ASN1_RRC_MAX_SL_DISC_PWR_CLASS_R12 3 #define ASN1_RRC_MAX_SL_DISC_RX_POOL_PRECONF_R13 16 #define ASN1_RRC_MAX_SL_DISC_SYS_INFO_REPORT_FREQ_R13 8 #define ASN1_RRC_MAX_SL_DISC_TX_POOL_PRECONF_R13 4 #define ASN1_RRC_MAX_SL_GP_R13 8 #define ASN1_RRC_MAX_SL_POOL_TO_MEASURE_R14 72 #define ASN1_RRC_MAX_SL_PRIO_R13 8 #define ASN1_RRC_MAX_SL_RX_POOL_R12 16 #define ASN1_RRC_MAX_SL_RELIABILITY_R15 8 #define ASN1_RRC_MAX_SL_SYNC_CFG_R12 16 #define ASN1_RRC_MAX_SL_TF_IDX_PAIR_R12 64 #define ASN1_RRC_MAX_SL_TX_POOL_R12 4 #define ASN1_RRC_MAX_SL_V2X_RX_POOL_R14 16 #define ASN1_RRC_MAX_SL_V2X_RX_POOL_PRECONF_R14 16 #define ASN1_RRC_MAX_SL_V2X_TX_POOL_R14 8 #define ASN1_RRC_MAX_SL_V2X_TX_POOL_PRECONF_R14 8 #define ASN1_RRC_MAX_SL_V2X_SYNC_CFG_R14 16 #define ASN1_RRC_MAX_SL_V2X_CBR_CFG_R14 4 #define ASN1_RRC_MAX_SL_V2X_CBR_CFG_MINUS1_R14 3 #define ASN1_RRC_MAX_SL_V2X_TX_CFG_R14 64 #define ASN1_RRC_MAX_SL_V2X_TX_CFG_MINUS1_R14 63 #define ASN1_RRC_MAX_SL_V2X_CBR_CFG2_R14 8 #define ASN1_RRC_MAX_SL_V2X_CBR_CFG2_MINUS1_R14 7 #define ASN1_RRC_MAX_SL_V2X_TX_CFG2_R14 128 #define ASN1_RRC_MAX_SL_V2X_TX_CFG2_MINUS1_R14 127 #define ASN1_RRC_MAX_STAG_R11 3 #define ASN1_RRC_MAX_SERV_CELL_R10 5 #define ASN1_RRC_MAX_SERV_CELL_R13 32 #define ASN1_RRC_MAX_SERV_CELL_NR_R15 16 #define ASN1_RRC_MAX_SERVICE_COUNT 16 #define ASN1_RRC_MAX_SERVICE_COUNT_MINUS1 15 #define ASN1_RRC_MAX_SESSION_PER_PMCH 29 #define ASN1_RRC_MAX_SESSION_PER_PMCH_MINUS1 28 #define ASN1_RRC_MAX_SIB 32 #define ASN1_RRC_MAX_SIB_MINUS1 31 #define ASN1_RRC_MAX_SI_MSG 32 #define ASN1_RRC_MAX_SIMUL_BANDS_R10 64 #define ASN1_RRC_MAX_SF_PATTERN_IDC_R11 8 #define ASN1_RRC_MAX_TRAFFIC_PATTERN_R14 8 #define ASN1_RRC_MAX_UTRA_FDD_CARRIER 16 #define ASN1_RRC_MAX_UTRA_TDD_CARRIER 16 #define ASN1_RRC_MAX_WAY_POINT_R15 20 #define ASN1_RRC_MAX_WLAN_ID_R12 16 #define ASN1_RRC_MAX_WLAN_BANDS_R13 8 #define ASN1_RRC_MAX_WLAN_ID_R13 32 #define ASN1_RRC_MAX_WLAN_CHS_R13 16 #define ASN1_RRC_MAX_WLAN_CARRIER_INFO_R13 8 #define ASN1_RRC_MAX_WLAN_ID_REPORT_R14 32 #define ASN1_RRC_MAX_WLAN_NAME_R15 4 #define ASN1_RRC_MAX_LOG_MEAS_R10 4060 #define ASN1_RRC_MAX_REESTAB_INFO 32 #define ASN1_RRC_MAX_NPRACH_RES_NB_R13 3 #define ASN1_RRC_MAX_NON_ANCHOR_CARRIERS_NB_R14 15 #define ASN1_RRC_MAX_DRB_NB_R13 2 #define ASN1_RRC_MAX_NEIGH_CELL_SCPTM_NB_R14 8 #define ASN1_RRC_MAX_NS_PMAX_NB_R13 4 #define ASN1_RRC_MAX_SC_MTCH_NB_R14 64 #define ASN1_RRC_MAX_SI_MSG_NB_R13 8 /******************************************************************************* * Struct Definitions ******************************************************************************/ // MCC ::= SEQUENCE (SIZE (3)) OF INTEGER (0..9) using mcc_l = std::array; // MNC ::= SEQUENCE (SIZE (2..3)) OF INTEGER (0..9) using mnc_l = bounded_array; // PLMN-Identity ::= SEQUENCE struct plmn_id_s { bool mcc_present = false; mcc_l mcc; mnc_l mnc; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // PLMN-IdentityInfo ::= SEQUENCE struct plmn_id_info_s { struct cell_reserved_for_oper_opts { enum options { reserved, not_reserved, nulltype } value; const char* to_string() const; }; typedef enumerated cell_reserved_for_oper_e_; // member variables plmn_id_s plmn_id; cell_reserved_for_oper_e_ cell_reserved_for_oper; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // Alpha-r12 ::= ENUMERATED struct alpha_r12_opts { enum options { al0, al04, al05, al06, al07, al08, al09, al1, nulltype } value; typedef float number_type; const char* to_string() const; float to_number() const; const char* to_number_string() const; }; typedef enumerated alpha_r12_e; // PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo using plmn_id_list_l = dyn_array; // BandclassCDMA2000 ::= ENUMERATED struct bandclass_cdma2000_opts { enum options { bc0, bc1, bc2, bc3, bc4, bc5, bc6, bc7, bc8, bc9, bc10, bc11, bc12, bc13, bc14, bc15, bc16, bc17, bc18_v9a0, bc19_v9a0, bc20_v9a0, bc21_v9a0, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1, // ... nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated bandclass_cdma2000_e; struct setup_opts { enum options { release, setup, nulltype } value; const char* to_string() const; }; typedef enumerated setup_e; // FilterCoefficient ::= ENUMERATED struct filt_coef_opts { enum options { fc0, fc1, fc2, fc3, fc4, fc5, fc6, fc7, fc8, fc9, fc11, fc13, fc15, fc17, fc19, spare1, /*...*/ nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated filt_coef_e; // MBSFN-SubframeConfig ::= SEQUENCE struct mbsfn_sf_cfg_s { struct radioframe_alloc_period_opts { enum options { n1, n2, n4, n8, n16, n32, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated radioframe_alloc_period_e_; struct sf_alloc_c_ { struct types_opts { enum options { one_frame, four_frames, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated types; // choice methods sf_alloc_c_() = default; sf_alloc_c_(const sf_alloc_c_& other); sf_alloc_c_& operator=(const sf_alloc_c_& other); ~sf_alloc_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; bool operator==(const sf_alloc_c_& other) const; bool operator!=(const sf_alloc_c_& other) const { return not(*this == other); } // getters fixed_bitstring<6>& one_frame() { assert_choice_type(types::one_frame, type_, "subframeAllocation"); return c.get >(); } fixed_bitstring<24>& four_frames() { assert_choice_type(types::four_frames, type_, "subframeAllocation"); return c.get >(); } const fixed_bitstring<6>& one_frame() const { assert_choice_type(types::one_frame, type_, "subframeAllocation"); return c.get >(); } const fixed_bitstring<24>& four_frames() const { assert_choice_type(types::four_frames, type_, "subframeAllocation"); return c.get >(); } fixed_bitstring<6>& set_one_frame(); fixed_bitstring<24>& set_four_frames(); private: types type_; choice_buffer_t > c; void destroy_(); }; // member variables radioframe_alloc_period_e_ radioframe_alloc_period; uint8_t radioframe_alloc_offset = 0; sf_alloc_c_ sf_alloc; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; bool operator==(const mbsfn_sf_cfg_s& other) const; bool operator!=(const mbsfn_sf_cfg_s& other) const { return not(*this == other); } }; // MBSFN-SubframeConfig-v1430 ::= SEQUENCE struct mbsfn_sf_cfg_v1430_s { struct sf_alloc_v1430_c_ { struct types_opts { enum options { one_frame_v1430, four_frames_v1430, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated types; // choice methods sf_alloc_v1430_c_() = default; sf_alloc_v1430_c_(const sf_alloc_v1430_c_& other); sf_alloc_v1430_c_& operator=(const sf_alloc_v1430_c_& other); ~sf_alloc_v1430_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; bool operator==(const sf_alloc_v1430_c_& other) const; bool operator!=(const sf_alloc_v1430_c_& other) const { return not(*this == other); } // getters fixed_bitstring<2>& one_frame_v1430() { assert_choice_type(types::one_frame_v1430, type_, "subframeAllocation-v1430"); return c.get >(); } fixed_bitstring<8>& four_frames_v1430() { assert_choice_type(types::four_frames_v1430, type_, "subframeAllocation-v1430"); return c.get >(); } const fixed_bitstring<2>& one_frame_v1430() const { assert_choice_type(types::one_frame_v1430, type_, "subframeAllocation-v1430"); return c.get >(); } const fixed_bitstring<8>& four_frames_v1430() const { assert_choice_type(types::four_frames_v1430, type_, "subframeAllocation-v1430"); return c.get >(); } fixed_bitstring<2>& set_one_frame_v1430(); fixed_bitstring<8>& set_four_frames_v1430(); private: types type_; choice_buffer_t > c; void destroy_(); }; // member variables sf_alloc_v1430_c_ sf_alloc_v1430; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; bool operator==(const mbsfn_sf_cfg_v1430_s& other) const; bool operator!=(const mbsfn_sf_cfg_v1430_s& other) const { return not(*this == other); } }; // MBSFN-SubframeConfigList ::= SEQUENCE (SIZE (1..8)) OF MBSFN-SubframeConfig using mbsfn_sf_cfg_list_l = dyn_array; // MBSFN-SubframeConfigList-v1430 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-SubframeConfig-v1430 using mbsfn_sf_cfg_list_v1430_l = dyn_array; // MeasSubframePattern-r10 ::= CHOICE struct meas_sf_pattern_r10_c { struct sf_pattern_tdd_r10_c_ { struct types_opts { enum options { sf_cfg1_minus5_r10, sf_cfg0_r10, sf_cfg6_r10, /*...*/ nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated types; // choice methods sf_pattern_tdd_r10_c_() = default; sf_pattern_tdd_r10_c_(const sf_pattern_tdd_r10_c_& other); sf_pattern_tdd_r10_c_& operator=(const sf_pattern_tdd_r10_c_& other); ~sf_pattern_tdd_r10_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; bool operator==(const sf_pattern_tdd_r10_c_& other) const; bool operator!=(const sf_pattern_tdd_r10_c_& other) const { return not(*this == other); } // getters fixed_bitstring<20>& sf_cfg1_minus5_r10() { assert_choice_type(types::sf_cfg1_minus5_r10, type_, "subframePatternTDD-r10"); return c.get >(); } fixed_bitstring<70>& sf_cfg0_r10() { assert_choice_type(types::sf_cfg0_r10, type_, "subframePatternTDD-r10"); return c.get >(); } fixed_bitstring<60>& sf_cfg6_r10() { assert_choice_type(types::sf_cfg6_r10, type_, "subframePatternTDD-r10"); return c.get >(); } const fixed_bitstring<20>& sf_cfg1_minus5_r10() const { assert_choice_type(types::sf_cfg1_minus5_r10, type_, "subframePatternTDD-r10"); return c.get >(); } const fixed_bitstring<70>& sf_cfg0_r10() const { assert_choice_type(types::sf_cfg0_r10, type_, "subframePatternTDD-r10"); return c.get >(); } const fixed_bitstring<60>& sf_cfg6_r10() const { assert_choice_type(types::sf_cfg6_r10, type_, "subframePatternTDD-r10"); return c.get >(); } fixed_bitstring<20>& set_sf_cfg1_minus5_r10(); fixed_bitstring<70>& set_sf_cfg0_r10(); fixed_bitstring<60>& set_sf_cfg6_r10(); private: types type_; choice_buffer_t > c; void destroy_(); }; struct types_opts { enum options { sf_pattern_fdd_r10, sf_pattern_tdd_r10, /*...*/ nulltype } value; const char* to_string() const; }; typedef enumerated types; // choice methods meas_sf_pattern_r10_c() = default; meas_sf_pattern_r10_c(const meas_sf_pattern_r10_c& other); meas_sf_pattern_r10_c& operator=(const meas_sf_pattern_r10_c& other); ~meas_sf_pattern_r10_c() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; bool operator==(const meas_sf_pattern_r10_c& other) const; bool operator!=(const meas_sf_pattern_r10_c& other) const { return not(*this == other); } // getters fixed_bitstring<40>& sf_pattern_fdd_r10() { assert_choice_type(types::sf_pattern_fdd_r10, type_, "MeasSubframePattern-r10"); return c.get >(); } sf_pattern_tdd_r10_c_& sf_pattern_tdd_r10() { assert_choice_type(types::sf_pattern_tdd_r10, type_, "MeasSubframePattern-r10"); return c.get(); } const fixed_bitstring<40>& sf_pattern_fdd_r10() const { assert_choice_type(types::sf_pattern_fdd_r10, type_, "MeasSubframePattern-r10"); return c.get >(); } const sf_pattern_tdd_r10_c_& sf_pattern_tdd_r10() const { assert_choice_type(types::sf_pattern_tdd_r10, type_, "MeasSubframePattern-r10"); return c.get(); } fixed_bitstring<40>& set_sf_pattern_fdd_r10(); sf_pattern_tdd_r10_c_& set_sf_pattern_tdd_r10(); private: types type_; choice_buffer_t, sf_pattern_tdd_r10_c_> c; void destroy_(); }; struct c1_or_crit_ext_opts { enum options { c1, crit_exts_future, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated c1_or_crit_ext_e; // CipheringAlgorithm-r12 ::= ENUMERATED struct ciphering_algorithm_r12_opts { enum options { eea0, eea1, eea2, eea3_v1130, spare4, spare3, spare2, spare1, /*...*/ nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated ciphering_algorithm_r12_e; // WLAN-BandIndicator-r13 ::= ENUMERATED struct wlan_band_ind_r13_opts { enum options { band2dot4, band5, band60_v1430, spare5, spare4, spare3, spare2, spare1, /*...*/ nulltype } value; typedef float number_type; const char* to_string() const; float to_number() const; const char* to_number_string() const; }; typedef enumerated wlan_band_ind_r13_e; } // namespace rrc } // namespace asn1 #endif // SRSASN1_RRC_COMMON_H