/** * 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_SL_H #define SRSASN1_RRC_SL_H #include "rr_common.h" namespace asn1 { namespace rrc { /******************************************************************************* * Struct Definitions ******************************************************************************/ // MCS-PSSCH-Range-r15 ::= SEQUENCE struct mcs_pssch_range_r15_s { uint8_t min_mcs_pssch_r15 = 0; uint8_t max_mcs_pssch_r15 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PriorityList-r13 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) using sl_prio_list_r13_l = bounded_array; // SL-TxPower-r14 ::= CHOICE struct sl_tx_pwr_r14_c { struct types_opts { enum options { minusinfinity_r14, tx_pwr_r14, nulltype } value; typedef int8_t number_type; const char* to_string() const; int8_t to_number() const; }; typedef enumerated types; // choice methods sl_tx_pwr_r14_c() = default; 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; // getters int8_t& tx_pwr_r14() { assert_choice_type(types::tx_pwr_r14, type_, "SL-TxPower-r14"); return c; } const int8_t& tx_pwr_r14() const { assert_choice_type(types::tx_pwr_r14, type_, "SL-TxPower-r14"); return c; } void set_minusinfinity_r14(); int8_t& set_tx_pwr_r14(); private: types type_; int8_t c; }; // SL-MinT2Value-r15 ::= SEQUENCE struct sl_min_t2_value_r15_s { sl_prio_list_r13_l prio_list_r15; uint8_t min_t2_value_r15 = 10; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PPPP-TxConfigIndex-r14 ::= SEQUENCE struct sl_pppp_tx_cfg_idx_r14_s { using tx_cfg_idx_list_r14_l_ = bounded_array; // member variables uint8_t prio_thres_r14 = 1; uint8_t default_tx_cfg_idx_r14 = 0; uint8_t cbr_cfg_idx_r14 = 0; tx_cfg_idx_list_r14_l_ tx_cfg_idx_list_r14; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PPPP-TxConfigIndex-v1530 ::= SEQUENCE struct sl_pppp_tx_cfg_idx_v1530_s { using mcs_pssch_range_list_r15_l_ = dyn_array; // member variables bool mcs_pssch_range_list_r15_present = false; mcs_pssch_range_list_r15_l_ mcs_pssch_range_list_r15; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PSSCH-TxParameters-r14 ::= SEQUENCE struct sl_pssch_tx_params_r14_s { struct allowed_retx_num_pssch_r14_opts { enum options { n0, n1, both, spare1, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated allowed_retx_num_pssch_r14_e_; // member variables bool max_tx_pwr_r14_present = false; uint8_t min_mcs_pssch_r14 = 0; uint8_t max_mcs_pssch_r14 = 0; uint8_t min_sub_ch_num_pssch_r14 = 1; uint8_t max_subch_num_pssch_r14 = 1; allowed_retx_num_pssch_r14_e_ allowed_retx_num_pssch_r14; sl_tx_pwr_r14_c max_tx_pwr_r14; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PSSCH-TxParameters-v1530 ::= SEQUENCE struct sl_pssch_tx_params_v1530_s { uint8_t min_mcs_pssch_r15 = 0; uint8_t max_mcs_pssch_r15 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-RestrictResourceReservationPeriod-r14 ::= ENUMERATED struct sl_restrict_res_reserv_period_r14_opts { enum options { v0dot2, v0dot5, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, 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 sl_restrict_res_reserv_period_r14_e; // SL-TypeTxSync-r14 ::= ENUMERATED struct sl_type_tx_sync_r14_opts { enum options { gnss, enb, ue, nulltype } value; const char* to_string() const; }; typedef enumerated sl_type_tx_sync_r14_e; // SL-CBR-PPPP-TxConfigList-r14 ::= SEQUENCE (SIZE (1..8)) OF SL-PPPP-TxConfigIndex-r14 using sl_cbr_pppp_tx_cfg_list_r14_l = dyn_array; // SL-CBR-PPPP-TxConfigList-v1530 ::= SEQUENCE (SIZE (1..8)) OF SL-PPPP-TxConfigIndex-v1530 using sl_cbr_pppp_tx_cfg_list_v1530_l = dyn_array; // SL-CP-Len-r12 ::= ENUMERATED struct sl_cp_len_r12_opts { enum options { normal, extended, nulltype } value; const char* to_string() const; }; typedef enumerated sl_cp_len_r12_e; // SL-MinT2ValueList-r15 ::= SEQUENCE (SIZE (1..8)) OF SL-MinT2Value-r15 using sl_min_t2_value_list_r15_l = dyn_array; // SL-OffsetIndicator-r12 ::= CHOICE struct sl_offset_ind_r12_c { struct types_opts { enum options { small_r12, large_r12, nulltype } value; const char* to_string() const; }; typedef enumerated types; // choice methods sl_offset_ind_r12_c() = default; sl_offset_ind_r12_c(const sl_offset_ind_r12_c& other); sl_offset_ind_r12_c& operator=(const sl_offset_ind_r12_c& other); ~sl_offset_ind_r12_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; // getters uint16_t& small_r12() { assert_choice_type(types::small_r12, type_, "SL-OffsetIndicator-r12"); return c.get(); } uint16_t& large_r12() { assert_choice_type(types::large_r12, type_, "SL-OffsetIndicator-r12"); return c.get(); } const uint16_t& small_r12() const { assert_choice_type(types::small_r12, type_, "SL-OffsetIndicator-r12"); return c.get(); } const uint16_t& large_r12() const { assert_choice_type(types::large_r12, type_, "SL-OffsetIndicator-r12"); return c.get(); } uint16_t& set_small_r12(); uint16_t& set_large_r12(); private: types type_; pod_choice_buffer_t c; void destroy_(); }; // SL-P2X-ResourceSelectionConfig-r14 ::= SEQUENCE struct sl_p2_x_res_sel_cfg_r14_s { bool partial_sensing_r14_present = false; bool random_sel_r14_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PSSCH-TxConfig-r14 ::= SEQUENCE struct sl_pssch_tx_cfg_r14_s { struct thres_ue_speed_r14_opts { enum options { kmph60, kmph80, kmph100, kmph120, kmph140, kmph160, kmph180, kmph200, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated thres_ue_speed_r14_e_; // member variables bool ext = false; bool type_tx_sync_r14_present = false; sl_type_tx_sync_r14_e type_tx_sync_r14; thres_ue_speed_r14_e_ thres_ue_speed_r14; sl_pssch_tx_params_r14_s params_above_thres_r14; sl_pssch_tx_params_r14_s params_below_thres_r14; // ... // group 0 copy_ptr params_above_thres_v1530; copy_ptr params_below_thres_v1530; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-RestrictResourceReservationPeriodList-r14 ::= SEQUENCE (SIZE (1..16)) OF SL-RestrictResourceReservationPeriod-r14 using sl_restrict_res_reserv_period_list_r14_l = bounded_array; // SL-SyncAllowed-r14 ::= SEQUENCE struct sl_sync_allowed_r14_s { bool gnss_sync_r14_present = false; bool enb_sync_r14_present = false; bool ue_sync_r14_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-TxParameters-r12 ::= SEQUENCE struct sl_tx_params_r12_s { alpha_r12_e alpha_r12; int8_t p0_r12 = -126; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SubframeBitmapSL-r12 ::= CHOICE struct sf_bitmap_sl_r12_c { struct types_opts { enum options { bs4_r12, bs8_r12, bs12_r12, bs16_r12, bs30_r12, bs40_r12, bs42_r12, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated types; // choice methods sf_bitmap_sl_r12_c() = default; sf_bitmap_sl_r12_c(const sf_bitmap_sl_r12_c& other); sf_bitmap_sl_r12_c& operator=(const sf_bitmap_sl_r12_c& other); ~sf_bitmap_sl_r12_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; // getters fixed_bitstring<4>& bs4_r12() { assert_choice_type(types::bs4_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<8>& bs8_r12() { assert_choice_type(types::bs8_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<12>& bs12_r12() { assert_choice_type(types::bs12_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<16>& bs16_r12() { assert_choice_type(types::bs16_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<30>& bs30_r12() { assert_choice_type(types::bs30_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<40>& bs40_r12() { assert_choice_type(types::bs40_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<42>& bs42_r12() { assert_choice_type(types::bs42_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<4>& bs4_r12() const { assert_choice_type(types::bs4_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<8>& bs8_r12() const { assert_choice_type(types::bs8_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<12>& bs12_r12() const { assert_choice_type(types::bs12_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<16>& bs16_r12() const { assert_choice_type(types::bs16_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<30>& bs30_r12() const { assert_choice_type(types::bs30_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<40>& bs40_r12() const { assert_choice_type(types::bs40_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } const fixed_bitstring<42>& bs42_r12() const { assert_choice_type(types::bs42_r12, type_, "SubframeBitmapSL-r12"); return c.get >(); } fixed_bitstring<4>& set_bs4_r12(); fixed_bitstring<8>& set_bs8_r12(); fixed_bitstring<12>& set_bs12_r12(); fixed_bitstring<16>& set_bs16_r12(); fixed_bitstring<30>& set_bs30_r12(); fixed_bitstring<40>& set_bs40_r12(); fixed_bitstring<42>& set_bs42_r12(); private: types type_; choice_buffer_t > c; void destroy_(); }; // SubframeBitmapSL-r14 ::= CHOICE struct sf_bitmap_sl_r14_c { struct types_opts { enum options { bs10_r14, bs16_r14, bs20_r14, bs30_r14, bs40_r14, bs50_r14, bs60_r14, bs100_r14, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated types; // choice methods sf_bitmap_sl_r14_c() = default; sf_bitmap_sl_r14_c(const sf_bitmap_sl_r14_c& other); sf_bitmap_sl_r14_c& operator=(const sf_bitmap_sl_r14_c& other); ~sf_bitmap_sl_r14_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; // getters fixed_bitstring<10>& bs10_r14() { assert_choice_type(types::bs10_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<16>& bs16_r14() { assert_choice_type(types::bs16_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<20>& bs20_r14() { assert_choice_type(types::bs20_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<30>& bs30_r14() { assert_choice_type(types::bs30_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<40>& bs40_r14() { assert_choice_type(types::bs40_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<50>& bs50_r14() { assert_choice_type(types::bs50_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<60>& bs60_r14() { assert_choice_type(types::bs60_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<100>& bs100_r14() { assert_choice_type(types::bs100_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<10>& bs10_r14() const { assert_choice_type(types::bs10_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<16>& bs16_r14() const { assert_choice_type(types::bs16_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<20>& bs20_r14() const { assert_choice_type(types::bs20_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<30>& bs30_r14() const { assert_choice_type(types::bs30_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<40>& bs40_r14() const { assert_choice_type(types::bs40_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<50>& bs50_r14() const { assert_choice_type(types::bs50_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<60>& bs60_r14() const { assert_choice_type(types::bs60_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } const fixed_bitstring<100>& bs100_r14() const { assert_choice_type(types::bs100_r14, type_, "SubframeBitmapSL-r14"); return c.get >(); } fixed_bitstring<10>& set_bs10_r14(); fixed_bitstring<16>& set_bs16_r14(); fixed_bitstring<20>& set_bs20_r14(); fixed_bitstring<30>& set_bs30_r14(); fixed_bitstring<40>& set_bs40_r14(); fixed_bitstring<50>& set_bs50_r14(); fixed_bitstring<60>& set_bs60_r14(); fixed_bitstring<100>& set_bs100_r14(); private: types type_; choice_buffer_t > c; void destroy_(); }; // PhysCellIdList-r13 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..503) using pci_list_r13_l = bounded_array; // SL-CommResourcePoolV2X-r14 ::= SEQUENCE struct sl_comm_res_pool_v2x_r14_s { struct size_subch_r14_opts { enum options { n4, n5, n6, n8, n9, n10, n12, n15, n16, n18, n20, n25, n30, n48, n50, n72, n75, n96, n100, spare13, spare12, spare11, 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 size_subch_r14_e_; struct num_subch_r14_opts { enum options { n1, n3, n5, n8, n10, n15, n20, spare1, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated num_subch_r14_e_; struct rx_params_ncell_r14_s_ { bool tdd_cfg_r14_present = false; tdd_cfg_s tdd_cfg_r14; uint8_t sync_cfg_idx_r14 = 0; }; // member variables bool ext = false; bool sl_offset_ind_r14_present = false; bool start_rb_pscch_pool_r14_present = false; bool rx_params_ncell_r14_present = false; bool data_tx_params_r14_present = false; bool zone_id_r14_present = false; bool thresh_s_rssi_cbr_r14_present = false; bool pool_report_id_r14_present = false; bool cbr_pssch_tx_cfg_list_r14_present = false; bool res_sel_cfg_p2_x_r14_present = false; bool sync_allowed_r14_present = false; bool restrict_res_reserv_period_r14_present = false; sl_offset_ind_r12_c sl_offset_ind_r14; sf_bitmap_sl_r14_c sl_sf_r14; bool adjacency_pscch_pssch_r14 = false; size_subch_r14_e_ size_subch_r14; num_subch_r14_e_ num_subch_r14; uint8_t start_rb_subch_r14 = 0; uint8_t start_rb_pscch_pool_r14 = 0; rx_params_ncell_r14_s_ rx_params_ncell_r14; sl_tx_params_r12_s data_tx_params_r14; uint8_t zone_id_r14 = 0; uint8_t thresh_s_rssi_cbr_r14 = 0; uint8_t pool_report_id_r14 = 1; sl_cbr_pppp_tx_cfg_list_r14_l cbr_pssch_tx_cfg_list_r14; sl_p2_x_res_sel_cfg_r14_s res_sel_cfg_p2_x_r14; sl_sync_allowed_r14_s sync_allowed_r14; sl_restrict_res_reserv_period_list_r14_l restrict_res_reserv_period_r14; // ... // group 0 copy_ptr sl_min_t2_value_list_r15; copy_ptr cbr_pssch_tx_cfg_list_v1530; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PSSCH-TxConfigList-r14 ::= SEQUENCE (SIZE (1..16)) OF SL-PSSCH-TxConfig-r14 using sl_pssch_tx_cfg_list_r14_l = dyn_array; // SL-PoolSelectionConfig-r12 ::= SEQUENCE struct sl_pool_sel_cfg_r12_s { uint8_t thresh_low_r12 = 0; uint8_t thresh_high_r12 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-SyncConfigNFreq-r13 ::= SEQUENCE struct sl_sync_cfg_nfreq_r13_s { struct async_params_r13_s_ { sl_cp_len_r12_e sync_cp_len_r13; uint8_t sync_offset_ind_r13 = 0; uint8_t slssid_r13 = 0; }; struct tx_params_r13_s_ { bool sync_info_reserved_r13_present = false; bool sync_tx_periodic_r13_present = false; sl_tx_params_r12_s sync_tx_params_r13; uint8_t sync_tx_thresh_ic_r13 = 0; fixed_bitstring<19> sync_info_reserved_r13; }; struct rx_params_r13_s_ { struct disc_sync_win_r13_opts { enum options { w1, w2, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated disc_sync_win_r13_e_; // member variables disc_sync_win_r13_e_ disc_sync_win_r13; }; // member variables bool ext = false; bool async_params_r13_present = false; bool tx_params_r13_present = false; bool rx_params_r13_present = false; async_params_r13_s_ async_params_r13; tx_params_r13_s_ tx_params_r13; rx_params_r13_s_ rx_params_r13; // ... // group 0 bool sync_offset_ind_v1430_present = false; bool gnss_sync_r14_present = false; uint8_t sync_offset_ind_v1430 = 40; // group 1 bool sync_offset_ind2_r14_present = false; bool sync_offset_ind3_r14_present = false; uint8_t sync_offset_ind2_r14 = 0; uint8_t sync_offset_ind3_r14 = 0; // group 2 bool slss_tx_disabled_r15_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-TF-ResourceConfig-r12 ::= SEQUENCE struct sl_tf_res_cfg_r12_s { uint8_t prb_num_r12 = 1; uint8_t prb_start_r12 = 0; uint8_t prb_end_r12 = 0; sl_offset_ind_r12_c offset_ind_r12; sf_bitmap_sl_r12_c sf_bitmap_r12; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-ThresPSSCH-RSRP-List-r14 ::= SEQUENCE (SIZE (64)) OF INTEGER (0..66) using sl_thres_pssch_rsrp_list_r14_l = std::array; // SL-CommRxPoolListV2X-r14 ::= SEQUENCE (SIZE (1..16)) OF SL-CommResourcePoolV2X-r14 using sl_comm_rx_pool_list_v2x_r14_l = dyn_array; // SL-CommTxPoolListV2X-r14 ::= SEQUENCE (SIZE (1..8)) OF SL-CommResourcePoolV2X-r14 using sl_comm_tx_pool_list_v2x_r14_l = dyn_array; // SL-CommTxPoolSensingConfig-r14 ::= SEQUENCE struct sl_comm_tx_pool_sensing_cfg_r14_s { struct prob_res_keep_r14_opts { enum options { v0, v0dot2, v0dot4, v0dot6, v0dot8, 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 prob_res_keep_r14_e_; struct p2x_sensing_cfg_r14_s_ { uint8_t min_num_candidate_sf_r14 = 1; fixed_bitstring<10> gap_candidate_sensing_r14; }; struct sl_reselect_after_r14_opts { enum options { n1, n2, n3, n4, n5, n6, n7, n8, n9, 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 sl_reselect_after_r14_e_; // member variables bool restrict_res_reserv_period_r14_present = false; bool p2x_sensing_cfg_r14_present = false; bool sl_reselect_after_r14_present = false; sl_pssch_tx_cfg_list_r14_l pssch_tx_cfg_list_r14; sl_thres_pssch_rsrp_list_r14_l thres_pssch_rsrp_list_r14; sl_restrict_res_reserv_period_list_r14_l restrict_res_reserv_period_r14; prob_res_keep_r14_e_ prob_res_keep_r14; p2x_sensing_cfg_r14_s_ p2x_sensing_cfg_r14; sl_reselect_after_r14_e_ sl_reselect_after_r14; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-DiscResourcePool-r12 ::= SEQUENCE struct sl_disc_res_pool_r12_s { struct disc_period_r12_opts { enum options { rf32, rf64, rf128, rf256, rf512, rf1024, rf16_v1310, spare, nulltype } value; typedef uint16_t number_type; const char* to_string() const; uint16_t to_number() const; }; typedef enumerated disc_period_r12_e_; struct tx_params_r12_s_ { struct ue_sel_res_cfg_r12_s_ { struct pool_sel_r12_c_ { struct types_opts { enum options { rsrp_based_r12, random_r12, nulltype } value; const char* to_string() const; }; typedef enumerated types; // choice methods pool_sel_r12_c_() = default; 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; // getters sl_pool_sel_cfg_r12_s& rsrp_based_r12() { assert_choice_type(types::rsrp_based_r12, type_, "poolSelection-r12"); return c; } const sl_pool_sel_cfg_r12_s& rsrp_based_r12() const { assert_choice_type(types::rsrp_based_r12, type_, "poolSelection-r12"); return c; } sl_pool_sel_cfg_r12_s& set_rsrp_based_r12(); void set_random_r12(); private: types type_; sl_pool_sel_cfg_r12_s c; }; struct tx_probability_r12_opts { enum options { p25, p50, p75, p100, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated tx_probability_r12_e_; // member variables pool_sel_r12_c_ pool_sel_r12; tx_probability_r12_e_ tx_probability_r12; }; // member variables bool ue_sel_res_cfg_r12_present = false; sl_tx_params_r12_s tx_params_general_r12; ue_sel_res_cfg_r12_s_ ue_sel_res_cfg_r12; }; struct rx_params_r12_s_ { bool tdd_cfg_r12_present = false; tdd_cfg_s tdd_cfg_r12; uint8_t sync_cfg_idx_r12 = 0; }; struct disc_period_v1310_c_ { struct setup_opts { enum options { rf4, rf6, rf7, rf8, rf12, rf14, rf24, rf28, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated setup_e_; using types = setup_e; // choice methods disc_period_v1310_c_() = default; 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; // getters setup_e_& setup() { assert_choice_type(types::setup, type_, "discPeriod-v1310"); return c; } const setup_e_& setup() const { assert_choice_type(types::setup, type_, "discPeriod-v1310"); return c; } void set_release(); setup_e_& set_setup(); private: types type_; setup_e_ c; }; struct rx_params_add_neigh_freq_r13_c_ { struct setup_s_ { pci_list_r13_l pci_r13; }; using types = setup_e; // choice methods rx_params_add_neigh_freq_r13_c_() = default; 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; // getters setup_s_& setup() { assert_choice_type(types::setup, type_, "rxParamsAddNeighFreq-r13"); return c; } const setup_s_& setup() const { assert_choice_type(types::setup, type_, "rxParamsAddNeighFreq-r13"); return c; } void set_release(); setup_s_& set_setup(); private: types type_; setup_s_ c; }; struct tx_params_add_neigh_freq_r13_c_ { struct setup_s_ { struct freq_info_s_ { struct ul_bw_opts { enum options { n6, n15, n25, n50, n75, n100, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated ul_bw_e_; // member variables bool ul_carrier_freq_present = false; bool ul_bw_present = false; uint32_t ul_carrier_freq = 0; ul_bw_e_ ul_bw; uint8_t add_spec_emission = 1; }; // member variables bool p_max_present = false; bool tdd_cfg_r13_present = false; bool tdd_cfg_v1130_present = false; bool sync_cfg_idx_r13_present = false; pci_list_r13_l pci_r13; int8_t p_max = -30; tdd_cfg_s tdd_cfg_r13; tdd_cfg_v1130_s tdd_cfg_v1130; freq_info_s_ freq_info; int8_t ref_sig_pwr = -60; uint8_t sync_cfg_idx_r13 = 0; }; using types = setup_e; // choice methods tx_params_add_neigh_freq_r13_c_() = default; 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; // getters setup_s_& setup() { assert_choice_type(types::setup, type_, "txParamsAddNeighFreq-r13"); return c; } const setup_s_& setup() const { assert_choice_type(types::setup, type_, "txParamsAddNeighFreq-r13"); return c; } void set_release(); setup_s_& set_setup(); private: types type_; setup_s_ c; }; struct tx_params_add_neigh_freq_v1370_c_ { struct setup_s_ { struct freq_info_v1370_s_ { uint16_t add_spec_emission_v1370 = 33; }; // member variables freq_info_v1370_s_ freq_info_v1370; }; using types = setup_e; // choice methods tx_params_add_neigh_freq_v1370_c_() = default; 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; // getters setup_s_& setup() { assert_choice_type(types::setup, type_, "txParamsAddNeighFreq-v1370"); return c; } const setup_s_& setup() const { assert_choice_type(types::setup, type_, "txParamsAddNeighFreq-v1370"); return c; } void set_release(); setup_s_& set_setup(); private: types type_; setup_s_ c; }; // member variables bool ext = false; bool tx_params_r12_present = false; bool rx_params_r12_present = false; sl_cp_len_r12_e cp_len_r12; disc_period_r12_e_ disc_period_r12; uint8_t num_retx_r12 = 0; uint8_t num_repeat_r12 = 1; sl_tf_res_cfg_r12_s tf_res_cfg_r12; tx_params_r12_s_ tx_params_r12; rx_params_r12_s_ rx_params_r12; // ... // group 0 copy_ptr disc_period_v1310; copy_ptr rx_params_add_neigh_freq_r13; copy_ptr tx_params_add_neigh_freq_r13; // group 1 copy_ptr tx_params_add_neigh_freq_v1370; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-SyncConfigListNFreqV2X-r14 ::= SEQUENCE (SIZE (1..16)) OF SL-SyncConfigNFreq-r13 using sl_sync_cfg_list_nfreq_v2x_r14_l = dyn_array; // SL-ZoneConfig-r14 ::= SEQUENCE struct sl_zone_cfg_r14_s { struct zone_len_r14_opts { enum options { m5, m10, m20, m50, m100, m200, m500, spare1, nulltype } value; typedef uint16_t number_type; const char* to_string() const; uint16_t to_number() const; }; typedef enumerated zone_len_r14_e_; struct zone_width_r14_opts { enum options { m5, m10, m20, m50, m100, m200, m500, spare1, nulltype } value; typedef uint16_t number_type; const char* to_string() const; uint16_t to_number() const; }; typedef enumerated zone_width_r14_e_; // member variables zone_len_r14_e_ zone_len_r14; zone_width_r14_e_ zone_width_r14; uint8_t zone_id_longi_mod_r14 = 1; uint8_t zone_id_lati_mod_r14 = 1; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // PhysCellIdRange ::= SEQUENCE struct pci_range_s { struct range_opts { enum options { n4, n8, n12, n16, n24, n32, n48, n64, n84, n96, n128, n168, n252, n504, spare2, spare1, nulltype } value; typedef uint16_t number_type; const char* to_string() const; uint16_t to_number() const; }; typedef enumerated range_e_; // member variables bool range_present = false; uint16_t start = 0; range_e_ range; // 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 pci_range_s& other) const; bool operator!=(const pci_range_s& other) const { return not(*this == other); } }; // SL-DiscTxPoolList-r12 ::= SEQUENCE (SIZE (1..4)) OF SL-DiscResourcePool-r12 using sl_disc_tx_pool_list_r12_l = dyn_array; // SL-DiscTxPowerInfo-r12 ::= SEQUENCE struct sl_disc_tx_pwr_info_r12_s { bool ext = false; int8_t disc_max_tx_pwr_r12 = -30; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-V2X-FreqSelectionConfig-r15 ::= SEQUENCE struct sl_v2x_freq_sel_cfg_r15_s { bool thresh_cbr_freq_resel_r15_present = false; bool thresh_cbr_freq_keeping_r15_present = false; sl_prio_list_r13_l prio_list_r15; uint8_t thresh_cbr_freq_resel_r15 = 0; uint8_t thresh_cbr_freq_keeping_r15 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-V2X-InterFreqUE-Config-r14 ::= SEQUENCE struct sl_v2x_inter_freq_ue_cfg_r14_s { bool ext = false; bool pci_list_r14_present = false; bool type_tx_sync_r14_present = false; bool v2x_sync_cfg_r14_present = false; bool v2x_comm_rx_pool_r14_present = false; bool v2x_comm_tx_pool_normal_r14_present = false; bool p2x_comm_tx_pool_normal_r14_present = false; bool v2x_comm_tx_pool_exceptional_r14_present = false; bool v2x_res_sel_cfg_r14_present = false; bool zone_cfg_r14_present = false; bool offset_dfn_r14_present = false; pci_list_r13_l pci_list_r14; sl_type_tx_sync_r14_e type_tx_sync_r14; sl_sync_cfg_list_nfreq_v2x_r14_l v2x_sync_cfg_r14; sl_comm_rx_pool_list_v2x_r14_l v2x_comm_rx_pool_r14; sl_comm_tx_pool_list_v2x_r14_l v2x_comm_tx_pool_normal_r14; sl_comm_tx_pool_list_v2x_r14_l p2x_comm_tx_pool_normal_r14; sl_comm_res_pool_v2x_r14_s v2x_comm_tx_pool_exceptional_r14; sl_comm_tx_pool_sensing_cfg_r14_s v2x_res_sel_cfg_r14; sl_zone_cfg_r14_s zone_cfg_r14; uint16_t offset_dfn_r14 = 0; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // AllowedMeasBandwidth ::= ENUMERATED struct allowed_meas_bw_opts { enum options { mbw6, mbw15, mbw25, mbw50, mbw75, mbw100, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated allowed_meas_bw_e; // CellList-r15 ::= SEQUENCE (SIZE (1..8)) OF PhysCellIdRange using cell_list_r15_l = dyn_array; // CellSelectionInfoNFreq-r13 ::= SEQUENCE struct cell_sel_info_nfreq_r13_s { struct q_hyst_r13_opts { enum options { db0, db1, db2, db3, db4, db5, db6, db8, db10, db12, db14, db16, db18, db20, db22, db24, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated q_hyst_r13_e_; // member variables bool q_rx_lev_min_offset_present = false; int8_t q_rx_lev_min_r13 = -70; uint8_t q_rx_lev_min_offset = 1; q_hyst_r13_e_ q_hyst_r13; int8_t q_rx_lev_min_resel_r13 = -70; uint8_t t_resel_eutra_r13 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-AllowedCarrierFreqList-r15 ::= SEQUENCE struct sl_allowed_carrier_freq_list_r15_s { using allowed_carrier_freq_set1_l_ = bounded_array; using allowed_carrier_freq_set2_l_ = bounded_array; // member variables allowed_carrier_freq_set1_l_ allowed_carrier_freq_set1; allowed_carrier_freq_set2_l_ allowed_carrier_freq_set2; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-DestinationInfoList-r12 ::= SEQUENCE (SIZE (1..16)) OF BIT STRING (SIZE (24)) using sl_dest_info_list_r12_l = bounded_array, 16>; // SL-DiscRxPoolList-r12 ::= SEQUENCE (SIZE (1..16)) OF SL-DiscResourcePool-r12 using sl_disc_rx_pool_list_r12_l = dyn_array; // SL-DiscTxPowerInfoList-r12 ::= SEQUENCE (SIZE (3)) OF SL-DiscTxPowerInfo-r12 using sl_disc_tx_pwr_info_list_r12_l = std::array; // SL-DiscTxResourcesInterFreq-r13 ::= CHOICE struct sl_disc_tx_res_inter_freq_r13_c { struct types_opts { enum options { acquire_si_from_carrier_r13, disc_tx_pool_common_r13, request_ded_r13, no_tx_on_carrier_r13, nulltype } value; const char* to_string() const; }; typedef enumerated types; // choice methods sl_disc_tx_res_inter_freq_r13_c() = default; 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; // getters sl_disc_tx_pool_list_r12_l& disc_tx_pool_common_r13() { assert_choice_type(types::disc_tx_pool_common_r13, type_, "SL-DiscTxResourcesInterFreq-r13"); return c; } const sl_disc_tx_pool_list_r12_l& disc_tx_pool_common_r13() const { assert_choice_type(types::disc_tx_pool_common_r13, type_, "SL-DiscTxResourcesInterFreq-r13"); return c; } void set_acquire_si_from_carrier_r13(); sl_disc_tx_pool_list_r12_l& set_disc_tx_pool_common_r13(); void set_request_ded_r13(); void set_no_tx_on_carrier_r13(); private: types type_; sl_disc_tx_pool_list_r12_l c; }; // SL-V2X-FreqSelectionConfigList-r15 ::= SEQUENCE (SIZE (1..8)) OF SL-V2X-FreqSelectionConfig-r15 using sl_v2x_freq_sel_cfg_list_r15_l = dyn_array; // SL-V2X-UE-ConfigList-r14 ::= SEQUENCE (SIZE (1..16)) OF SL-V2X-InterFreqUE-Config-r14 using sl_v2x_ue_cfg_list_r14_l = dyn_array; // MeasIdleCarrierEUTRA-r15 ::= SEQUENCE struct meas_idle_carrier_eutra_r15_s { struct report_quantities_opts { enum options { rsrp, rsrq, both, nulltype } value; const char* to_string() const; }; typedef enumerated report_quantities_e_; struct quality_thres_r15_s_ { bool idle_rsrp_thres_r15_present = false; bool idle_rsrq_thres_r15_present = false; uint8_t idle_rsrp_thres_r15 = 0; int8_t idle_rsrq_thres_r15 = -30; }; // member variables bool ext = false; bool validity_area_r15_present = false; bool meas_cell_list_r15_present = false; bool quality_thres_r15_present = false; uint32_t carrier_freq_r15 = 0; allowed_meas_bw_e allowed_meas_bw_r15; cell_list_r15_l validity_area_r15; cell_list_r15_l meas_cell_list_r15; report_quantities_e_ report_quantities; quality_thres_r15_s_ quality_thres_r15; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-CBR-Levels-Config-r14 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..100) using sl_cbr_levels_cfg_r14_l = bounded_array; // SL-CBR-PSSCH-TxConfig-r14 ::= SEQUENCE struct sl_cbr_pssch_tx_cfg_r14_s { uint16_t cr_limit_r14 = 0; sl_pssch_tx_params_r14_s tx_params_r14; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-HoppingConfigComm-r12 ::= SEQUENCE struct sl_hop_cfg_comm_r12_s { struct num_subbands_r12_opts { enum options { ns1, ns2, ns4, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated num_subbands_r12_e_; // member variables uint16_t hop_param_r12 = 0; num_subbands_r12_e_ num_subbands_r12; uint8_t rb_offset_r12 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-InterFreqInfoV2X-r14 ::= SEQUENCE struct sl_inter_freq_info_v2x_r14_s { struct sl_bw_r14_opts { enum options { n6, n15, n25, n50, n75, n100, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated sl_bw_r14_e_; struct add_spec_emission_v2x_r14_c_ { struct types_opts { enum options { add_spec_emission_r14, add_spec_emission_v1440, nulltype } value; const char* to_string() const; }; typedef enumerated types; // choice methods add_spec_emission_v2x_r14_c_() = default; add_spec_emission_v2x_r14_c_(const add_spec_emission_v2x_r14_c_& other); add_spec_emission_v2x_r14_c_& operator=(const add_spec_emission_v2x_r14_c_& other); ~add_spec_emission_v2x_r14_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; // getters uint8_t& add_spec_emission_r14() { assert_choice_type(types::add_spec_emission_r14, type_, "additionalSpectrumEmissionV2X-r14"); return c.get(); } uint16_t& add_spec_emission_v1440() { assert_choice_type(types::add_spec_emission_v1440, type_, "additionalSpectrumEmissionV2X-r14"); return c.get(); } const uint8_t& add_spec_emission_r14() const { assert_choice_type(types::add_spec_emission_r14, type_, "additionalSpectrumEmissionV2X-r14"); return c.get(); } const uint16_t& add_spec_emission_v1440() const { assert_choice_type(types::add_spec_emission_v1440, type_, "additionalSpectrumEmissionV2X-r14"); return c.get(); } uint8_t& set_add_spec_emission_r14(); uint16_t& set_add_spec_emission_v1440(); private: types type_; pod_choice_buffer_t c; void destroy_(); }; // member variables bool ext = false; bool plmn_id_list_r14_present = false; bool sl_max_tx_pwr_r14_present = false; bool sl_bw_r14_present = false; bool v2x_sched_pool_r14_present = false; bool v2x_ue_cfg_list_r14_present = false; plmn_id_list_l plmn_id_list_r14; uint32_t v2x_comm_carrier_freq_r14 = 0; int8_t sl_max_tx_pwr_r14 = -30; sl_bw_r14_e_ sl_bw_r14; sl_comm_res_pool_v2x_r14_s v2x_sched_pool_r14; sl_v2x_ue_cfg_list_r14_l v2x_ue_cfg_list_r14; // ... // group 0 copy_ptr add_spec_emission_v2x_r14; // group 1 copy_ptr v2x_freq_sel_cfg_list_r15; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PPPR-Dest-CarrierFreq ::= SEQUENCE struct sl_pppr_dest_carrier_freq_s { bool dest_info_list_r15_present = false; bool allowed_carrier_freq_list_r15_present = false; sl_dest_info_list_r12_l dest_info_list_r15; sl_allowed_carrier_freq_list_r15_s allowed_carrier_freq_list_r15; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-PeriodComm-r12 ::= ENUMERATED struct sl_period_comm_r12_opts { enum options { sf40, sf60, sf70, sf80, sf120, sf140, sf160, sf240, sf280, sf320, spare6, spare5, spare4, spare3, spare2, spare, nulltype } value; typedef uint16_t number_type; const char* to_string() const; uint16_t to_number() const; }; typedef enumerated sl_period_comm_r12_e; // SL-ResourcesInterFreq-r13 ::= SEQUENCE struct sl_res_inter_freq_r13_s { bool disc_rx_res_inter_freq_r13_present = false; bool disc_tx_res_inter_freq_r13_present = false; sl_disc_rx_pool_list_r12_l disc_rx_res_inter_freq_r13; sl_disc_tx_res_inter_freq_r13_c disc_tx_res_inter_freq_r13; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-SyncConfig-r12 ::= SEQUENCE struct sl_sync_cfg_r12_s { struct tx_params_r12_s_ { bool sync_info_reserved_r12_present = false; sl_tx_params_r12_s sync_tx_params_r12; uint8_t sync_tx_thresh_ic_r12 = 0; fixed_bitstring<19> sync_info_reserved_r12; }; struct rx_params_ncell_r12_s_ { struct disc_sync_win_r12_opts { enum options { w1, w2, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; typedef enumerated disc_sync_win_r12_e_; // member variables uint16_t pci_r12 = 0; disc_sync_win_r12_e_ disc_sync_win_r12; }; // member variables bool ext = false; bool tx_params_r12_present = false; bool rx_params_ncell_r12_present = false; sl_cp_len_r12_e sync_cp_len_r12; uint8_t sync_offset_ind_r12 = 0; uint8_t slssid_r12 = 0; tx_params_r12_s_ tx_params_r12; rx_params_ncell_r12_s_ rx_params_ncell_r12; // ... // group 0 bool sync_tx_periodic_r13_present = false; // group 1 bool sync_offset_ind_v1430_present = false; bool gnss_sync_r14_present = false; uint8_t sync_offset_ind_v1430 = 40; // group 2 bool sync_offset_ind2_r14_present = false; bool sync_offset_ind3_r14_present = false; uint8_t sync_offset_ind2_r14 = 0; uint8_t sync_offset_ind3_r14 = 0; // group 3 bool slss_tx_disabled_r15_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // WLAN-Identifiers-r12 ::= SEQUENCE struct wlan_ids_r12_s { bool ext = false; bool ssid_r12_present = false; bool bssid_r12_present = false; bool hessid_r12_present = false; bounded_octstring<1, 32> ssid_r12; fixed_octstring<6> bssid_r12; fixed_octstring<6> hessid_r12; // ... // 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 wlan_ids_r12_s& other) const; bool operator!=(const wlan_ids_r12_s& other) const { return not(*this == other); } }; // WLAN-backhaulRate-r12 ::= ENUMERATED struct wlan_backhaul_rate_r12_opts { enum options { r0, r4, r8, r16, r32, r64, r128, r256, r512, r1024, r2048, r4096, r8192, r16384, r32768, r65536, r131072, r262144, r524288, r1048576, r2097152, r4194304, r8388608, r16777216, r33554432, r67108864, r134217728, r268435456, r536870912, r1073741824, r2147483648, r4294967296, nulltype } value; typedef uint64_t number_type; const char* to_string() const; uint64_t to_number() const; }; typedef enumerated wlan_backhaul_rate_r12_e; // EUTRA-CarrierList-r15 ::= SEQUENCE (SIZE (1..8)) OF MeasIdleCarrierEUTRA-r15 using eutra_carrier_list_r15_l = dyn_array; // ReferenceTime-r15 ::= SEQUENCE struct ref_time_r15_s { uint32_t ref_days_r15 = 0; uint32_t ref_seconds_r15 = 0; uint16_t ref_milli_seconds_r15 = 0; uint16_t ref_quarter_micro_seconds_r15 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-AnchorCarrierFreqList-V2X-r14 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..262143) using sl_anchor_carrier_freq_list_v2x_r14_l = bounded_array; // SL-CBR-CommonTxConfigList-r14 ::= SEQUENCE struct sl_cbr_common_tx_cfg_list_r14_s { using cbr_range_common_cfg_list_r14_l_ = dyn_array; using sl_cbr_pssch_tx_cfg_list_r14_l_ = dyn_array; // member variables cbr_range_common_cfg_list_r14_l_ cbr_range_common_cfg_list_r14; sl_cbr_pssch_tx_cfg_list_r14_l_ sl_cbr_pssch_tx_cfg_list_r14; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-CommResourcePool-r12 ::= SEQUENCE struct sl_comm_res_pool_r12_s { struct ue_sel_res_cfg_r12_s_ { bool trpt_subset_r12_present = false; sl_tf_res_cfg_r12_s data_tf_res_cfg_r12; bounded_bitstring<3, 5> trpt_subset_r12; }; struct rx_params_ncell_r12_s_ { bool tdd_cfg_r12_present = false; tdd_cfg_s tdd_cfg_r12; uint8_t sync_cfg_idx_r12 = 0; }; struct tx_params_r12_s_ { sl_tx_params_r12_s sc_tx_params_r12; sl_tx_params_r12_s data_tx_params_r12; }; // member variables bool ext = false; bool ue_sel_res_cfg_r12_present = false; bool rx_params_ncell_r12_present = false; bool tx_params_r12_present = false; sl_cp_len_r12_e sc_cp_len_r12; sl_period_comm_r12_e sc_period_r12; sl_tf_res_cfg_r12_s sc_tf_res_cfg_r12; sl_cp_len_r12_e data_cp_len_r12; sl_hop_cfg_comm_r12_s data_hop_cfg_r12; ue_sel_res_cfg_r12_s_ ue_sel_res_cfg_r12; rx_params_ncell_r12_s_ rx_params_ncell_r12; tx_params_r12_s_ tx_params_r12; // ... // group 0 copy_ptr prio_list_r13; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-InterFreqInfoListV2X-r14 ::= SEQUENCE (SIZE (0..7)) OF SL-InterFreqInfoV2X-r14 using sl_inter_freq_info_list_v2x_r14_l = dyn_array; // SL-PPPR-Dest-CarrierFreqList-r15 ::= SEQUENCE (SIZE (1..16)) OF SL-PPPR-Dest-CarrierFreq using sl_pppr_dest_carrier_freq_list_r15_l = dyn_array; // SL-SyncConfigListV2X-r14 ::= SEQUENCE (SIZE (1..16)) OF SL-SyncConfig-r12 using sl_sync_cfg_list_v2x_r14_l = dyn_array; // WLAN-Id-List-r12 ::= SEQUENCE (SIZE (1..16)) OF WLAN-Identifiers-r12 using wlan_id_list_r12_l = dyn_array; // WLAN-OffloadConfig-r12 ::= SEQUENCE struct wlan_offload_cfg_r12_s { struct thres_rsrp_r12_s_ { uint8_t thres_rsrp_low_r12 = 0; uint8_t thres_rsrp_high_r12 = 0; }; struct thres_rsrq_r12_s_ { uint8_t thres_rsrq_low_r12 = 0; uint8_t thres_rsrq_high_r12 = 0; }; struct thres_rsrq_on_all_symbols_with_wb_r12_s_ { uint8_t thres_rsrq_on_all_symbols_with_wb_low_r12 = 0; uint8_t thres_rsrq_on_all_symbols_with_wb_high_r12 = 0; }; struct thres_rsrq_on_all_symbols_r12_s_ { uint8_t thres_rsrq_on_all_symbols_low_r12 = 0; uint8_t thres_rsrq_on_all_symbols_high_r12 = 0; }; struct thres_rsrq_wb_r12_s_ { uint8_t thres_rsrq_wb_low_r12 = 0; uint8_t thres_rsrq_wb_high_r12 = 0; }; struct thres_ch_utilization_r12_s_ { uint16_t thres_ch_utilization_low_r12 = 0; uint16_t thres_ch_utilization_high_r12 = 0; }; struct thres_backhaul_bw_r12_s_ { wlan_backhaul_rate_r12_e thres_backhaul_dl_bw_low_r12; wlan_backhaul_rate_r12_e thres_backhaul_dl_bw_high_r12; wlan_backhaul_rate_r12_e thres_backhaul_ul_bw_low_r12; wlan_backhaul_rate_r12_e thres_backhaul_ul_bw_high_r12; }; struct thres_wlan_rssi_r12_s_ { uint16_t thres_wlan_rssi_low_r12 = 0; uint16_t thres_wlan_rssi_high_r12 = 0; }; // member variables bool ext = false; bool thres_rsrp_r12_present = false; bool thres_rsrq_r12_present = false; bool thres_rsrq_on_all_symbols_with_wb_r12_present = false; bool thres_rsrq_on_all_symbols_r12_present = false; bool thres_rsrq_wb_r12_present = false; bool thres_ch_utilization_r12_present = false; bool thres_backhaul_bw_r12_present = false; bool thres_wlan_rssi_r12_present = false; bool offload_pref_ind_r12_present = false; bool t_steering_wlan_r12_present = false; thres_rsrp_r12_s_ thres_rsrp_r12; thres_rsrq_r12_s_ thres_rsrq_r12; thres_rsrq_on_all_symbols_with_wb_r12_s_ thres_rsrq_on_all_symbols_with_wb_r12; thres_rsrq_on_all_symbols_r12_s_ thres_rsrq_on_all_symbols_r12; thres_rsrq_wb_r12_s_ thres_rsrq_wb_r12; thres_ch_utilization_r12_s_ thres_ch_utilization_r12; thres_backhaul_bw_r12_s_ thres_backhaul_bw_r12; thres_wlan_rssi_r12_s_ thres_wlan_rssi_r12; fixed_bitstring<16> offload_pref_ind_r12; uint8_t t_steering_wlan_r12 = 0; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-V2X-ConfigCommon-r14 ::= SEQUENCE struct sl_v2x_cfg_common_r14_s { bool v2x_comm_rx_pool_r14_present = false; bool v2x_comm_tx_pool_normal_common_r14_present = false; bool p2x_comm_tx_pool_normal_common_r14_present = false; bool v2x_comm_tx_pool_exceptional_r14_present = false; bool v2x_sync_cfg_r14_present = false; bool v2x_inter_freq_info_list_r14_present = false; bool v2x_res_sel_cfg_r14_present = false; bool zone_cfg_r14_present = false; bool type_tx_sync_r14_present = false; bool thres_sl_tx_prioritization_r14_present = false; bool anchor_carrier_freq_list_r14_present = false; bool offset_dfn_r14_present = false; bool cbr_common_tx_cfg_list_r14_present = false; sl_comm_rx_pool_list_v2x_r14_l v2x_comm_rx_pool_r14; sl_comm_tx_pool_list_v2x_r14_l v2x_comm_tx_pool_normal_common_r14; sl_comm_tx_pool_list_v2x_r14_l p2x_comm_tx_pool_normal_common_r14; sl_comm_res_pool_v2x_r14_s v2x_comm_tx_pool_exceptional_r14; sl_sync_cfg_list_v2x_r14_l v2x_sync_cfg_r14; sl_inter_freq_info_list_v2x_r14_l v2x_inter_freq_info_list_r14; sl_comm_tx_pool_sensing_cfg_r14_s v2x_res_sel_cfg_r14; sl_zone_cfg_r14_s zone_cfg_r14; sl_type_tx_sync_r14_e type_tx_sync_r14; uint8_t thres_sl_tx_prioritization_r14 = 1; sl_anchor_carrier_freq_list_v2x_r14_l anchor_carrier_freq_list_r14; uint16_t offset_dfn_r14 = 0; sl_cbr_common_tx_cfg_list_r14_s cbr_common_tx_cfg_list_r14; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-V2X-PacketDuplicationConfig-r15 ::= SEQUENCE struct sl_v2x_packet_dupl_cfg_r15_s { bool ext = false; bool allowed_carrier_freq_cfg_r15_present = false; uint8_t thresh_sl_reliability_r15 = 1; sl_pppr_dest_carrier_freq_list_r15_l allowed_carrier_freq_cfg_r15; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-V2X-SyncFreqList-r15 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..262143) using sl_v2x_sync_freq_list_r15_l = bounded_array; // TimeReferenceInfo-r15 ::= SEQUENCE struct time_ref_info_r15_s { bool uncertainty_r15_present = false; bool time_info_type_r15_present = false; bool ref_sfn_r15_present = false; ref_time_r15_s time_r15; uint8_t uncertainty_r15 = 0; uint16_t ref_sfn_r15 = 0; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // WLAN-OffloadInfoPerPLMN-r12 ::= SEQUENCE struct wlan_offload_info_per_plmn_r12_s { bool ext = false; bool wlan_offload_cfg_common_r12_present = false; bool wlan_id_list_r12_present = false; wlan_offload_cfg_r12_s wlan_offload_cfg_common_r12; wlan_id_list_r12_l wlan_id_list_r12; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-ReliabilityList-r15 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) using sl_reliability_list_r15_l = bounded_array; // SL-GapPattern-r13 ::= SEQUENCE struct sl_gap_pattern_r13_s { struct gap_period_r13_opts { enum options { sf40, sf60, sf70, sf80, sf120, sf140, sf160, sf240, sf280, sf320, sf640, sf1280, sf2560, sf5120, sf10240, nulltype } value; typedef uint16_t number_type; const char* to_string() const; uint16_t to_number() const; }; typedef enumerated gap_period_r13_e_; // member variables bool ext = false; gap_period_r13_e_ gap_period_r13; sl_offset_ind_r12_c gap_offset_r12; bounded_bitstring<1, 10240> gap_sf_bitmap_r13; // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; }; // SL-GapPatternList-r13 ::= SEQUENCE (SIZE (1..8)) OF SL-GapPattern-r13 using sl_gap_pattern_list_r13_l = dyn_array; } // namespace rrc } // namespace asn1 #endif // SRSASN1_RRC_SL_H