mirror of https://github.com/pvnis/srsRAN_4G.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
659 lines
22 KiB
C++
659 lines
22 KiB
C++
/**
|
|
* Copyright 2013-2021 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 <cstdio>
|
|
#include <stdarg.h>
|
|
|
|
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<uint8_t, 3>;
|
|
|
|
// MNC ::= SEQUENCE (SIZE (2..3)) OF INTEGER (0..9)
|
|
using mnc_l = bounded_array<uint8_t, 3>;
|
|
|
|
// 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_opts> 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_opts> alpha_r12_e;
|
|
|
|
// PLMN-IdentityList ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo
|
|
using plmn_id_list_l = dyn_array<plmn_id_info_s>;
|
|
|
|
// 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_opts, true> bandclass_cdma2000_e;
|
|
|
|
struct setup_opts {
|
|
enum options { release, setup, nulltype } value;
|
|
|
|
const char* to_string() const;
|
|
};
|
|
typedef enumerated<setup_opts> 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_opts, true> 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_opts> 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_opts> 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<6> >();
|
|
}
|
|
fixed_bitstring<24>& four_frames()
|
|
{
|
|
assert_choice_type(types::four_frames, type_, "subframeAllocation");
|
|
return c.get<fixed_bitstring<24> >();
|
|
}
|
|
const fixed_bitstring<6>& one_frame() const
|
|
{
|
|
assert_choice_type(types::one_frame, type_, "subframeAllocation");
|
|
return c.get<fixed_bitstring<6> >();
|
|
}
|
|
const fixed_bitstring<24>& four_frames() const
|
|
{
|
|
assert_choice_type(types::four_frames, type_, "subframeAllocation");
|
|
return c.get<fixed_bitstring<24> >();
|
|
}
|
|
fixed_bitstring<6>& set_one_frame();
|
|
fixed_bitstring<24>& set_four_frames();
|
|
|
|
private:
|
|
types type_;
|
|
choice_buffer_t<fixed_bitstring<24> > 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_opts> 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<2> >();
|
|
}
|
|
fixed_bitstring<8>& four_frames_v1430()
|
|
{
|
|
assert_choice_type(types::four_frames_v1430, type_, "subframeAllocation-v1430");
|
|
return c.get<fixed_bitstring<8> >();
|
|
}
|
|
const fixed_bitstring<2>& one_frame_v1430() const
|
|
{
|
|
assert_choice_type(types::one_frame_v1430, type_, "subframeAllocation-v1430");
|
|
return c.get<fixed_bitstring<2> >();
|
|
}
|
|
const fixed_bitstring<8>& four_frames_v1430() const
|
|
{
|
|
assert_choice_type(types::four_frames_v1430, type_, "subframeAllocation-v1430");
|
|
return c.get<fixed_bitstring<8> >();
|
|
}
|
|
fixed_bitstring<2>& set_one_frame_v1430();
|
|
fixed_bitstring<8>& set_four_frames_v1430();
|
|
|
|
private:
|
|
types type_;
|
|
choice_buffer_t<fixed_bitstring<8> > 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_sf_cfg_s>;
|
|
|
|
// MBSFN-SubframeConfigList-v1430 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-SubframeConfig-v1430
|
|
using mbsfn_sf_cfg_list_v1430_l = dyn_array<mbsfn_sf_cfg_v1430_s>;
|
|
|
|
// 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_opts, true> 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<20> >();
|
|
}
|
|
fixed_bitstring<70>& sf_cfg0_r10()
|
|
{
|
|
assert_choice_type(types::sf_cfg0_r10, type_, "subframePatternTDD-r10");
|
|
return c.get<fixed_bitstring<70> >();
|
|
}
|
|
fixed_bitstring<60>& sf_cfg6_r10()
|
|
{
|
|
assert_choice_type(types::sf_cfg6_r10, type_, "subframePatternTDD-r10");
|
|
return c.get<fixed_bitstring<60> >();
|
|
}
|
|
const fixed_bitstring<20>& sf_cfg1_minus5_r10() const
|
|
{
|
|
assert_choice_type(types::sf_cfg1_minus5_r10, type_, "subframePatternTDD-r10");
|
|
return c.get<fixed_bitstring<20> >();
|
|
}
|
|
const fixed_bitstring<70>& sf_cfg0_r10() const
|
|
{
|
|
assert_choice_type(types::sf_cfg0_r10, type_, "subframePatternTDD-r10");
|
|
return c.get<fixed_bitstring<70> >();
|
|
}
|
|
const fixed_bitstring<60>& sf_cfg6_r10() const
|
|
{
|
|
assert_choice_type(types::sf_cfg6_r10, type_, "subframePatternTDD-r10");
|
|
return c.get<fixed_bitstring<60> >();
|
|
}
|
|
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<fixed_bitstring<70> > 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_opts, true> 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<fixed_bitstring<40> >();
|
|
}
|
|
sf_pattern_tdd_r10_c_& sf_pattern_tdd_r10()
|
|
{
|
|
assert_choice_type(types::sf_pattern_tdd_r10, type_, "MeasSubframePattern-r10");
|
|
return c.get<sf_pattern_tdd_r10_c_>();
|
|
}
|
|
const fixed_bitstring<40>& sf_pattern_fdd_r10() const
|
|
{
|
|
assert_choice_type(types::sf_pattern_fdd_r10, type_, "MeasSubframePattern-r10");
|
|
return c.get<fixed_bitstring<40> >();
|
|
}
|
|
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<sf_pattern_tdd_r10_c_>();
|
|
}
|
|
fixed_bitstring<40>& set_sf_pattern_fdd_r10();
|
|
sf_pattern_tdd_r10_c_& set_sf_pattern_tdd_r10();
|
|
|
|
private:
|
|
types type_;
|
|
choice_buffer_t<fixed_bitstring<40>, 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_opts> 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_opts, true> 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_opts, true> wlan_band_ind_r13_e;
|
|
|
|
} // namespace rrc
|
|
} // namespace asn1
|
|
|
|
#endif // SRSASN1_RRC_COMMON_H
|